Commit Graph
44 Commits
Author SHA1 Message Date
Chris Tate e7d5c67cdc Add Node 24 readable stream readers, controllers, and tee (#661) 2026-10-04 06:07:41 -05:00
Chris Tate 3aad3e8ebe Add Node 24 Web Stream pipelines and streaming encoding (#660) 2026-10-04 05:36:27 -05:00
Chris Tate 99613bce5a Add Node 24 writable Web Streams support (#659) 2026-10-04 04:54:43 -05:00
Chris Tate 095673351e Add Node 24 URL authority and protocol mutation support (#658) 2026-10-04 04:14:12 -05:00
Chris Tate 41b5eed650 Add Node 24 URL mutation support (#654)
* Add Node 24 URL mutation support

* Record preflight baselines for URL mutation fixtures
2026-10-04 01:57:10 -05:00
Chris Tate 4eb4e71d9b Expand Node 24 ESM metadata compatibility (#653)
* Expand Node 24 ESM metadata compatibility

* Fix ESM metadata lowering in native compiler bootstrap
2026-10-04 01:03:02 -05:00
Chris Tate 2dcd4b9e35 Add native util.types probes and reliable embedded brand checks (#652) 2026-10-03 23:49:39 -05:00
Chris Tate 44f7e7680e Add Node 24 util.styleText compatibility (#651) 2026-10-03 22:54:00 -05:00
Chris Tate ba79399aba Add Node 24 deep equality support (#650) 2026-10-03 21:56:40 -05:00
Chris Tate b7d5ea2722 Support Node 24 no-error assertions (#648) 2026-10-03 20:16:24 -05:00
Chris Tate eb83febcf2 Support Node 24 text utilities (#647) 2026-10-03 19:21:34 -05:00
Chris Tate b8344a6cb5 Support Node 24 system error utilities (#646)
* Support Node 24 system error utilities

* Wait for writable drain in the stream fixture
2026-10-03 18:34:51 -05:00
Chris Tate bc7c9f6bf6 Support Node 24 file URL buffers and platform options (#645)
* Support Node 24 file URL bytes and runtime platform options

* Record preflight baselines for file URL conversion fixtures
2026-10-03 17:33:04 -05:00
Chris Tate 7a0f38cbb3 Expand Node 24 diagnostics channel compatibility (#643) 2026-10-03 15:51:00 -05:00
Chris Tate 7a3794d8dd fix: emit TypeScript runtime package sources (#641) 2026-10-03 15:43:26 -05:00
Chris Tate 91ab7a68ce Expand Node 24 CommonJS module compatibility (#642) 2026-10-03 15:12:07 -05:00
Chris Tate 6aa1370507 feat: support Node 24 MIME utilities (#640)
* feat: support Node 24 MIME utilities in the dynamic runtime

* test: record frontend baselines for MIME fixtures
2026-10-03 14:23:41 -05:00
Chris Tate 64a66ddd46 Expand Node 24 promise timer compatibility (#637) 2026-10-03 13:00:14 -05:00
Chris Tate b76aa555f0 Expand Node 24 async event consumption compatibility (#636) 2026-10-03 12:18:14 -05:00
Chris Tate 724fa7591b Expand Node 24 EventEmitter listener lifecycle compatibility (#635) 2026-10-03 11:37:49 -05:00
Chris Tate 992e49159f Expand Node 24 callback and promise adapter compatibility (#633)
* Expand Node 24 callback and promise adapter compatibility

* Keep runtime diff focused on util adapters
2026-10-03 10:17:30 -05:00
Chris Tate c76ac2b95f Expand Node 24 dynamic argument parsing compatibility (#632)
* Expand Node 24 dynamic argument parsing compatibility

* Match Node argument error string truncation and quoting
2026-10-03 09:29:06 -05:00
Chris Tate 83b6156282 Expand Node 24 StringDecoder input and streaming support (#631) 2026-10-03 08:20:12 -05:00
Chris Tate 50a2731631 Expand Node 24 text-encoding support (#629)
* Expand Node 24 text-encoding support

* Update codec diagnostics for encodeInto support
2026-10-03 05:38:29 -05:00
Chris Tate 176305530c Add Node 24 environment-file support (#628)
* Add Node 24 environment-file support

* Update runtime harnesses for environment-file URL paths

* Link URL dependencies in weak metadata runtime tests
2026-10-03 04:44:57 -05:00
Chris Tate da852757a3 Add Node 24 URL factories and shared parsing (#627)
* Add Node 24 URL factories and shared parsing

* Clarify URL fixture name and remaining refusal coverage

* Update island URL test for protocol-relative resolution
2026-10-03 03:19:05 -05:00
Chris Tate 8d161d4982 Add Node 24 scrypt, HKDF, and SHA-2 crypto support (#626) 2026-10-03 01:47:42 -05:00
Chris Tate 7d2d2116ec Expand Node 24 filesystem descriptor and FileHandle support (#625)
* Expand Node 24 filesystem descriptor and FileHandle support

* Preserve filesystem options getter evaluation and record fixture baselines

* Normalize the known Linux fiber warning in npm stderr comparisons
2026-10-03 00:41:02 -05:00
Chris Tate 3af05d9fbc feat(compiler): lower the complete frontend statically
- Complete frontend lowering with zero rejected statements, dynamic islands, or skipped functions.
- Support contextual construction, presence guards, and union record copies used by the compiler.
- Add native CommonJS resolution and cross-platform file URL handling while preserving Node host behavior.
2026-09-28 23:49:13 -05:00
Chris Tate 806b96d32b feat(compiler): own the TypeScript server from native clients
- Launch and manage TypeScript server processes through a portable native FFI boundary.
- Share the production session API between Node and statically compiled clients.
- Preserve Unicode command-line arguments and release server resources on every exit path.
2026-09-28 09:54:18 -05:00
Chris Tate f7d217f0d5 Support native ReferenceError, EvalError, and URIError (#501)
* Support additional native Error subclasses

* fix error identity across island callback bridge

* record new Error family parity entry
2026-09-27 20:27:50 -05:00
Chris TateandArtem Gurtovoi 0d05e56e52 fix: let Redis 6 load in dynamic islands (#449)
- Make DNS promises imports load with the expected exports and explicit query errors.
- Resolve CommonJS directory requires used during Redis initialization.
- Record the missing TypeScript order baselines required by the full gate.

Fixes #434

Co-authored-by: Artem Gurtovoi <1233869+temich@users.noreply.github.com>
2026-09-25 20:39:50 -05:00
Chris Tate 625b27af4a Make island EventEmitter callable for legacy packages (#433) (#445)
- Support EventEmitter.call(this) while preserving class inheritance and emitter state.
- Cover legacy and modern constructors in Node differential tests.
2026-09-25 17:38:33 -05:00
Chris TateandHagege Ruben 8a12d34a1d fix(compiler): resolve package imports in npm graphs (#375)
* fix(compiler): resolve package imports in npm graphs

- Resolve package-scoped import maps with edge-specific conditions and diagnostics.
- Add Chalk-compatible ambient typing and differential coverage across import forms.

Fixes #374

Co-authored-by: Hagege Ruben <20857346+HagegeR@users.noreply.github.com>

* test(compiler): make resolver parity paths portable

- Normalize path separators before excluding package runtime trees from resolver parity sweeps.

---------

Co-authored-by: Hagege Ruben <20857346+HagegeR@users.noreply.github.com>
2026-09-22 08:43:45 -05:00
Chris Tate ffa248efcf feat: add static crypto utility support (#335)
* feat: add static crypto utility support

* fix: match Node crypto digest errors
2026-09-16 11:15:12 -05:00
Chris Tate 2ac8743dbb feat(compiler): add Node module resolution introspection (#322) 2026-09-14 18:15:44 -05:00
Chris Tate 8faad2f639 feat: add Node.js compatibility matrix (#284)
* feat: add Node.js compatibility matrix

- Add generated Node.js v24 compatibility inventory with static and dynamic support classifications.
- Publish the interactive /compatibility matrix and wire manifest generation into runtime and docs checks.

* fix: correct compatibility matrix generation

* fix: address PR 284 review findings

* fix: address PR 284 review findings

* test: exercise stream web loader through npm graph

* fix: correct dynamic global availability

* fix: keep compatibility module mappings precise
2026-09-02 16:03:36 -05:00
Chris TateandI Plan Websites e281259db3 feat(fs): expose Stats disk metadata (#120)
* feat(fs): expose Stats disk metadata

- Lower blocks, nlink, and atimeMs through the C and LLVM backends.
- Populate path, promise, file-handle, and dynamic bridge stats across supported platforms.
- Add differential, declaration, and npm bridge coverage.

Co-authored-by: I Plan Websites <787729+iplanwebsites@users.noreply.github.com>

* fix(fs): keep Windows stats snapshots coherent

* fix(fs): preserve Windows lstat metadata

* fix(fs): validate Windows mount point payloads

---------

Co-authored-by: I Plan Websites <787729+iplanwebsites@users.noreply.github.com>
2026-08-10 12:21:11 -05:00
Chris Tate dca69db98e Fix pending top-level await exit precedence 2026-07-28 22:40:36 -05:00
Chris Tate b98d726382 for-of, destructuring, and spread over island values held in 'unknown' drain the engine's own iterator; engine arrays exit into 'any[]' slots
- The iteration pack's JSVAL arm is ARMED (scr_dyn_iter_pack, scr_dyn_arr_push_spread, scr_dyn_pack_push_spread_iter route through the new iter_drain ops row): the ENGINE's iterator protocol drains into a fresh DOM array — engine arrays, generators, Maps, Sets, and Symbol.iterator implementations step exactly as Node runs them, elements wrapping back scalar-normalized.
- for-of over checked-dynamic values LOWERS now (both backends): the source packs once through dyn.iterPack and a hidden index loop binds each element as a dyn value (new dyn.arrLen/dyn.arrAt accessors) — an eager snapshot, the matchAll stance. Pattern heads, pre-declared and var heads, and labeled break/continue all ride the desugar. Non-iterables throw V8's for-of CallPrinter spellings, threaded into the engine-side guard.
- The validated exit gains the jsval-element-array arm (scr_jsval_exit_jsval_arr, both backends): an 'any' value exits into 'any[]'- and 'any[] | undefined'-declared slots Array.isArray-gated, elements BY REFERENCE (identity crosses, the spine is a snapshot) — the withPlugins loadPlugins(plugins) boundary, the driver frontier's first named poison.
- Corpus 2604 and npm case jsval-iterate (package-minted Set/Map/generator/Symbol.iterator) are byte-identical to Node under both backends; dyncheck's jsval-iterate pin flips from the retired island fence to the armed answers; SAN clean over the drain/wrap/exit churn.
2026-07-24 11:04:10 -05:00
Chris Tate cbb567f901 Fixtures for the jsval→DOM crossing: rows 1-3 differential, the fence ladder pinned
- corpus 2578 (TS) and 2579 (JS, the JSDoc @param {object} repro shape) pin typeof/truthiness/String()/===, scalar normalization, representation-free narrowing, and the identity round trip against Node on both backends
- npm case jsval-into-dyn drives the prettier-plugins shape over a real package surface (the new plugstub fixture package: any-declared exports carrying engine functions)
- dyncheck jsval-* tests pin every loud fence (keyed read/write, member calls, 'in', destructuring, JSON.stringify, structuredClone, Object.keys, deepStrictEqual, inspect) plus the RC-clean catch-and-continue unwind under the SAN lane
- the errors.test.ts SC1101 pin flips to the now Node-exact behavior (the retired "one unbridgeable mix": the wrapped argument compiles and the unbound-this read throws Node's own TypeError); ts7 order-parity baselines record the three new fixtures
2026-07-24 01:59:28 -05:00
Chris Tate 6162354076 esbuild's __toESM external-dependency interop compiles under --npm-static
- The bundler-CJS rewrite erases recognized __toESM(require("x")) wrappers — module-scope bindings, the `, 1` node-mode variant, inline member reads — down to the bare require at its original offsets; .default accesses pad to the binding where Node's answer is the module (plain-CJS targets, node mode) and stay member reads for __esModule-stamped targets, decided by a require-resolution probe over the target's shipped source (forwarding chains followed)
- Interop the recognizer cannot finish — deviant helper text, escaping interop objects, non-literal arguments, ESM-output calls — answers { degrade }: the fs shadow reports the package as an offender with a note naming the construct and the fallback loop islands it, never a failed build and never the silent alternative (a live helper chain's `var __create = Object.create;` fences at module load while the report claims static); auto and explicit opt-ins share the path
- Bare requires of opted-in packages now behave like relative ones end to end: requireInitStmt emits the dep's inline %init (previously the module never initialized before its exports were read), and cjsLocalModuleBindingOf/resolveValueSymbol resolve member reads and namespace method calls through the npm-static dep's export table
- Erased wrappers join the neutralize set so the helper sweep drops the whole dead chain, hoisted canonical-table texts copied off the source drop .default on module-valued bindings exactly like the pads do, and a file with interop pads but no canonical table still rewrites pads-only
- Fixtures gtcore/gtwrap/gtdrift with cases 2556-toesm-external (byte-matches Node across both dep shapes and the comma-call spelling) and 2557-toesm-drift (construct-naming degrade under explicit and auto opt-ins), excluded from the flagless island lane like the 246x family
2026-07-23 20:23:42 -05:00
Chris Tate 6a4a94fa26 Pin the getter-table shapes: npm cases 2465-2469
- 2465-2468 byte-match Node fully static: the esbuild __export table, the __reExport star, the tsc __exportStar barrel, and the defineProperty getter family
- 2469 pins consumer-anchored degradation: a type-only surface name drops exactly the named package to the island with the site-count note
- auto opts a getter-table bundle in (the marker relaxation), and the untyped-package stub pin replaces the accidental inferred-surface bonus
- the island differential lane excludes the opt-in-only cases by design
2026-07-23 11:47:44 -05:00
Chris Tate 23d5918a53 init 2026-07-22 18:08:04 -05:00