diff --git a/packages/babel-helper-function-name/src/index.ts b/packages/babel-helper-function-name/src/index.ts index 16c3fcc6fad5..09dd4c61bd53 100644 --- a/packages/babel-helper-function-name/src/index.ts +++ b/packages/babel-helper-function-name/src/index.ts @@ -172,6 +172,7 @@ function visit(node, name, scope) { /** * @param {NodePath} param0 * @param {Boolean} localBinding whether a name could shadow a self-reference (e.g. converting arrow function) + * @param {Boolean} supportUnicodeId whether a target support unicodeId or not */ export default function ( { @@ -181,6 +182,7 @@ export default function ( id, }: { node: any; parent?: any; scope: any; id?: any }, localBinding = false, + supportUnicodeId = false, ) { // has an `id` so we don't need to infer one if (node.id) return; @@ -227,6 +229,10 @@ export default function ( return; } + if (!supportUnicodeId && isFunction(node) && /[\uD800-\uDFFF]/.test(name)) { + return; + } + name = toBindingIdentifierName(name); id = identifier(name); diff --git a/packages/babel-plugin-transform-function-name/package.json b/packages/babel-plugin-transform-function-name/package.json index 6b1488370826..bdf9a5f7184c 100644 --- a/packages/babel-plugin-transform-function-name/package.json +++ b/packages/babel-plugin-transform-function-name/package.json @@ -17,6 +17,7 @@ "babel-plugin" ], "dependencies": { + "@babel/helper-compilation-targets": "workspace:^", "@babel/helper-function-name": "workspace:^", "@babel/helper-plugin-utils": "workspace:^" }, diff --git a/packages/babel-plugin-transform-function-name/src/index.ts b/packages/babel-plugin-transform-function-name/src/index.ts index 4c9c56f083e9..7bdae7fca350 100644 --- a/packages/babel-plugin-transform-function-name/src/index.ts +++ b/packages/babel-plugin-transform-function-name/src/index.ts @@ -1,8 +1,13 @@ +import { isRequired } from "@babel/helper-compilation-targets"; import { declare } from "@babel/helper-plugin-utils"; import nameFunction from "@babel/helper-function-name"; export default declare(api => { api.assertVersion(7); + const supportUnicodeId = !isRequired( + "transform-unicode-escapes", + api.targets(), + ); return { name: "transform-function-name", @@ -20,7 +25,7 @@ export default declare(api => { ObjectProperty(path) { const value = path.get("value"); if (value.isFunction()) { - const newNode = nameFunction(value); + const newNode = nameFunction(value, false, supportUnicodeId); if (newNode) value.replaceWith(newNode); } }, diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/input.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/input.js new file mode 100644 index 000000000000..1ce32e6bf532 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/input.js @@ -0,0 +1,3 @@ +var o = { + "\uD835\uDC9C"() {} +}; \ No newline at end of file diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/options.json b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/options.json new file mode 100644 index 000000000000..0fc67a40d23e --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["transform-function-name", "transform-shorthand-properties"], + "targets": { "firefox": 52 } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/output.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/output.js new file mode 100644 index 000000000000..bf365d536975 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-not-supported/output.js @@ -0,0 +1,3 @@ +var o = { + "\uD835\uDC9C": function () {} +}; diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/input.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/input.js new file mode 100644 index 000000000000..1ce32e6bf532 --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/input.js @@ -0,0 +1,3 @@ +var o = { + "\uD835\uDC9C"() {} +}; \ No newline at end of file diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/options.json b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/options.json new file mode 100644 index 000000000000..ed532b7396fc --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["transform-function-name", "transform-shorthand-properties"], + "targets": { "firefox": 60 } +} \ No newline at end of file diff --git a/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/output.js b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/output.js new file mode 100644 index 000000000000..9ef7f98005fe --- /dev/null +++ b/packages/babel-plugin-transform-function-name/test/fixtures/function-name/unicode-id-supported/output.js @@ -0,0 +1,3 @@ +var o = { + "\uD835\uDC9C": function 𝒜() {} +}; diff --git a/yarn.lock b/yarn.lock index 437c47af55c8..7be8b34d2146 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2438,6 +2438,7 @@ __metadata: resolution: "@babel/plugin-transform-function-name@workspace:packages/babel-plugin-transform-function-name" dependencies: "@babel/core": "workspace:^" + "@babel/helper-compilation-targets": "workspace:^" "@babel/helper-function-name": "workspace:^" "@babel/helper-plugin-test-runner": "workspace:^" "@babel/helper-plugin-utils": "workspace:^"