diff --git a/packages/core/core/src/Transformation.js b/packages/core/core/src/Transformation.js index 321a327e315..33bdfe0ebda 100644 --- a/packages/core/core/src/Transformation.js +++ b/packages/core/core/src/Transformation.js @@ -83,7 +83,8 @@ export type TransformationOpts = {| |}; export type TransformationResult = {| - assets: Array, + assets?: Array, + error?: Error, configRequests: Array, invalidations: Array, invalidateOnFileCreate: Array, @@ -178,19 +179,25 @@ export default class Transformation { asset.value.isSource, asset.value.pipeline, ); - let results = await this.runPipelines(pipeline, asset); - let assets = results.map(a => a.value); + let assets, error; + try { + let results = await this.runPipelines(pipeline, asset); + assets = results.map(a => a.value); + } catch (e) { + error = e; + } let configRequests = getConfigRequests([...this.configs.values()]); let devDepRequests = getWorkerDevDepRequests([ ...this.devDepRequests.values(), ]); - // $FlowFixMe + // $FlowFixMe because of $$raw return { $$raw: true, assets, configRequests, + error, invalidateOnFileCreate: this.invalidateOnFileCreate, invalidations: [...this.invalidations.values()], devDepRequests, diff --git a/packages/core/core/src/requests/AssetRequest.js b/packages/core/core/src/requests/AssetRequest.js index 07db6a1e69f..c378f907e59 100644 --- a/packages/core/core/src/requests/AssetRequest.js +++ b/packages/core/core/src/requests/AssetRequest.js @@ -128,6 +128,7 @@ async function run({input, api, farm, invalidateReason, options}: RunInput) { let { assets, configRequests, + error, invalidations, invalidateOnFileCreate, devDepRequests, @@ -138,8 +139,10 @@ async function run({input, api, farm, invalidateReason, options}: RunInput) { }): TransformationResult); let time = Date.now() - start; - for (let asset of assets) { - asset.stats.time = time; + if (assets) { + for (let asset of assets) { + asset.stats.time = time; + } } for (let invalidation of invalidateOnFileCreate) { @@ -171,5 +174,9 @@ async function run({input, api, farm, invalidateReason, options}: RunInput) { await runConfigRequest(api, configRequest); } - return assets; + if (error != null) { + throw error; + } else { + return nullthrows(assets); + } }