github vercel-labs/scriptc v0.3.3

3 hours ago

0.3.3

Features

  • scriptc targets Node 24.22.0. Compatibility tables, tests and behavior follow Node 24.22.0.
  • node:crypto covers more of Node 24: every digest in createHash, createHmac, crypto.hash, pbkdf2 and hkdf, every Hash and Hmac encoding and option, secret KeyObjects (createSecretKey, generateKey, generateKeySync), randomFill, randomInt callbacks, randomUUID options, randomUUIDv7, and timingSafeEqual over any view or ArrayBuffer.
  • node:fs adds glob, globSync and fs/promises glob, the remaining fs/promises functions with Node's argument checks, complete fs.Stats in both lanes, and results from mkdir, readFile and write callbacks. readdir lists entries in byte order on POSIX hosts, and dynamic Dirent values have Node's prototype and inspect form.
  • Blob and File are supported.
  • readline/promises, stream.addAbortSignal and the stream/promises options are supported, and stream chunks made from strings reach user code as Buffers.
  • The legacy url API, url.domainToASCII and url.domainToUnicode are supported.
  • process.memoryUsage, process identity members, and performance marks and measures are supported.
  • EventTarget and Event can be subclassed.
  • Sockets and servers support ref() and unref(). The HTTP server enforces Node's header field limits, and util.types has Node 24's keys.
  • util.inspect prints class names and dynamic Maps and Sets as Node does.
  • localeCompare matches Node's collation for l·, U+0130, ligatures, combining Latin letters and vulgar fractions.

Performance

  • Comparator sorts use V8's TimSort, and typed-array sort and toSorted are lowered natively.
  • The allocator has 8-byte size classes below 128 bytes, so small objects waste less memory.
  • Interface calls are faster. Class methods are called directly through interfaces, interface dispatch is inlined and borrows array elements, and arrays of interface values are stored natively with direct field reads.
  • Strings append in place for fields, concatenation chains and character codes, and string retains are inlined in release builds.
  • Records are leaner. Scalar-union fields are stored inline, record parameters and returns widen by flow class, nullable records use widened record slots, result-slot entries are inlined, and conversions from typed records to unknown are cheaper.
  • Typed JSON.parse matches member names against the text and reads scalar members inline, and typed JSON.stringify writes arrays from their slots.
  • Map and Set iteration steps are inlined, and Object.values is built natively when its result is only iterated or read.
  • Array searches over objects and strings run inline, and array headers stay out of loops.
  • localeCompare is faster: it compares without building element lists and checks ASCII strings eight bytes at a time.
  • Remainders by powers of two skip fmod, number and string dynamic boxes are freed without the destroy queue, and VT control characters are stripped in one pass.

Fixes

  • parseInt rounds as Node does on each architecture.
  • New runtime globals are defined with initializers, so library localization hides them.
  • Native program objects use runtime ABI v21. Array, record and allocator layouts changed, so external object consumers must link the matching v0.3.3 runtime pack; the versioned marker rejects incompatible runtime objects at link time.

Don't miss a new scriptc release

NewReleases is sending notifications on new releases.