From 0616d0bc2292fc044d4be6be963a466f81430480 Mon Sep 17 00:00:00 2001 From: Kelly Mears Date: Tue, 22 Mar 2022 06:41:13 -0700 Subject: [PATCH] fix: bud.terser (#1285) --- sources/@roots/bud-terser/src/bud.env.d.ts | 28 +++++++++++++++++ sources/@roots/bud-terser/src/index.ts | 13 -------- sources/@roots/bud-terser/src/terser.api.ts | 4 +-- .../@roots/bud-terser/src/terser.extension.ts | 30 ++++++++----------- .../@roots/bud-terser/src/terser.interface.ts | 16 ---------- sources/@roots/bud-terser/tsconfig.json | 11 ++++--- 6 files changed, 48 insertions(+), 54 deletions(-) create mode 100644 sources/@roots/bud-terser/src/bud.env.d.ts delete mode 100644 sources/@roots/bud-terser/src/terser.interface.ts diff --git a/sources/@roots/bud-terser/src/bud.env.d.ts b/sources/@roots/bud-terser/src/bud.env.d.ts new file mode 100644 index 0000000000..5eec95f213 --- /dev/null +++ b/sources/@roots/bud-terser/src/bud.env.d.ts @@ -0,0 +1,28 @@ +import {Extension} from '@roots/bud-framework' +import TerserPlugin from 'terser-webpack-plugin/types' +import {terser} from './terser.api' + +declare module '@roots/bud-framework' { + interface Framework { + terser: terser + } + + interface Modules { + '@roots/bud-terser': Terser.Extension + } + + namespace Terser { + export type Options = TerserPlugin.BasePluginOptions + + export type Plugin = TerserPlugin + + export interface Extension + extends Extension.CompilerPlugin< + TerserPlugin, + TerserPlugin.BasePluginOptions + > { + name: '@roots/bud-terser' + options: (app: Framework) => Terser.Options + } + } +} diff --git a/sources/@roots/bud-terser/src/index.ts b/sources/@roots/bud-terser/src/index.ts index 8046cf80b0..16210ec833 100644 --- a/sources/@roots/bud-terser/src/index.ts +++ b/sources/@roots/bud-terser/src/index.ts @@ -17,17 +17,4 @@ * @packageDocumentation */ -import type {terser} from './terser.api' -import type {Extension} from './terser.interface' - -declare module '@roots/bud-framework' { - interface Framework { - terser: terser - } - - interface Modules { - 'terser-webpack-plugin': Extension - } -} - export {name, api, options, boot} from './terser.extension' diff --git a/sources/@roots/bud-terser/src/terser.api.ts b/sources/@roots/bud-terser/src/terser.api.ts index a47d51bf63..ded3cbd814 100644 --- a/sources/@roots/bud-terser/src/terser.api.ts +++ b/sources/@roots/bud-terser/src/terser.api.ts @@ -1,4 +1,4 @@ -import {Framework, Terser} from './terser.interface' +import type {Framework, Terser} from '@roots/bud-framework' export interface terser { (this: Framework, options: Terser.Options): Framework @@ -8,7 +8,7 @@ export const terser: terser = function ( this: Framework, options: Terser.Options, ): Framework { - this.extensions.get('terser-webpack-plugin').setOptions(options) + this.extensions.get('@roots/bud-terser').setOptions(options) return this } diff --git a/sources/@roots/bud-terser/src/terser.extension.ts b/sources/@roots/bud-terser/src/terser.extension.ts index 06d1ce8b82..c743c62fba 100644 --- a/sources/@roots/bud-terser/src/terser.extension.ts +++ b/sources/@roots/bud-terser/src/terser.extension.ts @@ -1,22 +1,17 @@ -import type {Framework} from '@roots/bud-framework' +import * as Framework from '@roots/bud-framework' +import TerserPlugin from 'terser-webpack-plugin' -import * as api from './terser.api' -import {TerserPlugin} from './terser.dependencies' +import {terser} from './terser.api' -export const name = '@roots/bud-terser' +export const name: Framework.Terser.Extension['name'] = '@roots/bud-terser' -export const options = (app: Framework) => ({ - parallel: app.hooks.filter('build.parallelism'), +export const options: Framework.Terser.Extension['options'] = app => ({ include: app.store.get('patterns.js'), extractComments: false, terserOptions: { - parse: { - ecma: 2018, - }, + parse: {ecma: 2018}, compress: false, - mangle: { - safari10: true, - }, + mangle: {safari10: true}, output: { ecma: 5, comments: false, @@ -25,15 +20,16 @@ export const options = (app: Framework) => ({ }, }) -export const boot = ({extensions, hooks, store}) => { +export const boot: Framework.Terser.Extension['boot'] = ({ + extensions, + hooks, +}) => { hooks.on('build.optimization.minimizer', minimizer => { minimizer.push( - new TerserPlugin( - extensions.get('terser-webpack-plugin').options.all(), - ), + new TerserPlugin(extensions.get('@roots/bud-terser').options.all()), ) return minimizer }) } -export {api} +export const api: Framework.Terser.Extension['api'] = {terser} diff --git a/sources/@roots/bud-terser/src/terser.interface.ts b/sources/@roots/bud-terser/src/terser.interface.ts deleted file mode 100644 index 82dde4308e..0000000000 --- a/sources/@roots/bud-terser/src/terser.interface.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Extension as BudExtension, Framework} from '@roots/bud-framework' -import TerserPlugin, {TerserOptions} from 'terser-webpack-plugin/types' - -namespace Terser { - export type Options = TerserOptions - export type Plugin = TerserPlugin -} - -export type Extension = BudExtension.CompilerPlugin< - Terser.Plugin, - Terser.Options -> - -export type {Framework} - -export type {Terser} diff --git a/sources/@roots/bud-terser/tsconfig.json b/sources/@roots/bud-terser/tsconfig.json index 1eef2120d7..6af242be1e 100644 --- a/sources/@roots/bud-terser/tsconfig.json +++ b/sources/@roots/bud-terser/tsconfig.json @@ -1,15 +1,14 @@ { "extends": "../../../config/tsconfig.json", "compilerOptions": { - "baseUrl": ".", + "declarationDir": "./types", + "esModuleInterop": true, "rootDir": "./src", "outDir": "./lib/cjs", - "declarationDir": "./types", - "esModuleInterop": true + "types": ["node", "@roots/bud-api"] }, - "include": [ - "src" - ], + "files": ["./src/bud.env.d.ts"], + "include": ["src/**/*.ts", "src/**/*.json"], "references": [ { "path": "./../bud-framework/tsconfig.json"