Skip to content

Releases

ESON v1.3.0

Choose a tag to compare

@thelabcorner thelabcorner released this 29 Sep 20:01

ESON v1.3.0 — 2026-09-29

SemVer: minor — ESON keeps its JSON/trusted-codec API while its accelerated distribution moves to canonical ESPACK 0.5 manifest-v2 composition.

Changed

  • Added stable [email protected] identity, loader-free facade, and manifest-v2 composition metadata.
  • The composed closure is dependency-first: [email protected] -> [email protected].
  • Exact UTF-8 library/payload lengths and SHA-256 provenance are recorded in the manifest.
  • ESONJson.dll is modeled as an explicit native capability.
  • In composed distributions ESPACK owns loaded native state and ESON receives that ExternalObject as borrowed ownership.
  • Root composition uses one persistent $.global.ESPAK control plane with deterministic deduplication and activation.

Verification

  • npm run release:gate: exit 0 on the exact v1.3.0 release commit.
  • Core suite: 630 assertions passed.
  • Native-lane suite: 41 assertions passed.
  • Seeded fuzzing: 100,000 iterations passed.
  • Static and live artifact lanes: PASS.
  • Accelerated ESPACK gate and borrowed-native ownership checks: PASS on Adobe Illustrator 30.6.0 / ExtendScript 4.5.6 through COMTool V2.

Release assets

  • ESON.accel.jsx
  • ESON.accel.min.jsx
  • ESON.facade.jsx
  • ESON.manifest.json
  • ESON.jsx
  • ESONJson.dll
  • vendor-eson.js
  • vendor-eson-runtime.js
  • eson-core.esm.mjs
  • json2-reference.jsx

Full Changelog: v1.2.2...v1.3.0

ESON v1.2.2 — ESABI v0.3.0 ABI + ESTC pipeline

Choose a tag to compare

@thelabcorner thelabcorner released this 24 Sep 10:16

ESON v1.2.2

New in this release

  • ESABI v0.3.0 dependency migration: the native ESONJson.dll now builds against the pinned ESABI submodule (deps/esabi, tag v0.3.0); the project-local native/eson_abi.h reconstruction is retired. Build the DLL with npm run native-build after git submodule update --init --recursive.
  • ESTC emission pipeline: all ExtendScript artifacts (ESON.jsx, vendor-eson.js, ESON-runtime.jsx, vendor-eson-runtime.js, ESON.facade.jsx, ESON.accel.jsx, ESON.accel.min.jsx) are emitted through the shared ExtendScript toolchain - ES3 normalization, bundle-local esbuild-helper localization, strict-directive strip and the grammar gate. The project-local ES3 shims are removed; ESON no longer patches host built-ins beyond its documented vendor install contract.
  • Well-formed surrogate stringify (ES2019): lone surrogates escape as \udxxx and valid pairs stay raw - matching the vendored json2 quote() policy.

Fixes

  • package-lock.json repair: the v1.2.1 tag had every dependency version field rewritten to 1.2.1. The lock is restored from the pre-corruption baseline: esbuild 0.28.1 and typescript 5.9.3 resolved versions/integrities are untouched; only the root ESON version is set to 1.2.2. npm ci validates.
  • Live JSX harnesses load bundles through the real consumer path ($.evalFile via --code), avoiding the COM tool's lexical ES3 pre-flight misreading of the espack bundle text.
  • New tests/eson-artifacts-live.mjs verifies the four non-accelerated release surfaces in a live engine.

Assets

  • vendor-eson.js - drop-in vendor (installs global JSON = ESON)
  • ESON.jsx - bannerless IIFE, defines ESON
  • vendor-eson-runtime.js - parse/stringify only (8.1 KB)
  • eson-core.esm.mjs - ESM core for Node
  • json2-reference.jsx - raw json2 reference lane
  • ESON.accel.jsx - self-extracting native-gate bundle (Windows x64)
  • ESON.accel.min.jsx - minified accel bundle (banner preserved)
  • ESONJson.dll - ExternalObject payload (built against ESABI v0.3.0)

Validation

  • 630 Node assertions + 37 native-lane assertions
  • vendor + poly gates; 100,000-iteration differential fuzz, 0 divergences
  • ESTC build/check/live 7/7 artifacts
  • live-verify 129/129; live-artifacts 13/13; accel-live 10/10
  • full release:gate exit 0

ESON v1.2.1 — ESB64Native v2 accel

Choose a tag to compare

@thelabcorner thelabcorner released this 11 Aug 03:36

ESON v1.2.1

  • Embed the shared ESB64Native accelerator at cache version v2 (ESB64Native_v2.dll) — coordinated rollout of the patched native allocator across the espack family.
  • The patched DLL (segmented growable arena; fixes allocator exhaustion / error 10004 in long-lived sessions) is byte-verified inside this bundle.
  • Manifest sidecar (ESON.manifest.json) updated to the v2 accel.

ESON v1.2.0 — espack merge architecture (manifest + facade + load-by-name)

Choose a tag to compare

@thelabcorner thelabcorner released this 10 Aug 19:19

ESON v1.1.0

New in this release

  • espack merge architecture (espack v0.3.0): the build now emits composition artifacts for multi-consumer hosts:
    • dist/ESON.manifest.json — payload manifest (schema v1, byte-identical to espack-build --manifest-out)
    • dist/ESON.facade.jsx — loader-free facade + adapter (requires ESPAK on $.global); a composer merges manifests with espack-merge.mjs into ONE loader and appends facades
  • Load-by-name contract: the adapter now calls ESPAK.load("ESONJson") — index 0 is not a stable API under a merged bundle. Standalone ESON.accel.jsx unchanged in composition.
  • ESON.accel.jsx rebuilt on the espack v0.3.0 loader (shared-accel discovery for accel-less bundles, embedded-accel failure falls back to the on-disk shared accel).

Assets

  • vendor-eson.js — drop-in vendor (installs global JSON = ESON)
  • ESON.jsx — bannerless IIFE, defines ESON
  • vendor-eson-runtime.js — parse/stringify only (15.7 KB)
  • eson-core.esm.mjs — ESM core for Node
  • json2-reference.jsx — raw json2 reference lane
  • ESON.accel.jsx — self-extracting native-gate bundle (Windows x64)

Validation

624 Node assertions + 37 native-lane assertions passed.

ESON v1.1.0

Choose a tag to compare

@thelabcorner thelabcorner released this 08 Aug 19:31

ESON v1.1.0 — ESPACK-accelerated native parse gate

ESON 1.1.0 ships ESON.accel.jsx: a self-extracting single-file bundle (espack "1 + n" model) that materializes ESONJson.dll at runtime and auto-enables the native RFC-exact parse gate (ESON.useEspack(), outcome on ESON.espack).

What's new since v1.0.0

  • Native parse gate (src/native-lane.ts, native/eson_json.c rebuilt on the canonical ExternalObject ABI, live-verified on Illustrator 30.6.0): certified native RFC 8259 verdict with the full strict-parse fallback path preserved.
  • Single-file distribution: ESON.accel.jsx embeds ESONJson.dll (103 KB) + the shared esb64 accelerator (9.5 KB) as base64; the JSX unpacks both on first use into per-user cache dirs and loads via ExternalObject. Zero install steps — drop into the Scripts folder.
  • Differential parity: the 76-case enable-time certification corpus passes with the gate ON; gate-ON vs gate-OFF verdicts are identical on 28 valid/invalid/security cases (live-verified).
  • ESON core bug fix the live runs exposed: the ES3 engine truncates property names at U+0000, so the parse memo collided on raw-NUL texts — NUL texts are no longer memoized (src/parse.ts).
  • npm run build:accel builds + minifies the bundle; npm run accel-live runs the live verification.
  • Deterministic native build: native/build.ps1 links with /Brepro, so the PE timestamps (COFF header + export directory) are fixed and npm run native-build produces byte-identical ESONJson.dll every time — the accel bundle embeds it as base64 and the parity contract compares bytes.

Speed: what the accelerator actually buys

Measured live on Illustrator 30.6.0 (ExtendScript 4.5.6), cold parses, wall-clock batches:

Lane ~49 KB cold parse
JSX-only (pre-scan + sanitize + eval) ~67 ms
Native gate (validateText + sanitize + eval) ~82 ms
Gate effect parity-speed (0.8–1.0×)

The gate replaces only the regex pre-scan (~3.7 µs/KB, already optimized); sanitize + eval stay and dominate the cost, so today the gate is parity-speed — its value is the certified RFC-exact native verdict plus single-file delivery, not raw parse throughput. (The historical 14×/17× cold-parse wins were measured against the earlier, slower JSX pre-scan; the pre-scan optimization closed the gap.)

The speed wins of the espack bundle itself (measured, same host):

Operation Cost
One-time accelerator extraction (per system) ~13 ms
Payload extraction (native b64decodeToFile) 3–10 µs
Bundle load (skip-extract path) ~1.2–1.9 ms
esb64 lane acceleration (shared accel, live-verified) btoa 16 K: 18.6 ms → 317 µs (58.5×) · atob 48 K: 66.8 ms → 957 µs (69.8×)

Release deliverables

Deliverable Path Purpose
ESON.accel.jsx dist/ Self-extracting accelerated bundle — the single-file production artifact
ESON.accel.min.jsx dist/ Minified accel bundle (banner preserved)
ESONJson.dll native/build/ The native gate DLL (103 KB, /Brepro deterministic) — attached as a release asset for direct embedding / inspection
ESON.jsx dist/ Full-facade JSX bundle (Path 1 default + opt-in Path 2 gate)
eson-core.esm.mjs dist/ ESM core bundle for Node/automation
src/native-lane.ts src/ ESPACK adapter: useEspack() / ESON.espack
native/eson_json.c, native/eson_abi.h, native/build.ps1 native/ Native gate DLL source (canonical ExternalObject ABI, freestanding-friendly)
tests/eson-accel-live.mjs tests/ Live verification harness (gate certification, verdict parity, timings)
tests/native-lane.mjs, tests/native-lane-entry.ts tests/ Node-side native-lane suite (37 assertions)
probes/eson-corpus-parity.jsx probes/ Full JSONTestSuite gate-parity probe (309 corpus files)
examples/07-native-gate.jsx examples/ Two-path demo: gate OFF vs gate ON, certification report, timings

Validation (v1.1.0)

  • npm test: 624 assertions (ESON) + 37 assertions (native lane) — PASS
  • typecheck (tsc strict): clean
  • Live accel verification (Illustrator 30.6.0): bundle evals, ESPAK native mode, gate auto-enabled + certified (76 cases), gate-ON/OFF verdict parity (28 cases)
  • Re-verified on the deterministic rebuild (2026-08-08, Illustrator 30.6.0): npm run accel-live ALL CHECKS PASSED — gate auto-enabled + certified, verdict parity (28 cases), gate ON 184 µs vs gate OFF 164 µs at 48,976 chars.
  • License: GPL-3.0-or-later

ESON 1.0.0

Choose a tag to compare

@thelabcorner thelabcorner released this 05 Aug 18:52

ESON - ExtendScript Object Notation: a strict JSON parser/stringify library for ExtendScript (ES3) engines. First stable release.

What ESON does

  • Strict RFC-8259 parsing - rejects what ExtendScript's native permissive JSON.parse accepts ([01], [1.], {1:1}, trailing commas), with deep-nesting caps and no-crash guarantees
  • Well-formed stringify (ES2019) - lone surrogates escape, valid pairs stay raw
  • Drop-in vendor - installs JSON.parse/JSON.stringify as ESON's
  • ES3-safe - no let/const/Promise; ships the defineProperty/bind shim for the 2014 SpiderMonkey engine

Attachments

File Purpose
ESON.jsx Bannerless IIFE facade ($.evalFile / COM-eval safe); defines ESON_JSON2 + ESON
eson-core.esm.mjs ESM core bundle for Node/automation (25 exports)

Validation (v1.0.0, Node 22)

  • npm test: 623 assertions - PASS
  • JSONTestSuite: 95/95 must-accept, 188/188 must-reject, 0 V8 divergences
  • Fuzz: 50,000 iterations, 0 differential divergences (seed 12648430)
  • vendor-verify: install/attach/replace/reviver lanes - PASS
  • typecheck (tsc strict): clean

Notes

  • Windows harness fix included: esbuild resolution now uses the real JS entry (node_modules/esbuild/bin/esbuild) instead of the POSIX .bin shim
  • oracle.rewrite.loneSurrogate live-verify check diverges in Node 22 only (lone-surrogate oracle lane); in-engine behavior verified by the vendor lane
  • License: GPL-3.0-or-later