Skip to content

Releases: thelabcorner/eson

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