Commit Graph
3134 Commits
Author SHA1 Message Date
Malte Ubl 7cc39c3db4 Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-23 08:10:02 -07:00
Malte Ubl 23f1ac4b06 Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 08:09:34 -07:00
Malte Ubl 7438e6cc2c Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 08:09:07 -07:00
Malte Ubl 95b9b05096 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-23 08:08:40 -07:00
Malte Ubl b921774bf6 Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-23 08:08:13 -07:00
Malte Ubl 17218d8c38 Merge remote-tracking branch 'origin/ni/i1-stack-bound' into HEAD 2026-10-23 08:07:47 -07:00
Malte Ubl e5060d5085 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-23 08:07:26 -07:00
Malte Ubl 2d518aa680 Merge remote-tracking branch 'origin/ni-2-node-island-report' into HEAD 2026-10-23 08:06:55 -07:00
Malte UblandClaude Opus 5.5 f32d0cd184 Make the packaging island fixture a webpack bundle
Main now compiles minified npm packages (#1989), so ni-minified no
longer refuses and the island report lost its packaging class. The
fixture is now ni-bundled, whose build-transform markers still refuse it
as shipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 08:06:38 -07:00
Malte Ubl 433cbaf3ac Merge remote-tracking branch 'origin/main' into HEAD 2026-10-23 07:54:16 -07:00
Malte Ubl 586ec48c22 Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD 2026-10-23 07:23:57 -07:00
Malte Ubl b2bd9dabce Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 07:23:36 -07:00
Malte Ubl 545013908a Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 07:23:14 -07:00
Malte Ubl 7cbddb7dd2 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD 2026-10-23 07:22:53 -07:00
Malte Ubl 448b1108da Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD 2026-10-23 07:22:32 -07:00
Malte Ubl 4abfd98cb8 Merge remote-tracking branch 'origin/ni/i1-stack-bound' into HEAD 2026-10-23 07:22:11 -07:00
Malte Ubl 7c64604980 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-23 07:21:49 -07:00
Malte Ubl 1d139d7005 Merge remote-tracking branch 'origin/ni-2-node-island-report' into HEAD 2026-10-23 07:21:44 -07:00
Malte UblandClaude Opus 5.5 249773437a Update the strict-user-js coverage snapshot for main's startup section
Main now reports fenced sites in module top-level code under "runs at
startup"; the use of 'legacy' on line 22 is one of them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 07:21:37 -07:00
Chris Tate 885a829959 Compile minified npm packages such as marked (#1989) 2026-10-23 09:07:41 -05:00
Chris Tate 17c069667e Settle a var declared by a for-in or for-of loop only inside the loop body
A for-in or for-of loop stores its var binding only when it iterates. The
early-read analysis counted the loop as an unconditional store for every
later statement, so after a loop that ran zero times a closure read the
binding as initialized (typeof answered "string" where Node answers
"undefined"). The loop now settles the reads in its body; later reads
settle at the next unconditional store.
2026-10-23 09:03:59 -05:00
Malte Ubl 2365c04417 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-23 06:38:10 -07:00
Malte Ubl 11c5aeeadc Merge remote-tracking branch 'origin/ni/i6-subclasses' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
2026-10-23 06:37:26 -07:00
Malte Ubl 0a965bb87a Merge remote-tracking branch 'origin/ni/i5-shared-modules' into HEAD 2026-10-23 06:34:31 -07:00
Malte Ubl 4bbbf3e079 Merge remote-tracking branch 'origin/ni/i4-deferred' into HEAD 2026-10-23 06:33:28 -07:00
Malte Ubl 67a0656781 Merge remote-tracking branch 'origin/ni/i3-exports' into HEAD
# Conflicts:
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 06:32:59 -07:00
Malte Ubl 4596a4fa28 Merge remote-tracking branch 'origin/ni/i2-handles' into HEAD
# Conflicts:
#	packages/compiler/src/backend/native/executable.ts
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 06:32:23 -07:00
Malte UblandClaude Opus 5.5 b653f4fd08 Merge origin/ni/i1-stack-bound into ni/i2-handles
Main's FinalizationRegistry took handle tag 72, so the Node island
handle moves to 73. Island handles keep their instanceof path in the
new scr_bytes_instanceof_at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 06:31:43 -07:00
Malte Ubl 1e70c2a844 Merge remote-tracking branch 'origin/ni/islands-base' into HEAD 2026-10-23 06:29:55 -07:00
Malte Ubl 752b9e565b Merge remote-tracking branch 'origin/ni-2-node-island-report' into HEAD 2026-10-23 05:57:22 -07:00
Malte Ubl 2acfd9e723 Merge remote-tracking branch 'origin/ni/3-hosted-loop' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
#	packages/compiler/src/frontend/pipeline.ts
2026-10-23 05:57:22 -07:00
Malte Ubl 72b4020624 Merge remote-tracking branch 'origin/ni/1-libnode-loader' into HEAD 2026-10-23 05:55:50 -07:00
Malte Ubl c0a89e002b Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	packages/compiler/src/diagnostics/diagnostic.ts
#	packages/compiler/src/frontend/pipeline.ts
2026-10-23 05:55:03 -07:00
Chris Tate 8476f68136 Support writev on Transform and PassThrough, and runtime stream option values (#1944) 2026-10-23 07:53:59 -05:00
Malte Ubl 2494e7c1dc Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	packages/compiler/src/backend/native/executable.ts
#	packages/compiler/src/frontend/lowering/lower-calls.ts
#	packages/compiler/src/frontend/lowering/lowerer.ts
#	packages/runtime-pack-common/runtime-pack-matrix.mjs
2026-10-23 05:53:42 -07:00
Chris Tate 1221104388 Merge main and fix CI 2026-10-23 07:50:09 -05:00
Chris Tate 5c015be6be Try wider record arms first when a dyn value converts to a union
Records are width-tolerant, and a union's arms were tried in canonical
order, which sorts record arms by shape id. When a `{}` arm, or an arm
whose fields are all optional, came first, it took every object, so a
value converted to the union lost the fields only a wider arm has:

    const pairs = [["a", { publicKeyEncoding: 5 }], ["b", {}]];
    for (const [, v] of pairs) console.log(Object.keys(v));

printed [] twice, where Node prints [ 'publicKeyEncoding' ] and [].
A checked cast to `{ p: number; q: string } | { p?: number }` dropped
`q` the same way.

The checked conversion now tries record arms with more required fields
first, then those with more fields, and keeps the canonical order
otherwise. The union's tags are unchanged.
2026-10-23 07:47:26 -05:00
Chris Tate b8a6a6a939 Expect an untyped dependency of an opted-in library package to compile
The test refused unchecked-dependency only because its one-line index.js
looked minified. A dependency another package's JavaScript imports needs
no declarations of its own (npmStaticIneligibleReason's untypedDependency),
so with the minified refusal gone it compiles; the test now builds it and
checks the library's result.
2026-10-23 06:59:05 -05:00
Chris Tate 45de4233de Declare every http2 listener event for once and addListener (#1831) 2026-10-23 06:28:54 -05:00
Chris Tate ba5d73e90b Recognize esbuild's __commonJS helper under a minified name
Refs #1777

An identifier-minified esbuild bundle renames the __commonJS helper
(var j=(u,t)=>()=>(t||u((t={exports:{}}).exports,t),t.exports)). The
recognizer already compared the helper's shape independently of its
parameter names, but only used a renamed match to refuse the package.
A stable top-level declaration with the helper's shape now splits the
bundle's chunks like the named helper, so lru-cache's CommonJS build is
no longer refused.
2026-10-23 06:20:02 -05:00
Chris Tate a85c7c0a3b Read native handle methods as function values (#1984) 2026-10-23 06:02:41 -05:00
Chris Tate d9544bb71d Release EventTarget's shared method values at exit when only a signal read them
The EventTarget method values are cached for the program, and exit
released them only when an EventTarget, an event or a listener had
registered the unit's teardown. A program that read an AbortSignal's
addEventListener and never added a listener or made a target left the
cached functions live, and RC-audit builds exited with 99. Caching a
method value now registers the teardown too.
2026-10-23 05:57:37 -05:00
Chris Tate 967f2ec85d Compile minified npm entries and untyped regex arguments
Refs #1777

npm packages are no longer refused up front for minified JavaScript. A
bundle whose interop helpers lost their names is still refused by the
bundle recognizers, and a package whose attempt fails is still refused on
its own.

A `var` read in a later declarator of the statement that stores it
(`var a = {...}, b = {...a}`) runs after the store. A read in a function
body is now located at the body's own statement instead of the body, so
JavaScript `var` bindings read after their store in a function keep their
type instead of gaining undefined.

`replace` and `replaceAll` with an untyped search value and a callback
call the regex callback replacement for a RegExp and the string-search
helper otherwise. That helper now accepts untyped callback parameters,
passes undefined to parameters after the subject, and converts number,
boolean and untyped results with ToString.

In JavaScript, `||` and `&&` over primitives of different types whose
result tsc types `any` evaluate in the checked domain.
2026-10-23 05:55:39 -05:00
Chris Tate 8d17fe4e57 Support crypto.getCipherInfo, AES-CCM and AES key wrap (#1873) 2026-10-23 05:36:21 -05:00
Chris Tate 19e0fe8bcd Merge main and read cipher options through getters and prototypes 2026-10-23 05:33:14 -05:00
Chris Tate 40c3f69b40 Read an AbortSignal's EventTarget methods as EventTarget's own
An AbortSignal answered addEventListener, removeEventListener and
dispatchEvent read as values with functions of its own, which only ran on
AbortSignal handles: calling one on a plain EventTarget threw
ERR_INVALID_THIS. In Node they are EventTarget.prototype's methods,
shared with every target. The signal's property read now answers the
EventTarget method values (scr_event_target_method_value), which run on
any EventTarget receiver, AbortSignal included, so
signal.addEventListener === new EventTarget().addEventListener holds.
The signal's own method table keeps throwIfAborted.
2026-10-23 05:31:21 -05:00
Chris Tate 61bae8c5e0 Keep package-created values of interfaces extending package interfaces dynamic
The declaration boundary projected a user-declared interface as plain
data even when it extends a package interface. effect's Request.tagged
constructors create such values (interface Double extends
Request.Request<number>) with a prototype, so the boundary cast threw
"expected a plain object (this value has a prototype)". A user
interface now projects only when every interface it extends is
user-declared too; other values keep their JavaScript-world typing, so
the package finds its prototype members when the value goes back to it.
2026-10-23 05:30:24 -05:00
Chris Tate 63fd3cecb7 Build @hono/node-server 2.x into scriptc (#1886) 2026-10-23 05:25:14 -05:00
Chris Tate eb2fa3c829 Fire spawn listeners for a child that exits before its first poll pass
A child spawned from a listener that runs during a poll pass, such as a
'close' listener, can exit before the next pass fires its 'spawn'
listeners. The same pass's waitpid loop then settled it with 'spawn' never
emitted. Settling an exited child now fires its pending 'spawn' listeners
first, before its stream data and 'exit', as Node emits them.
2026-10-23 05:14:51 -05:00
Chris Tate 952e01d2ed Stream request bodies in the Node server adapter 2026-10-23 05:03:12 -05:00