From 9bce51f651aad297ef9eb6df832bfdaf1de05d84 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 14:27:54 +0800
Subject: [PATCH] 青岛推送
---
node_modules/webpack/lib/config/normalization.js | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 112 insertions(+), 3 deletions(-)
diff --git a/node_modules/webpack/lib/config/normalization.js b/node_modules/webpack/lib/config/normalization.js
index eb2894f..fd8886e 100644
--- a/node_modules/webpack/lib/config/normalization.js
+++ b/node_modules/webpack/lib/config/normalization.js
@@ -24,8 +24,15 @@
/** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
/** @typedef {import("../WebpackError")} WebpackError */
+/**
+ * Defines the webpack options interception type used by this module.
+ * @typedef {object} WebpackOptionsInterception
+ * @property {WebpackOptionsNormalized["devtool"]=} devtool
+ */
+
const handledDeprecatedNoEmitOnErrors = util.deprecate(
/**
+ * Handles the callback logic for this hook.
* @param {boolean} noEmitOnErrors no emit on errors
* @param {boolean | undefined} emitOnErrors emit on errors
* @returns {boolean} emit on errors
@@ -43,6 +50,7 @@
);
/**
+ * Returns result value.
* @template T
* @template R
* @param {T | undefined} value value or not
@@ -53,12 +61,14 @@
value === undefined ? fn(/** @type {T} */ ({})) : fn(value);
/**
+ * Returns result value.
* @template T
- * @param {T|undefined} value value or not
+ * @param {T | undefined} value value or not
* @returns {T} result value
*/
const cloneObject = (value) => /** @type {T} */ ({ ...value });
/**
+ * Optional nested config.
* @template T
* @template R
* @param {T | undefined} value value or not
@@ -69,6 +79,7 @@
value === undefined ? undefined : fn(value);
/**
+ * Returns cloned value.
* @template T
* @template R
* @param {T[] | undefined} value array or not
@@ -78,6 +89,7 @@
const nestedArray = (value, fn) => (Array.isArray(value) ? fn(value) : fn([]));
/**
+ * Optional nested array.
* @template T
* @template R
* @param {T[] | undefined} value array or not
@@ -88,9 +100,10 @@
Array.isArray(value) ? fn(value) : undefined;
/**
+ * Keyed nested config.
* @template T
* @template R
- * @param {Record<string, T>|undefined} value value or not
+ * @param {Record<string, T> | undefined} value value or not
* @param {(value: T) => R} fn nested handler
* @param {Record<string, (value: T) => R>=} customKeys custom nested handler for some keys
* @returns {Record<string, R>} result value
@@ -121,6 +134,7 @@
};
/**
+ * Gets normalized webpack options.
* @param {WebpackOptions} config input config
* @returns {WebpackOptionsNormalized} normalized options
*/
@@ -359,7 +373,7 @@
importFunctionName: output.importFunctionName,
importMetaName: output.importMetaName,
scriptType: output.scriptType,
- // TODO webpack6 remove `libraryTarget`/`auxiliaryComment`/`amdContainer`/etc in favor of the `library` option
+ // TODO webpack 6 remove `libraryTarget`/`auxiliaryComment`/`amdContainer`/etc in favor of the `library` option
library: libraryBase && {
type:
output.libraryTarget !== undefined
@@ -411,6 +425,7 @@
return result;
}),
parallelism: config.parallelism,
+ validate: config.validate,
performance: optionalNestedConfig(config.performance, (performance) => {
if (performance === false) return false;
return {
@@ -494,6 +509,7 @@
});
/**
+ * Gets normalized entry static.
* @param {EntryStatic} entry static entry options
* @returns {EntryStaticNormalized} normalized static entry options
*/
@@ -556,6 +572,7 @@
};
/**
+ * Gets normalized optimization runtime chunk.
* @param {OptimizationRuntimeChunk=} runtimeChunk runtimeChunk option
* @returns {OptimizationRuntimeChunkNormalized=} normalized runtimeChunk option
*/
@@ -582,4 +599,96 @@
};
};
+/**
+ * Apply webpack options interception.
+ * @param {WebpackOptionsNormalized} options options to be intercepted
+ * @returns {{ options: WebpackOptionsNormalized, interception?: WebpackOptionsInterception }} options and interception
+ */
+const applyWebpackOptionsInterception = (options) => {
+ // Return origin options when backCompat is disabled
+ if (options.experiments.futureDefaults) {
+ return {
+ options
+ };
+ }
+
+ // TODO webpack 6 - remove compatibility logic and move `devtools` fully into `devtool` with multi-type support
+ let _devtool = options.devtool;
+ /** @type {WebpackOptionsNormalized["devtool"]} */
+ let cached;
+
+ const devtoolBackCompat = () => {
+ if (Array.isArray(_devtool)) {
+ if (cached) return cached;
+ // Prefer `all`, then `javascript`, then `css`
+ const match = ["all", "javascript", "css"]
+ .map((type) =>
+ /** @type {Extract<WebpackOptionsNormalized["devtool"], EXPECTED_ANY[]>} */ (
+ _devtool
+ ).find((item) => item.type === type)
+ )
+ .find(Boolean);
+
+ // If `devtool: []` is specified, return `false` here
+ return (cached = match ? match.use : false);
+ }
+ return _devtool;
+ };
+
+ /** @type {ProxyHandler<WebpackOptionsNormalized>} */
+ const handler = Object.create(null);
+ handler.get = (target, prop, receiver) => {
+ if (prop === "devtool") {
+ return devtoolBackCompat();
+ }
+ return Reflect.get(target, prop, receiver);
+ };
+ handler.set = (target, prop, value, receiver) => {
+ if (prop === "devtool") {
+ _devtool = value;
+ cached = undefined;
+ return true;
+ }
+ return Reflect.set(target, prop, value, receiver);
+ };
+ handler.deleteProperty = (target, prop) => {
+ if (prop === "devtool") {
+ _devtool = undefined;
+ cached = undefined;
+ return true;
+ }
+ return Reflect.deleteProperty(target, prop);
+ };
+ handler.defineProperty = (target, prop, descriptor) => {
+ if (prop === "devtool") {
+ _devtool = descriptor.value;
+ cached = undefined;
+ return true;
+ }
+ return Reflect.defineProperty(target, prop, descriptor);
+ };
+ handler.getOwnPropertyDescriptor = (target, prop) => {
+ if (prop === "devtool") {
+ return {
+ configurable: true,
+ enumerable: true,
+ value: devtoolBackCompat(),
+ writable: true
+ };
+ }
+ return Reflect.getOwnPropertyDescriptor(target, prop);
+ };
+
+ return {
+ options: new Proxy(options, handler),
+ interception: {
+ get devtool() {
+ return _devtool;
+ }
+ }
+ };
+};
+
+module.exports.applyWebpackOptionsInterception =
+ applyWebpackOptionsInterception;
module.exports.getNormalizedWebpackOptions = getNormalizedWebpackOptions;
--
Gitblit v1.9.3