Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/src/app/limitations/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ These are rejected at compile time with an `SC` code, a code frame, and usually

**Language edges**

- Loose `==`/`!=` comparisons compile between two numbers, two strings, or two booleans, and for the `x == null`/`x != null` nullish idiom. Other coercing comparisons are rejected — use `===`/`!==`.
- Loose `==`/`!=` comparisons compile across statically represented primitive and primitive-union operands, including number/string/boolean/BigInt coercions and the `x == null`/`x != null` nullish idiom. Object-to-primitive comparisons remain fenced because custom `valueOf`/`toString` methods can execute arbitrary code; convert the object explicitly first.
- Block- and function-scoped `using` and `await using` compile for statically represented classes with zero-parameter disposal methods and for the supported FileHandle, timer, immediate, child-process, and readline handles. Array `for (using ... of ...)` loops compile. Top-level and switch-clause declarations, disposal through an engine-held package value, and the `DisposableStack` constructors remain fenced; a caught `SuppressedError` exposes its Node-compatible `name` and `message`, while its `error` and `suppressed` payload properties remain outside the static catch surface.
- Typed async generator functions and methods compile with lazy execution, `await`, direct `yield`, queued `.next()`/`.return()`/`.throw()` requests, and `for await`. `for await` also consumes Node `Readable` streams, Web `ReadableStream` values, and statically represented class iterators whose zero-parameter `next()` returns a promise of a `{ value, done? }` record; abrupt completion runs the iterator's cleanup, including literal `destroyOnReturn` and `preventCancel` options. Async `yield*` delegation, stored Web/Node iterator handles, and other structural async-iterator objects remain fenced. The `node:timers/promises` `setInterval(delay, value)` async iterator compiles, while its AbortSignal options remain fenced.
- Generics monomorphize when the target resolves statically. The remaining edges include generic functions declared inside another function, generic class expressions, generic classes whose base depends on their own type parameters, and generic methods that would require dynamic dispatch.
Expand Down
2 changes: 1 addition & 1 deletion docs/src/generated/node-v24-compatibility-meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"schemaVersion": 3,
"nodeVersion": "24.15.0",
"nodeCommit": "848430679556aed0bd073f2bc263331ad84fa119",
"artifactVersion": "743056178b8be4cb1d5c",
"artifactVersion": "700e6429460b8481a546",
"rowCount": 3662
}
16 changes: 8 additions & 8 deletions docs/src/generated/node-v24-compatibility.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@
"apiEntries": 29,
"static": {
"supported": 0,
"partial": 15,
"refused": 6,
"partial": 17,
"refused": 4,
"not-implemented": 8,
"by-design": 0,
"unreviewed": 0,
Expand Down Expand Up @@ -1827,9 +1827,9 @@
"inherited": true
},
"static": {
"status": "refused",
"detail": "Explicitly rejected by a named compiler diagnostic.",
"verification": "explicit-refusal"
"status": "partial",
"detail": "Implemented by a dedicated static compiler/runtime path.",
"verification": "test-backed"
},
"dynamic": {
"status": "partial",
Expand Down Expand Up @@ -2023,9 +2023,9 @@
"inherited": true
},
"static": {
"status": "refused",
"detail": "Explicitly rejected by a named compiler diagnostic.",
"verification": "explicit-refusal"
"status": "partial",
"detail": "Implemented by a dedicated static compiler/runtime path.",
"verification": "test-backed"
},
"dynamic": {
"status": "partial",
Expand Down
81 changes: 54 additions & 27 deletions internal/compatibility/generated/node-v24-backlog.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"tierItemCount": 6663,
"tiers": {
"static": {
"replace-refusal": 48,
"replace-refusal": 46,
"verify-gap": 2714,
"audit-partial": 450,
"audit-partial": 452,
"classify": 2,
"implement": 81
},
Expand Down Expand Up @@ -318,7 +318,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -391,7 +392,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -431,7 +433,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -471,7 +474,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -537,12 +541,18 @@
"priority": "high",
"tiers": {
"static": {
"status": "refused",
"action": "replace-refusal",
"verification": "explicit-refusal",
"status": "partial",
"action": "audit-partial",
"verification": "test-backed",
"confidence": "high",
"source": "surface-manifest:unsupported:node-builtin.assert.equal",
"tests": []
"source": "compiler-dedicated:assert.equal",
"tests": [
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
"status": "partial",
Expand Down Expand Up @@ -581,7 +591,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -621,7 +632,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -661,7 +673,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -701,7 +714,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -776,7 +790,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -807,12 +822,18 @@
"priority": "high",
"tiers": {
"static": {
"status": "refused",
"action": "replace-refusal",
"verification": "explicit-refusal",
"status": "partial",
"action": "audit-partial",
"verification": "test-backed",
"confidence": "high",
"source": "surface-manifest:unsupported:node-builtin.assert.notEqual",
"tests": []
"source": "compiler-dedicated:assert.notEqual",
"tests": [
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
"status": "partial",
Expand Down Expand Up @@ -851,7 +872,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -891,7 +913,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -931,7 +954,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -971,7 +995,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -1011,7 +1036,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down Expand Up @@ -82287,7 +82313,8 @@
"tests/corpus/1600-assert-passing.ts",
"tests/corpus/1604-assert-deep-structures.ts",
"tests/corpus/1609-assert-async.ts",
"tests/corpus/1721-assert-throws-regex-class.ts"
"tests/corpus/1721-assert-throws-regex-class.ts",
"tests/corpus/2936-static-loose-equality.ts"
]
},
"dynamic": {
Expand Down
Loading
Loading