* fix: register function expression id after params * implement bugfix plugin * add more testcases * fix: do not skip pattern binding referencing id * update compat-table * add bugfix plugin to preset-env * update Babel 8 test fixtures * Update packages/babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression/README.md * chore: bundle bugfix plugin * address review comments * add runtime version check * update compat table * fix syntax error * update test fixtures * revert bugfixes targets update * update Babel 8 test fixtures
57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
import { parseSync, traverse } from "@babel/core";
|
|
import { shouldTransform } from "../src/util.ts";
|
|
|
|
function getPath(input, parserOpts = {}) {
|
|
let targetPath;
|
|
traverse(
|
|
parseSync(input, {
|
|
parserOpts,
|
|
filename: "example.js",
|
|
configFile: false,
|
|
}),
|
|
{
|
|
FunctionExpression(path) {
|
|
targetPath = path;
|
|
path.stop();
|
|
},
|
|
},
|
|
);
|
|
return targetPath;
|
|
}
|
|
|
|
describe("shouldTransform", () => {
|
|
const positiveCases = [
|
|
"(function a([a]) {})",
|
|
"({ b: function a([a]) {} })",
|
|
"(function a({a}) {})",
|
|
"(function a(...a) {})",
|
|
"(function a({ ...a }) {})",
|
|
"(function a([a = 1]) {})",
|
|
"(function a(b, { a: [,...a] }) {})",
|
|
];
|
|
|
|
const negativeCases = [
|
|
"(function () {})",
|
|
"(function a() {})",
|
|
"(function a(a) {})",
|
|
"(function a() { var a })",
|
|
"(function b([a]) { var a })",
|
|
"(function b([a]) { function a() {} })",
|
|
"(function a(x = a) {})",
|
|
"(function a() { var { a } = {}; })",
|
|
"(function b([a]) { var { a } = {}; })",
|
|
"(function a({ [a]: b }) {})",
|
|
];
|
|
|
|
describe("the following cases should be transformed", () => {
|
|
test.each(positiveCases)("%p", input => {
|
|
expect(shouldTransform(getPath(input))).toBe("a");
|
|
});
|
|
});
|
|
describe("the following cases should not be transformed", () => {
|
|
test.each(negativeCases)("%p", input => {
|
|
expect(shouldTransform(getPath(input))).toBe(false);
|
|
});
|
|
});
|
|
});
|