image-minimizer-webpack-plugin
Version:
Webpack loader and plugin to optimize (compress) images using imagemin
333 lines (332 loc) • 9.58 kB
TypeScript
export = ImageMinimizerPlugin;
/** @typedef {import("schema-utils/declarations/validate").Schema} Schema */
/** @typedef {import("webpack").WebpackPluginInstance} WebpackPluginInstance */
/** @typedef {import("webpack").Compiler} Compiler */
/** @typedef {import("webpack").Compilation} Compilation */
/** @typedef {import("webpack").WebpackError} WebpackError */
/** @typedef {import("webpack").Asset} Asset */
/** @typedef {import("webpack").AssetInfo} AssetInfo */
/** @typedef {import("webpack").sources.Source} Source */
/** @typedef {import("./utils.js").imageminMinify} ImageminMinifyFunction */
/** @typedef {import("./utils.js").squooshMinify} SquooshMinifyFunction */
/** @typedef {RegExp | string} Rule */
/** @typedef {Rule[] | Rule} Rules */
/**
* @callback FilterFn
* @param {Buffer} source `Buffer` of source file.
* @param {string} sourcePath Absolute path to source.
* @returns {boolean}
*/
/**
* @typedef {Object} ImageminOptions
* @property {Array<string | [string, Record<string, any>?] | import("imagemin").Plugin>} plugins
*/
/**
* @typedef {Object.<string, any>} SquooshOptions
*/
/**
* @typedef {Object} WorkerResult
* @property {string} filename
* @property {Buffer} data
* @property {Array<Error>} warnings
* @property {Array<Error>} errors
* @property {AssetInfo} info
*/
/**
* @template T
* @typedef {Object} Task
* @property {string} name
* @property {AssetInfo} info
* @property {Source} inputSource
* @property {WorkerResult & { source?: Source } | undefined} output
* @property {ReturnType<ReturnType<Compilation["getCache"]>["getItemCache"]>} cacheItem
* @property {Transformer<T> | Transformer<T>[]} transformer
*/
/**
* @typedef {{ [key: string]: any }} CustomOptions
*/
/**
* @template T
* @typedef {T extends infer U ? U : CustomOptions} InferDefaultType
*/
/**
* @template T
* @typedef {InferDefaultType<T> | undefined} BasicTransformerOptions
*/
/**
* @template T
* @callback BasicTransformerImplementation
* @param {WorkerResult} original
* @param {BasicTransformerOptions<T>} [options]
* @returns {Promise<WorkerResult>}
*/
/**
* @typedef {object} BasicTransformerHelpers
* @property {() => {}} [setup]
* @property {() => {}} [teardown]
*/
/**
* @template T
* @typedef {BasicTransformerImplementation<T> & BasicTransformerHelpers} TransformerFunction
*/
/**
* @typedef {Object} PathData
* @property {string} [filename]
*/
/**
* @callback FilenameFn
* @param {PathData} pathData
* @param {AssetInfo} [assetInfo]
* @returns {string}
*/
/**
* @template T
* @typedef {Object} Transformer
* @property {TransformerFunction<T>} implementation
* @property {BasicTransformerOptions<T>} [options]
* @property {FilterFn} [filter]
* @property {string | FilenameFn} [filename]
* @property {string} [preset]
* @property {"import" | "asset"} [type]
*/
/**
* @template T
* @typedef {Omit<Transformer<T>, "preset" | "type">} Minimizer
*/
/**
* @template T
* @typedef {Transformer<T>} Generator
*/
/**
* @template T
* @typedef {Object} InternalWorkerOptions
* @property {string} filename
* @property {Buffer} input
* @property {Transformer<T> | Transformer<T>[]} transformer
* @property {string} [severityError]
* @property {Function} [generateFilename]
*/
/**
* @template T
* @typedef {import("./loader").LoaderOptions<T>} InternalLoaderOptions
*/
/**
* @template T, G
* @typedef {Object} PluginOptions
* @property {Rules} [test] Test to match files against.
* @property {Rules} [include] Files to include.
* @property {Rules} [exclude] Files to exclude.
* @property {T extends any[] ? { [P in keyof T]: Minimizer<T[P]> } : Minimizer<T> | Minimizer<T>[]} [minimizer] Allows to setup the minimizer.
* @property {G extends any[] ? { [P in keyof G]: Generator<G[P]> } : Generator<G>[]} [generator] Allows to set the generator.
* @property {boolean} [loader] Automatically adding `imagemin-loader`.
* @property {number} [concurrency] Maximum number of concurrency optimization processes in one time.
* @property {string} [severityError] Allows to choose how errors are displayed.
* @property {boolean} [deleteOriginalAssets] Allows to remove original assets. Useful for converting to a `webp` and remove original assets.
*/
/**
* @template T, [G=T]
* @extends {WebpackPluginInstance}
*/
declare class ImageMinimizerPlugin<T, G = T> {
/**
* @param {PluginOptions<T, G>} [options={}] Plugin options.
*/
constructor(options?: PluginOptions<T, G> | undefined);
/**
* @private
*/
private options;
/**
* @private
* @param {Compiler} compiler
* @param {Compilation} compilation
* @param {Record<string, Source>} assets
* @returns {Promise<void>}
*/
private optimize;
/**
* @private
*/
private setupAll;
/**
* @private
*/
private teardownAll;
/**
* @param {import("webpack").Compiler} compiler
*/
apply(compiler: import("webpack").Compiler): void;
}
declare namespace ImageMinimizerPlugin {
export {
loader,
imageminNormalizeConfig,
imageminMinify,
imageminGenerate,
squooshMinify,
squooshGenerate,
Schema,
WebpackPluginInstance,
Compiler,
Compilation,
WebpackError,
Asset,
AssetInfo,
Source,
ImageminMinifyFunction,
SquooshMinifyFunction,
Rule,
Rules,
FilterFn,
ImageminOptions,
SquooshOptions,
WorkerResult,
Task,
CustomOptions,
InferDefaultType,
BasicTransformerOptions,
BasicTransformerImplementation,
BasicTransformerHelpers,
TransformerFunction,
PathData,
FilenameFn,
Transformer,
Minimizer,
Generator,
InternalWorkerOptions,
InternalLoaderOptions,
PluginOptions,
};
}
type PluginOptions<T, G> = {
/**
* Test to match files against.
*/
test?: Rules | undefined;
/**
* Files to include.
*/
include?: Rules | undefined;
/**
* Files to exclude.
*/
exclude?: Rules | undefined;
/**
* Allows to setup the minimizer.
*/
minimizer?:
| (T extends any[]
? { [P in keyof T]: Minimizer<T[P]> }
: Minimizer<T> | Minimizer<T>[])
| undefined;
/**
* Allows to set the generator.
*/
generator?:
| (G extends any[]
? { [P_1 in keyof G]: Generator<G[P_1]> }
: Generator<G>[])
| undefined;
/**
* Automatically adding `imagemin-loader`.
*/
loader?: boolean | undefined;
/**
* Maximum number of concurrency optimization processes in one time.
*/
concurrency?: number | undefined;
/**
* Allows to choose how errors are displayed.
*/
severityError?: string | undefined;
/**
* Allows to remove original assets. Useful for converting to a `webp` and remove original assets.
*/
deleteOriginalAssets?: boolean | undefined;
};
declare var loader: string;
import { imageminNormalizeConfig } from "./utils.js";
import { imageminMinify } from "./utils.js";
import { imageminGenerate } from "./utils.js";
import { squooshMinify } from "./utils.js";
import { squooshGenerate } from "./utils.js";
type Schema = import("schema-utils/declarations/validate").Schema;
type WebpackPluginInstance = import("webpack").WebpackPluginInstance;
type Compiler = import("webpack").Compiler;
type Compilation = import("webpack").Compilation;
type WebpackError = import("webpack").WebpackError;
type Asset = import("webpack").Asset;
type AssetInfo = import("webpack").AssetInfo;
type Source = import("webpack").sources.Source;
type ImageminMinifyFunction = typeof imageminMinify;
type SquooshMinifyFunction = typeof squooshMinify;
type Rule = RegExp | string;
type Rules = Rule[] | Rule;
type FilterFn = (source: Buffer, sourcePath: string) => boolean;
type ImageminOptions = {
plugins: Array<
string | [string, Record<string, any>?] | import("imagemin").Plugin
>;
};
type SquooshOptions = {
[x: string]: any;
};
type WorkerResult = {
filename: string;
data: Buffer;
warnings: Array<Error>;
errors: Array<Error>;
info: AssetInfo;
};
type Task<T> = {
name: string;
info: AssetInfo;
inputSource: Source;
output:
| (WorkerResult & {
source?: Source;
})
| undefined;
cacheItem: ReturnType<ReturnType<Compilation["getCache"]>["getItemCache"]>;
transformer: Transformer<T> | Transformer<T>[];
};
type CustomOptions = {
[key: string]: any;
};
type InferDefaultType<T> = T extends infer U ? U : CustomOptions;
type BasicTransformerOptions<T> = InferDefaultType<T> | undefined;
type BasicTransformerImplementation<T> = (
original: WorkerResult,
options?: BasicTransformerOptions<T>
) => Promise<WorkerResult>;
type BasicTransformerHelpers = {
setup?: (() => {}) | undefined;
teardown?: (() => {}) | undefined;
};
type TransformerFunction<T> = BasicTransformerImplementation<T> &
BasicTransformerHelpers;
type PathData = {
filename?: string | undefined;
};
type FilenameFn = (
pathData: PathData,
assetInfo?: import("webpack").AssetInfo | undefined
) => string;
type Transformer<T> = {
implementation: TransformerFunction<T>;
options?: BasicTransformerOptions<T>;
filter?: FilterFn | undefined;
filename?: string | FilenameFn | undefined;
preset?: string | undefined;
type?: "import" | "asset" | undefined;
};
type Minimizer<T> = Omit<Transformer<T>, "preset" | "type">;
type Generator<T> = Transformer<T>;
type InternalWorkerOptions<T> = {
filename: string;
input: Buffer;
transformer: Transformer<T> | Transformer<T>[];
severityError?: string | undefined;
generateFilename?: Function | undefined;
};
type InternalLoaderOptions<T> = import("./loader").LoaderOptions<T>;