diff --git a/src/Bundle.js b/src/Bundle.js index b0ef4ac..dcddf13 100644 --- a/src/Bundle.js +++ b/src/Bundle.js @@ -10,6 +10,7 @@ import { load, makeOnwarn, resolveId } from './utils/defaults.js'; import getExportMode from './utils/getExportMode.js'; import getIndentString from './utils/getIndentString.js'; import { unixizePath } from './utils/normalizePlatform.js'; +import { mapSequence } from './utils/promise.js'; import transform from './utils/transform.js'; import transformBundle from './utils/transformBundle.js'; import collapseSourcemaps from './utils/collapseSourcemaps.js'; @@ -175,7 +176,7 @@ export default class Bundle { } fetchAllDependencies ( module ) { - const promises = module.sources.map( source => { + return mapSequence( module.sources, source => { return this.resolveId( source, module.id ) .then( resolvedId => { // If the `resolvedId` is supposed to be external, make it so. @@ -205,8 +206,6 @@ export default class Bundle { } }); }); - - return Promise.all( promises ); } render ( options = {} ) { diff --git a/src/utils/promise.js b/src/utils/promise.js new file mode 100644 index 0000000..1730de8 --- /dev/null +++ b/src/utils/promise.js @@ -0,0 +1,16 @@ +import Promise from 'es6-promise/lib/es6-promise/promise.js'; + +export function mapSequence ( array, fn ) { + let results = []; + let promise = Promise.resolve(); + + function next ( member, i ) { + return fn( member ).then( value => results[i] = value ); + } + + for ( let i = 0; i < array.length; i += 1 ) { + promise = promise.then( () => next( array[i], i ) ); + } + + return promise.then( () => results ); +}