Skip to content

Commit eeaa5e1

Browse files
fix: better support worker threads
1 parent b07feeb commit eeaa5e1

File tree

4 files changed

+84
-10
lines changed

4 files changed

+84
-10
lines changed

src/index.js

+29-4
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ const { minify: minifyWorker } = require("./minify");
7676
* @typedef {T extends infer U ? U : CustomOptions} InferDefaultType
7777
*/
7878

79+
/**
80+
* @template T
81+
* @typedef {T extends any[] ? { [P in keyof T]?: InferDefaultType<T[P]> } : InferDefaultType<T>} MinimizerOptions
82+
*/
83+
7984
/**
8085
* @template T
8186
* @callback BasicMinimizerImplementation
@@ -86,13 +91,13 @@ const { minify: minifyWorker } = require("./minify");
8691
*/
8792

8893
/**
89-
* @template T
90-
* @typedef {T extends any[] ? { [P in keyof T]: BasicMinimizerImplementation<T[P]>; } : BasicMinimizerImplementation<T>} MinimizerImplementation
94+
* @typedef {object} MinimizeFunctionHelpers
95+
* @property {() => boolean | undefined} [supportsWorkerThreads]
9196
*/
9297

9398
/**
9499
* @template T
95-
* @typedef {T extends any[] ? { [P in keyof T]?: InferDefaultType<T[P]> } : InferDefaultType<T>} MinimizerOptions
100+
* @typedef {T extends any[] ? { [P in keyof T]: BasicMinimizerImplementation<T[P]> & MinimizeFunctionHelpers; } : BasicMinimizerImplementation<T> & MinimizeFunctionHelpers} MinimizerImplementation
96101
*/
97102

98103
/**
@@ -399,6 +404,18 @@ class CssMinimizerPlugin {
399404
: Math.min(parallel || 0, cpus.length - 1);
400405
}
401406

407+
/**
408+
* @private
409+
* @template T
410+
* @param {BasicMinimizerImplementation<T> & MinimizeFunctionHelpers} implementation
411+
* @returns {boolean}
412+
*/
413+
static isSupportsWorkerThreads(implementation) {
414+
return typeof implementation.supportsWorkerThreads !== "undefined"
415+
? implementation.supportsWorkerThreads() !== false
416+
: true;
417+
}
418+
402419
/**
403420
* @private
404421
* @param {Compiler} compiler
@@ -480,7 +497,15 @@ class CssMinimizerPlugin {
480497
initializedWorker = /** @type {MinimizerWorker<T>} */ (
481498
new Worker(require.resolve("./minify"), {
482499
numWorkers: numberOfWorkers,
483-
enableWorkerThreads: true,
500+
enableWorkerThreads: Array.isArray(
501+
this.options.minimizer.implementation,
502+
)
503+
? this.options.minimizer.implementation.every((item) =>
504+
CssMinimizerPlugin.isSupportsWorkerThreads(item),
505+
)
506+
: CssMinimizerPlugin.isSupportsWorkerThreads(
507+
this.options.minimizer.implementation,
508+
),
484509
})
485510
);
486511

src/utils.js

+14
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ async function cssnanoMinify(
186186
};
187187
}
188188

189+
cssnanoMinify.supportsWorkerThreads = () => true;
190+
189191
/* istanbul ignore next */
190192
/**
191193
* @param {Input} input
@@ -213,6 +215,8 @@ async function cssoMinify(input, sourceMap, minimizerOptions) {
213215
};
214216
}
215217

218+
cssoMinify.supportsWorkerThreads = () => true;
219+
216220
/* istanbul ignore next */
217221
/**
218222
* @param {Input} input
@@ -256,6 +260,8 @@ async function cleanCssMinify(input, sourceMap, minimizerOptions) {
256260
};
257261
}
258262

263+
cleanCssMinify.supportsWorkerThreads = () => true;
264+
259265
/* istanbul ignore next */
260266
/**
261267
* @param {Input} input
@@ -347,6 +353,8 @@ async function esbuildMinify(input, sourceMap, minimizerOptions) {
347353
};
348354
}
349355

356+
esbuildMinify.supportsWorkerThreads = () => false;
357+
350358
// TODO remove in the next major release
351359
/* istanbul ignore next */
352360
/**
@@ -392,6 +400,8 @@ async function parcelCssMinify(input, sourceMap, minimizerOptions) {
392400
};
393401
}
394402

403+
parcelCssMinify.supportsWorkerThreads = () => false;
404+
395405
/* istanbul ignore next */
396406
/**
397407
* @param {Input} input
@@ -436,6 +446,8 @@ async function lightningCssMinify(input, sourceMap, minimizerOptions) {
436446
};
437447
}
438448

449+
lightningCssMinify.supportsWorkerThreads = () => false;
450+
439451
/* istanbul ignore next */
440452
/**
441453
* @param {Input} input
@@ -490,6 +502,8 @@ async function swcMinify(input, sourceMap, minimizerOptions) {
490502
};
491503
}
492504

505+
swcMinify.supportsWorkerThreads = () => false;
506+
493507
/**
494508
* @template T
495509
* @param fn {(function(): any) | undefined}

types/index.d.ts

+20-6
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ declare class CssMinimizerPlugin<T = CssNanoOptionsExtended> {
3434
* @returns {number}
3535
*/
3636
private static getAvailableNumberOfCores;
37+
/**
38+
* @private
39+
* @template T
40+
* @param {BasicMinimizerImplementation<T> & MinimizeFunctionHelpers} implementation
41+
* @returns {boolean}
42+
*/
43+
private static isSupportsWorkerThreads;
3744
/**
3845
* @param {BasePluginOptions & DefinedDefaultMinimizerAndOptions<T>} [options]
3946
*/
@@ -91,9 +98,10 @@ declare namespace CssMinimizerPlugin {
9198
Input,
9299
CustomOptions,
93100
InferDefaultType,
101+
MinimizerOptions,
94102
BasicMinimizerImplementation,
103+
MinimizeFunctionHelpers,
95104
MinimizerImplementation,
96-
MinimizerOptions,
97105
InternalOptions,
98106
InternalResult,
99107
Parallel,
@@ -164,17 +172,23 @@ type CustomOptions = {
164172
[key: string]: any;
165173
};
166174
type InferDefaultType<T> = T extends infer U ? U : CustomOptions;
175+
type MinimizerOptions<T> = T extends any[]
176+
? { [P in keyof T]?: InferDefaultType<T[P]> }
177+
: InferDefaultType<T>;
167178
type BasicMinimizerImplementation<T> = (
168179
input: Input,
169180
sourceMap: RawSourceMap | undefined,
170181
minifyOptions: InferDefaultType<T>,
171182
) => Promise<MinimizedResult>;
183+
type MinimizeFunctionHelpers = {
184+
supportsWorkerThreads?: (() => boolean | undefined) | undefined;
185+
};
172186
type MinimizerImplementation<T> = T extends any[]
173-
? { [P in keyof T]: BasicMinimizerImplementation<T[P]> }
174-
: BasicMinimizerImplementation<T>;
175-
type MinimizerOptions<T> = T extends any[]
176-
? { [P in keyof T]?: InferDefaultType<T[P]> }
177-
: InferDefaultType<T>;
187+
? {
188+
[P in keyof T]: BasicMinimizerImplementation<T[P]> &
189+
MinimizeFunctionHelpers;
190+
}
191+
: BasicMinimizerImplementation<T> & MinimizeFunctionHelpers;
178192
type InternalOptions<T> = {
179193
name: string;
180194
input: string;

types/utils.d.ts

+21
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ export function cssnanoMinify(
3434
sourceMap: RawSourceMap | undefined,
3535
minimizerOptions?: CustomOptions,
3636
): Promise<MinimizedResult>;
37+
export namespace cssnanoMinify {
38+
function supportsWorkerThreads(): boolean;
39+
}
3740
/**
3841
* @param {Input} input
3942
* @param {RawSourceMap | undefined} sourceMap
@@ -45,6 +48,9 @@ export function cssoMinify(
4548
sourceMap: RawSourceMap | undefined,
4649
minimizerOptions: CustomOptions,
4750
): Promise<MinimizedResult>;
51+
export namespace cssoMinify {
52+
function supportsWorkerThreads(): boolean;
53+
}
4854
/**
4955
* @param {Input} input
5056
* @param {RawSourceMap | undefined} sourceMap
@@ -56,6 +62,9 @@ export function cleanCssMinify(
5662
sourceMap: RawSourceMap | undefined,
5763
minimizerOptions: CustomOptions,
5864
): Promise<MinimizedResult>;
65+
export namespace cleanCssMinify {
66+
function supportsWorkerThreads(): boolean;
67+
}
5968
/**
6069
* @param {Input} input
6170
* @param {RawSourceMap | undefined} sourceMap
@@ -67,6 +76,9 @@ export function esbuildMinify(
6776
sourceMap: RawSourceMap | undefined,
6877
minimizerOptions: CustomOptions,
6978
): Promise<MinimizedResult>;
79+
export namespace esbuildMinify {
80+
function supportsWorkerThreads(): boolean;
81+
}
7082
/**
7183
* @param {Input} input
7284
* @param {RawSourceMap | undefined} sourceMap
@@ -78,6 +90,9 @@ export function parcelCssMinify(
7890
sourceMap: RawSourceMap | undefined,
7991
minimizerOptions: CustomOptions,
8092
): Promise<MinimizedResult>;
93+
export namespace parcelCssMinify {
94+
function supportsWorkerThreads(): boolean;
95+
}
8196
/**
8297
* @param {Input} input
8398
* @param {RawSourceMap | undefined} sourceMap
@@ -89,6 +104,9 @@ export function lightningCssMinify(
89104
sourceMap: RawSourceMap | undefined,
90105
minimizerOptions: CustomOptions,
91106
): Promise<MinimizedResult>;
107+
export namespace lightningCssMinify {
108+
function supportsWorkerThreads(): boolean;
109+
}
92110
/**
93111
* @param {Input} input
94112
* @param {RawSourceMap | undefined} sourceMap
@@ -100,3 +118,6 @@ export function swcMinify(
100118
sourceMap: RawSourceMap | undefined,
101119
minimizerOptions: CustomOptions,
102120
): Promise<MinimizedResult>;
121+
export namespace swcMinify {
122+
function supportsWorkerThreads(): boolean;
123+
}

0 commit comments

Comments
 (0)