Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not use descriptors for private class elements #16261

Conversation

nicolo-ribaudo
Copy link
Member

Q                       A
Fixed Issues? Fixes #1, Fixes #2
Patch: Bug Fix?
Major: Breaking Change?
Minor: New Feature?
Tests Added + Pass? Yes
Documentation PR Link
Any Dependency Changes?
License MIT

Our original transform for private elements used property descriptors for everything, because an old version of the decorators proposal allowed changing the descriptors of private elements (even if we never actually implemented it).

Given that now the decorators semantics are settled, this PR removes all those unnecessary property descriptors. This means that we now don't allocate one extra object per instance per private field or accessor.

There is a slight output size regression when it comes to assiging to private fields through destructuring, but this case is uncommon in real-world code. In general, the generated code size is reduced.

This PR replaces 12 old helpers with 6 new helpers.

@nicolo-ribaudo nicolo-ribaudo added Spec: Class Fields Spec: Private Methods PR: Output optimization 🔬 A type of pull request used for our changelog categories labels Feb 2, 2024
Comment on lines 82 to 80
var _A = {
writable: true,
value: _init_a(_Foo)
_: _init_a(_Foo)
};
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We still need the object in this case because we need to differentiate between "static private field initialized to undefined" and "static private field not initialized". Using an object like this means that we get the TypeError "for free" in the latter case, because _A._ throws.

This is observable in the following example:

class A {
  static #x = A.#y;
  static #y = 1;
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that we have used an additional object, can we use something similar to usingCtx?
Then we can initialize this object and WeakSet in the helper, and at the same time merge the set/get helper. I believe anyone needs to use get/set at the same time.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The object and the weakset are never used together: the object is for static private fields (one per field), while the weakset is for instance private methods and accessors (one per class).

Copy link
Contributor

@JLHwung JLHwung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you target this PR to feat-7.24.0/decorators? So we don't have to regenerate fixtures for 2023-11 when we are preparing the 7.24.0 release.

@nicolo-ribaudo nicolo-ribaudo force-pushed the class-private-fields-avoid-descriptors branch from deedbe6 to 2e55226 Compare February 5, 2024 15:19
@nicolo-ribaudo nicolo-ribaudo changed the base branch from main to feat-7.24.0/decorators February 5, 2024 15:20
Copy link
Member

@liuxingbaoyu liuxingbaoyu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merging it into feat-7.24.0/decorators is great, I want to try opening a PR based on this before publishing.

@JLHwung JLHwung self-requested a review February 5, 2024 16:02
@nicolo-ribaudo
Copy link
Member Author

I want to try opening a PR based on this before publishing.

Me too :) We can avoid duplicate .has methods passed to the decorators now that we unified the weaksets.

@nicolo-ribaudo
Copy link
Member Author

I'm looking into the test262 failures.

@@ -1,17 +1,9 @@
var _initStatic, _init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _Foo;
const dec = () => {};
var _a = /*#__PURE__*/new WeakMap();
var _b = /*#__PURE__*/new WeakMap();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now it's always named based on the first property, can you make it based on the class?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll do this in a separate PR, mostly because it makes it very difficult to go through the diff and see what actually changed.

@nicolo-ribaudo
Copy link
Member Author

nicolo-ribaudo commented Feb 5, 2024

This PR accidentally fixes some extra test262 failures:

2024-02-05T18:35:47.2900841Z ok 36458 test/language/statements/class/elements/privatefieldset-evaluation-order-2.js default # (success)
2024-02-05T18:35:47.2902029Z 
2024-02-05T18:35:47.2903194Z ok 36460 test/language/statements/class/elements/privatefieldset-evaluation-order-2.js strict mode # (success)
2024-02-05T18:35:47.2904850Z 
2024-02-05T18:35:47.2906062Z ok 36461 test/language/statements/class/elements/privatefieldset-evaluation-order-3.js default # (success)
2024-02-05T18:35:47.2907158Z 
2024-02-05T18:35:47.2908302Z ok 36462 test/language/statements/class/elements/privatefieldset-evaluation-order-3.js strict mode # (success)
2024-02-05T18:35:47.2909377Z 
2024-02-05T18:35:47.2954435Z # 0 new failures, 4 new successes
2024-02-05T18:35:47.2955101Z 1..4

There are two new failures, both that look like https://github.com/tc39/test262/blob/main/test/language/expressions/class/elements/nested-private-indirect-eval-contains-arguments.js

var arguments = 1;
var C = class {
  #x = () => (0, eval)('arguments;');
  x() {
    return this.#x();
  }
}

assert.sameValue(new C().x(), arguments);

they fail because in Node.js (both CJS and ESM) the top-level scope of a script isn't actually that global scope, so var arguments doesn't declare a global and thus (0, eval)('arguments;') cannot find it. I don't know how it's possible that they passed before, or how this PR would affect it.

@nicolo-ribaudo nicolo-ribaudo force-pushed the class-private-fields-avoid-descriptors branch 2 times, most recently from cd1fc6a to 9e97ce6 Compare February 6, 2024 01:26
@nicolo-ribaudo
Copy link
Member Author

@liuxingbaoyu I pushed a new commit to unify some of the instance/static helpers (Unify assert/getter/setter helpers for static&instance), please take a look at this again :)

var args = [].slice.call(arguments, 2);
return Object.defineProperty({}, "_", {
set: function (v) {
args.push(v);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The return value of toSetter does not seem to be idempotent, can we name it toXxxSetter?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

toOnceSetter, since it's meant to only be used once? Or I'd prefer to just add a comment if that's ok.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both are fine for me.

// NOTE: This package has a peerDependency on @babel/core@^7.0.0, but these
// helpers have been introduced in @babel/helpers@7.1.0.
const helperName =
isMethod && !isAccessor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside: We should rename isAccessor to isGetterOrSetter now that we have accessor properties.

Unify assert/getter/setter helpers for static&instance
@nicolo-ribaudo nicolo-ribaudo force-pushed the class-private-fields-avoid-descriptors branch from f42b12d to f74d4de Compare February 7, 2024 23:36
@nicolo-ribaudo
Copy link
Member Author

I don't know what's going on with test262, but some of the new failures are totally unrelated to this and all have to do with eval, such as https://github.com/tc39/test262/blob/main/test/language/expressions/async-generator/eval-body-proto-realm.js

@nicolo-ribaudo nicolo-ribaudo merged commit 9a9fde7 into babel:feat-7.24.0/decorators Feb 7, 2024
47 of 49 checks passed
@nicolo-ribaudo nicolo-ribaudo deleted the class-private-fields-avoid-descriptors branch February 7, 2024 23:57
liuxingbaoyu pushed a commit to liuxingbaoyu/babel that referenced this pull request Mar 5, 2024
Vylpes pushed a commit to Vylpes/random-bunny that referenced this pull request Apr 15, 2024
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@babel/traverse](https://babel.dev/docs/en/next/babel-traverse) ([source](https://github.com/babel/babel)) | resolutions | minor | [`7.23.9` -> `7.24.1`](https://renovatebot.com/diffs/npm/@babel%2ftraverse/7.23.9/7.24.1) |

---

### Release Notes

<details>
<summary>babel/babel (@&#8203;babel/traverse)</summary>

### [`v7.24.1`](https://github.com/babel/babel/blob/HEAD/CHANGELOG.md#v7241-2024-03-19)

[Compare Source](babel/babel@v7.24.0...v7.24.1)

##### 🐛 Bug Fix

-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16350](babel/babel#16350) Fix decorated class computed keys ordering ([@&#8203;JLHwung](https://github.com/JLHwung))
    -   [#&#8203;16344](babel/babel#16344) Fix decorated class static field private access ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-plugin-proposal-decorators`, `babel-plugin-proposal-json-modules`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-regenerator`, `babel-plugin-transform-runtime`, `babel-preset-env`
    -   [#&#8203;16329](babel/babel#16329) Respect `moduleName` for `@babel/runtime/regenerator` imports ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-pipeline-operator`, `babel-plugin-transform-class-properties`
    -   [#&#8203;16331](babel/babel#16331) Fix decorator memoiser binding kind ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-helper-create-class-features-plugin`, `babel-helper-replace-supers`, `babel-plugin-proposal-decorators`, `babel-plugin-transform-class-properties`
    -   [#&#8203;16325](babel/babel#16325) Fix decorator evaluation private environment ([@&#8203;JLHwung](https://github.com/JLHwung))

##### 📝 Documentation

-   [#&#8203;16319](babel/babel#16319) Update SECURITY.md ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))

##### 🏠 Internal

-   `babel-code-frame`, `babel-highlight`
    -   [#&#8203;16359](babel/babel#16359) Replace `chalk` with `picocolors` ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-fixtures`, `babel-helpers`, `babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression`, `babel-plugin-proposal-pipeline-operator`, `babel-plugin-transform-unicode-sets-regex`, `babel-preset-env`, `babel-preset-flow`
    -   [#&#8203;16352](babel/babel#16352) Run Babel transform tests on old node if possible ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-helpers`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-class-static-block`, `babel-plugin-transform-modules-commonjs`, `babel-plugin-transform-modules-systemjs`, `babel-plugin-transform-regenerator`, `babel-plugin-transform-runtime`, `babel-preset-env`, `babel-runtime-corejs3`, `babel-runtime`, `babel-standalone`
    -   [#&#8203;16323](babel/babel#16323) Allow separate helpers to be excluded in Babel 8 ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-module-imports`, `babel-plugin-proposal-import-wasm-source`, `babel-plugin-proposal-json-modules`, `babel-plugin-proposal-record-and-tuple`, `babel-plugin-transform-react-jsx-development`, `babel-plugin-transform-react-jsx`
    -   [#&#8203;16349](babel/babel#16349) Support merging imports in import injector ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression`, `babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining`, `babel-plugin-bugfix-v8-static-class-fields-redefine-readonly`, `babel-plugin-external-helpers`, `babel-plugin-proposal-async-do-expressions`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-destructuring-private`, `babel-plugin-proposal-do-expressions`, `babel-plugin-proposal-duplicate-named-capturing-groups-regex`, `babel-plugin-proposal-explicit-resource-management`, `babel-plugin-proposal-export-default-from`, `babel-plugin-proposal-function-bind`, `babel-plugin-proposal-function-sent`, `babel-plugin-proposal-import-attributes-to-assertions`, `babel-plugin-proposal-import-defer`, `babel-plugin-proposal-import-wasm-source`, `babel-plugin-proposal-json-modules`, `babel-plugin-proposal-optional-chaining-assign`, `babel-plugin-proposal-partial-application`, `babel-plugin-proposal-pipeline-operator`, `babel-plugin-proposal-record-and-tuple`, `babel-plugin-proposal-regexp-modifiers`, `babel-plugin-proposal-throw-expressions`, `babel-plugin-syntax-async-do-expressions`, `babel-plugin-syntax-decimal`, `babel-plugin-syntax-decorators`, `babel-plugin-syntax-destructuring-private`, `babel-plugin-syntax-do-expressions`, `babel-plugin-syntax-explicit-resource-management`, `babel-plugin-syntax-export-default-from`, `babel-plugin-syntax-flow`, `babel-plugin-syntax-function-bind`, `babel-plugin-syntax-function-sent`, `babel-plugin-syntax-import-assertions`, `babel-plugin-syntax-import-attributes`, `babel-plugin-syntax-import-defer`, `babel-plugin-syntax-import-reflection`, `babel-plugin-syntax-import-source`, `babel-plugin-syntax-jsx`, `babel-plugin-syntax-module-blocks`, `babel-plugin-syntax-optional-chaining-assign`, `babel-plugin-syntax-partial-application`, `babel-plugin-syntax-pipeline-operator`, `babel-plugin-syntax-record-and-tuple`, `babel-plugin-syntax-throw-expressions`, `babel-plugin-syntax-typescript`, `babel-plugin-transform-arrow-functions`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-async-to-generator`, `babel-plugin-transform-block-scoped-functions`, `babel-plugin-transform-block-scoping`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-class-static-block`, `babel-plugin-transform-classes`, `babel-plugin-transform-computed-properties`, `babel-plugin-transform-destructuring`, `babel-plugin-transform-dotall-regex`, `babel-plugin-transform-duplicate-keys`, `babel-plugin-transform-dynamic-import`, `babel-plugin-transform-exponentiation-operator`, `babel-plugin-transform-export-namespace-from`, `babel-plugin-transform-flow-comments`, `babel-plugin-transform-flow-strip-types`, `babel-plugin-transform-for-of`, `babel-plugin-transform-function-name`, `babel-plugin-transform-instanceof`, `babel-plugin-transform-jscript`, `babel-plugin-transform-json-strings`, `babel-plugin-transform-literals`, `babel-plugin-transform-logical-assignment-operators`, `babel-plugin-transform-member-expression-literals`, `babel-plugin-transform-modules-amd`, `babel-plugin-transform-modules-commonjs`, `babel-plugin-transform-modules-systemjs`, `babel-plugin-transform-modules-umd`, `babel-plugin-transform-new-target`, `babel-plugin-transform-nullish-coalescing-operator`, `babel-plugin-transform-numeric-separator`, `babel-plugin-transform-object-assign`, `babel-plugin-transform-object-rest-spread`, `babel-plugin-transform-object-set-prototype-of-to-assign`, `babel-plugin-transform-object-super`, `babel-plugin-transform-optional-catch-binding`, `babel-plugin-transform-optional-chaining`, `babel-plugin-transform-parameters`, `babel-plugin-transform-private-methods`, `babel-plugin-transform-private-property-in-object`, `babel-plugin-transform-property-literals`, `babel-plugin-transform-property-mutators`, `babel-plugin-transform-proto-to-assign`, `babel-plugin-transform-react-constant-elements`, `babel-plugin-transform-react-display-name`, `babel-plugin-transform-react-inline-elements`, `babel-plugin-transform-react-jsx-compat`, `babel-plugin-transform-react-jsx-self`, `babel-plugin-transform-react-jsx-source`, `babel-plugin-transform-react-pure-annotations`, `babel-plugin-transform-regenerator`, `babel-plugin-transform-reserved-words`, `babel-plugin-transform-runtime`, `babel-plugin-transform-shorthand-properties`, `babel-plugin-transform-spread`, `babel-plugin-transform-sticky-regex`, `babel-plugin-transform-strict-mode`, `babel-plugin-transform-template-literals`, `babel-plugin-transform-typeof-symbol`, `babel-plugin-transform-typescript`, `babel-plugin-transform-unicode-escapes`, `babel-plugin-transform-unicode-property-regex`, `babel-plugin-transform-unicode-regex`, `babel-plugin-transform-unicode-sets-regex`, `babel-preset-env`, `babel-preset-flow`, `babel-preset-react`, `babel-preset-typescript`
    -   [#&#8203;16332](babel/babel#16332) Test Babel 7 plugins compatibility with Babel 8 core ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-compat-data`, `babel-plugin-transform-object-rest-spread`, `babel-preset-env`
    -   [#&#8203;16318](babel/babel#16318) \[babel 8] Fix `@babel/compat-data` package.json ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))

##### 🔬 Output optimization

-   `babel-helper-replace-supers`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-classes`, `babel-plugin-transform-parameters`, `babel-plugin-transform-runtime`
    -   [#&#8203;16345](babel/babel#16345) Optimize the use of `assertThisInitialized` after `super()` ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-plugin-transform-class-properties`, `babel-plugin-transform-classes`
    -   [#&#8203;16343](babel/babel#16343) Use simpler `assertThisInitialized` more often ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-plugin-proposal-decorators`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-object-rest-spread`, `babel-traverse`
    -   [#&#8203;16342](babel/babel#16342) Consider well-known and registered symbols as literals ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-core`, `babel-plugin-external-helpers`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-function-bind`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-classes`, `babel-plugin-transform-flow-comments`, `babel-plugin-transform-flow-strip-types`, `babel-plugin-transform-function-name`, `babel-plugin-transform-modules-systemjs`, `babel-plugin-transform-parameters`, `babel-plugin-transform-private-property-in-object`, `babel-plugin-transform-react-jsx`, `babel-plugin-transform-runtime`, `babel-plugin-transform-spread`, `babel-plugin-transform-typescript`, `babel-preset-env`
    -   [#&#8203;16326](babel/babel#16326) Reduce the use of class names ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))

### [`v7.24.0`](https://github.com/babel/babel/blob/HEAD/CHANGELOG.md#v7240-2024-02-28)

[Compare Source](babel/babel@v7.23.9...v7.24.0)

##### 🚀 New Feature

-   `babel-standalone`
    -   [#&#8203;11696](babel/babel#11696) Export babel tooling packages in `@babel/standalone` ([@&#8203;ajihyf](https://github.com/ajihyf))
-   `babel-core`, `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-transform-class-properties`
    -   [#&#8203;16267](babel/babel#16267) Implement `noUninitializedPrivateFieldAccess` assumption ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-pipeline-operator`, `babel-plugin-syntax-decorators`, `babel-plugin-transform-class-properties`, `babel-runtime-corejs2`, `babel-runtime-corejs3`, `babel-runtime`
    -   [#&#8203;16242](babel/babel#16242) Support decorator 2023-11 normative updates ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-preset-flow`
    -   [#&#8203;16309](babel/babel#16309) \[babel 7] Allow setting `ignoreExtensions` in Flow preset ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
    -   [#&#8203;16284](babel/babel#16284) Add `experimental_useHermesParser` option in `preset-flow` ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-import-to-platform-api`, `babel-plugin-proposal-import-wasm-source`, `babel-plugin-proposal-json-modules`, `babel-standalone`
    -   [#&#8203;16172](babel/babel#16172) Add transform support for JSON modules imports ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-plugin-transform-runtime`
    -   [#&#8203;16241](babel/babel#16241) Add back `moduleName` option to `@babel/plugin-transform-runtime` ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-parser`, `babel-types`
    -   [#&#8203;16277](babel/babel#16277) Allow import attributes for `TSImportType` ([@&#8203;sosukesuzuki](https://github.com/sosukesuzuki))

##### 🐛 Bug Fix

-   `babel-plugin-proposal-do-expressions`, `babel-traverse`
    -   [#&#8203;16305](babel/babel#16305) fix: avoid `popContext` on unvisited node paths ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-transform-private-methods`, `babel-plugin-transform-private-property-in-object`
    -   [#&#8203;16312](babel/babel#16312) Fix class private properties when `privateFieldsAsSymbols` ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-transform-private-methods`
    -   [#&#8203;16307](babel/babel#16307) Fix the support of `arguments` in private `get/set` method ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16287](babel/babel#16287) Reduce decorator static property size ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16281](babel/babel#16281) Fix evaluation order of decorators with cached receiver ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
    -   [#&#8203;16279](babel/babel#16279) Fix decorator this memoization ([@&#8203;JLHwung](https://github.com/JLHwung))
    -   [#&#8203;16266](babel/babel#16266) Preserve `static` on decorated private `accessor` ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
    -   [#&#8203;16258](babel/babel#16258) fix: handle decorated async private method and generator ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-private-methods`, `babel-plugin-transform-private-property-in-object`, `babel-plugin-transform-typescript`, `babel-preset-env`
    -   [#&#8203;16275](babel/babel#16275) Fix class private properties when `privateFieldsAsProperties` ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helpers`
    -   [#&#8203;16268](babel/babel#16268) Do not consider `arguments` in a helper as a global reference ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helpers`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16270](babel/babel#16270) Handle symbol key class elements decoration ([@&#8203;JLHwung](https://github.com/JLHwung))
    -   [#&#8203;16265](babel/babel#16265) Do not define `access.get` for public setter decorators ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))

##### 💅 Polish

-   `babel-core`, `babel-helper-create-class-features-plugin`, `babel-preset-env`
    -   [#&#8203;12428](babel/babel#12428) Suggest using `BABEL_SHOW_CONFIG_FOR` for config problems ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))

##### 🏠 Internal

-   `babel-helper-transform-fixture-test-runner`
    -   [#&#8203;16278](babel/babel#16278) Continue writing `output.js` when `exec.js` throws ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))

##### 🔬 Output optimization

-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16306](babel/babel#16306) Avoid intermediate functions for private accessors with decs ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-pipeline-operator`, `babel-plugin-transform-class-properties`
    -   [#&#8203;16294](babel/babel#16294) More aggressively inline decorators in the static block ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-transform-private-methods`
    -   [#&#8203;16283](babel/babel#16283) Do not use `classPrivateMethodGet` ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-create-class-features-plugin`, `babel-helpers`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16287](babel/babel#16287) Reduce decorator static property size ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helper-create-class-features-plugin`, `babel-plugin-proposal-decorators`, `babel-plugin-transform-class-properties`
    -   [#&#8203;16280](babel/babel#16280) Reduce element decorator temp variables ([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-helper-create-class-features-plugin`, `babel-helper-fixtures`, `babel-helpers`, `babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-destructuring-private`, `babel-plugin-proposal-optional-chaining-assign`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-class-static-block`, `babel-plugin-transform-private-methods`, `babel-plugin-transform-private-property-in-object`, `babel-preset-env`, `babel-runtime-corejs2`, `babel-runtime-corejs3`, `babel-runtime`
    -   [#&#8203;16261](babel/babel#16261) Do not use descriptors for private class elements ([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))
-   `babel-helpers`, `babel-plugin-proposal-decorators`
    -   [#&#8203;16263](babel/babel#16263) Reduce helper size for decorator 2023-11 ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4wLjAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4wLjAiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=-->

Reviewed-on: https://gitea.vylpes.xyz/RabbitLabs/random-bunny/pulls/156
Co-authored-by: Renovate Bot <renovate@vylpes.com>
Co-committed-by: Renovate Bot <renovate@vylpes.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
PR: Output optimization 🔬 A type of pull request used for our changelog categories Spec: Class Fields Spec: Private Methods
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants