diff --git a/sources/@roots/bud-api/src/api/methods/config/index.ts b/sources/@roots/bud-api/src/api/methods/config/index.ts index db9eaeb4ec..dbb3c8f87b 100644 --- a/sources/@roots/bud-api/src/api/methods/config/index.ts +++ b/sources/@roots/bud-api/src/api/methods/config/index.ts @@ -1,24 +1,32 @@ import type {Framework} from '@roots/bud-framework' -import Webpack from 'webpack' +import {lodash} from '@roots/bud-support' +import {Configuration} from 'webpack' + +const {isFunction} = lodash + +export interface override { + (config: Partial): Partial +} export interface config { - (overrides: Partial): Framework + (input: override | Partial): Framework } -export function config( - overrides: ( - config: Partial, - ) => Partial, -): Framework { +export const config: config = function (input): Framework { const ctx = this as Framework - if (!overrides) + if (!input) throw new Error( - 'config overrides must pass a callback function that returns a webpack configuration', + 'config input must pass a callback function that returns a webpack configuration', ) ctx.hooks.action('event.build.after', async app => { - app.build.config = overrides(app.build.config) + app.build.config = isFunction(input) + ? input(app.build.config) + : { + ...app.build.config, + ...input, + } }) return ctx