Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
liuxingbaoyu committed May 27, 2022
1 parent ce3785f commit 405c399
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 23 deletions.
5 changes: 1 addition & 4 deletions packages/babel-core/package.json
Expand Up @@ -41,11 +41,9 @@
"./lib/config/files/index.js": "./lib/config/files/index-browser.js",
"./lib/config/resolve-targets.js": "./lib/config/resolve-targets-browser.js",
"./lib/transform-file.js": "./lib/transform-file-browser.js",
"./lib/transformation/util/clone-deep.js": "./lib/transformation/util/clone-deep-browser.js",
"./src/config/files/index.ts": "./src/config/files/index-browser.ts",
"./src/config/resolve-targets.ts": "./src/config/resolve-targets-browser.ts",
"./src/transform-file.ts": "./src/transform-file-browser.ts",
"./src/transformation/util/clone-deep.ts": "./src/transformation/util/clone-deep-browser.ts"
"./src/transform-file.ts": "./src/transform-file-browser.ts"
},
"dependencies": {
"@ampproject/remapping": "^2.1.0",
Expand All @@ -58,7 +56,6 @@
"@babel/template": "workspace:^",
"@babel/traverse": "workspace:^",
"@babel/types": "workspace:^",
"clone-deep": "^4.0.1",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
Expand Down

This file was deleted.

42 changes: 29 additions & 13 deletions packages/babel-core/src/transformation/util/clone-deep.ts
@@ -1,16 +1,32 @@
import v8 from "v8";
import cloneDeep from "clone-deep";
import semver from "semver";
//https://github.com/babel/babel/pull/14583#discussion_r882828856
function deepClone(value, cache) {
if (value !== null) {
if (cache.has(value)) return cache.get(value);
let cloned;
if (Array.isArray(value)) {
cloned = new Array(value.length);
for (let i = 0; i < value.length; i++) {
cloned[i] =
typeof value[i] !== "object" ? value[i] : deepClone(value[i], cache);
}
} else {
cloned = {};
const keys = Object.keys(value);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
cloned[key] =
typeof value[key] !== "object"
? value[key]
: deepClone(value[key], cache);
}
}
cache.set(value, cloned);
return cloned;
}
return value;
}

export default function (value) {
// There was a memory leak prior to node 18.2.0
// https://github.com/nodejs/node/issues/40828
if (
v8.deserialize &&
v8.serialize &&
semver.satisfies(process.versions.node, ">=18.2.0")
) {
return v8.deserialize(v8.serialize(value));
}
return cloneDeep(value);
if (typeof value !== "object") return value;
return deepClone(value, new Map());
}
38 changes: 38 additions & 0 deletions packages/babel-core/test/api.js
Expand Up @@ -201,6 +201,44 @@ describe("api", function () {
expect(options).toEqual({ babelrc: false });
});

it("transformFromAst should generate same code with different cloneInputAst", function () {
const program = `//test1
/*test2*/var/*test3*/ a = 1/*test4*/;//test5
//test6
var b;
`;
const node = parse(program);
const { code } = transformFromAst(node, program, {
plugins: [
function () {
return {
visitor: {
Identifier: function (path) {
path.node.name = "replaced";
},
},
};
},
],
});
const { code: code2 } = transformFromAst(node, program, {
cloneInputAst: false,
plugins: [
function () {
return {
visitor: {
Identifier: function (path) {
path.node.name = "replaced";
},
},
};
},
],
});

expect(code).toBe(code2);
});

it("transformFromAst should not mutate the AST", function () {
const program = "const identifier = 1";
const node = parse(program);
Expand Down
1 change: 0 additions & 1 deletion yarn.lock
Expand Up @@ -339,7 +339,6 @@ __metadata:
"@types/debug": ^4.1.0
"@types/resolve": ^1.3.2
"@types/semver": ^5.4.0
clone-deep: ^4.0.1
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
Expand Down

0 comments on commit 405c399

Please sign in to comment.