From 97f51ceccea7b5334c276de9944f65ea55dc3100 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 21 Jun 2020 07:38:11 +0200 Subject: [PATCH] Merge generate and write --- src/rollup/rollup.ts | 84 ++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 0be0d04d22d..fa732647c43 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -65,58 +65,24 @@ export async function rollupInternal( const result: RollupBuild = { cache: useCache ? graph.getCache() : undefined, - // TODO Lukas merge generate and write here async generate(rawOutputOptions: OutputOptions) { - const { - options: outputOptions, - outputPluginDriver, - unsetOptions - } = getOutputOptionsAndPluginDriver( - rawOutputOptions as GenericConfigObject, - graph.pluginDriver, - inputOptions, - unsetInputOptions - ); - const bundle = new Bundle( - outputOptions, - unsetOptions, + return handleGenerateWrite( + false, inputOptions, - outputPluginDriver, + unsetInputOptions, + rawOutputOptions as GenericConfigObject, graph ); - return createOutput(await bundle.generate(false)); }, watchFiles: Object.keys(graph.watchFiles), async write(rawOutputOptions: OutputOptions) { - const { - options: outputOptions, - outputPluginDriver, - unsetOptions - } = getOutputOptionsAndPluginDriver( - rawOutputOptions as GenericConfigObject, - graph.pluginDriver, + return handleGenerateWrite( + true, inputOptions, - unsetInputOptions - ); - if (!outputOptions.dir && !outputOptions.file) { - return error({ - code: 'MISSING_OPTION', - message: 'You must specify "output.file" or "output.dir" for the build.' - }); - } - const bundle = new Bundle( - outputOptions, - unsetOptions, - inputOptions, - outputPluginDriver, + unsetInputOptions, + rawOutputOptions as GenericConfigObject, graph ); - const generated = await bundle.generate(true); - await Promise.all( - Object.keys(generated).map(chunkId => writeOutputFile(generated[chunkId], outputOptions)) - ); - await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]); - return createOutput(generated); } }; if (inputOptions.perf) result.getTimings = getTimings; @@ -161,6 +127,40 @@ function normalizePlugins(plugins: Plugin[], anonymousPrefix: string): void { } } +async function handleGenerateWrite( + isWrite: boolean, + inputOptions: NormalizedInputOptions, + unsetInputOptions: Set, + rawOutputOptions: GenericConfigObject, + graph: Graph +): Promise { + const { + options: outputOptions, + outputPluginDriver, + unsetOptions + } = getOutputOptionsAndPluginDriver( + rawOutputOptions, + graph.pluginDriver, + inputOptions, + unsetInputOptions + ); + const bundle = new Bundle(outputOptions, unsetOptions, inputOptions, outputPluginDriver, graph); + const generated = await bundle.generate(isWrite); + if (isWrite) { + if (!outputOptions.dir && !outputOptions.file) { + return error({ + code: 'MISSING_OPTION', + message: 'You must specify "output.file" or "output.dir" for the build.' + }); + } + await Promise.all( + Object.keys(generated).map(chunkId => writeOutputFile(generated[chunkId], outputOptions)) + ); + await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]); + } + return createOutput(generated); +} + function getOutputOptionsAndPluginDriver( rawOutputOptions: GenericConfigObject, inputPluginDriver: PluginDriver,