UNPKG

9.82 kBTypeScriptView Raw
1export = ImageMinimizerPlugin;
2/** @typedef {import("schema-utils/declarations/validate").Schema} Schema */
3/** @typedef {import("webpack").WebpackPluginInstance} WebpackPluginInstance */
4/** @typedef {import("webpack").Compiler} Compiler */
5/** @typedef {import("webpack").Compilation} Compilation */
6/** @typedef {import("webpack").WebpackError} WebpackError */
7/** @typedef {import("webpack").Asset} Asset */
8/** @typedef {import("webpack").AssetInfo} AssetInfo */
9/** @typedef {import("webpack").sources.Source} Source */
10/** @typedef {import("./utils.js").imageminMinify} ImageminMinifyFunction */
11/** @typedef {import("./utils.js").squooshMinify} SquooshMinifyFunction */
12/** @typedef {RegExp | string} Rule */
13/** @typedef {Rule[] | Rule} Rules */
14/**
15 * @callback FilterFn
16 * @param {Buffer} source `Buffer` of source file.
17 * @param {string} sourcePath Absolute path to source.
18 * @returns {boolean}
19 */
20/**
21 * @typedef {Object} ImageminOptions
22 * @property {Array<string | [string, Record<string, any>?] | import("imagemin").Plugin>} plugins
23 */
24/**
25 * @typedef {Object.<string, any>} SquooshOptions
26 */
27/**
28 * @typedef {Object} WorkerResult
29 * @property {string} filename
30 * @property {Buffer} data
31 * @property {Array<Error>} warnings
32 * @property {Array<Error>} errors
33 * @property {AssetInfo} info
34 */
35/**
36 * @template T
37 * @typedef {Object} Task
38 * @property {string} name
39 * @property {AssetInfo} info
40 * @property {Source} inputSource
41 * @property {WorkerResult & { source?: Source } | undefined} output
42 * @property {ReturnType<ReturnType<Compilation["getCache"]>["getItemCache"]>} cacheItem
43 * @property {Transformer<T> | Transformer<T>[]} transformer
44 */
45/**
46 * @typedef {{ [key: string]: any }} CustomOptions
47 */
48/**
49 * @template T
50 * @typedef {T extends infer U ? U : CustomOptions} InferDefaultType
51 */
52/**
53 * @template T
54 * @typedef {InferDefaultType<T> | undefined} BasicTransformerOptions
55 */
56/**
57 * @template T
58 * @callback BasicTransformerImplementation
59 * @param {WorkerResult} original
60 * @param {BasicTransformerOptions<T>} [options]
61 * @returns {Promise<WorkerResult>}
62 */
63/**
64 * @typedef {Object} BasicTransformerHelpers
65 * @property {() => void} [setup]
66 * @property {() => void} [teardown]
67 */
68/**
69 * @template T
70 * @typedef {BasicTransformerImplementation<T> & BasicTransformerHelpers} TransformerFunction
71 */
72/**
73 * @typedef {Object} PathData
74 * @property {string} [filename]
75 */
76/**
77 * @callback FilenameFn
78 * @param {PathData} pathData
79 * @param {AssetInfo} [assetInfo]
80 * @returns {string}
81 */
82/**
83 * @template T
84 * @typedef {Object} Transformer
85 * @property {TransformerFunction<T>} implementation
86 * @property {BasicTransformerOptions<T>} [options]
87 * @property {FilterFn} [filter]
88 * @property {string | FilenameFn} [filename]
89 * @property {string} [preset]
90 * @property {"import" | "asset"} [type]
91 */
92/**
93 * @template T
94 * @typedef {Omit<Transformer<T>, "preset" | "type">} Minimizer
95 */
96/**
97 * @template T
98 * @typedef {Transformer<T>} Generator
99 */
100/**
101 * @template T
102 * @typedef {Object} InternalWorkerOptions
103 * @property {string} filename
104 * @property {Buffer} input
105 * @property {Transformer<T> | Transformer<T>[]} transformer
106 * @property {string} [severityError]
107 * @property {Function} [generateFilename]
108 */
109/**
110 * @template T
111 * @typedef {import("./loader").LoaderOptions<T>} InternalLoaderOptions
112 */
113/**
114 * @template T, G
115 * @typedef {Object} PluginOptions
116 * @property {Rules} [test] Test to match files against.
117 * @property {Rules} [include] Files to include.
118 * @property {Rules} [exclude] Files to exclude.
119 * @property {T extends any[] ? { [P in keyof T]: Minimizer<T[P]> } : Minimizer<T> | Minimizer<T>[]} [minimizer] Allows to setup the minimizer.
120 * @property {G extends any[] ? { [P in keyof G]: Generator<G[P]> } : Generator<G>[]} [generator] Allows to set the generator.
121 * @property {boolean} [loader] Automatically adding `imagemin-loader`.
122 * @property {number} [concurrency] Maximum number of concurrency optimization processes in one time.
123 * @property {string} [severityError] Allows to choose how errors are displayed.
124 * @property {boolean} [deleteOriginalAssets] Allows to remove original assets. Useful for converting to a `webp` and remove original assets.
125 */
126/**
127 * @template T, [G=T]
128 * @extends {WebpackPluginInstance}
129 */
130declare class ImageMinimizerPlugin<T, G = T> {
131 /**
132 * @param {PluginOptions<T, G>} [options={}] Plugin options.
133 */
134 constructor(options?: PluginOptions<T, G> | undefined);
135 /**
136 * @private
137 */
138 private options;
139 /**
140 * @private
141 * @param {Compiler} compiler
142 * @param {Compilation} compilation
143 * @param {Record<string, Source>} assets
144 * @returns {Promise<void>}
145 */
146 private optimize;
147 /**
148 * @private
149 */
150 private setupAll;
151 /**
152 * @private
153 */
154 private teardownAll;
155 /**
156 * @param {import("webpack").Compiler} compiler
157 */
158 apply(compiler: import("webpack").Compiler): void;
159}
160declare namespace ImageMinimizerPlugin {
161 export {
162 loader,
163 imageminNormalizeConfig,
164 imageminMinify,
165 imageminGenerate,
166 squooshMinify,
167 squooshGenerate,
168 sharpMinify,
169 sharpGenerate,
170 Schema,
171 WebpackPluginInstance,
172 Compiler,
173 Compilation,
174 WebpackError,
175 Asset,
176 AssetInfo,
177 Source,
178 ImageminMinifyFunction,
179 SquooshMinifyFunction,
180 Rule,
181 Rules,
182 FilterFn,
183 ImageminOptions,
184 SquooshOptions,
185 WorkerResult,
186 Task,
187 CustomOptions,
188 InferDefaultType,
189 BasicTransformerOptions,
190 BasicTransformerImplementation,
191 BasicTransformerHelpers,
192 TransformerFunction,
193 PathData,
194 FilenameFn,
195 Transformer,
196 Minimizer,
197 Generator,
198 InternalWorkerOptions,
199 InternalLoaderOptions,
200 PluginOptions,
201 };
202}
203type PluginOptions<T, G> = {
204 /**
205 * Test to match files against.
206 */
207 test?: Rules | undefined;
208 /**
209 * Files to include.
210 */
211 include?: Rules | undefined;
212 /**
213 * Files to exclude.
214 */
215 exclude?: Rules | undefined;
216 /**
217 * Allows to setup the minimizer.
218 */
219 minimizer?:
220 | (T extends any[]
221 ? T extends infer T_1
222 ? { [P in keyof T_1]: Minimizer<T[P]> }
223 : never
224 : Minimizer<T> | Minimizer<T>[])
225 | undefined;
226 /**
227 * Allows to set the generator.
228 */
229 generator?:
230 | (G extends any[]
231 ? G extends infer T_2
232 ? { [P_1 in keyof T_2]: Generator<G[P_1]> }
233 : never
234 : Generator<G>[])
235 | undefined;
236 /**
237 * Automatically adding `imagemin-loader`.
238 */
239 loader?: boolean | undefined;
240 /**
241 * Maximum number of concurrency optimization processes in one time.
242 */
243 concurrency?: number | undefined;
244 /**
245 * Allows to choose how errors are displayed.
246 */
247 severityError?: string | undefined;
248 /**
249 * Allows to remove original assets. Useful for converting to a `webp` and remove original assets.
250 */
251 deleteOriginalAssets?: boolean | undefined;
252};
253declare var loader: string;
254import { imageminNormalizeConfig } from "./utils.js";
255import { imageminMinify } from "./utils.js";
256import { imageminGenerate } from "./utils.js";
257import { squooshMinify } from "./utils.js";
258import { squooshGenerate } from "./utils.js";
259import { sharpMinify } from "./utils.js";
260import { sharpGenerate } from "./utils.js";
261type Schema = import("schema-utils/declarations/validate").Schema;
262type WebpackPluginInstance = import("webpack").WebpackPluginInstance;
263type Compiler = import("webpack").Compiler;
264type Compilation = import("webpack").Compilation;
265type WebpackError = import("webpack").WebpackError;
266type Asset = import("webpack").Asset;
267type AssetInfo = import("webpack").AssetInfo;
268type Source = import("webpack").sources.Source;
269type ImageminMinifyFunction = typeof imageminMinify;
270type SquooshMinifyFunction = typeof squooshMinify;
271type Rule = RegExp | string;
272type Rules = Rule[] | Rule;
273type FilterFn = (source: Buffer, sourcePath: string) => boolean;
274type ImageminOptions = {
275 plugins: Array<
276 string | [string, Record<string, any>?] | import("imagemin").Plugin
277 >;
278};
279type SquooshOptions = {
280 [x: string]: any;
281};
282type WorkerResult = {
283 filename: string;
284 data: Buffer;
285 warnings: Array<Error>;
286 errors: Array<Error>;
287 info: AssetInfo;
288};
289type Task<T> = {
290 name: string;
291 info: AssetInfo;
292 inputSource: Source;
293 output:
294 | (WorkerResult & {
295 source?: Source;
296 })
297 | undefined;
298 cacheItem: ReturnType<ReturnType<Compilation["getCache"]>["getItemCache"]>;
299 transformer: Transformer<T> | Transformer<T>[];
300};
301type CustomOptions = {
302 [key: string]: any;
303};
304type InferDefaultType<T> = T extends infer U ? U : CustomOptions;
305type BasicTransformerOptions<T> = InferDefaultType<T> | undefined;
306type BasicTransformerImplementation<T> = (
307 original: WorkerResult,
308 options?: BasicTransformerOptions<T>
309) => Promise<WorkerResult>;
310type BasicTransformerHelpers = {
311 setup?: (() => void) | undefined;
312 teardown?: (() => void) | undefined;
313};
314type TransformerFunction<T> = BasicTransformerImplementation<T> &
315 BasicTransformerHelpers;
316type PathData = {
317 filename?: string | undefined;
318};
319type FilenameFn = (
320 pathData: PathData,
321 assetInfo?: import("webpack").AssetInfo | undefined
322) => string;
323type Transformer<T> = {
324 implementation: TransformerFunction<T>;
325 options?: BasicTransformerOptions<T>;
326 filter?: FilterFn | undefined;
327 filename?: string | FilenameFn | undefined;
328 preset?: string | undefined;
329 type?: "import" | "asset" | undefined;
330};
331type Minimizer<T> = Omit<Transformer<T>, "preset" | "type">;
332type Generator<T> = Transformer<T>;
333type InternalWorkerOptions<T> = {
334 filename: string;
335 input: Buffer;
336 transformer: Transformer<T> | Transformer<T>[];
337 severityError?: string | undefined;
338 generateFilename?: Function | undefined;
339};
340type InternalLoaderOptions<T> = import("./loader").LoaderOptions<T>;