From af8801bfba4165b7330e22dbb36df795b55792a1 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 11 Nov 2019 06:27:43 +0100 Subject: [PATCH] Allow passing input options to output (#3223) --- src/rollup/index.ts | 6 +++++- test/misc/misc.js | 30 +++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/rollup/index.ts b/src/rollup/index.ts index 5c5b61a664f..2ff3c1db41a 100644 --- a/src/rollup/index.ts +++ b/src/rollup/index.ts @@ -439,7 +439,11 @@ function normalizeOutputOptions( } const mergedOptions = mergeOptions({ config: { - output: { ...rawOutputOptions, ...(inputOptions.output as Object) } + output: { + ...rawOutputOptions, + ...(rawOutputOptions.output as Object), + ...(inputOptions.output as Object) + } } }); diff --git a/test/misc/misc.js b/test/misc/misc.js index f2e6a32a8b3..f30f956b9df 100644 --- a/test/misc/misc.js +++ b/test/misc/misc.js @@ -3,7 +3,7 @@ const rollup = require('../../dist/rollup'); const { loader } = require('../utils.js'); describe('misc', () => { - it('throw modification of options or its property', () => { + it('avoids modification of options or their properties', () => { const { freeze } = Object; return rollup.rollup( freeze({ @@ -118,12 +118,11 @@ describe('misc', () => { }); }); - it('ignores falsy plugins', () => { - return rollup.rollup({ + it('ignores falsy plugins', () => + rollup.rollup({ input: 'x', plugins: [loader({ x: `console.log( 42 );` }), null, false, undefined] - }); - }); + })); it('handles different import paths for different outputs', () => { return rollup @@ -156,4 +155,25 @@ describe('misc', () => { ]) ); }); + + it('allows passing the same object to `rollup` and `generate`', () => { + const options = { + input: 'input', + plugins: [ + loader({ + input: 'export default 42;' + }) + ], + output: { + format: 'esm' + } + }; + + return rollup + .rollup(options) + .then(bundle => bundle.generate(options)) + .then(output => + assert.strictEqual(output.output[0].code, 'var input = 42;\n\nexport default input;\n') + ); + }); });