Browse Source

ensure correct placement of export default statement

contingency-plan
Rich-Harris 10 years ago
parent
commit
02afb469ce
  1. 36
      src/Module.js

36
src/Module.js

@ -332,14 +332,36 @@ export default class Module {
else {
let statement;
if ( name === 'default' ) {
statement = this.exports.default.statement;
} else {
statement = this.definitions[ name ];
}
statement = name === 'default' ? this.exports.default.statement : this.definitions[ name ];
promise = statement && !statement.isIncluded ? statement.expand() : emptyArrayPromise;
// Special case - `export default foo; foo += 1` - need to be
// vigilant about maintaining the correct order of the export
// declaration. Otherwise, the export declaration will always
// go at the end of the expansion, because the expansion of
// `foo` will include statements *after* the declaration
if ( name === 'default' && this.exports.default.identifier && this.exports.default.isModified ) {
const defaultExportStatement = this.exports.default.statement;
promise = promise.then( statements => {
// remove the default export statement...
// TODO could this be statements.pop()?
statements.splice( statements.indexOf( defaultExportStatement ), 1 );
const len = statements.length;
let i;
let inserted = false;
for ( i = 0; i < len; i += 1 ) {
if ( statements[i].module === this && statements[i].index > defaultExportStatement.index ) {
statements.splice( i, 0, defaultExportStatement );
inserted = true;
break;
}
}
if ( statement && !statement.isIncluded ) {
promise = statement.expand();
if ( !inserted ) statements.push( statement );
return statements;
});
}
}

Loading…
Cancel
Save