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/dependencies/HarmonyExportExpressionDependency.js | 49 ++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/node_modules/webpack/lib/dependencies/HarmonyExportExpressionDependency.js b/node_modules/webpack/lib/dependencies/HarmonyExportExpressionDependency.js
index 531b139..8bd3d0c 100644
--- a/node_modules/webpack/lib/dependencies/HarmonyExportExpressionDependency.js
+++ b/node_modules/webpack/lib/dependencies/HarmonyExportExpressionDependency.js
@@ -6,9 +6,10 @@
"use strict";
const ConcatenationScope = require("../ConcatenationScope");
+const InitFragment = require("../InitFragment");
const RuntimeGlobals = require("../RuntimeGlobals");
const makeSerializable = require("../util/makeSerializable");
-const propertyAccess = require("../util/propertyAccess");
+const { propertyAccess } = require("../util/property");
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
const NullDependency = require("./NullDependency");
@@ -21,9 +22,11 @@
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./HarmonyExportInitFragment").ExportMap} ExportMap */
class HarmonyExportExpressionDependency extends NullDependency {
/**
+ * Creates an instance of HarmonyExportExpressionDependency.
* @param {Range} range range
* @param {Range} rangeStatement range statement
* @param {string} prefix prefix
@@ -35,6 +38,7 @@
this.rangeStatement = rangeStatement;
this.prefix = prefix;
this.declarationId = declarationId;
+ this.isAnonymousDefault = false;
}
get type() {
@@ -56,6 +60,7 @@
}
/**
+ * Gets module evaluation side effects state.
* @param {ModuleGraph} moduleGraph the module graph
* @returns {ConnectionState} how this dependency connects the module to referencing modules
*/
@@ -65,6 +70,7 @@
}
/**
+ * Serializes this instance into the provided serializer context.
* @param {ObjectSerializerContext} context context
*/
serialize(context) {
@@ -73,10 +79,12 @@
write(this.rangeStatement);
write(this.prefix);
write(this.declarationId);
+ write(this.isAnonymousDefault);
super.serialize(context);
}
/**
+ * Restores this instance from the provided deserializer context.
* @param {ObjectDeserializerContext} context context
*/
deserialize(context) {
@@ -85,6 +93,7 @@
this.rangeStatement = read();
this.prefix = read();
this.declarationId = read();
+ this.isAnonymousDefault = read();
super.deserialize(context);
}
}
@@ -98,6 +107,7 @@
NullDependency.Template
) {
/**
+ * Applies the plugin by registering its hooks on the compiler.
* @param {Dependency} dependency the dependency for which the template should be applied
* @param {ReplaceSource} source the current replace source which can be modified
* @param {DependencyTemplateContext} templateContext the context object
@@ -120,6 +130,7 @@
const { declarationId } = dep;
const exportsName = module.exportsArgument;
if (declarationId) {
+ /** @type {string} */
let name;
if (typeof declarationId === "string") {
name = declarationId;
@@ -139,6 +150,7 @@
.getExportsInfo(module)
.getUsedName("default", runtime);
if (used) {
+ /** @type {ExportMap} */
const map = new Map();
map.set(used, `/* export default binding */ ${name}`);
initFragments.push(new HarmonyExportInitFragment(exportsName, map));
@@ -150,10 +162,22 @@
dep.range[0] - 1,
`/* harmony default export */ ${dep.prefix}`
);
+
+ if (typeof declarationId !== "string" && dep.isAnonymousDefault) {
+ // Fix .name for anonymous default export function declarations
+ // see test/test262-cases/test/language/module-code/instn-named-bndng-dflt-fun-anon.js cspell:disable-line
+ initFragments.push(
+ new InitFragment(
+ `Object.defineProperty(${name}, "name", { value: "default", configurable: true });\n`,
+ InitFragment.STAGE_HARMONY_EXPORTS,
+ 2
+ )
+ );
+ }
} else {
/** @type {string} */
let content;
- const name = ConcatenationScope.DEFAULT_EXPORT;
+ let name = ConcatenationScope.DEFAULT_EXPORT;
if (runtimeTemplate.supportsConst()) {
content = `/* harmony default export */ const ${name} = `;
if (concatenationScope) {
@@ -164,6 +188,7 @@
.getUsedName("default", runtime);
if (used) {
runtimeRequirements.add(RuntimeGlobals.exports);
+ /** @type {ExportMap} */
const map = new Map();
map.set(used, name);
initFragments.push(new HarmonyExportInitFragment(exportsName, map));
@@ -181,9 +206,13 @@
if (used) {
runtimeRequirements.add(RuntimeGlobals.exports);
// This is a little bit incorrect as TDZ is not correct, but we can't use const.
- content = `/* harmony default export */ ${exportsName}${propertyAccess(
+ // No local `__WEBPACK_DEFAULT_EXPORT__` binding is created in this path,
+ // so the anonymous-default `.name` fix-up below must reference the actual
+ // assignment target instead. See issue #20793.
+ name = `${exportsName}${propertyAccess(
typeof used === "string" ? [used] : used
- )} = `;
+ )}`;
+ content = `/* harmony default export */ ${name} = `;
} else {
content = `/* unused harmony default export */ var ${name} = `;
}
@@ -195,7 +224,17 @@
dep.range[0] - 1,
`${content}(${dep.prefix}`
);
- source.replace(dep.range[1], dep.rangeStatement[1] - 0.5, ");");
+ if (dep.isAnonymousDefault) {
+ // Fix .name for anonymous default export expressions
+ // see test/test262-cases/test/language/module-code/eval-export-dflt-cls-anon.js cspell:disable-line
+ source.replace(
+ dep.range[1],
+ dep.rangeStatement[1] - 0.5,
+ `);\n(Object.getOwnPropertyDescriptor(${name}, "name") || {}).writable || Object.defineProperty(${name}, "name", { value: "default", configurable: true });`
+ );
+ } else {
+ source.replace(dep.range[1], dep.rangeStatement[1] - 0.5, ");");
+ }
return;
}
--
Gitblit v1.9.3