summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/dependencies/processExportInfo.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
committerlittleblack111 <littleblack11111@gmail.com>2024-08-30 17:21:18 +0800
commitefbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch)
tree2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/webpack/lib/dependencies/processExportInfo.js
parent43acceb75957c880a5ba5a31aae221394a36d5f6 (diff)
node fixes, updates
Diffstat (limited to 'node_modules/webpack/lib/dependencies/processExportInfo.js')
-rw-r--r--node_modules/webpack/lib/dependencies/processExportInfo.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/dependencies/processExportInfo.js b/node_modules/webpack/lib/dependencies/processExportInfo.js
new file mode 100644
index 00000000..9bafcae6
--- /dev/null
+++ b/node_modules/webpack/lib/dependencies/processExportInfo.js
@@ -0,0 +1,67 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { UsageState } = require("../ExportsInfo");
+
+/** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
+/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
+
+/** @typedef {string[][]} ReferencedExports */
+
+/**
+ * @param {RuntimeSpec} runtime the runtime
+ * @param {ReferencedExports} referencedExports list of referenced exports, will be added to
+ * @param {string[]} prefix export prefix
+ * @param {ExportInfo=} exportInfo the export info
+ * @param {boolean} defaultPointsToSelf when true, using default will reference itself
+ * @param {Set<ExportInfo>} alreadyVisited already visited export info (to handle circular reexports)
+ */
+const processExportInfo = (
+ runtime,
+ referencedExports,
+ prefix,
+ exportInfo,
+ defaultPointsToSelf = false,
+ alreadyVisited = new Set()
+) => {
+ if (!exportInfo) {
+ referencedExports.push(prefix);
+ return;
+ }
+ const used = exportInfo.getUsed(runtime);
+ if (used === UsageState.Unused) return;
+ if (alreadyVisited.has(exportInfo)) {
+ referencedExports.push(prefix);
+ return;
+ }
+ alreadyVisited.add(exportInfo);
+ if (
+ used !== UsageState.OnlyPropertiesUsed ||
+ !exportInfo.exportsInfo ||
+ exportInfo.exportsInfo.otherExportsInfo.getUsed(runtime) !==
+ UsageState.Unused
+ ) {
+ alreadyVisited.delete(exportInfo);
+ referencedExports.push(prefix);
+ return;
+ }
+ const exportsInfo = exportInfo.exportsInfo;
+ for (const exportInfo of exportsInfo.orderedExports) {
+ processExportInfo(
+ runtime,
+ referencedExports,
+ defaultPointsToSelf && exportInfo.name === "default"
+ ? prefix
+ : prefix.concat(exportInfo.name),
+ exportInfo,
+ false,
+ alreadyVisited
+ );
+ }
+ alreadyVisited.delete(exportInfo);
+};
+module.exports = processExportInfo;