Files
PotentialStorage/test/utils/extended-json.test.ts
T
Claude 4ffbc7e78d
CI / Node 24 (pull_request) Failing after 12s
CI / Node 22 (pull_request) Successful in 14s
CI / Node 26 (pull_request) Failing after 21s
Add KVStorageComposite, IndexedDB storage and SSE change streams
- Every KV storage emits change events (base class owns writeMany/removeMany/
  writeIfAbsent; implementations provide protected apply* methods)
- KVStorageHttpServer streams changes over SSE (GET /events) with a resumable
  history; KVStorageHttp.watch() subscribes and resumes via Last-Event-ID
- KVStorageIndexedDB for local persistence
- KVStorageComposite keeps replicas of a source in sync: local reads, resume
  instead of full sync, offline outbox replayed in order, echo tracking
- Values may contain bigint/Uint8Array (Extended JSON over the network)
- Vendor sse-session, event-emitter and extended-json (no runtime deps)
- Freeze child nodes so shadowed state on children fails loudly
- CI on Node 22, 24 and 26

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Qxbkp4tA7G5SCWjzWuxmE
2026-10-23 08:41:42 +00:00

33 lines
1.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import fc from 'fast-check'
import { ExtendedJson } from '../../src/utils/extended-json.js'
describe('ExtendedJson', () => {
it('round-trips bigint and Uint8Array, nested anywhere', () => {
const value = { a: 1n, b: [new Uint8Array([0, 1, 255]), -(2n ** 70n)], c: { d: new Uint8Array(0), e: 'plain', f: null } }
expect(ExtendedJson.stringify({ n: 5n, bytes: new Uint8Array([171, 205]) })).toBe('{"n":"<bigint: 5n>","bytes":"<uint8array: abcd>"}')
expect(ExtendedJson.parse(ExtendedJson.stringify(value))).toEqual(value)
})
it('round-trips arbitrary data (property)', () => {
const data = fc.letrec((tie) => ({
value: fc.oneof(
{ depthSize: 'small' },
fc.bigInt(),
fc.uint8Array(),
fc.string(),
fc.double({ noNaN: true, noDefaultInfinity: true }),
fc.boolean(),
fc.constant(null),
fc.array(tie('value')),
fc.dictionary(fc.string(), tie('value')),
),
})).value
fc.assert(
fc.property(data, (v) => {
expect(ExtendedJson.parse(ExtendedJson.stringify(v))).toEqual(v)
}),
)
})
})