github PerryTS/perry v0.5.1180

6 hours ago

Native TypeScript compiler — 130 commits since v0.5.1167. Highlights below; full diff: v0.5.1167...v0.5.1180.

Highlights

  • npm packages compile natively at much higher fidelity — extensive CJS-wrap and resolution fixes for ajv, pino, commander, execa, hono, semver/joi/winston, uuid, dayjs.
  • Intl support expandedgetCanonicalLocales, supportedValuesOf, formatToParts, plus ListFormat/RelativeTimeFormat/PluralRules (#5320).
  • Codegen & lowering perf — outlined inline allocator (~17% faster), shared constructor symbol (~2.5x), O(1) HIR registry/scope/closure-capture analysis, smaller IR.
  • Binary size — per-app feature gating (regex/Temporal/URL/normalize/segmenter), devirtualized native-module dispatch (−20% hello-world __text), gated dgram/diagnostics.

Features

  • feat(intl): getCanonicalLocales, supportedValuesOf, formatToParts + ListFormat/RelativeTimeFormat/PluralRules (#5320)
  • feat(hir): Annex B B.3.3 sloppy block-level function hoisting (#5319); emit nested namespaces (#5167)
  • feat(error): source location on construct + ReferenceError throws (#5274); on dynamic call-dispatch TypeErrors (#5250)
  • feat(compile): defer unimplemented node/stdlib APIs, dynamic import(), eval/new Function, and .wasm imports to throw-on-reach (#5246, #5233, #5209, #5236); text-asset imports as string (#5224)
  • feat(cluster): primary-coordinated shared port for listen(0) + SCHED_RR fd-passing (#5193)
  • feat(wearos): full Wear OS app target — `--target wearos` / `perry run wearos` (#5173)
  • feat(resolve): honor tsconfig compilerOptions.paths/baseUrl (#5215); lower require("") to module namespace (#5220)
  • feat(plugin): unregister/off methods for hooks, tools, services, routes, events (#5279)
  • feat(compile): per-app feature gating for regex/Temporal/URL/normalize/segmenter (#5153)
  • feat(ui-windows-winui): render-backend dispatch seam + startup probe (#4897)

Fixes

  • CJS/compile-package: alias-vs-named-export collisions, chain-aware class hoist, function-nested class exports, commander real-source compile (#5337, #5328, #5325, #5212)
  • resolve: honor 'node' exports condition above 'default' (execa) (#5339); symlinked relative imports (#5210)
  • proxy/reflect: Array.prototype on proxy arrays (#5208), Reflect.set/construct receiver segfaults (#5164, #5184)
  • http/net: res.setHeaders SIGSEGV (#5175), 100-continue handshake (#5123), web-fetch/node:http pump split (#5189), socket.write from data handler (#5120)
  • runtime/object: getPrototypeOf identity (#5192), symbol keys + accessor descriptors (#5177), TypedArray @@toStringTag (#5318), Promise expando props (#5188)
  • gc: register per-class keys-array global as GC root (#5162); root source string across slice (#5160)
  • regex: stop false-rejecting valid char classes & bounded quantifiers (#5277)
  • Next.js standalone walls 36-46 (#5125, #5152, #5178)

Performance

  • perf(codegen): outline per-new-site inline allocator (#5294); shared constructor symbol (#5304); inline class-field shape guard (#5198); guarded numeric array index reads (#5132)
  • perf(hir): O(1) registry/scope/closure-capture lookups, fix exponential native-fluent re-lowering (#5267, #5270)
  • perf(transform): inline small this-using methods on exact receivers (#5092)
  • perf(size): devirtualize native-module dispatch tables (#5256)

Infrastructure

  • ci: move sccache onto persisted disk cache (#5324); cache-warm workflow (#5326); bound cargo-test timeout (#5221)
  • test262: un-skip eval/intl402/property-escapes; honest parity numbers (#5300, #5327)
  • npm: ship static archives zstd-compressed to clear E413 size limit (#5145)
  • test(node-suite): ratchet baseline to clean 98.1% (#5166)

Don't miss a new perry release

NewReleases is sending notifications on new releases.