-
Notifications
You must be signed in to change notification settings - Fork 13.3k
tsc compile proposal-explicit-resource-management different from babel and swc #58234
Copy link
Copy link
Closed
Description
🔎 Search Terms
-
proposal-explicit-resource-management
-
using
-
babel
-
swc
🕗 Version & Regression Information
- This is a crash
- This changed between versions 5.4.5__ and _______
- This changed in commit or PR _______
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________
- I was unable to test this on prior versions because _______
⏯ Playground Link
No response
💻 Code
import { deepStrictEqual } from 'node:assert'
import process from 'node:process'
let i = 0
/** @type {any} */
let err
try {
await using _x1 = {
async [Symbol.asyncDispose]() {
throw [1, ++i]
}
}
await using _x2 = {
async [Symbol.asyncDispose]() {
throw [2, ++i]
}
}
await using _x3 = {
async [Symbol.asyncDispose]() {
throw [3, ++i]
}
}
await using _x4 = {
async [Symbol.asyncDispose]() {
throw [4, ++i]
}
}
throw [5, ++i]
} catch (e) {
err = e
}
switch (process.env['TRANSPILER']) {
case 'tsc':
deepStrictEqual(err.error, [1, 5])
deepStrictEqual(err.suppressed.error, [2, 4])
deepStrictEqual(err.suppressed.suppressed.error, [3, 3])
deepStrictEqual(err.suppressed.suppressed.suppressed.error, [4, 2])
deepStrictEqual(err.suppressed.suppressed.suppressed.suppressed, [5, 1])
break
case 'swc':
deepStrictEqual(err.suppressed, [1, 5])
deepStrictEqual(err.error.suppressed, [2, 4])
deepStrictEqual(err.error.error.suppressed, [3, 3])
deepStrictEqual(err.error.error.error.suppressed, [4, 2])
deepStrictEqual(err.error.error.error.error, [5, 1])
break
case 'babel':
deepStrictEqual(err.suppressed, [1, 5])
deepStrictEqual(err.error.suppressed, [2, 4])
deepStrictEqual(err.error.error.suppressed, [3, 3])
deepStrictEqual(err.error.error.error.suppressed, [4, 2])
deepStrictEqual(err.error.error.error.error, [5, 1])
break
default:
// break
throw new Error()
}
// export { err }$ yarn tsc --version \
&& yarn swc --version \
&& yarn babel --version \
&& yarn tsc --build \
&& yarn swc ./reproduce.mjs -o ./swc/reproduce.mjs \
&& yarn babel --plugins @babel/plugin-proposal-explicit-resource-management ./reproduce.mjs -o ./babel/reproduce.mjs \
&& TRANSPILER=tsc node ./tsc/reproduce.mjs \
&& TRANSPILER=swc node ./swc/reproduce.mjs \
&& TRANSPILER=babel node ./babel/reproduce.mjs \
&& echo OK
+ yarn tsc --version
Version 5.4.5
+ yarn swc --version
@swc/cli: 0.3.12
@swc/core: 1.4.14
+ yarn babel --version
7.24.1 (@babel/core 7.24.4)
+ yarn tsc --build
+ yarn swc ./reproduce.mjs -o ./swc/reproduce.mjs
Successfully compiled 1 file with swc.
+ yarn babel --plugins @babel/plugin-proposal-explicit-resource-management ./reproduce.mjs -o ./babel/reproduce.mjs
+ TRANSPILER=tsc
+ node ./tsc/reproduce.mjs
+ TRANSPILER=swc
+ node ./swc/reproduce.mjs
+ TRANSPILER=babel
+ node ./babel/reproduce.mjs
+ echo OK
OK🙁 Actual behavior
tsc and swc and babel does not have same runtime behavior.
🙂 Expected behavior
tsc and swc and babel have same runtime behavior.
Additional information about the issue
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels