diff --git a/src/index.js b/src/index.js index 5b1c3ac..4faa6db 100644 --- a/src/index.js +++ b/src/index.js @@ -68,21 +68,24 @@ import schema from "./options.json"; * @property {Rules} [test] * @property {Rules} [include] * @property {Rules} [exclude] - * @property {string | AlgorithmFunction} [algorithm] - * @property {CompressionOptions} [compressionOptions] * @property {number} [threshold] * @property {number} [minRatio] * @property {DeleteOriginalAssets} [deleteOriginalAssets] * @property {Filename} [filename] */ +/** + * @typedef {import("zlib").ZlibOptions} ZlibOptions + */ + /** * @template T - * @typedef {BasePluginOptions & { compressionOptions: CompressionOptions, threshold: number, minRatio: number, deleteOriginalAssets: DeleteOriginalAssets, filename: Filename }} InternalPluginOptions + * @typedef {T extends ZlibOptions ? { algorithm?: string | AlgorithmFunction | undefined, compressionOptions?: CompressionOptions | undefined } : { algorithm: string | AlgorithmFunction, compressionOptions?: CompressionOptions | undefined }} DefinedDefaultAlgorithmAndOptions */ /** - * @typedef {import("zlib").ZlibOptions} ZlibOptions + * @template T + * @typedef {BasePluginOptions & { algorithm: string | AlgorithmFunction, compressionOptions: CompressionOptions, threshold: number, minRatio: number, deleteOriginalAssets: DeleteOriginalAssets, filename: Filename }} InternalPluginOptions */ /** @@ -91,10 +94,10 @@ import schema from "./options.json"; */ class CompressionPlugin { /** - * @param {BasePluginOptions} [options] + * @param {BasePluginOptions & DefinedDefaultAlgorithmAndOptions} [options] */ - constructor(options = {}) { - validate(/** @type {Schema} */ (schema), options, { + constructor(options) { + validate(/** @type {Schema} */ (schema), options || {}, { name: "Compression Plugin", baseDataPath: "options", }); @@ -109,7 +112,7 @@ class CompressionPlugin { threshold = 0, minRatio = 0.8, deleteOriginalAssets = false, - } = options; + } = options || {}; /** * @private diff --git a/types/index.d.ts b/types/index.d.ts index 686ece8..59197db 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -53,21 +53,29 @@ export type BasePluginOptions = { test?: Rules | undefined; include?: Rules | undefined; exclude?: Rules | undefined; - algorithm?: string | AlgorithmFunction | undefined; - compressionOptions?: InferDefaultType | undefined; threshold?: number | undefined; minRatio?: number | undefined; deleteOriginalAssets?: DeleteOriginalAssets | undefined; filename?: Filename | undefined; }; +export type ZlibOptions = import("zlib").ZlibOptions; +export type DefinedDefaultAlgorithmAndOptions = T extends ZlibOptions + ? { + algorithm?: string | AlgorithmFunction | undefined; + compressionOptions?: CompressionOptions | undefined; + } + : { + algorithm: string | AlgorithmFunction; + compressionOptions?: CompressionOptions | undefined; + }; export type InternalPluginOptions = BasePluginOptions & { + algorithm: string | AlgorithmFunction; compressionOptions: CompressionOptions; threshold: number; minRatio: number; deleteOriginalAssets: DeleteOriginalAssets; filename: Filename; }; -export type ZlibOptions = import("zlib").ZlibOptions; /** @typedef {import("schema-utils/declarations/validate").Schema} Schema */ /** @typedef {import("webpack").Compiler} Compiler */ /** @typedef {import("webpack").WebpackPluginInstance} WebpackPluginInstance */ @@ -114,19 +122,21 @@ export type ZlibOptions = import("zlib").ZlibOptions; * @property {Rules} [test] * @property {Rules} [include] * @property {Rules} [exclude] - * @property {string | AlgorithmFunction} [algorithm] - * @property {CompressionOptions} [compressionOptions] * @property {number} [threshold] * @property {number} [minRatio] * @property {DeleteOriginalAssets} [deleteOriginalAssets] * @property {Filename} [filename] */ +/** + * @typedef {import("zlib").ZlibOptions} ZlibOptions + */ /** * @template T - * @typedef {BasePluginOptions & { compressionOptions: CompressionOptions, threshold: number, minRatio: number, deleteOriginalAssets: DeleteOriginalAssets, filename: Filename }} InternalPluginOptions + * @typedef {T extends ZlibOptions ? { algorithm?: string | AlgorithmFunction | undefined, compressionOptions?: CompressionOptions | undefined } : { algorithm: string | AlgorithmFunction, compressionOptions?: CompressionOptions | undefined }} DefinedDefaultAlgorithmAndOptions */ /** - * @typedef {import("zlib").ZlibOptions} ZlibOptions + * @template T + * @typedef {BasePluginOptions & { algorithm: string | AlgorithmFunction, compressionOptions: CompressionOptions, threshold: number, minRatio: number, deleteOriginalAssets: DeleteOriginalAssets, filename: Filename }} InternalPluginOptions */ /** * @template [T=ZlibOptions] @@ -136,9 +146,13 @@ declare class CompressionPlugin implements WebpackPluginInstance { /** - * @param {BasePluginOptions} [options] + * @param {BasePluginOptions & DefinedDefaultAlgorithmAndOptions} [options] */ - constructor(options?: BasePluginOptions | undefined); + constructor( + options?: + | (BasePluginOptions & DefinedDefaultAlgorithmAndOptions) + | undefined + ); /** * @private * @type {InternalPluginOptions}