@roots/bud-api
Version:
bud.js core module
37 lines (29 loc) • 1 kB
text/typescript
import type {Bud} from '@roots/bud-framework'
import type {Configuration} from '@roots/bud-framework/config'
import {BudError} from '@roots/bud-support/errors'
import isFunction from '@roots/bud-support/isFunction'
export type Parameters = [
| ((config: Partial<Configuration>) => Partial<Configuration>)
| ((config: Partial<Configuration>) => Promise<Partial<Configuration>>)
| Partial<Configuration>,
]
export interface config {
(...parameters: Parameters): Bud
}
export const config: config = function (this: Bud, input): Bud {
if (!input)
throw new BudError(
`config input must pass a callback function that returns a webpack configuration`,
{
docs: new URL(`https://bud.js.org/docs/bud.config`),
thrownBy: `bud.config`,
},
)
this.hooks.action(`build.after`, async app => {
if (!app) return
app.build.config = isFunction(input)
? await input(app.build.config)
: {...app.build.config, ...input}
})
return this
}