@roots/bud-minify
Version:
CSS and JS minification for bud.js
75 lines (62 loc) • 2.04 kB
text/typescript
import type {BudMinimizeCSSPublicInterface} from '@roots/bud-minify/minify-css'
import type {BudMinimizeJSPublicInterface} from '@roots/bud-minify/minify-js'
import {Bud} from '@roots/bud-framework'
import {Extension} from '@roots/bud-framework/extension'
import {dependsOn} from '@roots/bud-framework/extension/decorators/dependsOn'
import {expose} from '@roots/bud-framework/extension/decorators/expose'
import {label} from '@roots/bud-framework/extension/decorators/label'
import {production} from '@roots/bud-framework/extension/decorators/production'
import {bind} from '@roots/bud-support/decorators/bind'
/**
* Minimizer configuration
*/
(`@roots/bud-minify`)
(`minimizers`)
([`@roots/bud-minify/minify-css`, `@roots/bud-minify/minify-js`])
class BudMinimize extends Extension {
/**
* CSS minimizer configuration
*/
public declare css: BudMinimizeCSSPublicInterface
/**
* JS minimizer configuration
*/
public declare js: BudMinimizeJSPublicInterface
/**
* {@link Extension.buildBefore}
*/
public override async buildBefore(bud: Bud) {
bud.hooks.on(`build.optimization.minimize`, this.enabled)
}
/**
* {@link Extension.register}
*/
public override async register(bud: Bud) {
bud.set(`minify`, this, false)
this.js = bud.extensions.get(
`@roots/bud-minify/minify-js`,
) as BudMinimize[`js`]
bud.set(
`terser`,
bud.extensions.get(
`@roots/bud-minify/minify-js`,
) as BudMinimize[`js`],
)
this.css = bud.extensions.get(`@roots/bud-minify/minify-css`)
bud.set(
`minimizeCss`,
bud.extensions.get(`@roots/bud-minify/minify-css`),
)
}
public override enable(value: boolean | Bud = true) {
this.enabled = value instanceof Bud ? true : value
this.logger.log(this.enabled ? `enabled` : `disabled`)
this.app.hooks.on(`build.optimization.minimize`, this.enabled)
return this
}
}
export {BudMinimize as default, type BudMinimize}