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
Implement decorators as presented at 2023-01
TC39 meeting
#15405
Conversation
Yes, the expectation is to match |
d3bed4d
to
584c281
Compare
Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/53957/ |
@liuxingbaoyu I don't think that the Jest failure is related, but the last commit in that test is yours :P https://github.com/facebook/jest/blob/main/packages/jest-core/src/__tests__/collectHandles.test.js |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changes lgtm. Left some comments about emitting footprints and context access performance.
injectHasChecks && | ||
(template.expression.ast` | ||
_ => ${t.cloneNode(key)} in _ | ||
` as t.ArrowFunctionExpression), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we generate staticPrivateHas
from the first argument of applyDecs
? It seems to
me it suffices to just memoise
_ => babelHelpers.checkInRHS(_) === Class
Then we can consider generate only privateHas and reuse it for other private elements. The assumption here is that no plugins are removing private elements without preserving the privateIn checks. So the interface can be:
const privateHas = _ => #p in _;
applyDecs2301(Class, privateHas, [decs])
If that assumption is not practical, we can insert our own private class brand.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Edit: response hidden because the way we compile `in` checks for static private fields is already broken in this edge case anyway
Technically you can do something like this:
let A;
let accessX;
let accessY;
try {
class _A {
@((d, c) => (accessX = c.access, d)) static #x;
static { A = _A; throw 0; }
@((d, c) => (accessX = c.access, d)) static #y;
}
} catch {}
assert(accessX.has(A) === true);
assert(accessY.has(A) === false);
but we can probably assume by default that class evaluation finishes (or if it throws, you are not going to use the class binding for anything).
@@ -26,6 +26,12 @@ function createAddInitializerMethod(initializers, decoratorFinishedRef) { | |||
}; | |||
} | |||
|
|||
function assertInstanceIfPrivate(has, target) { | |||
if (has && !has(target)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
assertInstanceIfPrivate
is a runtime call. Can we call assertInstanceIfPrivate
only for private element? So we don't have to check has
.
get = function () { | ||
// TODO: Throw if !Has(receiver, name). | ||
get = function (target) { | ||
assertInstanceIfPrivate(privateHas, target); | ||
return desc.value; | ||
}; | ||
} else { | ||
// Assert: If kind === 0, then isPrivate is true. | ||
var t = kind === 0 /* FIELD */ || kind === 1; /* ACCESSOR */ | ||
if (t || kind === 3 /* GETTER */) { | ||
get = function (target) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can generate a get
with assertInstanceIfPrivate
if isPrivate
, so multiple context.access.get
call does not require multiple if(has)
check.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean:
if (isPrivate) {
get = function (target) {
desc.get.call(assertInstanceIfPrivate(hasPrivateBrand, target));
}
} else {
get = function (target) {
desc.get.call(target);
}
}
because isPrivate
is known at compile time, the check should not be duplicated in context.access.get
.
bfa119e
to
d1484ad
Compare
I also added a commit to (only with 2023-01, to avoid potentially breaking changes to the previous versions) use arrow functions instead of plain functions when generating the |
Both look fine to me.
I tend to keep same positions. But this brings up a new question, how does |
I have a PR up against @pzuraq's ecma262 PR: pzuraq/ecma262#4 |
FWIW, TypeScript will preserve the original order for |
Oh right, thanks for the heads up! It's definitely something we have to preserve then. |
initializers = staticInitializers; | ||
} | ||
if (!staticBrand) { | ||
staticBrand = function (_) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The staticBrand
should be assigned only when we see a private static element.
class A { static p }
class B { @dec static p }
function dec(_, context) {
// Should return true though A != B
// to mirror the semantic Reflect.has(%, "p")
context.access.has(A)
}
The proposal has been updated! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it might be better to keep the order in node.extra
, but it doesn't matter.
We usually only store stuff in |
d22c139
to
1e5ccdb
Compare
Prettier use the same approach, checking the declaration and first decorator has same start location https://github.com/prettier/prettier/blob/5ea9a8f81f40abfd12dbc4106e3080c7608e9dd5/src/language-js/print/decorators.js#L77 |
1e5ccdb
to
8afed11
Compare
2023-01
TC39 meeting2023-01
TC39 meeting
<h3>Snyk has created this PR to upgrade @babel/core from 7.20.12 to 7.21.0.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **1 version** ahead of your current version. - The recommended version was released **24 days ago**, on 2023-02-20. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>@babel/core</b></summary> <ul> <li> <b>7.21.0</b> - <a href="https://snyk.io/redirect/github/babel/babel/releases/tag/v7.21.0">2023-02-20</a></br><h2>v7.21.0 (2023-02-20)</h2> <p>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/azizghuloum/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ehoogeveen-medweb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fwienber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Lioness100/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/Lioness100">@ Lioness100</a> for your first PRs!</p> <h4><g-emoji class="g-emoji" alias="rocket" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f680.png">🚀</g-emoji> New Feature</h4> <ul> <li><code>babel-core</code>, <code>babel-helper-create-class-features-plugin</code>, <code>babel-plugin-proposal-class-properties</code>, <code>babel-plugin-proposal-private-methods</code>, <code>babel-plugin-proposal-private-property-in-object</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15435" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15435/hovercard">#15435</a> feat: Implement <code>privateFieldsAsSymbols</code> assumption for classes (<a href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>)</li> </ul> </li> <li><code>babel-helper-create-regexp-features-plugin</code>, <code>babel-plugin-proposal-regexp-modifiers</code>, <code>babel-standalone</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15226" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15226/hovercard">#15226</a> feat: Support regexp modifiers proposal (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-cli</code>, <code>babel-core</code>, <code>babel-generator</code>, <code>babel-plugin-transform-destructuring</code>, <code>babel-plugin-transform-modules-commonjs</code>, <code>babel-plugin-transform-react-jsx</code>, <code>babel-traverse</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15022" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15022/hovercard">#15022</a> feat: Generate sourcemaps of friendly call frames (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-parser</code>, <code>babel-types</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15384" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15384/hovercard">#15384</a> [ts] Support <code>const</code> modifier in type parameters (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-generator</code>, <code>babel-helpers</code>, <code>babel-parser</code>, <code>babel-plugin-proposal-decorators</code>, <code>babel-plugin-syntax-decorators</code>, <code>babel-runtime-corejs2</code>, <code>babel-runtime-corejs3</code>, <code>babel-runtime</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15405" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15405/hovercard">#15405</a> Implement decorators as presented at <code>2023-01</code> TC39 meeting (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15114" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15114/hovercard">#15114</a> Parser option to allow <code>new.target</code> outside functions (<a href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a>)</li> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15320" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15320/hovercard">#15320</a> Add <code>annexb: false</code> parser option to disable Annex B (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15283" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15283/hovercard">#15283</a> feat: Support <code>.cts</code> as configuration file (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-generator</code>, <code>babel-parser</code>, <code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15381" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15381/hovercard">#15381</a> [ts] Support <code>export type * from</code> (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="bug" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png">🐛</g-emoji> Bug Fix</h4> <ul> <li><code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15379" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15379/hovercard">#15379</a> [ts5.0] Better inlining of constants in enums (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15366" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15366/hovercard">#15366</a> handling circular/shared structures in deep-clone (<a href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>)</li> </ul> </li> <li><code>babel-helper-create-class-features-plugin</code>, <code>babel-plugin-proposal-class-properties</code>, <code>babel-plugin-proposal-class-static-block</code>, <code>babel-plugin-proposal-private-methods</code>, <code>babel-plugin-transform-classes</code>, <code>babel-plugin-transform-new-target</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15406" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15406/hovercard">#15406</a> Preserve class elements comments in class transform (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> </ul> </li> <li><code>babel-parser</code>, <code>babel-plugin-transform-flow-comments</code>, <code>babel-plugin-transform-flow-strip-types</code>, <code>babel-types</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15414" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15414/hovercard">#15414</a> [ts] Fix restrictions for optional parameters (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="nail_care" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f485.png">💅</g-emoji> Polish</h4> <ul> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15400" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15400/hovercard">#15400</a> polish: improve "<code>await</code> as identifier" error in modules (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="house" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png">🏠</g-emoji> Internal</h4> <ul> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15137" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15137/hovercard">#15137</a> Improve CJS compat with ESM-based <code>@ babel/core</code> (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="microscope" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png">🔬</g-emoji> Output optimization</h4> <ul> <li><code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15418" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15418/hovercard">#15418</a> [ts] Handle exponentiation operator in constant folding (<a href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>)</li> </ul> </li> </ul> <h4>Committers: 11</h4> <ul> <li>Abdulaziz Ghuloum (<a href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>)</li> <li>Babel Bot (<a href="https://snyk.io/redirect/github/babel-bot">@ babel-bot</a>)</li> <li>Emanuel Hoogeveen (<a href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>)</li> <li>Frank Wienberg (<a href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>)</li> <li>Huáng Jùnliàng (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> <li>Mateusz Burzyński (<a href="https://snyk.io/redirect/github/Andarist">@ Andarist</a>)</li> <li>Nicolò Ribaudo (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> <li><a href="https://snyk.io/redirect/github/Lioness100">@ Lioness100</a></li> <li><a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a></li> <li><a href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a></li> <li>fisker Cheung (<a href="https://snyk.io/redirect/github/fisker">@ fisker</a>)</li> </ul> </li> <li> <b>7.20.12</b> - <a href="https://snyk.io/redirect/github/babel/babel/releases/tag/v7.20.12">2023-01-04</a></br><h2>v7.20.12 (2023-01-04)</h2> <p>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/cross19xx/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/cross19xx">@ cross19xx</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/JBYoshi/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/JBYoshi">@ JBYoshi</a> and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nmn/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/nmn">@ nmn</a> for your first PRs!</p> <h4><g-emoji class="g-emoji" alias="bug" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png">🐛</g-emoji> Bug Fix</h4> <ul> <li><code>babel-traverse</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15224" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15224/hovercard">#15224</a> Fix <code>TaggedTemplateLiteral</code> evaluation (<a href="https://snyk.io/redirect/github/nmn">@ nmn</a>)</li> </ul> </li> <li><code>babel-helper-create-class-features-plugin</code>, <code>babel-plugin-proposal-class-properties</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15312" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15312/hovercard">#15312</a> fix: <code>delete this</code> in static class properties initialization (<a href="https://snyk.io/redirect/github/SuperSodaSea">@ SuperSodaSea</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="nail_care" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f485.png">💅</g-emoji> Polish</h4> <ul> <li><code>babel-traverse</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15313" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15313/hovercard">#15313</a> Implement support for evaluating computed properties. (<a href="https://snyk.io/redirect/github/JBYoshi">@ JBYoshi</a>)</li> </ul> </li> </ul> <h4>Committers: 5</h4> <ul> <li>Jonathan Browne (<a href="https://snyk.io/redirect/github/JBYoshi">@ JBYoshi</a>)</li> <li>Kenneth Kwakye-Gyamfi (<a href="https://snyk.io/redirect/github/cross19xx">@ cross19xx</a>)</li> <li>Naman Goel (<a href="https://snyk.io/redirect/github/nmn">@ nmn</a>)</li> <li>Nicolò Ribaudo (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> <li>Tianlan Zhou (<a href="https://snyk.io/redirect/github/SuperSodaSea">@ SuperSodaSea</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/babel/babel/releases">@babel/core GitHub release notes</a> </details> </details> <hr/> **Note:** *You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.* For more information: <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIxMjFlNDk2Mi01NjQ2LTRjNzEtYmY1My02ZTg1MWE1YzNiMTciLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjEyMWU0OTYyLTU2NDYtNGM3MS1iZjUzLTZlODUxYTVjM2IxNyJ9fQ==" width="0" height="0"/> 🧐 [View latest project report](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr) 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55/settings/integration?pkg=@babel/core&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) <!--- (snyk:metadata:{"prId":"121e4962-5646-4c71-bf53-6e851a5c3b17","prPublicId":"121e4962-5646-4c71-bf53-6e851a5c3b17","dependencies":[{"name":"@babel/core","from":"7.20.12","to":"7.21.0"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/sandbox-2ba/project/852e6e4f-be96-45c8-b370-1060f5ebee55?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"852e6e4f-be96-45c8-b370-1060f5ebee55","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-02-20T15:31:22.823Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]}) ---> --------- Co-authored-by: snyk-bot <snyk-bot@snyk.io>
<p>This PR was automatically created by Snyk using the credentials of a real user.</p><br /><h3>Snyk has created this PR to upgrade @babel/core from 7.21.0 to 7.21.3.</h3> :information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project. <hr/> - The recommended version is **1 version** ahead of your current version. - The recommended version was released **22 days ago**, on 2023-03-14. <details> <summary><b>Release notes</b></summary> <br/> <details> <summary>Package name: <b>@babel/core</b></summary> <ul> <li> <b>7.21.3</b> - <a href="https://snyk.io/redirect/github/babel/babel/releases/tag/v7.21.3">2023-03-14</a></br><h2>v7.21.3 (2023-03-14)</h2> <p>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/amoeller/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/amoeller">@ amoeller</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Harpica/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/Harpica">@ Harpica</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/nzakas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/nzakas">@ nzakas</a> for your first PRs!</p> <h4><g-emoji class="g-emoji" alias="eyeglasses" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f453.png">👓</g-emoji> Spec Compliance</h4> <ul> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15479" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15479/hovercard">#15479</a> disallow mixins/implements in flow interface (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="bug" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png">🐛</g-emoji> Bug Fix</h4> <ul> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15423" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15423/hovercard">#15423</a> [ts] Allow keywords in tuple labels (<a href="https://snyk.io/redirect/github/Harpica">@ Harpica</a>)</li> </ul> </li> <li><code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15489" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15489/hovercard">#15489</a> Register <code>var</code> decls generated by <code>import ... =</code> TS transform (<a href="https://snyk.io/redirect/github/amoeller">@ amoeller</a>)</li> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15494" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15494/hovercard">#15494</a> fix: Consider <code>export { type foo }</code> as type-only usage (<a href="https://snyk.io/redirect/github/magic-akari">@ magic-akari</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="nail_care" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f485.png">💅</g-emoji> Polish</h4> <ul> <li><code>babel-traverse</code>, <code>babel-types</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15484" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15484/hovercard">#15484</a> Skip node deprecation warnings when used by an old <code>@ babel</code> package (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-generator</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15480" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15480/hovercard">#15480</a> chore: Improve <code>jsonCompatibleStrings</code> deprecation (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="house" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png">🏠</g-emoji> Internal</h4> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15465" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15465/hovercard">#15465</a> Add ESLint-readable package name (<a href="https://snyk.io/redirect/github/nzakas">@ nzakas</a>)</li> </ul> <h4><g-emoji class="g-emoji" alias="microscope" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png">🔬</g-emoji> Output optimization</h4> <ul> <li><code>babel-plugin-transform-typescript</code>, <code>babel-preset-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15467" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15467/hovercard">#15467</a> Optimize TS enums output (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> </ul> <h4>Committers: 8</h4> <ul> <li>Alexandra Kadykova (<a href="https://snyk.io/redirect/github/Harpica">@ Harpica</a>)</li> <li>Anders Møller (<a href="https://snyk.io/redirect/github/amoeller">@ amoeller</a>)</li> <li>Babel Bot (<a href="https://snyk.io/redirect/github/babel-bot">@ babel-bot</a>)</li> <li>Huáng Jùnliàng (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> <li>Nicholas C. Zakas (<a href="https://snyk.io/redirect/github/nzakas">@ nzakas</a>)</li> <li>Nicolò Ribaudo (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> <li><a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a></li> <li>magic-akari (<a href="https://snyk.io/redirect/github/magic-akari">@ magic-akari</a>)</li> </ul> </li> <li> <b>7.21.0</b> - <a href="https://snyk.io/redirect/github/babel/babel/releases/tag/v7.21.0">2023-02-20</a></br><h2>v7.21.0 (2023-02-20)</h2> <p>Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/azizghuloum/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ehoogeveen-medweb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>, <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/fwienber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>, and <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Lioness100/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://snyk.io/redirect/github/Lioness100">@ Lioness100</a> for your first PRs!</p> <h4><g-emoji class="g-emoji" alias="rocket" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f680.png">🚀</g-emoji> New Feature</h4> <ul> <li><code>babel-core</code>, <code>babel-helper-create-class-features-plugin</code>, <code>babel-plugin-proposal-class-properties</code>, <code>babel-plugin-proposal-private-methods</code>, <code>babel-plugin-proposal-private-property-in-object</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15435" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15435/hovercard">#15435</a> feat: Implement <code>privateFieldsAsSymbols</code> assumption for classes (<a href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>)</li> </ul> </li> <li><code>babel-helper-create-regexp-features-plugin</code>, <code>babel-plugin-proposal-regexp-modifiers</code>, <code>babel-standalone</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15226" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15226/hovercard">#15226</a> feat: Support regexp modifiers proposal (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-cli</code>, <code>babel-core</code>, <code>babel-generator</code>, <code>babel-plugin-transform-destructuring</code>, <code>babel-plugin-transform-modules-commonjs</code>, <code>babel-plugin-transform-react-jsx</code>, <code>babel-traverse</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15022" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15022/hovercard">#15022</a> feat: Generate sourcemaps of friendly call frames (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-parser</code>, <code>babel-types</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15384" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15384/hovercard">#15384</a> [ts] Support <code>const</code> modifier in type parameters (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-generator</code>, <code>babel-helpers</code>, <code>babel-parser</code>, <code>babel-plugin-proposal-decorators</code>, <code>babel-plugin-syntax-decorators</code>, <code>babel-runtime-corejs2</code>, <code>babel-runtime-corejs3</code>, <code>babel-runtime</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15405" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15405/hovercard">#15405</a> Implement decorators as presented at <code>2023-01</code> TC39 meeting (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15114" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15114/hovercard">#15114</a> Parser option to allow <code>new.target</code> outside functions (<a href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a>)</li> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15320" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15320/hovercard">#15320</a> Add <code>annexb: false</code> parser option to disable Annex B (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15283" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15283/hovercard">#15283</a> feat: Support <code>.cts</code> as configuration file (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-generator</code>, <code>babel-parser</code>, <code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15381" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15381/hovercard">#15381</a> [ts] Support <code>export type * from</code> (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="bug" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png">🐛</g-emoji> Bug Fix</h4> <ul> <li><code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15379" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15379/hovercard">#15379</a> [ts5.0] Better inlining of constants in enums (<a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a>)</li> </ul> </li> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15366" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15366/hovercard">#15366</a> handling circular/shared structures in deep-clone (<a href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>)</li> </ul> </li> <li><code>babel-helper-create-class-features-plugin</code>, <code>babel-plugin-proposal-class-properties</code>, <code>babel-plugin-proposal-class-static-block</code>, <code>babel-plugin-proposal-private-methods</code>, <code>babel-plugin-transform-classes</code>, <code>babel-plugin-transform-new-target</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15406" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15406/hovercard">#15406</a> Preserve class elements comments in class transform (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> </ul> </li> <li><code>babel-parser</code>, <code>babel-plugin-transform-flow-comments</code>, <code>babel-plugin-transform-flow-strip-types</code>, <code>babel-types</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15414" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15414/hovercard">#15414</a> [ts] Fix restrictions for optional parameters (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="nail_care" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f485.png">💅</g-emoji> Polish</h4> <ul> <li><code>babel-parser</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15400" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15400/hovercard">#15400</a> polish: improve "<code>await</code> as identifier" error in modules (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="house" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png">🏠</g-emoji> Internal</h4> <ul> <li><code>babel-core</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15137" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15137/hovercard">#15137</a> Improve CJS compat with ESM-based <code>@ babel/core</code> (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> </ul> </li> </ul> <h4><g-emoji class="g-emoji" alias="microscope" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png">🔬</g-emoji> Output optimization</h4> <ul> <li><code>babel-plugin-transform-typescript</code> <ul> <li><a href="https://snyk.io/redirect/github/babel/babel/pull/15418" data-hovercard-type="pull_request" data-hovercard-url="/babel/babel/pull/15418/hovercard">#15418</a> [ts] Handle exponentiation operator in constant folding (<a href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>)</li> </ul> </li> </ul> <h4>Committers: 11</h4> <ul> <li>Abdulaziz Ghuloum (<a href="https://snyk.io/redirect/github/azizghuloum">@ azizghuloum</a>)</li> <li>Babel Bot (<a href="https://snyk.io/redirect/github/babel-bot">@ babel-bot</a>)</li> <li>Emanuel Hoogeveen (<a href="https://snyk.io/redirect/github/ehoogeveen-medweb">@ ehoogeveen-medweb</a>)</li> <li>Frank Wienberg (<a href="https://snyk.io/redirect/github/fwienber">@ fwienber</a>)</li> <li>Huáng Jùnliàng (<a href="https://snyk.io/redirect/github/JLHwung">@ JLHwung</a>)</li> <li>Mateusz Burzyński (<a href="https://snyk.io/redirect/github/Andarist">@ Andarist</a>)</li> <li>Nicolò Ribaudo (<a href="https://snyk.io/redirect/github/nicolo-ribaudo">@ nicolo-ribaudo</a>)</li> <li><a href="https://snyk.io/redirect/github/Lioness100">@ Lioness100</a></li> <li><a href="https://snyk.io/redirect/github/liuxingbaoyu">@ liuxingbaoyu</a></li> <li><a href="https://snyk.io/redirect/github/overlookmotel">@ overlookmotel</a></li> <li>fisker Cheung (<a href="https://snyk.io/redirect/github/fisker">@ fisker</a>)</li> </ul> </li> </ul> from <a href="https://snyk.io/redirect/github/babel/babel/releases">@babel/core GitHub release notes</a> </details> </details> <hr/> **Note:** *You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.* For more information: <img src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiI4ZDVkNTAxNi0zZGY0LTRhN2QtOGEwZC1mMGYyZDUyMTg4YTgiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjhkNWQ1MDE2LTNkZjQtNGE3ZC04YTBkLWYwZjJkNTIxODhhOCJ9fQ==" width="0" height="0"/> 🧐 [View latest project report](https://app.snyk.io/org/scudette/project/76f4d127-566b-42ef-86f4-bdcbc92b90b4?utm_source=github&utm_medium=referral&page=upgrade-pr) 🛠 [Adjust upgrade PR settings](https://app.snyk.io/org/scudette/project/76f4d127-566b-42ef-86f4-bdcbc92b90b4/settings/integration?utm_source=github&utm_medium=referral&page=upgrade-pr) 🔕 [Ignore this dependency or unsubscribe from future upgrade PRs](https://app.snyk.io/org/scudette/project/76f4d127-566b-42ef-86f4-bdcbc92b90b4/settings/integration?pkg=@babel/core&utm_source=github&utm_medium=referral&page=upgrade-pr#auto-dep-upgrades) <!--- (snyk:metadata:{"prId":"8d5d5016-3df4-4a7d-8a0d-f0f2d52188a8","prPublicId":"8d5d5016-3df4-4a7d-8a0d-f0f2d52188a8","dependencies":[{"name":"@babel/core","from":"7.21.0","to":"7.21.3"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/scudette/project/76f4d127-566b-42ef-86f4-bdcbc92b90b4?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"76f4d127-566b-42ef-86f4-bdcbc92b90b4","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2023-03-14T14:59:44.759Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]}) ---> Co-authored-by: snyk-bot <snyk-bot@snyk.io>
The first few commits are just boilerplate to add a new decorators version:
version: "2023-01"
optionapplyDecs2301
The important commits are:
access.get
andaccess.set
, implementing the first part ofcontext.access
API implementation feedback. tc39/proposal-decorators#494.has
method tocontext.access
, implementing the second part ofcontext.access
API implementation feedback. tc39/proposal-decorators#494access.get
/access.set
, an existing bug that I spotted and could easily fixed thanks to the new access to.has
.decoratorsBeforeExport
is not specifiedWhen reviewing the tests, please review these important commits one by one to properly see the relative diff.
These changes got consensus during the last TC39 meeting, but there is no spec yet for them. This PR shouldn't be merged until then (@DanielRosenwasser @rbuckton ping me if you need a review for the spec PR!).
@DanielRosenwasser @rbuckton When defining
.has
for public class members, I usedHasProperty
instead ofHasOwnProperty
so that it's consistent with the usage ofGet
in the.get
method. Does that match your expectations?Some questions for reviewers:
export
only when thedecoratorsBeforeExport
option is not explicitly set totrue
orfalse
. Technically it's backward compatible to just ignore that option and always allow non-legacy decorators in both places; should we do it? It would slightly simplify the implementation.@babel/generator
always prints decorators afterexport
(unless the generator optiondecoratorsBeforeExport: true
is specified). We don't make any guarantee regarding the output format so I think this is fine, however swapping decorators with theexport
keyword when printing has the unfortunate effect of removing some comments. Do you think we should print decorators in the same position as they appeared in the input source code?