summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
commitaa773172311dcada759dfbaac485f4bc6e00bc21 (patch)
treeca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js
parentc5a5384e846f242e901e859fe600d695d8990a9a (diff)
added babel
Diffstat (limited to 'node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js')
-rw-r--r--node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js358
1 files changed, 358 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js b/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js
new file mode 100644
index 00000000..35d6757d
--- /dev/null
+++ b/node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js
@@ -0,0 +1,358 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = normalizeModuleAndLoadMetadata;
+exports.hasExports = hasExports;
+exports.isSideEffectImport = isSideEffectImport;
+exports.validateImportInteropOption = validateImportInteropOption;
+var _path = require("path");
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
+function hasExports(metadata) {
+ return metadata.hasExports;
+}
+function isSideEffectImport(source) {
+ return source.imports.size === 0 && source.importsNamespace.size === 0 && source.reexports.size === 0 && source.reexportNamespace.size === 0 && !source.reexportAll;
+}
+function validateImportInteropOption(importInterop) {
+ if (typeof importInterop !== "function" && importInterop !== "none" && importInterop !== "babel" && importInterop !== "node") {
+ throw new Error(`.importInterop must be one of "none", "babel", "node", or a function returning one of those values (received ${importInterop}).`);
+ }
+ return importInterop;
+}
+function resolveImportInterop(importInterop, source, filename) {
+ if (typeof importInterop === "function") {
+ return validateImportInteropOption(importInterop(source, filename));
+ }
+ return importInterop;
+}
+function normalizeModuleAndLoadMetadata(programPath, exportName, {
+ importInterop,
+ initializeReexports = false,
+ getWrapperPayload,
+ esNamespaceOnly = false,
+ filename
+}) {
+ if (!exportName) {
+ exportName = programPath.scope.generateUidIdentifier("exports").name;
+ }
+ const stringSpecifiers = new Set();
+ nameAnonymousExports(programPath);
+ const {
+ local,
+ sources,
+ hasExports
+ } = getModuleMetadata(programPath, {
+ initializeReexports,
+ getWrapperPayload
+ }, stringSpecifiers);
+ removeImportExportDeclarations(programPath);
+ for (const [source, metadata] of sources) {
+ const {
+ importsNamespace,
+ imports
+ } = metadata;
+ if (importsNamespace.size > 0 && imports.size === 0) {
+ const [nameOfnamespace] = importsNamespace;
+ metadata.name = nameOfnamespace;
+ }
+ const resolvedInterop = resolveImportInterop(importInterop, source, filename);
+ if (resolvedInterop === "none") {
+ metadata.interop = "none";
+ } else if (resolvedInterop === "node" && metadata.interop === "namespace") {
+ metadata.interop = "node-namespace";
+ } else if (resolvedInterop === "node" && metadata.interop === "default") {
+ metadata.interop = "node-default";
+ } else if (esNamespaceOnly && metadata.interop === "namespace") {
+ metadata.interop = "default";
+ }
+ }
+ return {
+ exportName,
+ exportNameListName: null,
+ hasExports,
+ local,
+ source: sources,
+ stringSpecifiers
+ };
+}
+function getExportSpecifierName(path, stringSpecifiers) {
+ if (path.isIdentifier()) {
+ return path.node.name;
+ } else if (path.isStringLiteral()) {
+ const stringValue = path.node.value;
+ if (!(0, _helperValidatorIdentifier.isIdentifierName)(stringValue)) {
+ stringSpecifiers.add(stringValue);
+ }
+ return stringValue;
+ } else {
+ throw new Error(`Expected export specifier to be either Identifier or StringLiteral, got ${path.node.type}`);
+ }
+}
+function assertExportSpecifier(path) {
+ if (path.isExportSpecifier()) {
+ return;
+ } else if (path.isExportNamespaceSpecifier()) {
+ throw path.buildCodeFrameError("Export namespace should be first transformed by `@babel/plugin-transform-export-namespace-from`.");
+ } else {
+ throw path.buildCodeFrameError("Unexpected export specifier type");
+ }
+}
+function getModuleMetadata(programPath, {
+ getWrapperPayload,
+ initializeReexports
+}, stringSpecifiers) {
+ const localData = getLocalExportMetadata(programPath, initializeReexports, stringSpecifiers);
+ const importNodes = new Map();
+ const sourceData = new Map();
+ const getData = (sourceNode, node) => {
+ const source = sourceNode.value;
+ let data = sourceData.get(source);
+ if (!data) {
+ data = {
+ name: programPath.scope.generateUidIdentifier((0, _path.basename)(source, (0, _path.extname)(source))).name,
+ interop: "none",
+ loc: null,
+ imports: new Map(),
+ importsNamespace: new Set(),
+ reexports: new Map(),
+ reexportNamespace: new Set(),
+ reexportAll: null,
+ wrap: null,
+ get lazy() {
+ return this.wrap === "lazy";
+ },
+ referenced: false
+ };
+ sourceData.set(source, data);
+ importNodes.set(source, [node]);
+ } else {
+ importNodes.get(source).push(node);
+ }
+ return data;
+ };
+ let hasExports = false;
+ programPath.get("body").forEach(child => {
+ if (child.isImportDeclaration()) {
+ const data = getData(child.node.source, child.node);
+ if (!data.loc) data.loc = child.node.loc;
+ child.get("specifiers").forEach(spec => {
+ if (spec.isImportDefaultSpecifier()) {
+ const localName = spec.get("local").node.name;
+ data.imports.set(localName, "default");
+ const reexport = localData.get(localName);
+ if (reexport) {
+ localData.delete(localName);
+ reexport.names.forEach(name => {
+ data.reexports.set(name, "default");
+ });
+ data.referenced = true;
+ }
+ } else if (spec.isImportNamespaceSpecifier()) {
+ const localName = spec.get("local").node.name;
+ data.importsNamespace.add(localName);
+ const reexport = localData.get(localName);
+ if (reexport) {
+ localData.delete(localName);
+ reexport.names.forEach(name => {
+ data.reexportNamespace.add(name);
+ });
+ data.referenced = true;
+ }
+ } else if (spec.isImportSpecifier()) {
+ const importName = getExportSpecifierName(spec.get("imported"), stringSpecifiers);
+ const localName = spec.get("local").node.name;
+ data.imports.set(localName, importName);
+ const reexport = localData.get(localName);
+ if (reexport) {
+ localData.delete(localName);
+ reexport.names.forEach(name => {
+ data.reexports.set(name, importName);
+ });
+ data.referenced = true;
+ }
+ }
+ });
+ } else if (child.isExportAllDeclaration()) {
+ hasExports = true;
+ const data = getData(child.node.source, child.node);
+ if (!data.loc) data.loc = child.node.loc;
+ data.reexportAll = {
+ loc: child.node.loc
+ };
+ data.referenced = true;
+ } else if (child.isExportNamedDeclaration() && child.node.source) {
+ hasExports = true;
+ const data = getData(child.node.source, child.node);
+ if (!data.loc) data.loc = child.node.loc;
+ child.get("specifiers").forEach(spec => {
+ assertExportSpecifier(spec);
+ const importName = getExportSpecifierName(spec.get("local"), stringSpecifiers);
+ const exportName = getExportSpecifierName(spec.get("exported"), stringSpecifiers);
+ data.reexports.set(exportName, importName);
+ data.referenced = true;
+ if (exportName === "__esModule") {
+ throw spec.get("exported").buildCodeFrameError('Illegal export "__esModule".');
+ }
+ });
+ } else if (child.isExportNamedDeclaration() || child.isExportDefaultDeclaration()) {
+ hasExports = true;
+ }
+ });
+ for (const metadata of sourceData.values()) {
+ let needsDefault = false;
+ let needsNamed = false;
+ if (metadata.importsNamespace.size > 0) {
+ needsDefault = true;
+ needsNamed = true;
+ }
+ if (metadata.reexportAll) {
+ needsNamed = true;
+ }
+ for (const importName of metadata.imports.values()) {
+ if (importName === "default") needsDefault = true;else needsNamed = true;
+ }
+ for (const importName of metadata.reexports.values()) {
+ if (importName === "default") needsDefault = true;else needsNamed = true;
+ }
+ if (needsDefault && needsNamed) {
+ metadata.interop = "namespace";
+ } else if (needsDefault) {
+ metadata.interop = "default";
+ }
+ }
+ if (getWrapperPayload) {
+ for (const [source, metadata] of sourceData) {
+ metadata.wrap = getWrapperPayload(source, metadata, importNodes.get(source));
+ }
+ }
+ return {
+ hasExports,
+ local: localData,
+ sources: sourceData
+ };
+}
+function getLocalExportMetadata(programPath, initializeReexports, stringSpecifiers) {
+ const bindingKindLookup = new Map();
+ programPath.get("body").forEach(child => {
+ let kind;
+ if (child.isImportDeclaration()) {
+ kind = "import";
+ } else {
+ if (child.isExportDefaultDeclaration()) {
+ child = child.get("declaration");
+ }
+ if (child.isExportNamedDeclaration()) {
+ if (child.node.declaration) {
+ child = child.get("declaration");
+ } else if (initializeReexports && child.node.source && child.get("source").isStringLiteral()) {
+ child.get("specifiers").forEach(spec => {
+ assertExportSpecifier(spec);
+ bindingKindLookup.set(spec.get("local").node.name, "block");
+ });
+ return;
+ }
+ }
+ if (child.isFunctionDeclaration()) {
+ kind = "hoisted";
+ } else if (child.isClassDeclaration()) {
+ kind = "block";
+ } else if (child.isVariableDeclaration({
+ kind: "var"
+ })) {
+ kind = "var";
+ } else if (child.isVariableDeclaration()) {
+ kind = "block";
+ } else {
+ return;
+ }
+ }
+ Object.keys(child.getOuterBindingIdentifiers()).forEach(name => {
+ bindingKindLookup.set(name, kind);
+ });
+ });
+ const localMetadata = new Map();
+ const getLocalMetadata = idPath => {
+ const localName = idPath.node.name;
+ let metadata = localMetadata.get(localName);
+ if (!metadata) {
+ const kind = bindingKindLookup.get(localName);
+ if (kind === undefined) {
+ throw idPath.buildCodeFrameError(`Exporting local "${localName}", which is not declared.`);
+ }
+ metadata = {
+ names: [],
+ kind
+ };
+ localMetadata.set(localName, metadata);
+ }
+ return metadata;
+ };
+ programPath.get("body").forEach(child => {
+ if (child.isExportNamedDeclaration() && (initializeReexports || !child.node.source)) {
+ if (child.node.declaration) {
+ const declaration = child.get("declaration");
+ const ids = declaration.getOuterBindingIdentifierPaths();
+ Object.keys(ids).forEach(name => {
+ if (name === "__esModule") {
+ throw declaration.buildCodeFrameError('Illegal export "__esModule".');
+ }
+ getLocalMetadata(ids[name]).names.push(name);
+ });
+ } else {
+ child.get("specifiers").forEach(spec => {
+ const local = spec.get("local");
+ const exported = spec.get("exported");
+ const localMetadata = getLocalMetadata(local);
+ const exportName = getExportSpecifierName(exported, stringSpecifiers);
+ if (exportName === "__esModule") {
+ throw exported.buildCodeFrameError('Illegal export "__esModule".');
+ }
+ localMetadata.names.push(exportName);
+ });
+ }
+ } else if (child.isExportDefaultDeclaration()) {
+ const declaration = child.get("declaration");
+ if (declaration.isFunctionDeclaration() || declaration.isClassDeclaration()) {
+ getLocalMetadata(declaration.get("id")).names.push("default");
+ } else {
+ throw declaration.buildCodeFrameError("Unexpected default expression export.");
+ }
+ }
+ });
+ return localMetadata;
+}
+function nameAnonymousExports(programPath) {
+ programPath.get("body").forEach(child => {
+ if (!child.isExportDefaultDeclaration()) return;
+ (0, _helperSplitExportDeclaration.default)(child);
+ });
+}
+function removeImportExportDeclarations(programPath) {
+ programPath.get("body").forEach(child => {
+ if (child.isImportDeclaration()) {
+ child.remove();
+ } else if (child.isExportNamedDeclaration()) {
+ if (child.node.declaration) {
+ child.node.declaration._blockHoist = child.node._blockHoist;
+ child.replaceWith(child.node.declaration);
+ } else {
+ child.remove();
+ }
+ } else if (child.isExportDefaultDeclaration()) {
+ const declaration = child.get("declaration");
+ if (declaration.isFunctionDeclaration() || declaration.isClassDeclaration()) {
+ declaration._blockHoist = child.node._blockHoist;
+ child.replaceWith(declaration);
+ } else {
+ throw declaration.buildCodeFrameError("Unexpected default expression export.");
+ }
+ } else if (child.isExportAllDeclaration()) {
+ child.remove();
+ }
+ });
+}
+
+//# sourceMappingURL=normalize-and-load-metadata.js.map