Features
console.logprints every inspectable shape: arrays, records, Maps/Sets, class instances,undefined/null, Buffers, and unions — each non-scalar argument renders through the same machinery asutil.inspect, matching Node's console semantics exactly (string union arms print raw, format-string first arguments keeputil.formatbehavior).- The
#privatemembers chain: private fields, instance and static methods, accessors, generator methods, and#x in objbrand checks all compile, with Node's lexical binding and brand semantics. node:querystringcompiles statically: the full legacy surface (parse,stringify,escape,unescape) with Node's exact separator,maxKeys, and malformed-escape behavior.- Command-table and generic-member patterns:
as constoption tables withString/Number/Booleanconstructor values, generic arrow instance fields, async generic methods and statics, and definite-assignment (field!) declarations all lower. - Object literals widen per-field into union arms: the reducer-action pattern — a literal whose fields fit exactly one arm of a contextual union — now compiles.
- The
performanceglobal,Response.headers/arrayBuffer()/bytes(), andMath.max/Math.minat any arity. - Workspace members install-agnostic: monorepo siblings classify identically whether the package manager symlinks or copies them into
node_modules.
Fixes
- Whole-program IR validation over large mixed static/dynamic graphs no longer surfaces internal errors: island values entering typed intrinsic slots are validated at the boundary, and
any-typed values dispatch through the checked-dynamic machinery. JSON.stringifyof a dynamic value holdingundefinednow prints identically on both backends.- Loose equality between same-kind operands lowers as strict equality.
- The limitations page documents the type surface: where scriptc's ambient world is narrower than stock TypeScript's, and what diagnostics point at instead.