Browse Source

Started working on namespaces.

gh-109
Oskar Segersvärd 10 years ago
parent
commit
cc9d5b7ecc
  1. 10
      src/Bundle.js
  2. 20
      src/Module.js

10
src/Bundle.js

@ -63,6 +63,12 @@ export default class Bundle {
this.markAllModifierStatements(); this.markAllModifierStatements();
this.orderedModules = this.sort(); this.orderedModules = this.sort();
this.exports.localIds().forEach( ([ , id ]) => {
// If the export is a module (namespace), we need
// all its exports dynamically accessible.
if ( id.module === id ) id.dynamicAccess();
});
// As a last step, deconflict all identifier names, once. // As a last step, deconflict all identifier names, once.
this.scope.deconflict(); this.scope.deconflict();
@ -71,7 +77,7 @@ export default class Bundle {
this.externalModules.forEach( module => { this.externalModules.forEach( module => {
const externalDefault = module.exports.lookup( 'default' ); const externalDefault = module.exports.lookup( 'default' );
if ( externalDefault && !module.needsNamed ) { if ( externalDefault && !( module.needsNamed || module.needsAll ) ) {
externalDefault.name = module.name; externalDefault.name = module.name;
} }
}); });
@ -245,7 +251,7 @@ export default class Bundle {
const exports = module.exports.localIds().map( ( [ name, id ] ) => const exports = module.exports.localIds().map( ( [ name, id ] ) =>
`${indentString}get ${name} () { return ${id.name}; }`); `${indentString}get ${name} () { return ${id.name}; }`);
return `var ${module.replacements['*']} = {\n` + return `var ${module.name} = {\n` +
exports.join( ',\n' ) + exports.join( ',\n' ) +
`\n};\n\n`; `\n};\n\n`;
}).join( '' ); }).join( '' );

20
src/Module.js

@ -31,6 +31,7 @@ export default class Module {
this.bundle = bundle; this.bundle = bundle;
this.id = id; this.id = id;
this.module = this;
// Implement Identifier interface. // Implement Identifier interface.
this.name = makeLegalIdentifier( basename( id ).slice( 0, -extname( id ).length ) ); this.name = makeLegalIdentifier( basename( id ).slice( 0, -extname( id ).length ) );
@ -92,10 +93,8 @@ export default class Module {
this.reassignments = []; this.reassignments = [];
this.marked = blank(); // TODO: change to false, and detect when it's necessary.
this.definitions = blank(); this.needsDynamicAccess = false;
this.definitionPromises = blank();
this.modifications = blank();
this.dependencies = this.collectDependencies(); this.dependencies = this.collectDependencies();
} }
@ -261,9 +260,6 @@ export default class Module {
statement, statement,
module: this module: this
}); });
// FIXME: remove?
this.definitions[ name ] = statement;
}); });
keys( statement.modifies ).forEach( name => { keys( statement.modifies ).forEach( name => {
@ -384,8 +380,14 @@ export default class Module {
return { strongDependencies, weakDependencies }; return { strongDependencies, weakDependencies };
} }
defaultName () { // Enforce dynamic access of the module's properties.
return this.name; dynamicAccess () {
this.needsDynamicAccess = true;
this.markAllExportStatements();
if ( !~this.bundle.internalNamespaceModules.indexOf( this ) ) {
this.bundle.internalNamespaceModules.push( this );
}
} }
getModule ( source ) { getModule ( source ) {

Loading…
Cancel
Save