github PerryTS/perry v0.5.581

latest releases: v0.5.1182, v0.5.1181, v0.5.1180...
one month ago

Highlights

The native package ecosystem v1 is complete (#466). All 34 in-tree wrappers ported to standalone perry-ext-* crates that depend only on perry-ffi. The well-known bindings flip is default-on — import { createConnection } from 'mysql2' (and 33 other wrappers) automatically routes to its standalone crate without any user install action, byte-identical to the old in-stdlib code path.

Hono / drizzle-orm shake-out (#421 / #420). Several pre-existing compile blockers cleared: primitive-literal exports (var X = "literal"; export { X }), class Foo {}; export { Foo } (#482), new Set(string), new Response(body, optsVar), duplicate-symbol fallback wrapper.

Net regression recovery (5 → 1). The v0.5.571 perry-ext-net port introduced reactor / event-pump / dispatch regressions that crashed every net program. All but one (test_net_upgrade_tls, environmental) recovered: tokio feature unification, pump registration, LTO black-box, issue #91 HANDLE_METHOD_DISPATCH for Map.get'd sockets.

Phase 5 — wrapper ports (#466)

All wrappers from the issue body's migration order, smallest-first, plus several net-new bindings:

  • v0.5.530 — perry-ffi extracted (Phase 1) + perry-ext-dotenv (acceptance test)
  • v0.5.531 — manifest spec frozen, abiVersion enforced (Phase 2)
  • v0.5.532–v0.5.555 — wrapper ports: nanoid / uuid / slugify / bcrypt / argon2 / jsonwebtoken / validator / lru-cache / better-sqlite3 / zlib / exponential-backoff / events / decimal / dayjs / moment / cheerio / sharp / rate-limit / commander
  • v0.5.543 + v0.5.544 — closes #424 (Tursodb) + closes #425 (Iroh P2P) as the first net-new wrappers (later moved to external repos in v0.5.557)
  • v0.5.556 — perry-ffi BigInt + Buffer surface, ported ethers
  • v0.5.558 — nodemailer
  • v0.5.559 — perry native init/validate/list CLI scaffolding (Phase 3)
  • v0.5.560 — release-workflow drift gate for auto-generated API docs (closes #465)
  • v0.5.561 — auto-generated .d.ts shipped to user editors via perry init
  • v0.5.562 — chained-method-call leak fix in unimplemented-API gate (closes #463)
  • v0.5.564–v0.5.572 — final wrapper batch: cron / ioredis / pg / mysql2 / fetch / mongodb / ws / net / http / streams / fastify
  • v0.5.573 — closes #466: well-known bindings flip default-on. Phase 4 user-visible behavior achieved.

Wrapper count: 32 in-tree + 2 external (@perryts/tursodb, @perryts/iroh).

Hono compile shake-out (#421)

  • v0.5.574 — primitive-literal exports + new Set(string) runtime fix
  • v0.5.575 — new Response(body, optsVar) extracts status/headers from runtime opts object
  • v0.5.576 — __perry_wrap_perry_unknown_func internal linkage (multi-module link fix)
  • v0.5.577 — closes #482: class Foo {}; export { Foo }; flips class.is_exported so importer's stub registers methods/fields

Net regression fixes (#421 / #420 / issue #91)

  • v0.5.578 — perry-stdlib tokio features unified to "full" (auto-optimize was creating divergent compilations)
  • v0.5.579 — perry_ffi::spawn_blocking[_with_reactor] calls ensure_pump_registered(); external-net-pump feature added; Handle::try_current() LTO black-box
  • v0.5.580 — perry_ffi::alloc_buffer routes through extern js_buffer_alloc so all wrappers share the same thread-local Buffer registry
  • v0.5.581 — js_ext_net_is_socket_handle + dispatch_external_net_socket close issue #91 for the well-known-flipped path

Documentation

  • v0.5.529 — markdown + .d.ts API reference auto-generated from manifest (closes #465)
  • v0.5.530 — docs/native-libraries/abi.md documenting perry-ffi v0.5 surface
  • v0.5.531 — docs/native-libraries/manifest-v1.md + JSON schema
  • v0.5.563 — cross-phase audit confirming #463 / #465 / #466 unified plan harmonious end-to-end (closes #469)

Other fixes

  • v0.5.512–v0.5.518 — security advisory cleanup (jsonwebtoken / lru / validator / redis / sqlx / rusqlite bumps; drop atty)
  • v0.5.519 — log #456 / unroll-pass aliased LocalIds + FuncIds across cloned iterations
  • v0.5.520–v0.5.521 — generator inlining + #456 unroll fixes
  • v0.5.522 — sanitize scoped package.json names (closes #467)
  • v0.5.523 — export { local as keyword } for TS contextual keywords (closes #460)
  • v0.5.524 — stub registry + first-call diagnostic for no-op stubs (closes #464)
  • v0.5.525 — fallback perry_fn_<mod>__<exported> for class-as-function exports (refs #461)
  • v0.5.526 — TypeError on property access against undefined/null (closes #462)
  • v0.5.527 — Buffer.{read,write}{U,}Int{BE,LE} variable-byteLength forms (closes #470)
  • v0.5.528 — compile-time error for unimplemented Node/Web APIs (closes #463)

Closed issues this release

#424 #425 #434 #443 #454 #456 #457 #460 #461 #462 #463 #464 #465 #466 #467 #469 #470 #482 — 18 issues closed.

Parity

98.5% (209 pass / 3 fail / 0 compile-fail / 13 skip). Three failures are pre-existing edge cases (test_edge_destructuring, test_edge_objects_records, test_gap_object_methods — strict-mode property descriptors).

Out of scope / followups

  • perry-ffi publication to crates.io (currently git-URL consumed) — v0.6.0 plan
  • spawn_async perry-ffi surface for cooperative async streaming — v0.6.0
  • test_net_upgrade_tls parity (needs TLS test fixture server)
  • hono full request/response dispatch chain (route registration works; deeper routing has lingering issues from class private fields + closures)
  • drizzle query execution against real Postgres (schema construction works)

Don't miss a new perry release

NewReleases is sending notifications on new releases.