diff --git a/README.md b/README.md index 07afa53..f70266e 100644 --- a/README.md +++ b/README.md @@ -676,24 +676,39 @@ module.exports = { With built-in minify functions: ```ts -import type { SwcMinifyFunction } from "terser-webpack-plugin"; +import type { JsMinifyOptions as SwcOptions } from "@swc/core"; +import type { MinifyOptions as UglifyJSOptions } from "uglify-js"; +import type { TransformOptions as EsbuildOptions } from "esbuild"; +import type { MinifyOptions as TerserOptions } from "terser"; module.exports = { optimization: { minimize: true, minimizer: [ - new TerserPlugin({ + new TerserPlugin({ minify: TerserPlugin.swcMinify, terserOptions: { - compress: true, + // `swc` options + }, + }), + new TerserPlugin({ + minify: TerserPlugin.uglifyJsMinify, + terserOptions: { + // `uglif-js` options + }, + }), + new TerserPlugin({ + minify: TerserPlugin.esbuildMinify, + terserOptions: { + // `esbuild` options }, }), - // Alternative: - new TerserPlugin({ - minify: TerserPlugin.swcMinify, + // Alternative usage: + new TerserPlugin({ + minify: TerserPlugin.terserMinify, terserOptions: { - compress: true, + // `terser` options }, }), ], diff --git a/src/index.js b/src/index.js index 2aab970..73c919a 100644 --- a/src/index.js +++ b/src/index.js @@ -24,10 +24,7 @@ import { minify as minimize } from "./minify"; /** @typedef {import("webpack").Asset} Asset */ /** @typedef {import("./utils.js").TerserECMA} TerserECMA */ /** @typedef {import("./utils.js").TerserOptions} TerserOptions */ -/** @typedef {import("./utils.js").UglifyJSOptions} UglifyJSOptions */ -/** @typedef {import("./utils.js").SwcOptions} SwcOptions */ -/** @typedef {import("./utils.js").EsbuildOptions} EsbuildOptions */ -/** @typedef {Object.} CustomOptions */ +/** @typedef {import("./utils.js").CustomOptions} CustomOptions */ /** @typedef {import("jest-worker").Worker} JestWorker */ /** @typedef {import("source-map").RawSourceMap} RawSourceMap */ @@ -81,14 +78,14 @@ import { minify as minimize } from "./minify"; /** * @typedef {Object} PredefinedOptions * @property {boolean} [module] - * @property {5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | number | string} [ecma] + * @property {any} [ecma] */ /** * @template T * @typedef {Object} MinimizerImplementationAndOptions - * @property {MinimizerImplementation>} implementation - * @property {PredefinedOptions & ThirdArgument} options + * @property {MinimizerImplementation} implementation + * @property {PredefinedOptions & T} options */ /** @@ -126,26 +123,6 @@ import { minify as minimize } from "./minify"; * @typedef {BasicMinimizerImplementation & MinimizeFunctionHelpers } MinimizerImplementation */ -/** - * @typedef {MinimizerImplementation} TerserMinimizer - */ - -/** - * @typedef {MinimizerImplementation} UglifyJSMinimizer - */ - -/** - * @typedef {MinimizerImplementation} SwcMinimizer - */ - -/** - * @typedef {MinimizerImplementation} EsbuildMinimizer - */ - -/** - * @typedef {MinimizerImplementation} CustomMinimizer - */ - /** * @typedef {Object} BasePluginOptions * @property {Rules} [test] @@ -157,28 +134,21 @@ import { minify as minimize } from "./minify"; /** * @template T - * @typedef {T extends (arg1: any, arg2: any, arg3: infer U, ...args: any[]) => any ? U: never} ThirdArgument + * @typedef {T extends infer U ? U : CustomOptions} InferDefaultType */ /** * @template T - * @typedef {Object} DefaultMinimizerImplementationAndOptions - * @property {undefined | MinimizerImplementation>} [minify] - * @property {ThirdArgument | undefined} [terserOptions] + * @typedef {InferDefaultType extends TerserOptions ? { minify?: MinimizerImplementation> | undefined, terserOptions?: InferDefaultType | undefined } : { minify: MinimizerImplementation>, terserOptions?: InferDefaultType | undefined }} DefinedDefaultMinimizerAndOptions */ +// TODO please add manually `T = TerserOptions`, because typescript is not supported default value for templates yet /** * @template T - * @typedef {T extends MinimizerImplementation ? DefaultMinimizerImplementationAndOptions : { minify: MinimizerImplementation>, terserOptions?: ThirdArgument | undefined}} PickMinimizerImplementationAndOptions - */ - -// TODO please add manually `T extends ... = TerserMinimizer`, because typescript is not supported default value for templates yet -/** - * @template {TerserMinimizer | UglifyJSMinimizer | SwcMinimizer | EsbuildMinimizer | CustomMinimizer} T=TerserMinimizer */ class TerserPlugin { /** - * @param {BasePluginOptions & PickMinimizerImplementationAndOptions} [options] + * @param {BasePluginOptions & DefinedDefaultMinimizerAndOptions} [options] */ constructor(options) { validate(/** @type {Schema} */ (schema), options || {}, { @@ -186,9 +156,12 @@ class TerserPlugin { baseDataPath: "options", }); + // TODO make `minimizer` option instead `minify` and `terserOptions` in the next major release, also rename `terserMinify` to `terserMinimize` const { - minify = terserMinify, - terserOptions = {}, + minify = /** @type {MinimizerImplementation>} */ ( + terserMinify + ), + terserOptions = /** @type {InferDefaultType} */ ({}), test = /\.[cm]?js(\?.*)?$/i, extractComments = true, parallel = true, @@ -196,17 +169,16 @@ class TerserPlugin { exclude, } = options || {}; - /** - * @type {BasePluginOptions & { minify: MinimizerImplementation>, terserOptions: ThirdArgument}} - */ this.options = { test, extractComments, parallel, include, exclude, - minify, - terserOptions, + minimizer: { + implementation: minify, + options: terserOptions, + }, }; } @@ -494,17 +466,14 @@ class TerserPlugin { input = input.toString(); } - /** @type {InternalOptions} */ const options = { name, input, inputSourceMap, - // TODO make `minimizer` option instead `minify` and `terserOptions` in the next major release, also rename `terserMinify` to `terserMinimize` minimizer: { - implementation: this.options.minify, - options: { - ...this.options.terserOptions, - }, + implementation: this.options.minimizer.implementation, + // @ts-ignore https://github.com/Microsoft/TypeScript/issues/10727 + options: { ...this.options.minimizer.options }, }, extractComments: this.options.extractComments, }; @@ -865,10 +834,12 @@ class TerserPlugin { ); const data = serialize({ minimizer: - typeof this.options.minify.getMinimizerVersion !== "undefined" - ? this.options.minify.getMinimizerVersion() || "0.0.0" + typeof this.options.minimizer.implementation.getMinimizerVersion !== + "undefined" + ? this.options.minimizer.implementation.getMinimizerVersion() || + "0.0.0" : "0.0.0", - options: this.options.terserOptions, + options: this.options.minimizer.options, }); hooks.chunkHash.tap(pluginName, (chunk, hash) => { diff --git a/src/minify.js b/src/minify.js index 3ed5131..16b353c 100644 --- a/src/minify.js +++ b/src/minify.js @@ -1,4 +1,5 @@ /** @typedef {import("./index.js").MinimizedResult} MinimizedResult */ +/** @typedef {import("./index.js").CustomOptions} CustomOptions */ /** * @template T diff --git a/src/utils.js b/src/utils.js index 21ea926..9a988da 100644 --- a/src/utils.js +++ b/src/utils.js @@ -2,11 +2,6 @@ /** @typedef {import("terser").FormatOptions} TerserFormatOptions */ /** @typedef {import("terser").MinifyOptions} TerserOptions */ /** @typedef {import("terser").ECMA} TerserECMA */ -// TODO do not forget to add `// @ts-ignore` on optional peer dependencies to avoid problem with `TS2307: Cannot find module 'module' or its corresponding type declarations.` -/** @typedef {import("uglify-js").OutputOptions} UglifyJSOutputOptions */ -/** @typedef {import("uglify-js").MinifyOptions} UglifyJSOptions */ -/** @typedef {import("@swc/core").JsMinifyOptions} SwcOptions */ -/** @typedef {import("esbuild").TransformOptions} EsbuildOptions */ /** @typedef {import("./index.js").ExtractCommentsOptions} ExtractCommentsOptions */ /** @typedef {import("./index.js").ExtractCommentsFunction} ExtractCommentsFunction */ /** @typedef {import("./index.js").ExtractCommentsCondition} ExtractCommentsCondition */ @@ -15,15 +10,7 @@ /** @typedef {import("./index.js").PredefinedOptions} PredefinedOptions */ /** - * @typedef {TerserOptions & { sourceMap: undefined } & ({ output: TerserFormatOptions & { beautify: boolean } } | { format: TerserFormatOptions & { beautify: boolean } })} NormalizedTerserOptions - */ - -/** - * @typedef {UglifyJSOptions & { sourceMap: undefined } & { output: UglifyJSOutputOptions & { beautify: boolean } }} NormalizedUglifyJSOptions - */ - -/** - * @typedef {SwcOptions & { sourceMap: undefined }} NormalizedSwcOptions + * @typedef {{ [key: string]: any }} CustomOptions */ /** @@ -34,7 +21,7 @@ /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & TerserOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @param {ExtractCommentsOptions | undefined} extractComments * @return {Promise} */ @@ -55,7 +42,7 @@ async function terserMinify( }; /** - * @param {NormalizedTerserOptions} terserOptions + * @param {TerserOptions & { sourceMap: undefined } & ({ output: TerserFormatOptions & { beautify: boolean } } | { format: TerserFormatOptions & { beautify: boolean } })} terserOptions * @param {ExtractedComments} extractedComments * @returns {ExtractCommentsFunction} */ @@ -171,8 +158,8 @@ async function terserMinify( }; /** - * @param {TerserOptions} [terserOptions={}] - * @returns {NormalizedTerserOptions} + * @param {PredefinedOptions & TerserOptions} [terserOptions={}] + * @returns {TerserOptions & { sourceMap: undefined } & ({ output: TerserFormatOptions & { beautify: boolean } } | { format: TerserFormatOptions & { beautify: boolean } })} */ const buildTerserOptions = (terserOptions = {}) => { // Need deep copy objects to avoid https://github.com/terser/terser/issues/366 @@ -265,7 +252,7 @@ terserMinify.getMinimizerVersion = () => { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & UglifyJSOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @param {ExtractCommentsOptions | undefined} extractComments * @return {Promise} */ @@ -286,7 +273,7 @@ async function uglifyJsMinify( }; /** - * @param {NormalizedUglifyJSOptions} uglifyJsOptions + * @param {import("uglify-js").MinifyOptions & { sourceMap: undefined } & { output: import("uglify-js").OutputOptions & { beautify: boolean }}} uglifyJsOptions * @param {ExtractedComments} extractedComments * @returns {ExtractCommentsFunction} */ @@ -394,10 +381,15 @@ async function uglifyJsMinify( }; /** - * @param {UglifyJSOptions} [uglifyJsOptions={}] - * @returns {NormalizedUglifyJSOptions} + * @param {PredefinedOptions & import("uglify-js").MinifyOptions} [uglifyJsOptions={}] + * @returns {import("uglify-js").MinifyOptions & { sourceMap: undefined } & { output: import("uglify-js").OutputOptions & { beautify: boolean }}} */ const buildUglifyJsOptions = (uglifyJsOptions = {}) => { + // eslint-disable-next-line no-param-reassign + delete minimizerOptions.ecma; + // eslint-disable-next-line no-param-reassign + delete minimizerOptions.module; + // Need deep copy objects to avoid https://github.com/terser/terser/issues/366 return { ...uglifyJsOptions, @@ -427,11 +419,6 @@ async function uglifyJsMinify( // eslint-disable-next-line global-require, import/no-extraneous-dependencies const { minify } = require("uglify-js"); - // eslint-disable-next-line no-param-reassign - delete minimizerOptions.ecma; - // eslint-disable-next-line no-param-reassign - delete minimizerOptions.module; - // Copy `uglify-js` options const uglifyJsOptions = buildUglifyJsOptions(minimizerOptions); @@ -483,13 +470,13 @@ uglifyJsMinify.getMinimizerVersion = () => { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & SwcOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @return {Promise} */ async function swcMinify(input, sourceMap, minimizerOptions) { /** - * @param {SwcOptions} [swcOptions={}] - * @returns {NormalizedSwcOptions} + * @param {PredefinedOptions & import("@swc/core").JsMinifyOptions} [swcOptions={}] + * @returns {import("@swc/core").JsMinifyOptions & { sourceMap: undefined }} */ const buildSwcOptions = (swcOptions = {}) => { // Need deep copy objects to avoid https://github.com/terser/terser/issues/366 @@ -567,15 +554,26 @@ swcMinify.getMinimizerVersion = () => { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & EsbuildOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @return {Promise} */ async function esbuildMinify(input, sourceMap, minimizerOptions) { /** - * @param {EsbuildOptions} [esbuildOptions={}] - * @returns {EsbuildOptions} + * @param {PredefinedOptions & import("esbuild").TransformOptions} [esbuildOptions={}] + * @returns {import("esbuild").TransformOptions} */ const buildEsbuildOptions = (esbuildOptions = {}) => { + // eslint-disable-next-line no-param-reassign + delete esbuildOptions.ecma; + + if (esbuildOptions.module) { + // eslint-disable-next-line no-param-reassign + esbuildOptions.format = "esm"; + } + + // eslint-disable-next-line no-param-reassign + delete esbuildOptions.module; + // Need deep copy objects to avoid https://github.com/terser/terser/issues/366 return { minify: true, @@ -588,17 +586,6 @@ async function esbuildMinify(input, sourceMap, minimizerOptions) { // eslint-disable-next-line import/no-extraneous-dependencies, global-require const esbuild = require("esbuild"); - // eslint-disable-next-line no-param-reassign - delete minimizerOptions.ecma; - - if (minimizerOptions.module) { - // eslint-disable-next-line no-param-reassign - minimizerOptions.format = "esm"; - } - - // eslint-disable-next-line no-param-reassign - delete minimizerOptions.module; - // Copy `swc` options const esbuildOptions = buildEsbuildOptions(minimizerOptions); diff --git a/types/index.d.ts b/types/index.d.ts index 0cabe42..84ed3a0 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -6,10 +6,7 @@ export type WebpackError = import("webpack").WebpackError; export type Asset = import("webpack").Asset; export type TerserECMA = import("./utils.js").TerserECMA; export type TerserOptions = import("./utils.js").TerserOptions; -export type UglifyJSOptions = import("./utils.js").UglifyJSOptions; -export type SwcOptions = import("./utils.js").SwcOptions; -export type EsbuildOptions = import("./utils.js").EsbuildOptions; -export type CustomOptions = any; +export type CustomOptions = import("./utils.js").CustomOptions; export type JestWorker = import("jest-worker").Worker; export type RawSourceMap = import("source-map").RawSourceMap; export type Rule = RegExp | string; @@ -55,11 +52,11 @@ export type MinimizedResult = { }; export type PredefinedOptions = { module?: boolean | undefined; - ecma?: string | number | undefined; + ecma?: any; }; export type MinimizerImplementationAndOptions = { - implementation: MinimizerImplementation>; - options: PredefinedOptions & ThirdArgument; + implementation: MinimizerImplementation; + options: PredefinedOptions & T; }; export type InternalOptions = { name: string; @@ -83,11 +80,6 @@ export type MinimizeFunctionHelpers = { }; export type MinimizerImplementation = BasicMinimizerImplementation & MinimizeFunctionHelpers; -export type TerserMinimizer = MinimizerImplementation; -export type UglifyJSMinimizer = MinimizerImplementation; -export type SwcMinimizer = MinimizerImplementation; -export type EsbuildMinimizer = MinimizerImplementation; -export type CustomMinimizer = MinimizerImplementation; export type BasePluginOptions = { test?: Rules | undefined; include?: Rules | undefined; @@ -95,24 +87,18 @@ export type BasePluginOptions = { extractComments?: ExtractCommentsOptions | undefined; parallel?: boolean | undefined; }; -export type ThirdArgument = T extends ( - arg1: any, - arg2: any, - arg3: infer U, - ...args: any[] -) => any +export type InferDefaultType = T extends infer U ? U - : never; -export type DefaultMinimizerImplementationAndOptions = { - minify?: undefined | MinimizerImplementation>; - terserOptions?: ThirdArgument | undefined; -}; -export type PickMinimizerImplementationAndOptions = - T extends MinimizerImplementation - ? DefaultMinimizerImplementationAndOptions + : import("./utils").CustomOptions; +export type DefinedDefaultMinimizerAndOptions = + InferDefaultType extends TerserOptions + ? { + minify?: MinimizerImplementation> | undefined; + terserOptions?: InferDefaultType | undefined; + } : { - minify: MinimizerImplementation>; - terserOptions?: ThirdArgument | undefined; + minify: MinimizerImplementation>; + terserOptions?: InferDefaultType | undefined; }; /** @typedef {import("schema-utils/declarations/validate").Schema} Schema */ /** @typedef {import("webpack").Compiler} Compiler */ @@ -121,10 +107,7 @@ export type PickMinimizerImplementationAndOptions = /** @typedef {import("webpack").Asset} Asset */ /** @typedef {import("./utils.js").TerserECMA} TerserECMA */ /** @typedef {import("./utils.js").TerserOptions} TerserOptions */ -/** @typedef {import("./utils.js").UglifyJSOptions} UglifyJSOptions */ -/** @typedef {import("./utils.js").SwcOptions} SwcOptions */ -/** @typedef {import("./utils.js").EsbuildOptions} EsbuildOptions */ -/** @typedef {Object.} CustomOptions */ +/** @typedef {import("./utils.js").CustomOptions} CustomOptions */ /** @typedef {import("jest-worker").Worker} JestWorker */ /** @typedef {import("source-map").RawSourceMap} RawSourceMap */ /** @typedef {RegExp | string} Rule */ @@ -167,13 +150,13 @@ export type PickMinimizerImplementationAndOptions = /** * @typedef {Object} PredefinedOptions * @property {boolean} [module] - * @property {5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | number | string} [ecma] + * @property {any} [ecma] */ /** * @template T * @typedef {Object} MinimizerImplementationAndOptions - * @property {MinimizerImplementation>} implementation - * @property {PredefinedOptions & ThirdArgument} options + * @property {MinimizerImplementation} implementation + * @property {PredefinedOptions & T} options */ /** * @template T @@ -205,21 +188,6 @@ export type PickMinimizerImplementationAndOptions = * @template T * @typedef {BasicMinimizerImplementation & MinimizeFunctionHelpers } MinimizerImplementation */ -/** - * @typedef {MinimizerImplementation} TerserMinimizer - */ -/** - * @typedef {MinimizerImplementation} UglifyJSMinimizer - */ -/** - * @typedef {MinimizerImplementation} SwcMinimizer - */ -/** - * @typedef {MinimizerImplementation} EsbuildMinimizer - */ -/** - * @typedef {MinimizerImplementation} CustomMinimizer - */ /** * @typedef {Object} BasePluginOptions * @property {Rules} [test] @@ -230,29 +198,16 @@ export type PickMinimizerImplementationAndOptions = */ /** * @template T - * @typedef {T extends (arg1: any, arg2: any, arg3: infer U, ...args: any[]) => any ? U: never} ThirdArgument + * @typedef {T extends infer U ? U : CustomOptions} InferDefaultType */ /** * @template T - * @typedef {Object} DefaultMinimizerImplementationAndOptions - * @property {undefined | MinimizerImplementation>} [minify] - * @property {ThirdArgument | undefined} [terserOptions] + * @typedef {InferDefaultType extends TerserOptions ? { minify?: MinimizerImplementation> | undefined, terserOptions?: InferDefaultType | undefined } : { minify: MinimizerImplementation>, terserOptions?: InferDefaultType | undefined }} DefinedDefaultMinimizerAndOptions */ /** * @template T - * @typedef {T extends MinimizerImplementation ? DefaultMinimizerImplementationAndOptions : { minify: MinimizerImplementation>, terserOptions?: ThirdArgument | undefined}} PickMinimizerImplementationAndOptions */ -/** - * @template {TerserMinimizer | UglifyJSMinimizer | SwcMinimizer | EsbuildMinimizer | CustomMinimizer} T=TerserMinimizer - */ -declare class TerserPlugin< - T extends - | TerserMinimizer - | UglifyJSMinimizer - | SwcMinimizer - | EsbuildMinimizer - | CustomMinimizer = TerserMinimizer -> { +declare class TerserPlugin { /** * @private * @param {any} input @@ -288,19 +243,25 @@ declare class TerserPlugin< */ private static getEcmaVersion; /** - * @param {BasePluginOptions & PickMinimizerImplementationAndOptions} [options] + * @param {BasePluginOptions & DefinedDefaultMinimizerAndOptions} [options] */ constructor( options?: - | (BasePluginOptions & PickMinimizerImplementationAndOptions) + | (BasePluginOptions & DefinedDefaultMinimizerAndOptions) | undefined ); - /** - * @type {BasePluginOptions & { minify: MinimizerImplementation>, terserOptions: ThirdArgument}} - */ - options: BasePluginOptions & { - minify: MinimizerImplementation>; - terserOptions: ThirdArgument; + options: { + test: Rules; + extractComments: ExtractCommentsOptions; + parallel: boolean; + include: Rules | undefined; + exclude: Rules | undefined; + minimizer: { + implementation: MinimizerImplementation< + import("terser").MinifyOptions & InferDefaultType + >; + options: InferDefaultType; + }; }; /** * @private diff --git a/types/minify.d.ts b/types/minify.d.ts index b14345e..0213d74 100644 --- a/types/minify.d.ts +++ b/types/minify.d.ts @@ -1,5 +1,7 @@ export type MinimizedResult = import("./index.js").MinimizedResult; +export type CustomOptions = import("./index.js").CustomOptions; /** @typedef {import("./index.js").MinimizedResult} MinimizedResult */ +/** @typedef {import("./index.js").CustomOptions} CustomOptions */ /** * @template T * @param {import("./index.js").InternalOptions} options diff --git a/types/utils.d.ts b/types/utils.d.ts index fd5ad6e..db5e3cc 100644 --- a/types/utils.d.ts +++ b/types/utils.d.ts @@ -2,14 +2,6 @@ export type RawSourceMap = import("source-map").RawSourceMap; export type TerserFormatOptions = import("terser").FormatOptions; export type TerserOptions = import("terser").MinifyOptions; export type TerserECMA = import("terser").ECMA; -// @ts-ignore -export type UglifyJSOutputOptions = import("uglify-js").OutputOptions; -// @ts-ignore -export type UglifyJSOptions = import("uglify-js").MinifyOptions; -// @ts-ignore -export type SwcOptions = import("@swc/core").JsMinifyOptions; -// @ts-ignore -export type EsbuildOptions = import("esbuild").TransformOptions; export type ExtractCommentsOptions = import("./index.js").ExtractCommentsOptions; export type ExtractCommentsFunction = @@ -19,39 +11,14 @@ export type ExtractCommentsCondition = export type Input = import("./index.js").Input; export type MinimizedResult = import("./index.js").MinimizedResult; export type PredefinedOptions = import("./index.js").PredefinedOptions; -export type NormalizedTerserOptions = TerserOptions & { - sourceMap: undefined; -} & ( - | { - output: TerserFormatOptions & { - beautify: boolean; - }; - } - | { - format: TerserFormatOptions & { - beautify: boolean; - }; - } - ); -export type NormalizedUglifyJSOptions = UglifyJSOptions & { - sourceMap: undefined; -} & { - output: UglifyJSOutputOptions & { - beautify: boolean; - }; -}; -export type NormalizedSwcOptions = SwcOptions & { - sourceMap: undefined; +export type CustomOptions = { + [key: string]: any; }; export type ExtractedComments = Array; /** @typedef {import("source-map").RawSourceMap} RawSourceMap */ /** @typedef {import("terser").FormatOptions} TerserFormatOptions */ /** @typedef {import("terser").MinifyOptions} TerserOptions */ /** @typedef {import("terser").ECMA} TerserECMA */ -/** @typedef {import("uglify-js").OutputOptions} UglifyJSOutputOptions */ -/** @typedef {import("uglify-js").MinifyOptions} UglifyJSOptions */ -/** @typedef {import("@swc/core").JsMinifyOptions} SwcOptions */ -/** @typedef {import("esbuild").TransformOptions} EsbuildOptions */ /** @typedef {import("./index.js").ExtractCommentsOptions} ExtractCommentsOptions */ /** @typedef {import("./index.js").ExtractCommentsFunction} ExtractCommentsFunction */ /** @typedef {import("./index.js").ExtractCommentsCondition} ExtractCommentsCondition */ @@ -59,13 +26,7 @@ export type ExtractedComments = Array; /** @typedef {import("./index.js").MinimizedResult} MinimizedResult */ /** @typedef {import("./index.js").PredefinedOptions} PredefinedOptions */ /** - * @typedef {TerserOptions & { sourceMap: undefined } & ({ output: TerserFormatOptions & { beautify: boolean } } | { format: TerserFormatOptions & { beautify: boolean } })} NormalizedTerserOptions - */ -/** - * @typedef {UglifyJSOptions & { sourceMap: undefined } & { output: UglifyJSOutputOptions & { beautify: boolean } }} NormalizedUglifyJSOptions - */ -/** - * @typedef {SwcOptions & { sourceMap: undefined }} NormalizedSwcOptions + * @typedef {{ [key: string]: any }} CustomOptions */ /** * @typedef {Array} ExtractedComments @@ -73,14 +34,14 @@ export type ExtractedComments = Array; /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & TerserOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @param {ExtractCommentsOptions | undefined} extractComments * @return {Promise} */ export function terserMinify( input: Input, sourceMap: RawSourceMap | undefined, - minimizerOptions: PredefinedOptions & TerserOptions, + minimizerOptions: PredefinedOptions & CustomOptions, extractComments: ExtractCommentsOptions | undefined ): Promise; export namespace terserMinify { @@ -92,14 +53,14 @@ export namespace terserMinify { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & UglifyJSOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @param {ExtractCommentsOptions | undefined} extractComments * @return {Promise} */ export function uglifyJsMinify( input: Input, sourceMap: RawSourceMap | undefined, - minimizerOptions: PredefinedOptions & UglifyJSOptions, + minimizerOptions: PredefinedOptions & CustomOptions, extractComments: ExtractCommentsOptions | undefined ): Promise; export namespace uglifyJsMinify { @@ -111,13 +72,13 @@ export namespace uglifyJsMinify { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & SwcOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @return {Promise} */ export function swcMinify( input: Input, sourceMap: RawSourceMap | undefined, - minimizerOptions: PredefinedOptions & SwcOptions + minimizerOptions: PredefinedOptions & CustomOptions ): Promise; export namespace swcMinify { /** @@ -128,13 +89,13 @@ export namespace swcMinify { /** * @param {Input} input * @param {RawSourceMap | undefined} sourceMap - * @param {PredefinedOptions & EsbuildOptions} minimizerOptions + * @param {PredefinedOptions & CustomOptions} minimizerOptions * @return {Promise} */ export function esbuildMinify( input: Input, sourceMap: RawSourceMap | undefined, - minimizerOptions: PredefinedOptions & EsbuildOptions + minimizerOptions: PredefinedOptions & CustomOptions ): Promise; export namespace esbuildMinify { /**