Releases: thelabcorner/eson
Release list
ESON v1.2.1 — ESB64Native v2 accel
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)
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 toespack-build --manifest-out)dist/ESON.facade.jsx— loader-free facade + adapter (requiresESPAKon$.global); a composer merges manifests withespack-merge.mjsinto 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. StandaloneESON.accel.jsxunchanged in composition. ESON.accel.jsxrebuilt 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, definesESONvendor-eson-runtime.js— parse/stringify only (15.7 KB)eson-core.esm.mjs— ESM core for Nodejson2-reference.jsx— raw json2 reference laneESON.accel.jsx— self-extracting native-gate bundle (Windows x64)
Validation
624 Node assertions + 37 native-lane assertions passed.
ESON v1.1.0
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.crebuilt 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.jsxembedsESONJson.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 viaExternalObject. 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:accelbuilds + minifies the bundle;npm run accel-liveruns the live verification.- Deterministic native build:
native/build.ps1links with/Brepro, so the PE timestamps (COFF header + export directory) are fixed andnpm run native-buildproduces byte-identicalESONJson.dllevery 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-liveALL 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
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.stringifyas 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.binshim oracle.rewrite.loneSurrogatelive-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