github PerryTS/perry v0.5.359

latest releases: v0.5.1167, v0.5.1166, v0.5.1159...
one month ago

Highlights

  • fetch + Blob/ArrayBuffer overhaulawait response.arrayBuffer() now returns real bytes (not a metadata stub) [#227 / PR #232]; await response.blob() now returns a real Blob with arrayBuffer / text / bytes / slice instance methods [#234 / PR #238]; default User-Agent perry/<version> set on the shared client so anonymous requests to e.g. api.github.com stop hitting 403 Forbidden [#236].
  • perry/updater subsystem — Ed25519-signed auto-update for desktop apps with sentinel-rollback flow; low-level ambients + @perry/updater wrapper [PR #224, docs in #248].
  • Issue #185 Phase D — live inspector UI at localhost:7676 with editable style fields, POST /style/:h for runtime style edits, and the macOS dispatcher wired (other platforms follow as sweep PRs).
  • Many correctness fixes — async-fn array param push silent-cap at 16 [#233], method-default-param dispatch passing garbage for skipped trailing args [#235], .then(console.log) hang + Promise propagation when callback is null [#236], module-level empty const array writes silently dropped [#221], iOS/tvOS/visionOS Button styled-color crash [#185 follow-up].

Fixes

  • #221 — module-level const A: T[] = [] mutated via arr[i] = v from inside a function silently dropped writes (js_array_set_f64 no-op'd at index ≥ length).
  • #232 / #227await response.arrayBuffer() returned {byteLength: N} stub; now returns a real BufferHeader with the body bytes.
  • #233Array.push from inside an async function silently capped at 16 elements (parameter slot wasn't updated with the realloc'd pointer).
  • #234await response.blob() returned a metadata-only stub; now returns a real Blob with full instance method surface.
  • #235await Foo.method({...}) could silently hang when the method had a default param the caller skipped (cross-module method declare hardcoded to 6 doubles).
  • #236 — anonymous fetch got 403 Forbidden from sites that demand a User-Agent; Promise.resolve(x).then(<NULL_CALLBACK>) chained next stayed pending forever; console.log as a value (.then(console.log)) lowered to 0.0; fetch rejections printed as [object Object].
  • iOS/tvOS/visionOS — Button("X", () => {}, { color: "white" }) crashed with unrecognized selector setTextColor: on UIButton; now class-probes and routes to setTitleColor:forState:.
  • textfieldGetString / textareaGetString returned gibberish numbers — dispatch metadata had ReturnKind::F64 but FFI returned *StringHeader.
  • better-sqlite3 — new Database(path).prepare(sql).run/get/all chain restored after the v0.5.329-v0.5.342 lower_call extraction series silently broke it.

Features

  • perry/updater — Ed25519-signed auto-update with sentinel-rollback, manifest schema, install + relaunch flow, @perry/updater high-level wrapper [PR #224].
  • Issue #185 Phase DPOST /style/:h runtime style edits, editable inspector UI fields, live inspector UI served at localhost:7676 from the embedded geisterhand HTTP server.
  • fs.appendFileSync end-to-end wiring [PR #231].

Infrastructure

  • PR #239 — capture compile stderr in parity + compile-smoke CI jobs into uploadable artifacts so the long-tail macOS-14 SDK/linker ci-env skips can finally be diagnosed by reading the actual link error. Pure diagnostic plumbing — no source / version churn.
  • Scoop bucket — manifest published with SHA256 sidecars in the release workflow; field order brought into line with the ScoopInstaller style guide.
  • Windows host builds — pin clang -target on host invocations to prevent MinGW-default clang from rewriting the IR's MSVC triple to GNU/MinGW (which produced spurious LNK2019: unresolved external symbol __main errors); pre-flight clang probe + actionable hint on link failure [v0.5.353].
  • #210 — Windows wires 4 of 5 styling stubs: text decoration, opacity, border color, border width (the deferred-paint family minus shadow which still needs DirectComposition).

Don't miss a new perry release

NewReleases is sending notifications on new releases.