Browse Source

fix finalisers

contingency-plan
Rich Harris 10 years ago
parent
commit
23e0f69559
  1. 1
      src/Bundle.js
  2. 7
      src/finalisers/amd.js
  3. 25
      src/finalisers/es6.js
  4. 29
      src/finalisers/iife.js
  5. 23
      src/finalisers/umd.js
  6. 7
      test/form/export-default/_config.js
  7. 7
      test/form/export-default/_expected/amd.js
  8. 5
      test/form/export-default/_expected/cjs.js
  9. 3
      test/form/export-default/_expected/es6.js
  10. 7
      test/form/export-default/_expected/iife.js
  11. 11
      test/form/export-default/_expected/umd.js
  12. 1
      test/form/export-default/main.js
  13. 6
      test/test.js

1
src/Bundle.js

@ -97,7 +97,6 @@ export default class Bundle {
this.statements = statements;
this.deconflict();
});
}
deconflict () {

7
src/finalisers/amd.js

@ -23,13 +23,16 @@ export default function amd ( bundle, magicString, exportMode, options ) {
if ( exportMode === 'default' ) {
exportBlock = `return ${bundle.entryModule.getCanonicalName('default')};`;
} else {
exportBlock = '\n\n' + Object.keys( exports ).map( name => {
exportBlock = Object.keys( exports ).map( name => {
return `exports.${name} = ${exports[name].localName};`;
}).join( '\n' );
}
if ( exportBlock ) {
magicString.append( '\n\n' + exportBlock );
}
return magicString
.append( exportBlock )
.trim()
.indent()
.append( '\n\n});' )

25
src/finalisers/es6.js

@ -1,7 +1,26 @@
import { keys } from '../utils/object';
export default function es6 ( bundle, magicString, exportMode, options ) {
// TODO
const introBlock = '';
const exportBlock = '';
const introBlock = ''; // TODO...
const exports = bundle.entryModule.exports;
const exportBlock = keys( exports ).map( exportedName => {
const specifier = exports[ exportedName ];
const canonicalName = bundle.entryModule.getCanonicalName( specifier.localName );
if ( exportedName === 'default' ) {
return `export default ${canonicalName};`;
}
return exportedName === canonicalName ?
`export { ${exportedName} };` :
`export { ${canonicalName} as ${exportedName} };`;
}).join( '\n' );
if ( exportBlock ) {
magicString.append( '\n\n' + exportBlock );
}
return magicString.trim();
}

29
src/finalisers/iife.js

@ -1,10 +1,33 @@
import { has } from '../utils/object';
import { getName } from '../utils/map-helpers';
export default function iife ( bundle, magicString, exportMode, options ) {
const globalNames = options.globals || {};
let dependencies = bundle.externalModules.map( module => {
return has( globalNames, module.id ) ? globalNames[ module.id ] : module.name;
});
let args = bundle.externalModules.map( getName );
if ( exportMode !== 'none' && !options.moduleName ) {
throw new Error( 'You must supply options.moduleName for IIFE bundles' );
}
if ( exportMode === 'named' ) {
dependencies.unshift( `(window.${options.moduleName} = {})` );
args.unshift( 'exports' );
}
let intro = `(function (${args}) { 'use strict';\n\n`;
let outro = `\n\n})(${dependencies});`;
const intro = `(function () { 'use strict';\n\n`;
const outro = `\n\n})();`;
if ( exportMode === 'default' ) {
intro = `var ${options.moduleName} = ${intro}`;
magicString.append( `\n\nreturn ${bundle.entryModule.getCanonicalName('default')};` );
}
return magicString
.trim()
.indent()
.prepend( intro )
.append( outro );

23
src/finalisers/umd.js

@ -26,23 +26,36 @@ export default function umd ( bundle, magicString, exportMode, options ) {
( has( options, 'moduleId' ) ? `['${options.moduleId}'], ` : `` ) +
( amdDeps.length ? `[${amdDeps.join( ', ' )}], ` : `` );
const defaultExport = exportMode === 'default' ? `global.${options.moduleName} = ` : '';
const intro =
`(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(${cjsDeps.join( ', ' )}) :
typeof define === 'function' && define.amd ? define(${amdParams}factory) :
factory(${globalDeps});
${defaultExport}factory(${globalDeps});
}(this, function (${args}) { 'use strict';
`.replace( /^\t\t/gm, '' ).replace( /^\t/gm, indentStr );
const exports = bundle.entryModule.exports;
const exportBlock = '\n\n' + Object.keys( exports ).map( name => {
return `exports.${name} = ${exports[name].localName};`;
}).join( '\n' );
let exportBlock;
if ( exportMode === 'default' ) {
const canonicalName = bundle.entryModule.getCanonicalName( 'default' );
exportBlock = `return ${canonicalName};`;
} else {
exportBlock = Object.keys( exports ).map( name => {
const canonicalName = bundle.entryModule.getCanonicalName( exports[ name ].localName );
return `exports.${name} = ${canonicalName};`;
}).join( '\n' );
}
if ( exportBlock ) {
magicString.append( '\n\n' + exportBlock );
}
return magicString
.append( exportBlock )
.trim()
.indent()
.append( '\n\n}));' )

7
test/form/export-default/_config.js

@ -0,0 +1,7 @@
module.exports = {
description: 'single (default) exports',
options: {
moduleName: 'myBundle'
}
// solo: true
};

7
test/form/export-default/_expected/amd.js

@ -0,0 +1,7 @@
define(function () { 'use strict';
var main = 42;
return main;
});

5
test/form/export-default/_expected/cjs.js

@ -0,0 +1,5 @@
'use strict';
var main = 42;
module.exports = main;

3
test/form/export-default/_expected/es6.js

@ -0,0 +1,3 @@
var main = 42;
export default main;

7
test/form/export-default/_expected/iife.js

@ -0,0 +1,7 @@
var myBundle = (function () { 'use strict';
var main = 42;
return main;
})();

11
test/form/export-default/_expected/umd.js

@ -0,0 +1,11 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.myBundle = factory();
}(this, function () { 'use strict';
var main = 42;
return main;
}));

1
test/form/export-default/main.js

@ -0,0 +1 @@
export default 42;

6
test/test.js

@ -155,9 +155,11 @@ describe( 'rollup', function () {
PROFILES.forEach( function ( profile ) {
( config.skip ? it.skip : config.solo ? it.only : it )( 'generates ' + profile.format, function () {
return bundlePromise.then( function ( bundle ) {
var actual = bundle.generate({
var options = extend( {}, config.options, {
format: profile.format
}).code.trim();
});
var actual = bundle.generate( options ).code.trim();
try {
var expected = sander.readFileSync( FORM, dir, '_expected', profile.format + '.js' ).toString().trim();

Loading…
Cancel
Save