Browse Source

handle named functions as default exports

contingency-plan
Rich-Harris 10 years ago
parent
commit
aa807c7869
  1. 33
      src/Bundle.js
  2. 4
      src/Module.js
  3. 2
      test/test.js

33
src/Bundle.js

@ -77,21 +77,34 @@ export default class Bundle {
// bring in top-level AST nodes from the entry module
return this.fetchModule( this.entryPath, null )
.then( entryModule => {
const defaultExport = entryModule.exports.default;
this.entryModule = entryModule;
if ( entryModule.exports.default ) {
let defaultExportName = makeLegalIdentifier( basename( this.entryPath ).slice( 0, -extname( this.entryPath ).length ) );
if ( defaultExport ) {
// `export default function foo () {...}` -
// use the declared name for the export
if ( defaultExport.declaredName ) {
entryModule.suggestName( 'default', defaultExport.declaredName );
}
let topLevelNames = [];
entryModule.statements.forEach( statement => {
keys( statement.defines ).forEach( name => topLevelNames.push( name ) );
});
// `export default a + b` - generate an export name
// based on the filename of the entry module
else {
let defaultExportName = makeLegalIdentifier( basename( this.entryPath ).slice( 0, -extname( this.entryPath ).length ) );
while ( ~topLevelNames.indexOf( defaultExportName ) ) {
defaultExportName = `_${defaultExportName}`;
}
// deconflict
let topLevelNames = [];
entryModule.statements.forEach( statement => {
keys( statement.defines ).forEach( name => topLevelNames.push( name ) );
});
while ( ~topLevelNames.indexOf( defaultExportName ) ) {
defaultExportName = `_${defaultExportName}`;
}
entryModule.suggestName( 'default', defaultExportName );
entryModule.suggestName( 'default', defaultExportName );
}
}
return entryModule.expandAllStatements( true );

4
src/Module.js

@ -98,11 +98,13 @@ export default class Module {
// export default 42;
if ( node.type === 'ExportDefaultDeclaration' ) {
const isDeclaration = /Declaration$/.test( node.declaration.type );
const declaredName = isDeclaration && node.declaration.id.name;
this.exports.default = {
statement,
name: 'default',
localName: isDeclaration ? node.declaration.id.name : 'default',
localName: declaredName || 'default',
declaredName,
isDeclaration
};
}

2
test/test.js

@ -56,7 +56,7 @@ describe( 'rollup', function () {
( config.skip ? it.skip : config.solo ? it.only : it )( dir, function () {
var options = extend( {}, config.options, {
entry: FUNCTION + '/' + dir + '/main.js'
})
});
return rollup.rollup( options )
.then( function ( bundle ) {

Loading…
Cancel
Save