From 0f4efaecb60b61749e39ae0c7d8085732c1020c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 31 Aug 2022 11:59:01 -0400 Subject: [PATCH 1/5] polish: improve helper-function-name typings --- .../babel-helper-function-name/src/index.ts | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/babel-helper-function-name/src/index.ts b/packages/babel-helper-function-name/src/index.ts index c59c881819bb..eb60e048195e 100644 --- a/packages/babel-helper-function-name/src/index.ts +++ b/packages/babel-helper-function-name/src/index.ts @@ -197,9 +197,28 @@ function visit( } /** - * @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 + * Add id to function/class expression inferred from the AST + * + * @export + * @template N The unamed expression type + * @param {({ + * node: N; + * parent?: NodePath["parent"]; + * scope: Scope; + * id?: t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral; + * })} { + * node, + * parent, + * scope, + * id, + * } `node`, `parent` and `scope` are generally extracted from a given NodePath. `id` is the fallback naming source when the helper + * can not infer the function name from the AST + * @param {boolean} [localBinding=false] whether a name could shadow a self-reference (e.g. converting arrow function) + * @param {boolean} [supportUnicodeId=false] whether the compilation target supports unicodeId (non-BMP characters) or not + * @returns {(N | t.CallExpression | void)} + * - modified node when name can be inferred, + * - an IIFE when `node` contains a binding shadowing the inferred function name (e.g. `let f = function (f) {}`), + * - `void` when `node` has `id` property or the helper can not inferred the name or the inferred name contains non-BMP characters that is not supported by current target */ export default function ( { @@ -209,13 +228,13 @@ export default function ( id, }: { node: N; - parent?: t.Node; + parent?: NodePath["parent"]; scope: Scope; id?: t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral; }, localBinding = false, supportUnicodeId = false, -): t.CallExpression | N { +): N | t.CallExpression | void { // has an `id` so we don't need to infer one if (node.id) return; From b27a859e7c11103e37cc5f4e7e8094daf65be4ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 31 Aug 2022 12:13:21 -0400 Subject: [PATCH 2/5] fix: support non-BMP method name in class transform --- .../babel-helper-wrap-function/src/index.ts | 2 +- .../package.json | 1 + .../src/index.ts | 26 ++++++++++++++----- .../src/transformClass.ts | 25 +++++++++++++----- .../input.js | 1 + .../options.json | 4 +++ .../output.js | 13 ++++++++++ .../method-name-non-bmp/input.js | 1 + .../method-name-non-bmp/options.json | 4 +++ .../method-name-non-bmp/output.js | 13 ++++++++++ .../input.js | 1 + .../options.json | 4 +++ .../output.js | 13 ++++++++++ .../loose/method-name-non-bmp/input.js | 1 + .../loose/method-name-non-bmp/options.json | 4 +++ .../loose/method-name-non-bmp/output.js | 13 ++++++++++ .../input.js | 1 + .../options.json | 4 +++ .../output.js | 13 ++++++++++ .../spec/method-name-non-bmp/input.js | 1 + .../spec/method-name-non-bmp/options.json | 4 +++ .../spec/method-name-non-bmp/output.js | 13 ++++++++++ yarn.lock | 1 + 23 files changed, 149 insertions(+), 14 deletions(-) create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js diff --git a/packages/babel-helper-wrap-function/src/index.ts b/packages/babel-helper-wrap-function/src/index.ts index 71dc174006b4..503848cc23fb 100644 --- a/packages/babel-helper-wrap-function/src/index.ts +++ b/packages/babel-helper-wrap-function/src/index.ts @@ -148,7 +148,7 @@ function plainFunction( const returnFn = container.callee.body.body[1].argument; nameFunction({ node: returnFn, - parent: path.parent, + parent: (path as NodePath).parent, scope: path.scope, }); functionId = returnFn.id; diff --git a/packages/babel-plugin-transform-classes/package.json b/packages/babel-plugin-transform-classes/package.json index 46e4cf51516b..400636fb2ff9 100644 --- a/packages/babel-plugin-transform-classes/package.json +++ b/packages/babel-plugin-transform-classes/package.json @@ -15,6 +15,7 @@ "main": "./lib/index.js", "dependencies": { "@babel/helper-annotate-as-pure": "workspace:^", + "@babel/helper-compilation-targets": "workspace:^", "@babel/helper-environment-visitor": "workspace:^", "@babel/helper-function-name": "workspace:^", "@babel/helper-optimise-call-expression": "workspace:^", diff --git a/packages/babel-plugin-transform-classes/src/index.ts b/packages/babel-plugin-transform-classes/src/index.ts index a5e1aa108944..66102f2783cc 100644 --- a/packages/babel-plugin-transform-classes/src/index.ts +++ b/packages/babel-plugin-transform-classes/src/index.ts @@ -1,4 +1,5 @@ import { declare } from "@babel/helper-plugin-utils"; +import { isRequired } from "@babel/helper-compilation-targets"; import annotateAsPure from "@babel/helper-annotate-as-pure"; import nameFunction from "@babel/helper-function-name"; import splitExportDeclaration from "@babel/helper-split-export-declaration"; @@ -30,6 +31,10 @@ export default declare((api, options: Options) => { "superIsCallableConstructor", ) ?? loose) as boolean; const noClassCalls = (api.assumption("noClassCalls") ?? loose) as boolean; + const supportUnicodeId = !isRequired( + "transform-unicode-escapes", + api.targets(), + ); // todo: investigate traversal requeueing const VISITED = new WeakSet(); @@ -59,7 +64,7 @@ export default declare((api, options: Options) => { const { node } = path; if (VISITED.has(node)) return; - const inferred = nameFunction(path); + const inferred = nameFunction(path, undefined, supportUnicodeId); if (inferred && inferred !== node) { path.replaceWith(inferred); return; @@ -68,12 +73,19 @@ export default declare((api, options: Options) => { VISITED.add(node); const [replacedPath] = path.replaceWith( - transformClass(path, state.file, builtinClasses, loose, { - setClassMethods, - constantSuper, - superIsCallableConstructor, - noClassCalls, - }), + transformClass( + path, + state.file, + builtinClasses, + loose, + { + setClassMethods, + constantSuper, + superIsCallableConstructor, + noClassCalls, + }, + supportUnicodeId, + ), ); if (replacedPath.isCallExpression()) { diff --git a/packages/babel-plugin-transform-classes/src/transformClass.ts b/packages/babel-plugin-transform-classes/src/transformClass.ts index 4b733b26d1f7..04ce194fe0f1 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.ts +++ b/packages/babel-plugin-transform-classes/src/transformClass.ts @@ -98,6 +98,7 @@ export default function transformClass( builtinClasses: ReadonlySet, isLoose: boolean, assumptions: ClassAssumptions, + supportUnicodeId: boolean, ) { const classState: State = { parent: undefined, @@ -508,7 +509,14 @@ export default function transformClass( if (node.kind === "method") { // @ts-expect-error Fixme: we are passing a ClassMethod to nameFunction, but nameFunction // does not seem to support it - fn = nameFunction({ id: key, node: node, scope }); + fn = + nameFunction( + // @ts-expect-error Fixme: we are passing a ClassMethod to nameFunction, but nameFunction + // does not seem to support it + { id: key, node: node, scope }, + undefined, + supportUnicodeId, + ) || fn; } } else { // todo(flow->ts) find a way to avoid "key as t.StringLiteral" below which relies on this assignment @@ -570,11 +578,16 @@ export default function transformClass( const key = t.toComputedKey(node, node.key); if (t.isStringLiteral(key)) { - func = nameFunction({ - node: func, - id: key, - scope, - }); + func = + nameFunction( + { + node: func, + id: key, + scope, + }, + undefined, + supportUnicodeId, + ) || func; } const expr = t.expressionStatement( diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/input.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/options.json new file mode 100644 index 000000000000..4f4dda8b0e6f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/output.js new file mode 100644 index 000000000000..a2b3766f2407 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp-not-supported/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + var _proto = o.prototype; + + _proto.𠮷野家 = function () {}; + + return babelHelpers.createClass(o); +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/input.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/options.json b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/options.json new file mode 100644 index 000000000000..027a3446d943 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 44", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/output.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/output.js new file mode 100644 index 000000000000..97f57de023a8 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + var _proto = o.prototype; + + _proto.𠮷野家 = function 𠮷野家() {}; + + return babelHelpers.createClass(o); +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json new file mode 100644 index 000000000000..4f4dda8b0e6f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js new file mode 100644 index 000000000000..edf492a0b929 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function () {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json new file mode 100644 index 000000000000..027a3446d943 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 44", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js new file mode 100644 index 000000000000..f5e729e2578f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function 𠮷野家() {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/input.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json new file mode 100644 index 000000000000..4f4dda8b0e6f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js new file mode 100644 index 000000000000..edf492a0b929 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function () {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/input.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json new file mode 100644 index 000000000000..027a3446d943 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 44", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js new file mode 100644 index 000000000000..f5e729e2578f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function 𠮷野家() {} + }]); + return o; +}(); diff --git a/yarn.lock b/yarn.lock index 1b59b1781b6d..d2200ea6062b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2315,6 +2315,7 @@ __metadata: dependencies: "@babel/core": "workspace:^" "@babel/helper-annotate-as-pure": "workspace:^" + "@babel/helper-compilation-targets": "workspace:^" "@babel/helper-environment-visitor": "workspace:^" "@babel/helper-function-name": "workspace:^" "@babel/helper-optimise-call-expression": "workspace:^" From 656c25cd588037fc1b5a6259ef01a508e7f50045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 31 Aug 2022 12:21:35 -0400 Subject: [PATCH 3/5] polish: use nullish coalescing --- .../babel-plugin-transform-classes/src/transformClass.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-transform-classes/src/transformClass.ts b/packages/babel-plugin-transform-classes/src/transformClass.ts index 04ce194fe0f1..1b3d0b675248 100644 --- a/packages/babel-plugin-transform-classes/src/transformClass.ts +++ b/packages/babel-plugin-transform-classes/src/transformClass.ts @@ -516,7 +516,7 @@ export default function transformClass( { id: key, node: node, scope }, undefined, supportUnicodeId, - ) || fn; + ) ?? fn; } } else { // todo(flow->ts) find a way to avoid "key as t.StringLiteral" below which relies on this assignment @@ -578,6 +578,7 @@ export default function transformClass( const key = t.toComputedKey(node, node.key); if (t.isStringLiteral(key)) { + // @ts-expect-error: requires strictNullCheck func = nameFunction( { @@ -587,7 +588,7 @@ export default function transformClass( }, undefined, supportUnicodeId, - ) || func; + ) ?? func; } const expr = t.expressionStatement( From 880f117fb8b4cbafa4582e1cf368ebf089d7b6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 31 Aug 2022 12:40:29 -0400 Subject: [PATCH 4/5] add Babel 8 test cases --- .../method-name-non-bmp-not-supported/input.js | 1 + .../method-name-non-bmp-not-supported/options.json | 4 ++++ .../method-name-non-bmp-not-supported/output.js | 13 +++++++++++++ .../loose/method-name-non-bmp-babel-7/input.js | 1 + .../loose/method-name-non-bmp-babel-7/options.json | 5 +++++ .../loose/method-name-non-bmp-babel-7/output.js | 13 +++++++++++++ .../input.js | 1 + .../options.json | 5 +++++ .../output.js | 13 +++++++++++++ .../method-name-non-bmp-not-supported/options.json | 1 + .../method-name-non-bmp-not-supported/output.js | 2 +- .../fixtures/loose/method-name-non-bmp/options.json | 1 + .../fixtures/loose/method-name-non-bmp/output.js | 2 +- .../spec/method-name-non-bmp-babel-7/input.js | 1 + .../spec/method-name-non-bmp-babel-7/options.json | 5 +++++ .../spec/method-name-non-bmp-babel-7/output.js | 13 +++++++++++++ .../input.js | 1 + .../options.json | 5 +++++ .../output.js | 13 +++++++++++++ .../method-name-non-bmp-not-supported/options.json | 1 + .../method-name-non-bmp-not-supported/output.js | 2 +- .../fixtures/spec/method-name-non-bmp/options.json | 1 + .../fixtures/spec/method-name-non-bmp/output.js | 2 +- 23 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/output.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/input.js create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/options.json create mode 100644 packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/output.js diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/input.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/options.json new file mode 100644 index 000000000000..4f4dda8b0e6f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/options.json @@ -0,0 +1,4 @@ +{ + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/output.js new file mode 100644 index 000000000000..a2b3766f2407 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/assumption-setClassMethods/method-name-non-bmp/method-name-non-bmp-not-supported/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + var _proto = o.prototype; + + _proto.𠮷野家 = function () {}; + + return babelHelpers.createClass(o); +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/options.json new file mode 100644 index 000000000000..58d9cda2d5d4 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/options.json @@ -0,0 +1,5 @@ +{ + "BABEL_8_BREAKING": false, + "targets": "chrome 44", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/output.js new file mode 100644 index 000000000000..f5e729e2578f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-babel-7/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function 𠮷野家() {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/input.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/options.json new file mode 100644 index 000000000000..b202097b1132 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/options.json @@ -0,0 +1,5 @@ +{ + "BABEL_8_BREAKING": false, + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/output.js new file mode 100644 index 000000000000..edf492a0b929 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported-babel-7/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function () {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json index 4f4dda8b0e6f..c0e4ca0dbdb0 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": true, "targets": "chrome 43", "plugins": ["transform-classes"] } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js index edf492a0b929..171495b4bea2 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp-not-supported/output.js @@ -6,7 +6,7 @@ var o = /*#__PURE__*/function () { } babelHelpers.createClass(o, [{ - key: "\uD842\uDFB7\u91CE\u5BB6", + key: "𠮷野家", value: function () {} }]); return o; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json index 027a3446d943..004d388a68ac 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": true, "targets": "chrome 44", "plugins": ["transform-classes"] } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js index f5e729e2578f..599fb71a7ab8 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/loose/method-name-non-bmp/output.js @@ -6,7 +6,7 @@ var o = /*#__PURE__*/function () { } babelHelpers.createClass(o, [{ - key: "\uD842\uDFB7\u91CE\u5BB6", + key: "𠮷野家", value: function 𠮷野家() {} }]); return o; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/input.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/options.json new file mode 100644 index 000000000000..58d9cda2d5d4 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/options.json @@ -0,0 +1,5 @@ +{ + "BABEL_8_BREAKING": false, + "targets": "chrome 44", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/output.js new file mode 100644 index 000000000000..f5e729e2578f --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-babel-7/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function 𠮷野家() {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/input.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/input.js new file mode 100644 index 000000000000..578cc35369a0 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/input.js @@ -0,0 +1 @@ +var o = class { 𠮷野家() {} }; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/options.json new file mode 100644 index 000000000000..b202097b1132 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/options.json @@ -0,0 +1,5 @@ +{ + "BABEL_8_BREAKING": false, + "targets": "chrome 43", + "plugins": ["transform-classes"] +} diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/output.js new file mode 100644 index 000000000000..edf492a0b929 --- /dev/null +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported-babel-7/output.js @@ -0,0 +1,13 @@ +var o = /*#__PURE__*/function () { + "use strict"; + + function o() { + babelHelpers.classCallCheck(this, o); + } + + babelHelpers.createClass(o, [{ + key: "\uD842\uDFB7\u91CE\u5BB6", + value: function () {} + }]); + return o; +}(); diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json index 4f4dda8b0e6f..c0e4ca0dbdb0 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": true, "targets": "chrome 43", "plugins": ["transform-classes"] } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js index edf492a0b929..171495b4bea2 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp-not-supported/output.js @@ -6,7 +6,7 @@ var o = /*#__PURE__*/function () { } babelHelpers.createClass(o, [{ - key: "\uD842\uDFB7\u91CE\u5BB6", + key: "𠮷野家", value: function () {} }]); return o; diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json index 027a3446d943..004d388a68ac 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/options.json @@ -1,4 +1,5 @@ { + "BABEL_8_BREAKING": true, "targets": "chrome 44", "plugins": ["transform-classes"] } diff --git a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js index f5e729e2578f..599fb71a7ab8 100644 --- a/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js +++ b/packages/babel-plugin-transform-classes/test/fixtures/spec/method-name-non-bmp/output.js @@ -6,7 +6,7 @@ var o = /*#__PURE__*/function () { } babelHelpers.createClass(o, [{ - key: "\uD842\uDFB7\u91CE\u5BB6", + key: "𠮷野家", value: function 𠮷野家() {} }]); return o; From c0bcfe2de873153f1bea16e71bc77a1560fcb7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 2 Sep 2022 17:01:06 -0400 Subject: [PATCH 5/5] update JSDoc annotations --- packages/babel-helper-function-name/src/index.ts | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/packages/babel-helper-function-name/src/index.ts b/packages/babel-helper-function-name/src/index.ts index eb60e048195e..418d8c49446e 100644 --- a/packages/babel-helper-function-name/src/index.ts +++ b/packages/babel-helper-function-name/src/index.ts @@ -201,17 +201,11 @@ function visit( * * @export * @template N The unamed expression type - * @param {({ - * node: N; - * parent?: NodePath["parent"]; - * scope: Scope; - * id?: t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral; - * })} { - * node, - * parent, - * scope, - * id, - * } `node`, `parent` and `scope` are generally extracted from a given NodePath. `id` is the fallback naming source when the helper + * @param {Object} nodePathLike The NodePath-like input + * @param {N} nodePathLike.node an AST node + * @param {NodePath["parent"]} [nodePathLike.parent] The parent of the AST node + * @param {Scope} nodePathLike.scope The scope associated to the AST node + * @param {t.LVal | t.StringLiteral | t.NumericLiteral | t.BigIntLiteral} [nodePathLike.id] the fallback naming source when the helper * can not infer the function name from the AST * @param {boolean} [localBinding=false] whether a name could shadow a self-reference (e.g. converting arrow function) * @param {boolean} [supportUnicodeId=false] whether the compilation target supports unicodeId (non-BMP characters) or not