Browse Source

handle named functions as default exports

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

15
src/Bundle.js

@ -77,11 +77,23 @@ export default class Bundle {
// bring in top-level AST nodes from the entry module // bring in top-level AST nodes from the entry module
return this.fetchModule( this.entryPath, null ) return this.fetchModule( this.entryPath, null )
.then( entryModule => { .then( entryModule => {
const defaultExport = entryModule.exports.default;
this.entryModule = entryModule; this.entryModule = entryModule;
if ( entryModule.exports.default ) { if ( defaultExport ) {
// `export default function foo () {...}` -
// use the declared name for the export
if ( defaultExport.declaredName ) {
entryModule.suggestName( 'default', defaultExport.declaredName );
}
// `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 ) ); let defaultExportName = makeLegalIdentifier( basename( this.entryPath ).slice( 0, -extname( this.entryPath ).length ) );
// deconflict
let topLevelNames = []; let topLevelNames = [];
entryModule.statements.forEach( statement => { entryModule.statements.forEach( statement => {
keys( statement.defines ).forEach( name => topLevelNames.push( name ) ); keys( statement.defines ).forEach( name => topLevelNames.push( name ) );
@ -93,6 +105,7 @@ export default class Bundle {
entryModule.suggestName( 'default', defaultExportName ); entryModule.suggestName( 'default', defaultExportName );
} }
}
return entryModule.expandAllStatements( true ); return entryModule.expandAllStatements( true );
}) })

4
src/Module.js

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

2
test/test.js

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

Loading…
Cancel
Save