Repository navigation
Fix asyncIterator helper forwarding .throw() to .return() - #18283
Conversation
Thanks for opening this pull request! 🎉We really appreciate you taking the time to contribute, @brunoborta. A maintainer will take a look as soon as they can. In the meantime, please make sure that:
If anything needs adjusting we'll leave comments here. Thanks again! |
|
Build successful! You can test your changes in the REPL here: https://babeljs.io/repl/build/62272 |
|
commit: |
| var thr = this.s["throw"]; | ||
| if (thr === undefined) { | ||
| // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors | ||
| return Promise.reject(maybeError); |
There was a problem hiding this comment.
For future PRs: Per spec https://tc39.es/ecma262/#sec-%asyncfromsynciteratorprototype%.throw
If throw is not defined, we should close the syncIterator so that it can get a chance to clean up before the capability is rejected. This normative change was introduced in tc39/ecma262#2600 and we somehow missed.
There was a problem hiding this comment.
Thanks! I'll open a follow up PR for this
`AsyncFromSyncIterator.prototype.throw` looked up `this.s["return"]` instead of `this.s["throw"]`, so calling `.throw()` on the wrapper closed the underlying sync iterator instead of forwarding the error. A sync iterator delegated to via `yield*` never got the chance to `catch`; it was torn down. Regression introduced in 7.16.0. Assisted-by: Claude Fable 5.1
fab3c1d to
8706fb6
Compare
## pnpm-workspace.yaml (default) ## Dependency Updates | Package | From | To | Type | | --- | --- | --- | --- | | `@babel/core` | 8.0.6 | 8.0.7 | patch | | `@react-email/ui` | 6.11.0 | 6.11.1 | patch | | `ai` | 7.0.128 | 7.0.130 | patch | | `react-email` | 6.11.0 | 6.11.1 | patch | | `shadcn` | 4.21.3 | 4.21.4 | patch | ## Release Notes <details> <summary><b>@<!---->babel/core</b> (8.0.6 → 8.0.7)</summary> ## v8.0.7 (2026-10-07) Thanks @<!---->brunoborta, @<!---->CINC0S, @<!---->hoobnn, and @<!---->jpradelle for your first PRs! #### 🐛 Bug Fix * `babel-helper-create-regexp-features-plugin`, `babel-plugin-transform-dotall-regex`, `babel-plugin-transform-unicode-sets-regex`, `babel-preset-env` * [#18295](babel/babel#18295) Bump regexpu-core to 6.5.3 ([@<!---->JLHwung](https://github.com/JLHwung)) * `babel-plugin-transform-for-of` * [#18292](babel/babel#18292) Skip `for await` in `transform-for-of` ([@<!---->brunoborta](https://github.com/brunoborta)) * `babel-helpers`, `babel-plugin-transform-async-generator-functions`, `babel-runtime-corejs3` * [#18283](babel/babel#18283) Fix `asyncIterator` helper forwarding `.throw()` to `.return()` ([@<!---->brunoborta](https://github.com/brunoborta)) * `babel-parser` * [#18288](babel/babel#18288) fix(parser): allow await as a function expression name inside async arrow ([@<!---->JLHwung](https://github.com/JLHwung)) * `babel-helpers`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-modules-systemjs`, `babel-runtime-corejs3` * [#18284](babel/babel#18284) Guard `@@toPrimitive` usage in toPrimitive helper ([@<!---->nicolo-ribaudo](https://github.com/nicolo-ribaudo)) * `babel-plugin-transform-block-scoping` * [#18195](babel/babel#18195) fix: closures in for-loop init capture wrong binding ([@<!---->joelle-a-dev](https://github.com/joelle-a-dev)) * `babel-helper-create-class-features-plugin`, `babel-plugin-transform-private-property-in-object` * [#18265](babel/babel#18265) Return false for `#x in` on static private fields before initialization ([@<!---->hoobnn](https://github.com/hoobnn)) * `babel-traverse` * [#18151](babel/babel#18151) Evaluate TypeScript expression wrappers in `NodePath#evaluate` ([@<!---->CINC0S](https://github.com/CINC0S)) * [#18250](https://github …[full notes](https://github.com/babel/babel/releases/tag/v8.0.7) </details> <details> <summary><b>react-email</b> (6.11.0 → 6.11.1)</summary> ### Patch Changes * 54769fc: Prevent `email export` from deleting the project, the home directory, the email templates or the static assets when `--outDir` points at them. * 6926bac: `<Markdown>` now applies `markdownCustomStyles.th` to table header cells. Header cells were previously styled with `td`, so any `th` styles were ignored. </details> <details> <summary><b>shadcn</b> (4.21.3 → 4.21.4)</summary> ### Patch Changes - [#12189](shadcn-ui/ui#12189) [`76fd499595ba7cc01f49d159bd7ac82d7aca8e63`](shadcn-ui/ui@76fd499) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Drop the ts-morph dependency from @<!---->shadcn/registry. - [#12184](shadcn-ui/ui#12184) [`995c2cfff44c373bd210d451089726ec097ab917`](shadcn-ui/ui@995c2cf) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Run the icons and asChild transformers without ts-morph. - [#12160](shadcn-ui/ui#12160) [`6efecd8fe9aa167886fe2cc0c05c5623a5bb5670`](shadcn-ui/ui@6efecd8) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Edit the Next.js layout for font items without ts-morph, and skip it with a warning instead of writing a broken layout. - [#12188](shadcn-ui/ui#12188) [`efa11781f756c86debb0392fbea4fe468250b41b`](shadcn-ui/ui@efa1178) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Rewrite imports and crawl file imports without ts-morph. - [#12177](shadcn-ui/ui#12177) [`e8c3143b1cd191280befcd6c9538284bb43399a8`](shadcn-ui/ui@e8c3143) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Edit tailwind.config without ts-morph, and skip it with a warning instead of writing a broken config. - [#12183](shadcn-ui/ui#12183) [`f56bbd7282f0116a925a601cb6d7e0c3fede448b`](shadcn-ui/ui@f56bbd7) Thanks [@<!---->shadcn](https://github.com/shadcn)! - Run the rsc, import, CSS variable, cleanup, font and menu transformers without ts-morph. - [#12185](shadcn-ui/ui#12185) [`4a90344c42dc9ae47494179065219377ff5f2a8f`](https://github.com/shadcn-ui/u …[full notes](https://github.com/shadcn-ui/ui/releases/tag/shadcn%404.21.4) </details> --- *This PR was auto-generated by [catalog-update-action](https://github.com/brandhaug/catalog-update-action).* Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AsyncFromSyncIterator.prototype.throwlooked upthis.s["return"]instead ofthis.s["throw"], so.throw()on the wrapper closed the inner sync iterator instead of forwarding the error.