From 4b77cd70c24179b97b4baabb63d4d84cc89190cc Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 30 Apr 2023 00:32:10 +0100 Subject: [PATCH 1/4] feat(kit): `addBuildPlugin` for builder-agnostic implementation --- packages/kit/src/build.ts | 36 ++++++++++++++++++++++++++++++ test/fixtures/basic/nuxt.config.ts | 5 ++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/build.ts b/packages/kit/src/build.ts index 1ad1ad8b4f76..974d2de4f508 100644 --- a/packages/kit/src/build.ts +++ b/packages/kit/src/build.ts @@ -132,3 +132,39 @@ export function addVitePlugin (plugin: VitePlugin | VitePlugin[], options?: Exte } }, options) } + +interface AddBuildPluginFactory { + vite?: (...args: Args) => VitePlugin | VitePlugin[] + webpack?: (...args: Args) => WebpackPluginInstance | WebpackPluginInstance[] +} + +export function addBuildPlugin> (pluginFactory: AddBuildPluginFactory<[Options]>, pluginOptions?: Options, options?: ExtendConfigOptions): void +export function addBuildPlugin<_Options extends never> (pluginFactory: AddBuildPluginFactory<[]>, options?: ExtendConfigOptions): void +export function addBuildPlugin> (pluginFactory: AddBuildPluginFactory<[Options]>, pluginOptions?: Options, options?: ExtendConfigOptions) { + + if (pluginFactory.vite) { + extendViteConfig((config) => { + const plugin = pluginFactory.vite!() + + config.plugins = config.plugins || [] + if (Array.isArray(plugin)) { + config.plugins.push(...plugin) + } else { + config.plugins.push(plugin) + } + }, options) + } + + if (pluginFactory.webpack) { + extendWebpackConfig((config) => { + config.plugins = config.plugins || [] + const plugin = pluginFactory.webpack!() + + if (Array.isArray(plugin)) { + config.plugins.push(...plugin) + } else { + config.plugins.push(plugin) + } + }, options) + } +} diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 83770023740e..12861e2acd7d 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -1,4 +1,4 @@ -import { addComponent, addVitePlugin, addWebpackPlugin } from 'nuxt/kit' +import { addBuildPlugin, addComponent, addVitePlugin, addWebpackPlugin } from 'nuxt/kit' import type { NuxtPage } from 'nuxt/schema' import { createUnplugin } from 'unplugin' import { withoutLeadingSlash } from 'ufo' @@ -106,8 +106,7 @@ export default defineNuxtConfig({ if (id === 'virtual.css') { return ':root { --virtual: red }' } } })) - addVitePlugin(plugin.vite()) - addWebpackPlugin(plugin.webpack()) + addBuildPlugin(plugin) }, function (_options, nuxt) { const routesToDuplicate = ['/async-parent', '/fixed-keyed-child-parent', '/keyed-child-parent', '/with-layout', '/with-layout2'] From fc1672716771df51a6c1168dc58d2ffe24706418 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 30 Apr 2023 22:32:55 +0100 Subject: [PATCH 2/4] fix: remove generic for passing options to plugin --- packages/kit/src/build.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/kit/src/build.ts b/packages/kit/src/build.ts index 974d2de4f508..65453ee7c021 100644 --- a/packages/kit/src/build.ts +++ b/packages/kit/src/build.ts @@ -133,15 +133,12 @@ export function addVitePlugin (plugin: VitePlugin | VitePlugin[], options?: Exte }, options) } -interface AddBuildPluginFactory { - vite?: (...args: Args) => VitePlugin | VitePlugin[] - webpack?: (...args: Args) => WebpackPluginInstance | WebpackPluginInstance[] +interface AddBuildPluginFactory { + vite?: () => VitePlugin | VitePlugin[] + webpack?: () => WebpackPluginInstance | WebpackPluginInstance[] } -export function addBuildPlugin> (pluginFactory: AddBuildPluginFactory<[Options]>, pluginOptions?: Options, options?: ExtendConfigOptions): void -export function addBuildPlugin<_Options extends never> (pluginFactory: AddBuildPluginFactory<[]>, options?: ExtendConfigOptions): void -export function addBuildPlugin> (pluginFactory: AddBuildPluginFactory<[Options]>, pluginOptions?: Options, options?: ExtendConfigOptions) { - +export function addBuildPlugin (pluginFactory: AddBuildPluginFactory, options?: ExtendConfigOptions) { if (pluginFactory.vite) { extendViteConfig((config) => { const plugin = pluginFactory.vite!() From b8aea21fbf36e3519d67790a38dfa8f730c573d4 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sun, 30 Apr 2023 22:36:37 +0100 Subject: [PATCH 3/4] chore: remove unused imports --- test/fixtures/basic/nuxt.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 12861e2acd7d..0e077b3ec2aa 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -1,4 +1,4 @@ -import { addBuildPlugin, addComponent, addVitePlugin, addWebpackPlugin } from 'nuxt/kit' +import { addBuildPlugin, addComponent } from 'nuxt/kit' import type { NuxtPage } from 'nuxt/schema' import { createUnplugin } from 'unplugin' import { withoutLeadingSlash } from 'ufo' From 4a47994d68691360a50c132b85648f2bb102b421 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 11 May 2023 23:29:10 +0100 Subject: [PATCH 4/4] refactor: use built-in getters --- packages/kit/src/build.ts | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/packages/kit/src/build.ts b/packages/kit/src/build.ts index 061de4a5da77..43444d11f6d7 100644 --- a/packages/kit/src/build.ts +++ b/packages/kit/src/build.ts @@ -144,28 +144,10 @@ interface AddBuildPluginFactory { export function addBuildPlugin (pluginFactory: AddBuildPluginFactory, options?: ExtendConfigOptions) { if (pluginFactory.vite) { - extendViteConfig((config) => { - const plugin = pluginFactory.vite!() - - config.plugins = config.plugins || [] - if (Array.isArray(plugin)) { - config.plugins.push(...plugin) - } else { - config.plugins.push(plugin) - } - }, options) + addVitePlugin(pluginFactory.vite, options) } if (pluginFactory.webpack) { - extendWebpackConfig((config) => { - config.plugins = config.plugins || [] - const plugin = pluginFactory.webpack!() - - if (Array.isArray(plugin)) { - config.plugins.push(...plugin) - } else { - config.plugins.push(plugin) - } - }, options) + addWebpackPlugin(pluginFactory.webpack, options) } }