@roots/bud-extensions
Version:
bud.js core module
48 lines (45 loc) • 1.23 kB
text/typescript
import type {Bud} from '@roots/bud-framework'
import {Extension} from '@roots/bud-framework/extension'
import {
disabled,
expose,
label,
} from '@roots/bud-framework/extension/decorators'
import isUndefined from '@roots/bud-support/isUndefined'
/**
* ESM output configuration
*/
(`@roots/bud-extensions/esm`)
(`esm`)
export default class Esm extends Extension {
/**
* {@link Extension.buildBefore}
*/
public override async buildBefore(bud: Bud) {
bud.hooks
.fromMap({
'build.experiments': (experiments = {}) => ({
...experiments,
outputModule: true,
}),
'build.output.module': true,
})
.when(
() => !isUndefined(bud.context.manifest?.imports),
({hooks}) =>
hooks.on(`build.externals`, externals => ({
...(externals ?? ({} as any)),
...(bud.context.manifest.imports as any),
})),
)
.when(
bud.extensions.get(`@roots/bud-extensions/html-webpack-plugin`)
.isEnabled,
({extensions}) =>
extensions
.get(`@roots/bud-extensions/html-webpack-plugin`)
.set(`scriptLoading`, `module`),
)
}
}