diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
| commit | efbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch) | |
| tree | 2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/@babel/helpers/scripts/generate-helpers.js | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/@babel/helpers/scripts/generate-helpers.js')
| -rw-r--r-- | node_modules/@babel/helpers/scripts/generate-helpers.js | 108 |
1 files changed, 93 insertions, 15 deletions
diff --git a/node_modules/@babel/helpers/scripts/generate-helpers.js b/node_modules/@babel/helpers/scripts/generate-helpers.js index 45182c95..9eeb95a2 100644 --- a/node_modules/@babel/helpers/scripts/generate-helpers.js +++ b/node_modules/@babel/helpers/scripts/generate-helpers.js @@ -3,13 +3,17 @@ import fs from "fs"; import { join } from "path"; import { URL, fileURLToPath } from "url"; import { minify } from "terser"; -import { transformSync } from "@babel/core"; -import presetTypescript from "@babel/preset-typescript"; -import { gzipSync } from "zlib"; +import { babel, presetTypescript } from "$repo-utils/babel-top-level"; import { IS_BABEL_8 } from "$repo-utils"; +import { gzipSync } from "zlib"; + +import { + getHelperMetadata, + stringifyMetadata, +} from "./build-helper-metadata.js"; const HELPERS_FOLDER = new URL("../src/helpers", import.meta.url); -const IGNORED_FILES = new Set(["package.json"]); +const IGNORED_FILES = new Set(["package.json", "tsconfig.json"]); export default async function generateHelpers() { let output = `/* @@ -18,17 +22,37 @@ export default async function generateHelpers() { */ import template from "@babel/template"; +import type * as t from "@babel/types"; + +interface Helper { + minVersion: string; + ast: () => t.Program; + metadata: HelperMetadata; +} + +export interface HelperMetadata { + globals: string[]; + locals: { [name: string]: string[] }; + dependencies: { [name: string]: string[] }; + exportBindingAssignments: string[]; + exportName: string; +} -function helper(minVersion: string, source: string) { +function helper(minVersion: string, source: string, metadata: HelperMetadata): Helper { return Object.freeze({ minVersion, ast: () => template.program.ast(source, { preserveComments: true }), + metadata, }) } -export default Object.freeze({ +export { helpers as default }; +const helpers: Record<string, Helper> = { + __proto__: null, `; + let babel7extraOutput = ""; + for (const file of (await fs.promises.readdir(HELPERS_FOLDER)).sort()) { if (IGNORED_FILES.has(file)) continue; if (file.startsWith(".")) continue; // ignore e.g. vim swap files @@ -52,14 +76,11 @@ export default Object.freeze({ } const { minVersion } = minVersionMatch.groups; - if (IS_BABEL_8() && code.includes("@onlyBabel7")) { - continue; - } - + const onlyBabel7 = code.includes("@onlyBabel7"); const mangleFns = code.includes("@mangleFns"); const noMangleFns = []; - code = transformSync(code, { + code = babel.transformSync(code, { configFile: false, babelrc: false, filename: filePath, @@ -76,7 +97,41 @@ export default Object.freeze({ /** * @type {import("@babel/core").PluginObj} */ - { + ({ types: t }) => ({ + // These pre/post hooks are needed because the TS transform is, + // when building in the old Babel e2e test, removing the + // `export { OverloadYield as default }` in the OverloadYield helper. + // TODO: Remove in Babel 8. + pre(file) { + if (!process.env.IS_BABEL_OLD_E2E) return; + file.metadata.exportName = null; + file.path.traverse({ + ExportSpecifier(path) { + if (path.node.exported.name === "default") { + file.metadata.exportName = path.node.local.name; + } + }, + }); + }, + post(file) { + if (!process.env.IS_BABEL_OLD_E2E) return; + if (!file.metadata.exportName) return; + file.path.traverse({ + ExportNamedDeclaration(path) { + if ( + !path.node.declaration && + path.node.specifiers.length === 0 + ) { + path.node.specifiers.push( + t.exportSpecifier( + t.identifier(file.metadata.exportName), + t.identifier("default") + ) + ); + } + }, + }); + }, visitor: { ImportDeclaration(path) { const source = path.node.source; @@ -96,7 +151,7 @@ export default Object.freeze({ } }, }, - }, + }), ], }).code; code = ( @@ -115,15 +170,38 @@ export default Object.freeze({ }) ).code; - output += `\ + let metadata; + // eslint-disable-next-line prefer-const + [code, metadata] = getHelperMetadata(babel, code, helperName); + + const helperStr = `\ // size: ${code.length}, gzip size: ${gzipSync(code).length} ${JSON.stringify(helperName)}: helper( ${JSON.stringify(minVersion)}, ${JSON.stringify(code)}, + ${stringifyMetadata(metadata)} ), `; + + if (onlyBabel7) { + if (!IS_BABEL_8()) babel7extraOutput += helperStr; + } else { + output += helperStr; + } + } + + output += "};"; + + if (babel7extraOutput) { + output += ` + +if (!process.env.BABEL_8_BREAKING) { + Object.assign(helpers, { + ${babel7extraOutput} + }); +} +`; } - output += "});"; return output; } |
