From 149bc7cb5d45e12167d74c8b01b268c93f485cb6 Mon Sep 17 00:00:00 2001 From: Stephan Schreiber Date: Mon, 28 Nov 2022 02:31:57 +0100 Subject: [PATCH 1/3] Add defineConfigFunction auxiliary function --- src/node-entry.ts | 2 +- src/rollup/rollup.ts | 9 +++++++++ src/rollup/types.d.ts | 5 +++++ test/load-config-file/index.js | 18 ++++++++++++++++++ .../defineconfigfn-as-cjs/rollup.config.cjs | 10 ++++++++++ .../defineconfigfn-as-esm/rollup.config.mjs | 10 ++++++++++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs create mode 100644 test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs diff --git a/src/node-entry.ts b/src/node-entry.ts index d2a08e5f631..2030fdb734e 100644 --- a/src/node-entry.ts +++ b/src/node-entry.ts @@ -1,3 +1,3 @@ -export { default as rollup, defineConfig } from './rollup/rollup'; +export { default as rollup, defineConfig, defineConfigFunction } from './rollup/rollup'; export { default as watch } from './watch/watch-proxy'; export { version as VERSION } from 'package.json'; diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index 914f5d72548..e944a50c9e9 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -28,6 +28,7 @@ import type { OutputOptions, Plugin, RollupBuild, + RollupConfigFunction, RollupOptions, RollupOutput, RollupWatcher @@ -278,3 +279,11 @@ async function writeOutputFile( export function defineConfig(options: T): T { return options; } + +/** + * Auxiliary function for defining a function that returns a rollup configuration + * Mainly to facilitate IDE code prompts, after all, export default does not prompt, even if you add @type annotations, it is not accurate + */ +export function defineConfigFunction(configFunction: RollupConfigFunction) { + return configFunction; +} diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index c90dc7410b7..a433ce402c3 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -927,3 +927,8 @@ interface AcornNode { export function defineConfig(options: RollupOptions): RollupOptions; export function defineConfig(options: RollupOptions[]): RollupOptions[]; + +export type RollupConfigFunction = ( + commandLineArguments: Record +) => MaybePromise; +export function defineConfigFunction(configFunction: RollupConfigFunction): RollupConfigFunction; diff --git a/test/load-config-file/index.js b/test/load-config-file/index.js index 0f0330687bc..83d9417b8f8 100644 --- a/test/load-config-file/index.js +++ b/test/load-config-file/index.js @@ -41,6 +41,15 @@ describe('loadConfigFile', () => { assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); }); + it('loads an ESM config file exporting a config with defineConfigFn()', async () => { + const { options, warnings } = await loadConfigFile( + path.resolve(__dirname, 'samples/defineconfigfn-as-esm/rollup.config.mjs') + ); + assert.strictEqual(warnings.count, 0); + // Remove undefined values and functions before checking + assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); + }); + it('loads a CommonJS config file', async () => { const { options, warnings } = await loadConfigFile( path.resolve(__dirname, 'samples/cjs-via-pkg/rollup.config.js') @@ -59,6 +68,15 @@ describe('loadConfigFile', () => { assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); }); + it('loads a CommonJS config file exporting a config with defineConfigFn()', async () => { + const { options, warnings } = await loadConfigFile( + path.resolve(__dirname, 'samples/defineconfigfn-as-cjs/rollup.config.cjs') + ); + assert.strictEqual(warnings.count, 0); + // Remove undefined values and functions before checking + assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); + }); + it('throws a helpful error when loading an ES module that should actually be CommonJS', async () => { let caughtError; try { diff --git a/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs b/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs new file mode 100644 index 00000000000..ca7181afdab --- /dev/null +++ b/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs @@ -0,0 +1,10 @@ +// @ts-check +const { defineConfigFunction } = require('../../../../dist/shared/rollup') + +module.exports = defineConfigFunction(args => ({ + input: 'my-input', + output: { + file: 'my-file', + format: 'es' + } +})) diff --git a/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs b/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs new file mode 100644 index 00000000000..d1c5cc3ac6a --- /dev/null +++ b/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs @@ -0,0 +1,10 @@ +// @ts-check +import { defineConfigFunction } from '../../../../dist/es/rollup.js' + +export default defineConfigFunction(args => ({ + input: 'my-input', + output: { + file: 'my-file', + format: 'es' + } +})) From 6bba3b054e42388745f376d58d85aafed19dc1ca Mon Sep 17 00:00:00 2001 From: Stephan Schreiber Date: Mon, 28 Nov 2022 07:37:20 +0100 Subject: [PATCH 2/3] Overload defineConfig a 3rd time instead. --- src/node-entry.ts | 2 +- src/rollup/rollup.ts | 14 ++++---------- src/rollup/types.d.ts | 4 ++-- .../defineconfigfn-as-cjs/rollup.config.cjs | 4 ++-- .../defineconfigfn-as-esm/rollup.config.mjs | 4 ++-- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/node-entry.ts b/src/node-entry.ts index 2030fdb734e..d2a08e5f631 100644 --- a/src/node-entry.ts +++ b/src/node-entry.ts @@ -1,3 +1,3 @@ -export { default as rollup, defineConfig, defineConfigFunction } from './rollup/rollup'; +export { default as rollup, defineConfig } from './rollup/rollup'; export { default as watch } from './watch/watch-proxy'; export { version as VERSION } from 'package.json'; diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index e944a50c9e9..36c4204666d 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -28,8 +28,8 @@ import type { OutputOptions, Plugin, RollupBuild, - RollupConfigFunction, RollupOptions, + RollupOptionsFunction, RollupOutput, RollupWatcher } from './types'; @@ -276,14 +276,8 @@ async function writeOutputFile( * Mainly to facilitate IDE code prompts, after all, export default does not prompt, even if you add @type annotations, it is not accurate * @param options */ -export function defineConfig(options: T): T { +export function defineConfig( + options: T +): T { return options; } - -/** - * Auxiliary function for defining a function that returns a rollup configuration - * Mainly to facilitate IDE code prompts, after all, export default does not prompt, even if you add @type annotations, it is not accurate - */ -export function defineConfigFunction(configFunction: RollupConfigFunction) { - return configFunction; -} diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index a433ce402c3..d44e797162f 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -927,8 +927,8 @@ interface AcornNode { export function defineConfig(options: RollupOptions): RollupOptions; export function defineConfig(options: RollupOptions[]): RollupOptions[]; +export function defineConfig(optionsFunction: RollupOptionsFunction): RollupOptionsFunction; -export type RollupConfigFunction = ( +export type RollupOptionsFunction = ( commandLineArguments: Record ) => MaybePromise; -export function defineConfigFunction(configFunction: RollupConfigFunction): RollupConfigFunction; diff --git a/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs b/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs index ca7181afdab..277fad765c0 100644 --- a/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs +++ b/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs @@ -1,7 +1,7 @@ // @ts-check -const { defineConfigFunction } = require('../../../../dist/shared/rollup') +const { defineConfig } = require('../../../../dist/shared/rollup') -module.exports = defineConfigFunction(args => ({ +module.exports = defineConfig(args => ({ input: 'my-input', output: { file: 'my-file', diff --git a/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs b/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs index d1c5cc3ac6a..129c4d9e71b 100644 --- a/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs +++ b/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs @@ -1,7 +1,7 @@ // @ts-check -import { defineConfigFunction } from '../../../../dist/es/rollup.js' +import { defineConfig } from '../../../../dist/es/rollup.js' -export default defineConfigFunction(args => ({ +export default defineConfig(args => ({ input: 'my-input', output: { file: 'my-file', From 30b17dab17b8a09a1d65e26fc6f0f63b6ec24725 Mon Sep 17 00:00:00 2001 From: Stephan Schreiber Date: Wed, 30 Nov 2022 11:41:55 +0100 Subject: [PATCH 3/3] Update tests descriptions --- test/load-config-file/index.js | 8 ++++---- .../rollup.config.cjs | 0 .../rollup.config.mjs | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename test/load-config-file/samples/{defineconfigfn-as-cjs => cjs-defineconfig-as-fn}/rollup.config.cjs (100%) rename test/load-config-file/samples/{defineconfigfn-as-esm => esm-defineconfig-as-fn}/rollup.config.mjs (100%) diff --git a/test/load-config-file/index.js b/test/load-config-file/index.js index 83d9417b8f8..c4fdd2a479a 100644 --- a/test/load-config-file/index.js +++ b/test/load-config-file/index.js @@ -41,9 +41,9 @@ describe('loadConfigFile', () => { assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); }); - it('loads an ESM config file exporting a config with defineConfigFn()', async () => { + it('loads an ESM config file exporting a config as a function with defineConfig()', async () => { const { options, warnings } = await loadConfigFile( - path.resolve(__dirname, 'samples/defineconfigfn-as-esm/rollup.config.mjs') + path.resolve(__dirname, 'samples/esm-defineconfig-as-fn/rollup.config.mjs') ); assert.strictEqual(warnings.count, 0); // Remove undefined values and functions before checking @@ -68,9 +68,9 @@ describe('loadConfigFile', () => { assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), defaultConfigs); }); - it('loads a CommonJS config file exporting a config with defineConfigFn()', async () => { + it('loads a CommonJS config file exporting a config as a function with defineConfig()', async () => { const { options, warnings } = await loadConfigFile( - path.resolve(__dirname, 'samples/defineconfigfn-as-cjs/rollup.config.cjs') + path.resolve(__dirname, 'samples/cjs-defineconfig-as-fn/rollup.config.cjs') ); assert.strictEqual(warnings.count, 0); // Remove undefined values and functions before checking diff --git a/test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs b/test/load-config-file/samples/cjs-defineconfig-as-fn/rollup.config.cjs similarity index 100% rename from test/load-config-file/samples/defineconfigfn-as-cjs/rollup.config.cjs rename to test/load-config-file/samples/cjs-defineconfig-as-fn/rollup.config.cjs diff --git a/test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs b/test/load-config-file/samples/esm-defineconfig-as-fn/rollup.config.mjs similarity index 100% rename from test/load-config-file/samples/defineconfigfn-as-esm/rollup.config.mjs rename to test/load-config-file/samples/esm-defineconfig-as-fn/rollup.config.mjs