Skip to content
This repository has been archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
ensure isCjs information waits on transform
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford committed Apr 26, 2018
1 parent 796c53c commit cd835c4
Showing 1 changed file with 38 additions and 9 deletions.
47 changes: 38 additions & 9 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,32 @@ export default function commonjs ( options = {} ) {

const sourceMap = options.sourceMap !== false;

const commonjsModules = new Map();
let resolveUsingOtherResolvers;

const isCjsPromises = Object.create(null);
function getIsCjsTransformPromise ( id ) {
let isCjsPromise = isCjsPromises[id];
if (isCjsPromise)
return isCjsPromise.promise;

let promise = new Promise( resolve => {
isCjsPromises[id] = isCjsPromise = {
resolve: resolve,
promise: undefined
};
});
isCjsPromise.promise = promise;

return promise;
}
function setIsCjsPromise ( id, promise ) {
let isCjsPromise = isCjsPromises[id];
if (isCjsPromise)
isCjsPromise.resolve(promise);
else
isCjsPromises[id] = { promise: promise, resolve: undefined };
}

return {
name: 'commonjs',

Expand Down Expand Up @@ -155,20 +178,23 @@ export default function commonjs ( options = {} ) {
const actualId = id.slice( PREFIX.length );
const name = getName( actualId );

if (commonjsModules.has( actualId ))
return `import { __moduleExports } from ${JSON.stringify( actualId )}; export default __moduleExports;`;
else if (esModulesWithoutDefaultExport.indexOf(actualId) !== -1)
return `import * as ${name} from ${JSON.stringify( actualId )}; export default ${name};`;
else
return `import * as ${name} from ${JSON.stringify( actualId )}; export default ( ${name} && ${name}['default'] ) || ${name};`;
return getIsCjsTransformPromise( actualId )
.then( isCjsTransform => {
if ( isCjsTransform )
return `import { __moduleExports } from ${JSON.stringify( actualId )}; export default __moduleExports;`;
else if (esModulesWithoutDefaultExport.indexOf(actualId) !== -1)
return `import * as ${name} from ${JSON.stringify( actualId )}; export default ${name};`;
else
return `import * as ${name} from ${JSON.stringify( actualId )}; export default ( ${name} && ${name}['default'] ) || ${name};`;
});
}
},

transform ( code, id ) {
if ( !filter( id ) ) return null;
if ( extensions.indexOf( extname( id ) ) === -1 ) return null;

return entryModuleIdsPromise.then( (entryModuleIds) => {
const transformPromise = entryModuleIdsPromise.then( (entryModuleIds) => {
const {isEsModule, hasDefaultExport, ast} = checkEsModule( this.parse, code, id );
if ( isEsModule ) {
if ( !hasDefaultExport )
Expand All @@ -188,11 +214,14 @@ export default function commonjs ( options = {} ) {
return;
}

commonjsModules.set( id, true );
return transformed;
}).catch(err => {
this.error(err, err.loc);
});

setIsCjsPromise(id, transformPromise.then( transformed => transformed ? true : false ));

return transformPromise;
}
};
}

0 comments on commit cd835c4

Please sign in to comment.