You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
909 B

export default class ExternalModule {
constructor ( { id, bundle } ) {
this.id = id;
// Implement `Identifier` interface.
this.originalName = id;
this.name = id;
this.module = this;
this.isExternal = true;
this.importedByBundle = [];
// Invariant: needsNamed and needsAll are never both true at once.
// Because an import with both a namespace and named import is invalid:
//
// import * as ns, { a } from '...'
//
this.needsNamed = false;
this.needsAll = false;
this.exports = bundle.scope.virtual();
const { reference } = this.exports;
// Override reference.
this.exports.reference = name => {
if ( name !== 'default' ) {
this.needsNamed = true;
}
if ( !this.exports.defines( name ) ) {
this.exports.define( name, {
originalName: name,
name,
module: this
});
}
return reference.call( this.exports, name );
};
}
}