From 259fb1b8766ddc1398b99c29795039d50fbc7c03 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 18 May 2015 16:40:19 -0400 Subject: [PATCH] tidy up --- src/Bundle.js | 57 ++++++--------------------------------------------- src/Module.js | 8 ++------ 2 files changed, 8 insertions(+), 57 deletions(-) diff --git a/src/Bundle.js b/src/Bundle.js index 1bcc418..24510e7 100644 --- a/src/Bundle.js +++ b/src/Bundle.js @@ -14,20 +14,11 @@ export default class Bundle { constructor ( options ) { this.base = options.base || process.cwd(); this.entryPath = resolve( this.base, options.entry ).replace( /\.js$/, '' ) + '.js'; - this.entryModule = null; - this.resolvePath = options.resolvePath || defaultResolver; + this.entryModule = null; this.modulePromises = {}; - this.modules = {}; - - // this will store the top-level AST nodes we import - this.body = []; - - // this will store per-module names, and enable deconflicting - this.bindingNames = {}; - this.usedNames = {}; - + this.statements = []; this.externalModules = []; } @@ -54,7 +45,6 @@ export default class Bundle { bundle: this }); - this.modules[ path ] = module; return module; }); } @@ -70,17 +60,11 @@ export default class Bundle { const importedNames = keys( entryModule.imports ); - entryModule.definedNames - .concat( importedNames ) - .forEach( name => { - this.usedNames[ name ] = true; - }); - // pull in imports return sequence( importedNames, name => { return entryModule.define( name ) .then( nodes => { - this.body.push.apply( this.body, nodes ); + this.statements.push.apply( this.statements, nodes ); }); }) .then( () => { @@ -97,7 +81,7 @@ export default class Bundle { } // Include everything else - this.body.push( node ); + this.statements.push( node ); }); }); }) @@ -108,23 +92,11 @@ export default class Bundle { } deconflict () { - // TODO this probably needs to happen at generate time, since - // treatment of external modules differs between formats - // e.g. this... - // - // import { relative } from 'path'`; - // console.log( relative( 'foo', 'bar' ) ); - // - // ...would look very similar when bundled as ES6, but in - // a CommonJS bundle would become this: - // - // var path = require( 'path' ); - // console.log( path.relative( 'foo', 'bar' ) ); let definers = {}; let conflicts = {}; // Discover conflicts (i.e. two statements in separate modules both define `foo`) - this.body.forEach( statement => { + this.statements.forEach( statement => { keys( statement._defines ).forEach( name => { if ( has( definers, name ) ) { conflicts[ name ] = true; @@ -164,25 +136,8 @@ export default class Bundle { generate ( options = {} ) { let magicString = new MagicString.Bundle({ separator: '' }); - // TODO we shouldn't be adding export statements back into the entry - // module, they shouldn't be removed in the first place - /*this.entryModule.exportStatements.forEach( statement => { - if ( statement.specifiers.length ) { - // we don't need to include `export { foo }`, it's already handled - return; - } - - if ( statement.declaration.type === 'VariableDeclaration' ) { - statement._source.remove( statement.start, statement.declaration.start ); - } else { - // TODO function, class declarations - } - - this.body.push( statement ); - });*/ - // Apply new names and add to the output bundle - this.body.forEach( statement => { + this.statements.forEach( statement => { let replacements = {}; keys( statement._dependsOn ) diff --git a/src/Module.js b/src/Module.js index bbe3dd7..3b7a8cb 100644 --- a/src/Module.js +++ b/src/Module.js @@ -10,12 +10,13 @@ const emptyArrayPromise = Promise.resolve([]); export default class Module { constructor ({ path, code, bundle }) { + this.bundle = bundle; this.path = path; this.relativePath = relative( bundle.base, path ).slice( 0, -3 ); // remove .js + this.code = new MagicString( code, { filename: path }); - this.bundle = bundle; this.ast = parse( code, { ecmaVersion: 6, @@ -54,9 +55,6 @@ export default class Module { this.imports = {}; this.exports = {}; - // an array of export statements, used for the entry module - this.exportStatements = []; - this.ast.body.forEach( node => { let source; @@ -81,8 +79,6 @@ export default class Module { } else if ( /^Export/.test( node.type ) ) { - this.exportStatements.push( node ); - // export default function foo () {} // export default foo; // export default 42;