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.

52 lines
1.2 KiB

import { blank } from './utils/object';
import makeLegalIdentifier from './utils/makeLegalIdentifier';
export default class ExternalModule {
constructor ( { id, bundle } ) {
this.id = id;
// Implement `Identifier` interface.
this.originalName = this.name = makeLegalIdentifier( id );
this.module = this;
this.isModule = true;
// Define the external module's name in the bundle scope.
bundle.scope.define( id, this );
this.isExternal = true;
this.importedByBundle = blank();
// 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( false );
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 );
};
}
markExport () {}
}