Refactor syntax transform for packages (#18275)

This commit is contained in:
fisker Cheung authored and GitHub committed 2025-11-18 20:40:21 +08:00
1 parent 825333221f
commit 7521852351
3 files changed
+60 -61

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
const OPTIONAL_OBJECT = 0x01;
const OPTIONAL_OBJECT = 0b01;
const createMethodShim =
(methodName, getImplementation) =>
+43 -34
View File
@@ -4,46 +4,55 @@ import { parse } from "@babel/parser";
import { traverseFast as traverse } from "@babel/types";
import { outdent } from "outdent";
import { PROJECT_ROOT, SOURCE_DIR } from "../../utils/index.js";
import allTransforms from "./transforms/index.js";
import * as transforms from "./transforms/index.js";
/* Doesn't work for dependencies */
const packageTransforms = new Map([
/* spell-checker: disable */
[
transforms["method-replace-all"],
[
"@prettier/cli",
"@typescript-eslint/typescript-estree",
"camelcase",
"fast-ignore",
"fast-string-truncated-width",
"hashery",
"hermes-parser",
"jest-docblock",
"kasi",
"meriyah",
],
],
[
transforms["method-at"],
["@glimmer/syntax", "angular-estree-parser", "espree"],
],
[transforms["object-has-own"], ["@babel/parser", "meriyah"]],
[transforms["string-raw"], ["camelcase"]],
/* spell-checker: enable */
]);
function shouldTransform(file, buildOptions) {
const allowedDirectories = buildOptions.reuseDocModule
? [SOURCE_DIR]
: [
SOURCE_DIR,
...[
/* spell-checker: disable */
"camelcase",
"angular-estree-parser",
"jest-docblock",
"espree",
"@babel/parser",
"@typescript-eslint/typescript-estree",
"meriyah",
"@glimmer",
"@prettier/cli",
"hermes-parser",
"kasi",
"fast-string-truncated-width",
"fast-ignore",
"hashery",
/* spell-checker: enable */
].map((directory) =>
path.join(PROJECT_ROOT, `node_modules/${directory}/`),
),
];
const allTransforms = Object.values(transforms);
const isPackageFile = (file, packageName) =>
file.startsWith(path.join(PROJECT_ROOT, `node_modules/${packageName}/`));
return allowedDirectories.some((directory) => file.startsWith(directory));
function getTransforms(original, file) {
if (file.startsWith(SOURCE_DIR)) {
return allTransforms;
}
const transforms = [];
for (const [transform, packageNames] of packageTransforms) {
if (packageNames.some((packageName) => isPackageFile(file, packageName))) {
transforms.push(transform);
}
}
return transforms;
}
function transform(original, file, buildOptions) {
if (!shouldTransform(file, buildOptions)) {
return original;
}
const transforms = allTransforms.filter(
const transforms = getTransforms(original, file, buildOptions).filter(
(transform) => !transform.shouldSkip(original, file, buildOptions),
);
+16 -26
View File
@@ -1,26 +1,16 @@
import transformDocModuleImports from "./transform-doc-module-imports.js";
import transformMethodAt from "./transform-method-at.js";
import transformMethodFindLast from "./transform-method-find-last.js";
import transformMethodFindLastIndex from "./transform-method-find-last-index.js";
import transformMethodReplaceAll from "./transform-method-replace-all.js";
import transformMethodToReversed from "./transform-method-to-reversed.js";
import transformObjectHasOwnCall from "./transform-object-has-own.js";
import transformStringRaw from "./transform-string-raw.js";
export default [
// Node.js 18.0.0
transformMethodFindLast,
transformMethodFindLastIndex,
// Node.js 16.9.0
transformObjectHasOwnCall,
// Node.js 16.6.0, and for performance
transformMethodAt,
// Node.js 15.0.0
transformMethodReplaceAll,
// Node.js 20
transformMethodToReversed,
// For performance
transformStringRaw,
// Replace imports with public doc module if possible
transformDocModuleImports,
];
// Replace imports with public doc module if possible
export { default as "doc-module-imports" } from "./transform-doc-module-imports.js";
// Node.js 16.6.0, and for performance in Node.js 18
export { default as "method-at" } from "./transform-method-at.js";
// Node.js 18.0.0
export { default as "method-find-last" } from "./transform-method-find-last.js";
// Node.js 18.0.0
export { default as "method-find-last-index" } from "./transform-method-find-last-index.js";
// Node.js 15.0.0
export { default as "method-replace-all" } from "./transform-method-replace-all.js";
// Node.js 20
export { default as "method-to-reversed" } from "./transform-method-to-reversed.js";
// Node.js 16.9.0
export { default as "object-has-own" } from "./transform-object-has-own.js";
// For performance
export { default as "string-raw" } from "./transform-string-raw.js";