@rotorsoft/act-tck 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/store-tck.d.ts +8 -0
- package/dist/@types/store-tck.d.ts.map +1 -1
- package/dist/index.cjs +368 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +379 -6
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/cache-tck.ts","../src/fixtures/events.ts","../src/fixtures/helpers.ts","../src/logger-tck.ts","../src/store-tck.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module @rotorsoft/act-tck\n *\n * Test Compatibility Kit for {@link Store}, {@link Cache}, and {@link Logger}\n * ports of `@rotorsoft/act`.\n *\n * A TCK turns each port from \"interface plus tribal knowledge\" into an\n * executable contract a third-party adapter can validate itself against.\n * Drop one or more `run*Tck` invocations into your adapter's test suite,\n * point them at your factory, and the TCK exercises every method on the\n * corresponding interface.\n *\n * The in-tree adapters (`InMemoryStore`, `InMemoryCache`, `ConsoleLogger`,\n * `PostgresStore`, `SqliteStore`, and `@rotorsoft/act-pino`) are the first\n * customers of this package — if any of them stop honoring the contract,\n * the TCK fails first.\n *\n * @example Store adapter\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { MyStore } from \"../src/MyStore.js\";\n *\n * runStoreTck({\n * name: \"MyStore\",\n * factory: () => new MyStore({ ... }),\n * capabilities: { notify: true },\n * });\n * ```\n *\n * @example Cache adapter\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { RedisCache } from \"../src/RedisCache.js\";\n *\n * runCacheTck({\n * name: \"RedisCache\",\n * factory: () => new RedisCache({ url: process.env.REDIS_URL }),\n * });\n * ```\n *\n * @example Logger adapter\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { MyLogger } from \"../src/MyLogger.js\";\n *\n * runLoggerTck({\n * name: \"MyLogger\",\n * factory: () => new MyLogger({ level: \"trace\" }),\n * });\n * ```\n *\n * ## Port evolution\n *\n * When a port interface in `libs/act/src/types/ports.ts` changes — a new\n * method, a tightened contract, a new optional flag — extend the matching\n * `run*Tck` here so every adapter is forced to keep up. Gate new optional\n * methods behind a flag in the relevant `Capabilities` type so existing\n * adapters keep passing until they explicitly opt in.\n */\n\n// Re-export the port contracts so adapter authors only need a single\n// import line in their test files (`@rotorsoft/act-tck`) rather than\n// reaching into `@rotorsoft/act/types` for the interfaces and the TCK\n// for the run* functions. Same types — keeps the two paths from\n// drifting in adapter-author code.\nexport type {\n Cache,\n CacheEntry,\n Logger,\n Store,\n StoreNotification,\n} from \"@rotorsoft/act/types\";\nexport type { CacheTckOptions } from \"./cache-tck.js\";\nexport { runCacheTck } from \"./cache-tck.js\";\nexport type { CounterEvents } from \"./fixtures/events.js\";\nexport {\n COUNTER_EVENT_NAMES,\n CounterSchemas,\n Decremented,\n Incremented,\n Reset,\n} from \"./fixtures/events.js\";\nexport type {\n CommittedCounterEvent,\n CounterMessage,\n} from \"./fixtures/helpers.js\";\nexport {\n actor,\n collect,\n dec,\n inc,\n makeMeta,\n reset,\n seedStream,\n uid,\n} from \"./fixtures/helpers.js\";\nexport type { LoggerTckOptions } from \"./logger-tck.js\";\nexport { runLoggerTck } from \"./logger-tck.js\";\nexport type { StoreCapabilities, StoreTckOptions } from \"./store-tck.js\";\nexport { runStoreTck } from \"./store-tck.js\";\n","import type { Cache, CacheEntry } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runCacheTck}.\n */\nexport type CacheTckOptions = {\n /**\n * Display name for the implementation under test. Becomes the\n * top-level `describe` block in the vitest run.\n */\n readonly name: string;\n /**\n * Factory invoked before each test. Must return a fresh, empty cache\n * — tests assume zero starting entries. Any per-implementation tuning\n * (max size, TTL, etc.) is the factory's responsibility, but the TCK\n * itself sets ≤ 8 entries in any single test, so a default max of\n * `≥ 8` is safe.\n */\n readonly factory: () => Cache;\n};\n\nconst entry = (\n event_id: number,\n state: Record<string, unknown> = {}\n): CacheEntry<Record<string, unknown>> => ({\n state,\n version: event_id,\n event_id,\n patches: 1,\n snaps: 0,\n});\n\n/**\n * Runs the Cache contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * Covers the full {@link Cache} surface defined in\n * `libs/act/src/types/ports.ts`:\n * - get/set round-trip\n * - get on a missing key returns undefined\n * - invalidate removes a single stream without affecting others\n * - clear wipes all entries\n * - dispose is idempotent and awaitable\n * - cross-stream isolation\n *\n * Adapter-specific behavior (LRU ordering, TTL, size limits, …) stays\n * in the adapter's own test suite — the TCK only asserts the contract\n * every Cache must honor.\n *\n * @example\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryCache } from \"@rotorsoft/act\";\n *\n * runCacheTck({\n * name: \"InMemoryCache\",\n * factory: () => new InMemoryCache({ maxSize: 1000 }),\n * });\n * ```\n */\nexport const runCacheTck = (options: CacheTckOptions): void => {\n describe(`TCK / Cache / ${options.name}`, () => {\n let cache: Cache;\n\n beforeEach(() => {\n cache = options.factory();\n });\n\n afterEach(async () => {\n await cache.dispose();\n });\n\n it(\"returns undefined for an unset stream\", async () => {\n expect(await cache.get(\"missing\")).toBeUndefined();\n });\n\n it(\"set then get round-trips an entry\", async () => {\n const e = entry(1, { count: 7 });\n await cache.set(\"s1\", e);\n expect(await cache.get(\"s1\")).toEqual(e);\n });\n\n it(\"set overwrites a prior entry on the same stream\", async () => {\n await cache.set(\"s1\", entry(1, { count: 1 }));\n await cache.set(\"s1\", entry(2, { count: 2 }));\n const got = await cache.get<Record<string, unknown>>(\"s1\");\n expect(got?.event_id).toBe(2);\n expect(got?.state).toEqual({ count: 2 });\n });\n\n it(\"invalidate removes one stream and leaves others\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.set(\"b\", entry(2));\n await cache.invalidate(\"a\");\n expect(await cache.get(\"a\")).toBeUndefined();\n expect(await cache.get(\"b\")).toBeDefined();\n });\n\n it(\"invalidate on an unknown stream is a no-op\", async () => {\n await expect(cache.invalidate(\"never-set\")).resolves.toBeUndefined();\n });\n\n it(\"clear empties every stream\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.set(\"b\", entry(2));\n await cache.set(\"c\", entry(3));\n await cache.clear();\n expect(await cache.get(\"a\")).toBeUndefined();\n expect(await cache.get(\"b\")).toBeUndefined();\n expect(await cache.get(\"c\")).toBeUndefined();\n });\n\n it(\"clear on an empty cache is a no-op\", async () => {\n await expect(cache.clear()).resolves.toBeUndefined();\n });\n\n it(\"entries are isolated per stream\", async () => {\n const ea = entry(1, { id: \"a\" });\n const eb = entry(2, { id: \"b\" });\n await cache.set(\"a\", ea);\n await cache.set(\"b\", eb);\n expect(await cache.get(\"a\")).toEqual(ea);\n expect(await cache.get(\"b\")).toEqual(eb);\n });\n\n it(\"dispose is idempotent\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.dispose();\n await expect(cache.dispose()).resolves.toBeUndefined();\n });\n });\n};\n","import { z } from \"zod\";\n\nexport const Incremented = z.object({ amount: z.number().int() });\nexport const Decremented = z.object({ amount: z.number().int() });\nexport const Reset = z.object({});\n\nexport const CounterSchemas = {\n Incremented,\n Decremented,\n Reset,\n} as const;\n\nexport type CounterEvents = {\n Incremented: z.infer<typeof Incremented>;\n Decremented: z.infer<typeof Decremented>;\n Reset: z.infer<typeof Reset>;\n};\n\nexport const COUNTER_EVENT_NAMES = [\n \"Incremented\",\n \"Decremented\",\n \"Reset\",\n] as const;\n","import { randomUUID } from \"node:crypto\";\nimport type {\n Committed,\n EventMeta,\n Message,\n Store,\n} from \"@rotorsoft/act/types\";\nimport type { CounterEvents } from \"./events.js\";\n\nexport type CounterMessage = Message<CounterEvents, keyof CounterEvents>;\nexport type CommittedCounterEvent = Committed<\n CounterEvents,\n keyof CounterEvents\n>;\n\n/**\n * Per-test unique identifier suffix. Use to namespace streams so tests\n * running in parallel against the same shared store (e.g., a real Postgres\n * instance) don't collide on stream names.\n */\nexport const uid = (): string => randomUUID().slice(0, 8);\n\nexport const actor = (name = \"tester\") => ({ id: randomUUID(), name });\n\n/** Build an EventMeta with a correlation id and optional action causation. */\nexport const makeMeta = (\n opts: { correlation?: string; stream?: string; action?: string } = {}\n): EventMeta => ({\n correlation: opts.correlation ?? randomUUID(),\n causation: opts.stream\n ? {\n action: {\n name: opts.action ?? \"Test\",\n stream: opts.stream,\n actor: actor(),\n },\n }\n : {},\n});\n\nexport const inc = (amount = 1): CounterMessage => ({\n name: \"Incremented\",\n data: { amount },\n});\n\nexport const dec = (amount = 1): CounterMessage => ({\n name: \"Decremented\",\n data: { amount },\n});\n\nexport const reset = (): CounterMessage => ({ name: \"Reset\", data: {} });\n\n/**\n * Commit `count` Incremented events to `stream` on the given store, each\n * within its own commit transaction (so they receive distinct event ids).\n */\nexport const seedStream = async (\n store: Store,\n stream: string,\n count: number,\n correlation?: string\n): Promise<CommittedCounterEvent[]> => {\n const out: CommittedCounterEvent[] = [];\n for (let i = 0; i < count; i++) {\n const committed = await store.commit<CounterEvents>(\n stream,\n [inc(1)],\n makeMeta({ correlation, stream })\n );\n out.push(...(committed as CommittedCounterEvent[]));\n }\n return out;\n};\n\n/**\n * Drain a `query` call into an array. Convenience wrapper for assertions.\n */\nexport const collect = async (\n store: Store,\n query: Parameters<Store[\"query\"]>[1]\n): Promise<CommittedCounterEvent[]> => {\n const out: CommittedCounterEvent[] = [];\n await store.query<CounterEvents>((e) => {\n out.push(e as CommittedCounterEvent);\n }, query);\n return out;\n};\n","import type { Logger } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runLoggerTck}.\n */\nexport type LoggerTckOptions = {\n /**\n * Display name for the implementation under test.\n */\n readonly name: string;\n /**\n * Factory invoked before each test. Must return a fresh logger\n * instance — tests do not assume any starting state.\n */\n readonly factory: () => Logger;\n};\n\nconst LEVELS = [\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"] as const;\n\n/**\n * Runs the Logger contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The {@link Logger} contract is intentionally narrow: implementations\n * are pluggable wrappers around pino, winston, bunyan, console, etc.\n * The TCK verifies the **shape** of the contract, not the format of\n * the output (which is adapter-specific by design):\n * - every level method exists and is callable in both overload forms\n * `(msg)` and `(obj, msg?)`\n * - `child(bindings)` returns something that satisfies the same\n * contract and can itself spawn children\n * - `level` is a non-empty string\n * - `dispose` is awaitable and idempotent\n * - cyclic payloads must not throw (sinks may choose any fallback)\n *\n * Anything more (output format, level gating, color, file routing) is\n * adapter-specific and stays in the adapter's own test suite.\n *\n * @example\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { ConsoleLogger } from \"@rotorsoft/act\";\n *\n * runLoggerTck({\n * name: \"ConsoleLogger\",\n * factory: () => new ConsoleLogger({ level: \"trace\" }),\n * });\n * ```\n */\nexport const runLoggerTck = (options: LoggerTckOptions): void => {\n describe(`TCK / Logger / ${options.name}`, () => {\n let logger: Logger;\n let originalStdout: typeof process.stdout.write;\n\n // Silence stdout during the TCK — we don't assert on output, and\n // chatty implementations would otherwise spam test runs. Loggers\n // that route elsewhere (stderr, files) won't appear in the test\n // report; checking their formatted output is the adapter's own\n // responsibility.\n beforeEach(() => {\n logger = options.factory();\n originalStdout = process.stdout.write.bind(process.stdout);\n process.stdout.write = (() => true) as typeof process.stdout.write;\n });\n\n afterEach(async () => {\n process.stdout.write = originalStdout;\n await logger.dispose();\n });\n\n it(\"exposes a non-empty `level` string\", () => {\n expect(typeof logger.level).toBe(\"string\");\n expect(logger.level.length).toBeGreaterThan(0);\n });\n\n for (const level of LEVELS) {\n it(`${level}(msg) does not throw`, () => {\n expect(() => logger[level](\"hello\")).not.toThrow();\n });\n\n it(`${level}(obj) does not throw`, () => {\n expect(() => logger[level]({ k: \"v\" })).not.toThrow();\n });\n\n it(`${level}(obj, msg) does not throw`, () => {\n expect(() => logger[level]({ k: \"v\" }, \"context\")).not.toThrow();\n });\n }\n\n it(\"accepts a null payload\", () => {\n expect(() => logger.info(null, \"null payload\")).not.toThrow();\n });\n\n it(\"accepts a cyclic payload without throwing\", () => {\n const cyclic: Record<string, unknown> = { name: \"loop\" };\n cyclic.self = cyclic;\n expect(() => logger.info(cyclic, \"cycle\")).not.toThrow();\n });\n\n it(\"child(bindings) returns a Logger satisfying the same contract\", () => {\n const child = logger.child({ requestId: \"abc\" });\n expect(typeof child.level).toBe(\"string\");\n for (const level of LEVELS) {\n expect(typeof child[level]).toBe(\"function\");\n }\n expect(typeof child.child).toBe(\"function\");\n expect(typeof child.dispose).toBe(\"function\");\n });\n\n it(\"child loggers can themselves spawn children\", () => {\n const c1 = logger.child({ a: 1 });\n const c2 = c1.child({ b: 2 });\n expect(() => c2.info(\"nested\")).not.toThrow();\n });\n\n it(\"dispose is idempotent and awaitable\", async () => {\n await expect(logger.dispose()).resolves.toBeUndefined();\n await expect(logger.dispose()).resolves.toBeUndefined();\n });\n });\n};\n","import { ConcurrencyError, SNAP_EVENT, TOMBSTONE_EVENT } from \"@rotorsoft/act\";\nimport type {\n BlockedLease,\n Committed,\n Lease,\n Store,\n StoreNotification,\n} from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport type { CounterEvents } from \"./fixtures/events.js\";\nimport {\n type CommittedCounterEvent,\n collect,\n dec,\n inc,\n makeMeta,\n reset as resetEvent,\n seedStream,\n uid,\n} from \"./fixtures/helpers.js\";\n\n/**\n * Optional features a {@link Store} implementation may or may not\n * support. Default to `false` — only enable a flag when the adapter\n * exposes the corresponding surface and you want the TCK to cover it.\n */\nexport type StoreCapabilities = {\n /**\n * Adapter implements {@link Store.notify}. When `true`, the TCK runs\n * a basic subscribe/dispose smoke test. Cross-process LISTEN/NOTIFY\n * semantics are not exercised — that needs two processes and stays\n * in the adapter's own suite.\n */\n readonly notify?: boolean;\n};\n\n/**\n * Options for {@link runStoreTck}.\n */\nexport type StoreTckOptions = {\n /**\n * Display name for the implementation under test.\n */\n readonly name: string;\n /**\n * Returns the {@link Store} instance under test. Called once during\n * `beforeAll`. The TCK does not assume a fresh store per test — each\n * test namespaces its streams via {@link uid} so they don't collide.\n * The TCK calls `store.seed()` once before any test runs and\n * `store.dispose()` after all tests, with `store.drop()` in between\n * if any test needs it.\n */\n readonly factory: () => Store | Promise<Store>;\n /**\n * Optional capabilities flags — see {@link StoreCapabilities}.\n */\n readonly capabilities?: StoreCapabilities;\n};\n\n/**\n * Runs the Store contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The TCK is the executable definition of the {@link Store} contract.\n * Every method on the interface in `libs/act/src/types/ports.ts` has\n * matching cases here:\n *\n * - `commit` — single + multi-event commits, optimistic concurrency\n * - `query` — stream, names, correlation, before, after, created_after,\n * created_before, limit, with_snaps, stream_exact, backward traversal\n * - `subscribe` — idempotent re-subscribe, watermark return value\n * - `claim` / `ack` — lease lifecycle, dual frontiers, leased streams\n * not double-claimed\n * - `block` — blocked streams hidden from claim, only same-drainer can block\n * - `reset` — restart watermarks (including blocked), no-op for missing\n * - `prioritize` — bulk priority updates by filter\n * - `truncate` — snapshot vs tombstone seeding, empty inputs, missing streams\n * - `query_streams` — filters, exact-match, pagination, blocked\n * - `notify` (capability-gated) — subscribe + dispose smoke test\n *\n * Tests namespace their streams with a per-test {@link uid} so the\n * suite is parallel-safe against a shared backing store (e.g., a real\n * Postgres instance running tests for the whole monorepo concurrently).\n *\n * @example\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryStore } from \"@rotorsoft/act\";\n *\n * runStoreTck({\n * name: \"InMemoryStore\",\n * factory: () => new InMemoryStore(),\n * });\n * ```\n */\nexport const runStoreTck = (options: StoreTckOptions): void => {\n describe(`TCK / Store / ${options.name}`, () => {\n let store: Store;\n const caps = options.capabilities ?? {};\n\n beforeAll(async () => {\n store = await options.factory();\n await store.drop();\n await store.seed();\n });\n\n afterAll(async () => {\n await store.dispose();\n });\n\n describe(\"commit\", () => {\n it(\"returns committed events with sequenced ids and versions\", async () => {\n const s = `commit-seq-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), dec(3)],\n makeMeta({ stream: s })\n );\n expect(committed).toHaveLength(3);\n expect(committed[0].version).toBe(0);\n expect(committed[1].version).toBe(1);\n expect(committed[2].version).toBe(2);\n expect(committed[0].name).toBe(\"Incremented\");\n expect(committed[2].data).toEqual({ amount: 3 });\n for (let i = 1; i < committed.length; i++) {\n expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n }\n });\n\n it(\"attaches correlation and stream metadata\", async () => {\n const s = `commit-meta-${uid()}`;\n const correlation = `cor-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s, correlation })\n );\n expect(committed[0].stream).toBe(s);\n expect(committed[0].meta.correlation).toBe(correlation);\n });\n\n it(\"throws ConcurrencyError when expectedVersion is wrong\", async () => {\n const s = `commit-cc-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s }),\n 0\n );\n await expect(\n store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }), 0)\n ).rejects.toBeInstanceOf(ConcurrencyError);\n });\n\n it(\"preserves prior events when a concurrent commit is rejected\", async () => {\n const s = `commit-cc-preserve-${uid()}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n await expect(\n store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }), 0)\n ).rejects.toBeInstanceOf(ConcurrencyError);\n const found = await collect(store, { stream: s, stream_exact: true });\n expect(found).toHaveLength(2);\n });\n });\n\n describe(\"query\", () => {\n it(\"filters by stream, names, correlation, limit, with_snaps\", async () => {\n const s1 = `q-s1-${uid()}`;\n const s2 = `q-s2-${uid()}`;\n const cor = `q-cor-${uid()}`;\n await store.commit<CounterEvents>(\n s1,\n [inc(1), dec(1)],\n makeMeta({ stream: s1, correlation: cor })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(2), dec(2), resetEvent()],\n makeMeta({ stream: s2, correlation: cor })\n );\n\n const byStream = await collect(store, {\n stream: s1,\n stream_exact: true,\n });\n expect(byStream).toHaveLength(2);\n\n const byName = await collect(store, {\n stream: s2,\n stream_exact: true,\n names: [\"Reset\"],\n });\n expect(byName).toHaveLength(1);\n expect(byName[0].name).toBe(\"Reset\");\n\n const byCorrelation = await collect(store, { correlation: cor });\n expect(byCorrelation).toHaveLength(5);\n\n const limited = await collect(store, {\n correlation: cor,\n limit: 2,\n });\n expect(limited).toHaveLength(2);\n });\n\n it(\"supports backward traversal\", async () => {\n const s = `q-back-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3)],\n makeMeta({ stream: s })\n );\n const forward = await collect(store, { stream: s, stream_exact: true });\n const backward = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n });\n expect(forward.map((e) => e.id)).toEqual(committed.map((c) => c.id));\n expect(backward.map((e) => e.id)).toEqual(\n [...committed].reverse().map((c) => c.id)\n );\n\n // Backward + limit — exercises the limit-break branch in the\n // backward-traversal path. Latest event only.\n const latest = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n limit: 1,\n });\n expect(latest).toHaveLength(1);\n expect(latest[0].id).toBe(committed.at(-1)!.id);\n });\n\n it(\"after/before bound the id range\", async () => {\n const s = `q-bounds-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3), inc(4)],\n makeMeta({ stream: s })\n );\n const afterFirst = await collect(store, {\n stream: s,\n stream_exact: true,\n after: committed[0].id,\n });\n expect(afterFirst.map((e) => e.id)).toEqual(\n committed.slice(1).map((c) => c.id)\n );\n const beforeLast = await collect(store, {\n stream: s,\n stream_exact: true,\n before: committed[committed.length - 1].id,\n });\n expect(beforeLast.map((e) => e.id)).toEqual(\n committed.slice(0, -1).map((c) => c.id)\n );\n });\n\n it(\"created_after/created_before filter by timestamp\", async () => {\n const s = `q-ts-${uid()}`;\n const before = new Date(Date.now() - 60_000);\n const future = new Date(Date.now() + 60_000);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const inWindow = await collect(store, {\n stream: s,\n stream_exact: true,\n created_after: before,\n created_before: future,\n });\n expect(inWindow.length).toBe(1);\n const outOfWindow = await collect(store, {\n stream: s,\n stream_exact: true,\n created_after: future,\n });\n expect(outOfWindow.length).toBe(0);\n });\n\n it(\"backward traversal short-circuits at `after` id boundary\", async () => {\n const s = `q-back-after-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3)],\n makeMeta({ stream: s })\n );\n // Backward from the end, but only events newer than committed[0].id.\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n after: committed[0].id,\n });\n expect(got.map((e) => e.id)).toEqual([\n committed[2].id,\n committed[1].id,\n ]);\n });\n\n it(\"backward traversal short-circuits at `created_after` boundary\", async () => {\n const s = `q-back-cafter-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Asking backward with created_after = now+1m should short-circuit\n // immediately because the only event was created before that bound.\n const future = new Date(Date.now() + 60_000);\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n created_after: future,\n });\n expect(got).toHaveLength(0);\n });\n\n it(\"backward traversal honors created_before by skipping newer events\", async () => {\n const s = `q-back-ts-${uid()}`;\n // `makeMeta()` with no stream — exercises the meta builder's\n // no-causation branch alongside the backward + created_before\n // path inside the adapter.\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta());\n const past = new Date(Date.now() - 60_000);\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n created_before: past,\n });\n expect(got).toHaveLength(0);\n });\n\n it(\"stream_exact disables regex matching\", async () => {\n const tag = uid();\n const a = `q-exact-${tag}`;\n const b = `q-exact-${tag}-extra`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n const exact = await collect(store, { stream: a, stream_exact: true });\n expect(exact).toHaveLength(1);\n expect(exact[0].data).toEqual({ amount: 1 });\n });\n\n // Regex anchor contract — same across every Store. Caller controls\n // anchors. `^foo` for prefix, `foo$` for suffix, `^foo$` for whole-\n // string. A plain `foo` is a substring match. Auto-anchoring by the\n // adapter is a contract violation.\n it(\"plain regex without anchors is a substring match\", async () => {\n const tag = uid();\n const inner = `qr-${tag}-inner`;\n const longer = `qr-${tag}-inner-extra`;\n await store.commit<CounterEvents>(\n inner,\n [inc(1)],\n makeMeta({ stream: inner })\n );\n await store.commit<CounterEvents>(\n longer,\n [inc(2)],\n makeMeta({ stream: longer })\n );\n const got = await collect(store, { stream: `qr-${tag}-inner` });\n expect(got.map((e) => e.stream).sort()).toEqual([inner, longer].sort());\n });\n\n it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n const tag = uid();\n const inner = `qr-${tag}-anchor`;\n const longer = `qr-${tag}-anchor-extra`;\n await store.commit<CounterEvents>(\n inner,\n [inc(1)],\n makeMeta({ stream: inner })\n );\n await store.commit<CounterEvents>(\n longer,\n [inc(2)],\n makeMeta({ stream: longer })\n );\n const got = await collect(store, { stream: `^qr-${tag}-anchor$` });\n expect(got).toHaveLength(1);\n expect(got[0].stream).toBe(inner);\n });\n\n it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n const tag = uid();\n const a = `qr-${tag}-pfx-a`;\n const b = `qr-${tag}-pfx-b`;\n const other = `zz-${tag}-other`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n await store.commit<CounterEvents>(\n other,\n [inc(3)],\n makeMeta({ stream: other })\n );\n const got = await collect(store, { stream: `^qr-${tag}-pfx-` });\n expect(got.map((e) => e.stream).sort()).toEqual([a, b].sort());\n });\n });\n\n describe(\"subscribe + claim + ack\", () => {\n it(\"subscribes new streams and is idempotent on repeat\", async () => {\n const s = `sub-${uid()}`;\n const first = await store.subscribe([{ stream: s }]);\n expect(first.subscribed).toBe(1);\n const second = await store.subscribe([{ stream: s }]);\n expect(second.subscribed).toBe(0);\n });\n\n it(\"claims a subscribed stream and ack releases the lease\", async () => {\n const s = `claim-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const by = `worker-${uid()}`;\n const leased = await store.claim(100, 0, by, 10_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n expect(mine!.by).toBe(by);\n await store.ack([{ ...(mine as Lease), at: mine!.at + 1 }]);\n });\n\n it(\"does not double-claim a held lease\", async () => {\n const s = `claim-held-${uid()}`;\n const other = `claim-other-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leasedA = await store.claim(100, 0, `wA-${uid()}`, 100_000);\n const targetA = leasedA.find((l) => l.stream === s);\n expect(targetA).toBeDefined();\n // Subscribe + commit `other` only AFTER A's claim — fresh\n // subscriptions report `at=-1` which adapters treat as\n // claimable. We want `other` to be visible only to B so the\n // negative assertion below runs through a populated array.\n await store.subscribe([{ stream: other }]);\n await store.commit<CounterEvents>(\n other,\n [inc(2)],\n makeMeta({ stream: other })\n );\n const leasedB = await store.claim(100, 0, `wB-${uid()}`, 100_000);\n expect(leasedB.length).toBeGreaterThan(0);\n expect(leasedB.find((l) => l.stream === s)).toBeUndefined();\n expect(leasedB.find((l) => l.stream === other)).toBeDefined();\n });\n\n it(\"supports dual frontiers (lagging + leading)\", async () => {\n const s = `claim-dual-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n const first = await store.claim(100, 0, `w-${uid()}`, 1);\n const mine = first.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await store.ack([{ ...(mine as Lease), at: (mine as Lease).at + 1 }]);\n const second = await store.claim(0, 100, `w-${uid()}`, 1);\n expect(second.find((l) => l.stream === s)).toBeDefined();\n });\n\n it(\"dedupes when both frontiers would return the same stream\", async () => {\n const s = `claim-dedup-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Asking for both frontiers with overlapping budgets must not\n // return the same stream twice.\n const claimed = await store.claim(100, 100, `w-${uid()}`, 100_000);\n const matches = claimed.filter((l) => l.stream === s);\n expect(matches).toHaveLength(1);\n });\n\n it(\"silently ignores ack from the wrong holder\", async () => {\n const s = `ack-wrong-${uid()}`;\n const sibling = `ack-sibling-${uid()}`;\n await store.subscribe([{ stream: s }, { stream: sibling }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(\n sibling,\n [inc(2)],\n makeMeta({ stream: sibling })\n );\n const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const siblingLease = leased.find((l) => l.stream === sibling);\n expect(mine).toBeDefined();\n expect(siblingLease).toBeDefined();\n // Mix a correctly-held lease with an imposter ack so `acked`\n // ends up with one entry (the sibling) and the predicate runs.\n const acked = await store.ack([\n { ...(mine as Lease), by: \"imposter\" },\n siblingLease as Lease,\n ]);\n expect(acked.length).toBeGreaterThan(0);\n expect(acked.find((l) => l.stream === s)).toBeUndefined();\n });\n\n it(\"ack with a stale (lower) watermark does not throw\", async () => {\n const s = `ack-stale-${uid()}`;\n await store.subscribe([{ stream: s }]);\n const by = `w-${uid()}`;\n const leased = await store.claim(100, 0, by, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await expect(\n store.ack([{ ...(mine as Lease), at: -5 }])\n ).resolves.toBeDefined();\n });\n\n it(\"claim with no subscribed streams returns an empty array\", async () => {\n // Use a fresh adapter instance — the parent store is shared across\n // the suite and has subscribed streams already.\n const fresh = await options.factory();\n try {\n await fresh.drop();\n await fresh.seed();\n const claimed = await fresh.claim(1, 1, `w-${uid()}`, 1000);\n expect(claimed).toEqual([]);\n } finally {\n await fresh.dispose();\n }\n });\n });\n\n describe(\"block\", () => {\n it(\"hides blocked streams from claim\", async () => {\n const s = `block-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n const blocked = await store.block([\n { ...(mine as Lease), error: \"boom\" },\n ]);\n expect(blocked).toHaveLength(1);\n expect(blocked[0].error).toBe(\"boom\");\n const again = await store.claim(100, 100, `w2-${uid()}`, 100_000);\n expect(again.find((l) => l.stream === s)).toBeUndefined();\n });\n\n it(\"rejects block calls from a different holder\", async () => {\n const s = `block-wrong-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n const blocked = await store.block([\n { ...(mine as Lease), by: \"imposter\", error: \"no\" },\n ]);\n expect(blocked).toHaveLength(0);\n });\n });\n\n describe(\"reset\", () => {\n it(\"rewinds a stream watermark to -1\", async () => {\n const s = `reset-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await store.ack([{ ...(mine as Lease), at: 99 }]);\n expect(await store.reset([s])).toBe(1);\n const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n const back = after.find((l) => l.stream === s);\n expect(back).toBeDefined();\n expect(back!.at).toBe(-1);\n });\n\n it(\"clears blocked status when resetting\", async () => {\n const s = `reset-blk-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n expect(await store.reset([s])).toBe(1);\n const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n expect(after.find((l) => l.stream === s)).toBeDefined();\n });\n\n it(\"returns 0 for unknown streams and empty input\", async () => {\n expect(await store.reset([`missing-${uid()}`])).toBe(0);\n expect(await store.reset([])).toBe(0);\n });\n });\n\n describe(\"unblock\", () => {\n it(\"clears blocked flag and preserves the watermark\", async () => {\n const s = `unblock-${uid()}`;\n await store.subscribe([{ stream: s }]);\n // Two events so the watermark advances past 0 before block.\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(2)], makeMeta({ stream: s }));\n\n // First lease + ack first event → watermark advances.\n const first = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = first.find((l) => l.stream === s);\n await store.ack([{ ...(m1 as Lease), at: m1!.at }]);\n\n // Capture watermark before block.\n const beforeBlock = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m2 = beforeBlock.find((l) => l.stream === s);\n expect(m2).toBeDefined();\n const watermarkBefore = m2!.at;\n await store.block([{ ...(m2 as Lease), error: \"permanent\" }]);\n\n // Stream is now blocked — query_streams must report it as such.\n // (Asserting on `claim()` would be flaky: an empty result is the\n // same as \"s not in the result,\" which short-circuits a find()\n // callback and leaves it uncovered when no other streams happen\n // to be claimable in the fixture.)\n let blockedFlag: boolean | undefined;\n await store.query_streams(\n (p) => {\n blockedFlag = p.blocked;\n },\n { stream: s, stream_exact: true, limit: 1 }\n );\n expect(blockedFlag).toBe(true);\n\n // Unblock — claim picks it back up at the same watermark.\n expect(await store.unblock([s])).toBe(1);\n const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const back = after.find((l) => l.stream === s);\n expect(back).toBeDefined();\n expect(back!.at).toBe(watermarkBefore);\n expect(back!.retry).toBe(0);\n });\n\n it(\"returns 0 when the stream is not blocked\", async () => {\n const s = `unblock-noop-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Stream exists but isn't blocked.\n expect(await store.unblock([s])).toBe(0);\n });\n\n it(\"returns 0 for unknown streams and empty input\", async () => {\n expect(await store.unblock([`missing-${uid()}`])).toBe(0);\n expect(await store.unblock([])).toBe(0);\n });\n\n it(\"only counts streams that were actually blocked\", async () => {\n const s1 = `unblock-mix-a-${uid()}`;\n const s2 = `unblock-mix-b-${uid()}`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = leased.find((l) => l.stream === s1);\n const others = leased.filter((l) => l.stream !== s1);\n await store.ack(others);\n // Block only s1.\n await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n expect(await store.unblock([s1, s2])).toBe(1);\n });\n\n it(\"filter form: unblocks by stream pattern\", async () => {\n const tag = uid();\n const s1 = `unblock-filter-${tag}-a`;\n const s2 = `unblock-filter-${tag}-b`;\n const s3 = `other-${tag}`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }, { stream: s3 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n await store.commit<CounterEvents>(\n s3,\n [inc(1)],\n makeMeta({ stream: s3 })\n );\n // Block all three.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const blockable: BlockedLease[] = leased\n .filter((l) => l.stream === s1 || l.stream === s2 || l.stream === s3)\n .map((l) => ({ ...(l as Lease), error: \"boom\" }));\n // Ack any other leases the test fixture's shared store left\n // outstanding so they don't pollute counts below.\n await store.ack(\n leased.filter(\n (l) => !(l.stream === s1 || l.stream === s2 || l.stream === s3)\n )\n );\n await store.block(blockable);\n\n // Filter targets only `unblock-filter-${tag}-` prefix → 2 of 3.\n const count = await store.unblock({\n stream: `^unblock-filter-${tag}-`,\n });\n expect(count).toBe(2);\n\n // s3 is still blocked.\n const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n expect(after.find((l) => l.stream === s3)).toBeUndefined();\n // s1 and s2 are unblocked and claimable.\n expect(after.find((l) => l.stream === s1)).toBeDefined();\n expect(after.find((l) => l.stream === s2)).toBeDefined();\n });\n\n it(\"filter form: empty filter unblocks every blocked stream\", async () => {\n // Set up an isolated set of blocked streams using a unique tag,\n // then assert the filter unblocks every one. We can't use the\n // truly empty filter `{}` across the shared TCK fixture because\n // other tests may leave blocked rows behind; use the tag as a\n // narrow proxy for \"everything in my scope.\"\n const tag = uid();\n const s1 = `unblock-empty-${tag}-a`;\n const s2 = `unblock-empty-${tag}-b`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.filter((l) => l.stream === s1 || l.stream === s2);\n await store.ack(leased.filter((l) => !mine.includes(l)));\n await store.block(\n mine.map((l) => ({ ...(l as Lease), error: \"boom\" }))\n );\n const count = await store.unblock({\n stream: `^unblock-empty-${tag}-`,\n });\n expect(count).toBe(2);\n });\n\n it(\"filter form: explicit blocked:false matches nothing\", async () => {\n // The implementation forces `blocked = true` regardless of what\n // the caller passed — operators can't accidentally \"unblock\"\n // already-unblocked streams.\n const tag = uid();\n const s = `unblock-blocked-false-${tag}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Stream is registered but not blocked.\n expect(\n await store.unblock({\n stream: `^unblock-blocked-false-${tag}`,\n blocked: false,\n })\n ).toBe(0);\n });\n });\n\n describe(\"reset filter form\", () => {\n it(\"resets streams matching a stream pattern\", async () => {\n const tag = uid();\n const s1 = `reset-filter-${tag}-a`;\n const s2 = `reset-filter-${tag}-b`;\n const other = `other-reset-${tag}`;\n await store.subscribe([\n { stream: s1 },\n { stream: s2 },\n { stream: other },\n ]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n await store.commit<CounterEvents>(\n other,\n [inc(1)],\n makeMeta({ stream: other })\n );\n // Advance watermarks for all three so the reset is observable.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.filter(\n (l) => l.stream === s1 || l.stream === s2 || l.stream === other\n );\n await store.ack(mine.map((l) => ({ ...(l as Lease), at: l.at + 100 })));\n\n // Filter targets only `reset-filter-${tag}-` prefix → 2 of 3.\n const count = await store.reset({ stream: `^reset-filter-${tag}-` });\n expect(count).toBe(2);\n\n // Inspect via query_streams (doesn't lease, no regex alternation\n // assumptions on SQLite's LIKE-pattern path) — fetch each name\n // by exact match and check the watermark independently.\n const positionFor = async (name: string): Promise<number | null> => {\n let at: number | null = null;\n await store.query_streams(\n (p) => {\n at = p.at;\n },\n { stream: name, stream_exact: true, limit: 1 }\n );\n return at;\n };\n expect(await positionFor(s1)).toBe(-1);\n expect(await positionFor(s2)).toBe(-1);\n expect(await positionFor(other)).toBeGreaterThan(-1);\n });\n\n it(\"filter form: resets only blocked streams when blocked:true\", async () => {\n const tag = uid();\n const s1 = `reset-blocked-${tag}-blocked`;\n const s2 = `reset-blocked-${tag}-fine`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = leased.find((l) => l.stream === s1);\n await store.ack(leased.filter((l) => l.stream !== s1));\n await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n\n const count = await store.reset({\n stream: `^reset-blocked-${tag}-`,\n blocked: true,\n });\n expect(count).toBe(1);\n });\n });\n\n describe(\"prioritize\", () => {\n it(\"sets priority directly, overriding subscribe's max() rule\", async () => {\n const tag = uid();\n const s1 = `pri-${tag}-a`;\n const s2 = `pri-${tag}-b`;\n await store.subscribe([\n { stream: s1, priority: 5 },\n { stream: s2, priority: 5 },\n ]);\n const updated = await store.prioritize(\n { stream: s1, stream_exact: true },\n 3\n );\n expect(updated).toBe(1);\n const got1: { priority?: number } = {};\n const got2: { priority?: number } = {};\n await store.query_streams(\n (p) => {\n if (p.stream === s1) got1.priority = p.priority;\n if (p.stream === s2) got2.priority = p.priority;\n },\n { stream: `pri-${tag}-.*`, limit: 100 }\n );\n expect(got1.priority).toBe(3);\n expect(got2.priority).toBe(5);\n });\n });\n\n // ACT-1103: drain lanes. The Store contract now carries lane on\n // every persisted-and-returned stream surface. Adapters that\n // haven't migrated will fail these cases — the signal is\n // intentional (\"the contract changed, your adapter needs to\n // surface lane\"). Lane mutability across subscribe calls is the\n // load-bearing case: the builder config wins on every restart, so\n // operators can move a stream by editing config and restarting\n // without a manual data migration.\n describe(\"lanes\", () => {\n it(\"subscribe defaults lane to 'default' when omitted\", async () => {\n const s = `lane-default-${uid()}`;\n await store.subscribe([{ stream: s }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"default\"]);\n });\n\n it(\"subscribe records the lane passed in\", async () => {\n const s = `lane-set-${uid()}`;\n await store.subscribe([{ stream: s, lane: \"slow\" }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"slow\"]);\n });\n\n it(\"subscribe re-lanes existing streams on subsequent calls\", async () => {\n const s = `lane-upsert-${uid()}`;\n await store.subscribe([{ stream: s, lane: \"slow\" }]);\n await store.subscribe([{ stream: s, lane: \"fast\" }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"fast\"]);\n });\n\n it(\"claim() filters by lane when supplied and returns lane on the Lease\", async () => {\n const tag = uid();\n const src1 = `lane-claim-src1-${tag}`;\n const src2 = `lane-claim-src2-${tag}`;\n const subDefault = `lane-claim-def-${tag}`;\n const subSlow = `lane-claim-slow-${tag}`;\n await store.commit<CounterEvents>(\n src1,\n [inc(1)],\n makeMeta({ stream: src1 })\n );\n await store.commit<CounterEvents>(\n src2,\n [inc(1)],\n makeMeta({ stream: src2 })\n );\n await store.subscribe([\n { stream: subDefault, source: src1 },\n { stream: subSlow, source: src2, lane: \"slow\" },\n ]);\n\n const slow = await store.claim(50, 0, `w-slow-${tag}`, 1_000, \"slow\");\n const slowMine = slow.filter(\n (l) => l.stream === subDefault || l.stream === subSlow\n );\n expect(slowMine.map((l) => l.stream)).toEqual([subSlow]);\n expect(slowMine[0]?.lane).toBe(\"slow\");\n await store.ack(slowMine.map((l) => ({ ...l, at: l.at + 1 })));\n\n const all = await store.claim(50, 0, `w-all-${tag}`, 1_000);\n const allMine = all\n .filter((l) => l.stream === subDefault || l.stream === subSlow)\n .map((l) => ({ stream: l.stream, lane: l.lane }));\n expect(allMine).toEqual(\n expect.arrayContaining([\n { stream: subDefault, lane: \"default\" },\n { stream: subSlow, lane: \"slow\" },\n ])\n );\n });\n\n it(\"query_streams filters by lane\", async () => {\n const tag = uid();\n const a = `lane-q-a-${tag}`;\n const b = `lane-q-b-${tag}`;\n const c = `lane-q-c-${tag}`;\n await store.subscribe([\n { stream: a, lane: \"qslow\" },\n { stream: b, lane: \"qfast\" },\n { stream: c, lane: \"qslow\" },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n lane: \"qslow\",\n stream: `lane-q-.*-${tag}`,\n limit: 100,\n });\n expect(seen.sort()).toEqual([a, c]);\n });\n\n it(\"prioritize filters by lane\", async () => {\n const tag = uid();\n const a = `lane-pri-a-${tag}`;\n const b = `lane-pri-b-${tag}`;\n await store.subscribe([\n { stream: a, lane: `pslow-${tag}` },\n { stream: b, lane: `pfast-${tag}` },\n ]);\n const updated = await store.prioritize({ lane: `pslow-${tag}` }, 7);\n expect(updated).toBe(1);\n const seen = new Map<string, number>();\n await store.query_streams((p) => seen.set(p.stream, p.priority), {\n stream: `lane-pri-.*-${tag}`,\n limit: 100,\n });\n expect(seen.get(a)).toBe(7);\n expect(seen.get(b)).toBe(0);\n });\n\n it(\"reset filters by lane\", async () => {\n const tag = uid();\n const src = `lane-reset-src-${tag}`;\n const a = `lane-reset-a-${tag}`;\n const b = `lane-reset-b-${tag}`;\n await store.commit<CounterEvents>(\n src,\n [inc(1)],\n makeMeta({ stream: src })\n );\n await store.subscribe([\n { stream: a, source: src, lane: `rslow-${tag}` },\n { stream: b, source: src, lane: `rfast-${tag}` },\n ]);\n const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n const mine = leases.filter((l) => l.stream === a || l.stream === b);\n await store.ack(mine.map((l) => ({ ...l, at: l.at + 1 })));\n\n const count = await store.reset({ lane: `rslow-${tag}` });\n expect(count).toBe(1);\n // Fetch each stream by exact match — keeps the contract test\n // adapter-agnostic (PG `~` and SQLite anchor-aware LIKE both\n // honor `stream_exact: true` identically).\n const ats = new Map<string, number>();\n for (const name of [a, b]) {\n await store.query_streams((p) => ats.set(p.stream, p.at), {\n stream: name,\n stream_exact: true,\n });\n }\n expect(ats.get(a)).toBe(-1);\n expect(ats.get(b)).toBeGreaterThanOrEqual(0);\n });\n\n it(\"unblock filters by lane\", async () => {\n const tag = uid();\n const src = `lane-ub-src-${tag}`;\n const a = `lane-ub-a-${tag}`;\n const b = `lane-ub-b-${tag}`;\n await store.commit<CounterEvents>(\n src,\n [inc(1)],\n makeMeta({ stream: src })\n );\n await store.subscribe([\n { stream: a, source: src, lane: `uslow-${tag}` },\n { stream: b, source: src, lane: `ufast-${tag}` },\n ]);\n const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n const mine = leases.filter((l) => l.stream === a || l.stream === b);\n await store.block(mine.map((l) => ({ ...l, error: \"boom\" })));\n\n const count = await store.unblock({ lane: `uslow-${tag}` });\n expect(count).toBe(1);\n const blocked = new Map<string, boolean>();\n for (const name of [a, b]) {\n await store.query_streams((p) => blocked.set(p.stream, p.blocked), {\n stream: name,\n stream_exact: true,\n });\n }\n expect(blocked.get(a)).toBe(false);\n expect(blocked.get(b)).toBe(true);\n });\n });\n\n describe(\"truncate\", () => {\n it(\"seeds a tombstone when no snapshot is provided\", async () => {\n const s = `trunc-tomb-${uid()}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n const result = await store.truncate([{ stream: s }]);\n expect(result.get(s)?.deleted).toBe(2);\n const remaining: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n remaining.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(remaining).toHaveLength(1);\n expect((remaining[0] as unknown as { name: string }).name).toBe(\n \"__tombstone__\"\n );\n });\n\n it(\"seeds a snapshot when one is provided\", async () => {\n const s = `trunc-snap-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const result = await store.truncate([\n { stream: s, snapshot: { count: 7 } },\n ]);\n expect(result.get(s)?.deleted).toBe(1);\n const remaining: CommittedCounterEvent[] = [];\n await store.query<CounterEvents>(\n (e) => {\n remaining.push(e as CommittedCounterEvent);\n },\n { stream: s, stream_exact: true, with_snaps: true }\n );\n expect(remaining).toHaveLength(1);\n expect((remaining[0] as unknown as { name: string }).name).toBe(\n \"__snapshot__\"\n );\n expect(remaining[0].data).toEqual({ count: 7 });\n });\n\n it(\"returns an empty map for empty input\", async () => {\n const result = await store.truncate([]);\n expect(result.size).toBe(0);\n });\n\n it(\"returns 0 deleted for streams that don't exist\", async () => {\n const s = `trunc-missing-${uid()}`;\n const result = await store.truncate([{ stream: s }]);\n expect(result.get(s)?.deleted).toBe(0);\n });\n });\n\n describe(\"query_streams\", () => {\n it(\"returns positions filtered by stream regex, exact, source, and source_exact\", async () => {\n const tag = uid();\n const proj1 = `qs-${tag}-projection-tickets`;\n const proj2 = `qs-${tag}-projection-users`;\n const dyn1 = `qs-${tag}-stats-1`;\n const dyn2 = `qs-${tag}-stats-2`;\n const src1 = `qs-${tag}-src-1`;\n const src2 = `qs-${tag}-src-2`;\n await store.subscribe([\n { stream: proj1 },\n { stream: proj2 },\n { stream: dyn1, source: src1 },\n { stream: dyn2, source: src2 },\n ]);\n\n const all: Array<{ stream: string; source?: string }> = [];\n const allResult = await store.query_streams(\n (p) => all.push({ stream: p.stream, source: p.source }),\n { stream: `qs-${tag}-.*` }\n );\n expect(allResult.count).toBe(4);\n expect(allResult.maxEventId).toBeGreaterThanOrEqual(-1);\n expect(all.map((p) => p.stream).sort()).toEqual(\n [proj1, proj2, dyn1, dyn2].sort()\n );\n\n const projections: string[] = [];\n await store.query_streams((p) => projections.push(p.stream), {\n stream: `qs-${tag}-projection-.*`,\n });\n expect(projections.sort()).toEqual([proj1, proj2].sort());\n\n const exact: string[] = [];\n await store.query_streams((p) => exact.push(p.stream), {\n stream: dyn1,\n stream_exact: true,\n });\n expect(exact).toEqual([dyn1]);\n\n const bySource: string[] = [];\n await store.query_streams((p) => bySource.push(p.stream), {\n stream: `qs-${tag}-.*`,\n source: `qs-${tag}-src-.*`,\n });\n expect(bySource.sort()).toEqual([dyn1, dyn2].sort());\n\n const exactSource: string[] = [];\n await store.query_streams((p) => exactSource.push(p.stream), {\n stream: `qs-${tag}-.*`,\n source: src2,\n source_exact: true,\n });\n expect(exactSource).toEqual([dyn2]);\n });\n\n it(\"paginates with limit + after (keyset)\", async () => {\n const tag = uid();\n const streams = [\n `qp-${tag}-a`,\n `qp-${tag}-b`,\n `qp-${tag}-c`,\n `qp-${tag}-d`,\n ];\n await store.subscribe(streams.map((stream) => ({ stream })));\n const page1: string[] = [];\n await store.query_streams((p) => page1.push(p.stream), {\n stream: `qp-${tag}-.*`,\n limit: 2,\n });\n expect(page1).toHaveLength(2);\n const page2: string[] = [];\n await store.query_streams((p) => page2.push(p.stream), {\n stream: `qp-${tag}-.*`,\n limit: 2,\n after: page1.at(-1),\n });\n expect(page2).toHaveLength(2);\n expect([...page1, ...page2].sort()).toEqual([...streams].sort());\n });\n\n it(\"filters by blocked status\", async () => {\n const tag = uid();\n const s = `qb-${tag}`;\n const sibling = `qb-${tag}-other`;\n await store.subscribe([{ stream: s }, { stream: sibling }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n const blocked: Array<{ stream: string; error: string }> = [];\n await store.query_streams(\n (p) => blocked.push({ stream: p.stream, error: p.error }),\n { stream: `qb-${tag}.*`, blocked: true }\n );\n expect(blocked).toHaveLength(1);\n expect(blocked[0].error).toBe(\"boom\");\n\n // blocked: false — must exclude the blocked one but include\n // the sibling, exercising the other arm of the conditional.\n const unblocked: string[] = [];\n await store.query_streams((p) => unblocked.push(p.stream), {\n stream: `qb-${tag}.*`,\n blocked: false,\n });\n expect(unblocked).toEqual([sibling]);\n });\n });\n\n describe(\"query_stats\", () => {\n it(\"array input — returns head per stream, absent when not in input\", async () => {\n const tag = uid();\n const sA = `qst-${tag}-a`;\n const sB = `qst-${tag}-b`;\n const sUnasked = `qst-${tag}-unasked`;\n await store.commit<CounterEvents>(\n sA,\n [inc(1), inc(2)],\n makeMeta({ stream: sA })\n );\n await store.commit<CounterEvents>(\n sB,\n [dec(5)],\n makeMeta({ stream: sB })\n );\n await store.commit<CounterEvents>(\n sUnasked,\n [inc(99)],\n makeMeta({ stream: sUnasked })\n );\n\n const stats = await store.query_stats<CounterEvents>([sA, sB]);\n expect(stats.size).toBe(2);\n expect(stats.get(sA)?.head.name).toBe(\"Incremented\");\n expect((stats.get(sA)?.head.data as { amount: number }).amount).toBe(2);\n expect(stats.get(sB)?.head.name).toBe(\"Decremented\");\n expect((stats.get(sB)?.head.data as { amount: number }).amount).toBe(5);\n expect(stats.has(sUnasked)).toBe(false);\n\n // Empty input — empty result.\n const empty = await store.query_stats([]);\n expect(empty.size).toBe(0);\n\n // Unknown stream name — absent, not an error.\n const unknown = await store.query_stats([`qst-${tag}-missing`]);\n expect(unknown.size).toBe(0);\n });\n\n it(\"tail returns the earliest event per stream\", async () => {\n const tag = uid();\n const s = `qst-tail-${tag}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(2)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }));\n\n const stats = await store.query_stats<CounterEvents>([s], {\n tail: true,\n });\n const r = stats.get(s);\n expect(r?.head.name).toBe(\"Incremented\");\n expect((r?.head.data as { amount: number }).amount).toBe(3);\n expect(r?.tail?.name).toBe(\"Incremented\");\n expect((r?.tail?.data as { amount: number }).amount).toBe(1);\n });\n\n it(\"count + names — full aggregates including framework markers\", async () => {\n const tag = uid();\n const s = `qst-cn-${tag}`;\n // 1 inc, then truncate (wipes + seeds snap), then 2 more incs + 1 dec\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.truncate([{ stream: s, snapshot: { count: 99 } }]);\n await store.commit<CounterEvents>(\n s,\n [inc(2), inc(3), dec(1)],\n makeMeta({ stream: s })\n );\n\n const stats = await store.query_stats<CounterEvents>([s], {\n count: true,\n names: true,\n });\n const r = stats.get(s);\n // Post-truncate live events: snap + inc + inc + dec = 4\n expect(r?.count).toBe(4);\n expect(r?.names?.[SNAP_EVENT]).toBe(1);\n expect(r?.names?.Incremented).toBe(2);\n expect(r?.names?.Decremented).toBe(1);\n // Snapshot count is derivable from the names map — no separate field needed.\n expect(r?.names?.[SNAP_EVENT]).toBe(1);\n });\n\n it(\"exclude shifts head past filtered events; stream absent when all filtered\", async () => {\n const tag = uid();\n const s = `qst-excl-${tag}`;\n const sAllOut = `qst-allout-${tag}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), dec(2), inc(3)],\n makeMeta({ stream: s })\n );\n await store.commit<CounterEvents>(\n sAllOut,\n [inc(7)],\n makeMeta({ stream: sAllOut })\n );\n\n // Without exclude — head is the latest Incremented.\n const all = await store.query_stats<CounterEvents>([s]);\n expect(all.get(s)?.head.name).toBe(\"Incremented\");\n expect((all.get(s)?.head.data as { amount: number }).amount).toBe(3);\n\n // Exclude Incremented — head is now Decremented (the next-latest).\n const excl = await store.query_stats<CounterEvents>([s], {\n exclude: [\"Incremented\"],\n });\n expect(excl.get(s)?.head.name).toBe(\"Decremented\");\n expect((excl.get(s)?.head.data as { amount: number }).amount).toBe(2);\n\n // Exclude every name on a stream — that stream is absent from result.\n const wipe = await store.query_stats<CounterEvents>([sAllOut], {\n exclude: [\"Incremented\", \"Decremented\", \"Reset\"],\n });\n expect(wipe.has(sAllOut)).toBe(false);\n\n // Framework markers are typed in EventName<E> too — close-cycle pattern.\n const noTomb = await store.query_stats<CounterEvents>([s], {\n exclude: [TOMBSTONE_EVENT],\n });\n expect(noTomb.get(s)?.head.name).toBe(\"Incremented\");\n });\n\n it(\"before — time travel narrows head/tail/count\", async () => {\n const tag = uid();\n const s = `qst-tt-${tag}`;\n const c1 = await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s })\n );\n const c2 = await store.commit<CounterEvents>(\n s,\n [inc(2)],\n makeMeta({ stream: s })\n );\n await store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }));\n\n // Cutoff at id of c2's event — only c1's event is < cutoff\n const before = c2[0].id;\n const stats = await store.query_stats<CounterEvents>([s], {\n tail: true,\n count: true,\n before,\n });\n const r = stats.get(s);\n expect(r?.count).toBe(1);\n expect(r?.head.id).toBe(c1[0].id);\n expect(r?.tail?.id).toBe(c1[0].id);\n\n // Cutoff before any event — stream absent\n const empty = await store.query_stats<CounterEvents>([s], {\n before: 0,\n });\n expect(empty.has(s)).toBe(false);\n });\n\n it(\"filter form — stream regex, stream_exact, empty {} match\", async () => {\n const tag = uid();\n const sA = `qsf-${tag}-orders-1`;\n const sB = `qsf-${tag}-orders-2`;\n const sOther = `qsf-${tag}-users-1`;\n await store.commit<CounterEvents>(\n sA,\n [inc(1)],\n makeMeta({ stream: sA })\n );\n await store.commit<CounterEvents>(\n sB,\n [inc(2)],\n makeMeta({ stream: sB })\n );\n await store.commit<CounterEvents>(\n sOther,\n [inc(3)],\n makeMeta({ stream: sOther })\n );\n\n // Regex match — restrict to this tag's orders.\n const orders = await store.query_stats<CounterEvents>({\n stream: `^qsf-${tag}-orders-`,\n });\n expect([...orders.keys()].sort()).toEqual([sA, sB].sort());\n\n // Exact match — single stream.\n const exact = await store.query_stats<CounterEvents>({\n stream: sA,\n stream_exact: true,\n });\n expect([...exact.keys()]).toEqual([sA]);\n\n // Empty filter — matches every event-bearing stream visible to\n // this test's tag (filtered down to avoid sibling-test pollution).\n const all = await store.query_stats<CounterEvents>({\n stream: `^qsf-${tag}-`,\n });\n expect([...all.keys()].sort()).toEqual([sA, sB, sOther].sort());\n });\n\n it(\"compose with query_streams for subscription-level filters\", async () => {\n // `query_stats` only accepts event-stream selection. For\n // \"stats for blocked subscriptions\" etc., compose with\n // `query_streams` and pipe the names through. This test asserts\n // that two-call pattern works end-to-end.\n const tag = uid();\n const a = `qsc-${tag}-a`;\n const b = `qsc-${tag}-b`;\n await store.subscribe([{ stream: a }, { stream: b }]);\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n\n // Block stream `a` via the standard claim → block path.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === a);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== a);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n // Step 1: subscription-level filter via query_streams.\n const blockedNames: string[] = [];\n await store.query_streams((p) => blockedNames.push(p.stream), {\n stream: `^qsc-${tag}-`,\n blocked: true,\n });\n expect(blockedNames).toEqual([a]);\n\n // Step 2: event-level stats for those streams.\n const stats = await store.query_stats<CounterEvents>(blockedNames);\n expect(stats.get(a)?.head.name).toBe(\"Incremented\");\n expect(stats.has(b)).toBe(false);\n });\n\n it(\"empty filter {} — matches every event-bearing stream\", async () => {\n const tag = uid();\n const a = `qse-${tag}-a`;\n const b = `qse-${tag}-b`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [dec(2)], makeMeta({ stream: b }));\n\n // {} matches all event-bearing streams globally — the TCK runs\n // against a shared store, so we only assert that this tag's\n // streams are present (other tests' streams may also appear).\n const all = await store.query_stats<CounterEvents>({});\n expect(all.has(a)).toBe(true);\n expect(all.has(b)).toBe(true);\n });\n\n it(\"stat-flag combinations — count-only, names-only, tail-only\", async () => {\n const tag = uid();\n const s = `qsfl-${tag}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), dec(3)],\n makeMeta({ stream: s })\n );\n\n // count only → no names, no tail in result.\n const c = await store.query_stats<CounterEvents>([s], {\n count: true,\n });\n expect(c.get(s)?.count).toBe(3);\n expect(c.get(s)?.names).toBeUndefined();\n expect(c.get(s)?.tail).toBeUndefined();\n\n // names only → no count, no tail.\n const n = await store.query_stats<CounterEvents>([s], {\n names: true,\n });\n expect(n.get(s)?.names).toEqual({ Incremented: 2, Decremented: 1 });\n expect(n.get(s)?.count).toBeUndefined();\n expect(n.get(s)?.tail).toBeUndefined();\n\n // tail only → no count, no names. Cheap path (no full scan).\n const t = await store.query_stats<CounterEvents>([s], { tail: true });\n expect(t.get(s)?.tail?.name).toBe(\"Incremented\");\n expect((t.get(s)?.tail?.data as { amount: number }).amount).toBe(1);\n expect(t.get(s)?.count).toBeUndefined();\n expect(t.get(s)?.names).toBeUndefined();\n });\n });\n\n describe(\"query_streams anchor contract\", () => {\n // Same regex-anchor rules as `query`. Auto-anchoring by an adapter\n // is a contract violation — every store must honor caller-supplied\n // anchors identically.\n it(\"plain regex without anchors is a substring match\", async () => {\n const tag = uid();\n const inner = `qsr-${tag}-inner`;\n const longer = `qsr-${tag}-inner-extra`;\n const other = `zz-${tag}-other`;\n await store.subscribe([\n { stream: inner },\n { stream: longer },\n { stream: other },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `qsr-${tag}-inner`,\n });\n expect(seen.sort()).toEqual([inner, longer].sort());\n });\n\n it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n const tag = uid();\n const inner = `qsr-${tag}-anchor`;\n const longer = `qsr-${tag}-anchor-extra`;\n await store.subscribe([{ stream: inner }, { stream: longer }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `^qsr-${tag}-anchor$`,\n });\n expect(seen).toEqual([inner]);\n });\n\n it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n const tag = uid();\n const a = `qsr-${tag}-pfx-a`;\n const b = `qsr-${tag}-pfx-b`;\n const other = `zz-${tag}-pfx-c`;\n await store.subscribe([\n { stream: a },\n { stream: b },\n { stream: other },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `^qsr-${tag}-pfx-`,\n });\n expect(seen.sort()).toEqual([a, b].sort());\n });\n });\n\n describe(\"prioritize anchor contract\", () => {\n it(\"caller-anchored `^name$` filter matches only the whole string\", async () => {\n const tag = uid();\n const inner = `pr-${tag}-anchor`;\n const longer = `pr-${tag}-anchor-extra`;\n await store.subscribe([\n { stream: inner, priority: 0 },\n { stream: longer, priority: 0 },\n ]);\n const updated = await store.prioritize(\n { stream: `^pr-${tag}-anchor$` },\n 7\n );\n expect(updated).toBe(1);\n const seen = new Map<string, number>();\n await store.query_streams((p) => seen.set(p.stream, p.priority), {\n stream: `pr-${tag}-anchor`,\n });\n expect(seen.get(inner)).toBe(7);\n expect(seen.get(longer)).toBe(0);\n });\n });\n\n describe(\"query_streams head\", () => {\n it(\"maxEventId tracks the highest committed id\", async () => {\n const s = `head-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const positions: string[] = [];\n const { maxEventId } = await store.query_streams(\n (p) => positions.push(p.stream),\n { stream: s, stream_exact: true, limit: 1 }\n );\n expect(maxEventId).toBeGreaterThanOrEqual(0);\n expect(positions).toEqual([s]);\n });\n });\n\n describe(\"seedStream helper coverage\", () => {\n it(\"commits N events with monotonically increasing ids\", async () => {\n const s = `seed-${uid()}`;\n const committed = await seedStream(store, s, 3);\n expect(committed).toHaveLength(3);\n for (let i = 1; i < committed.length; i++) {\n expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n }\n });\n });\n\n if (caps.notify) {\n describe(\"notify (capability)\", () => {\n it(\"delivers a notification when a different instance commits\", async () => {\n // Self-filtering contract: an instance does not see its own\n // commits. So we listen on `store` and write through a fresh\n // sibling instance pointing at the same backend.\n const notify = store.notify;\n expect(notify).toBeDefined();\n const received: StoreNotification[] = [];\n let resolveArrived!: () => void;\n const arrived = new Promise<void>((res) => {\n resolveArrived = res;\n });\n const disposer = await notify!.call(store, (n) => {\n received.push(n);\n resolveArrived();\n });\n const writer = await options.factory();\n try {\n const stream = `notify-${uid()}`;\n await writer.commit<CounterEvents>(\n stream,\n [inc(1)],\n makeMeta({ stream })\n );\n // No explicit timeout — vitest's default test timeout\n // bounds the wait. If notify silently fails to deliver,\n // the test will surface that as a clear timeout failure.\n await arrived;\n expect(received.length).toBeGreaterThanOrEqual(1);\n expect(received[0].stream).toBe(stream);\n expect(received[0].events.length).toBeGreaterThanOrEqual(1);\n } finally {\n await writer.dispose();\n await Promise.resolve(disposer());\n }\n });\n });\n }\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAA4D;AAqB5D,IAAM,QAAQ,CACZ,UACA,QAAiC,CAAC,OACO;AAAA,EACzC;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT;AA8BO,IAAM,cAAc,CAAC,YAAmC;AAC7D,8BAAS,iBAAiB,QAAQ,IAAI,IAAI,MAAM;AAC9C,QAAI;AAEJ,kCAAW,MAAM;AACf,cAAQ,QAAQ,QAAQ;AAAA,IAC1B,CAAC;AAED,iCAAU,YAAY;AACpB,YAAM,MAAM,QAAQ;AAAA,IACtB,CAAC;AAED,0BAAG,yCAAyC,YAAY;AACtD,gCAAO,MAAM,MAAM,IAAI,SAAS,CAAC,EAAE,cAAc;AAAA,IACnD,CAAC;AAED,0BAAG,qCAAqC,YAAY;AAClD,YAAM,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC;AAC/B,YAAM,MAAM,IAAI,MAAM,CAAC;AACvB,gCAAO,MAAM,MAAM,IAAI,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IACzC,CAAC;AAED,0BAAG,mDAAmD,YAAY;AAChE,YAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,YAAM,MAAM,MAAM,MAAM,IAA6B,IAAI;AACzD,gCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAC5B,gCAAO,KAAK,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAAA,IACzC,CAAC;AAED,0BAAG,mDAAmD,YAAY;AAChE,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,WAAW,GAAG;AAC1B,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY;AAAA,IAC3C,CAAC;AAED,0BAAG,8CAA8C,YAAY;AAC3D,gBAAM,sBAAO,MAAM,WAAW,WAAW,CAAC,EAAE,SAAS,cAAc;AAAA,IACrE,CAAC;AAED,0BAAG,8BAA8B,YAAY;AAC3C,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,MAAM;AAClB,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAC3C,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,cAAc;AAAA,IAC7C,CAAC;AAED,0BAAG,sCAAsC,YAAY;AACnD,gBAAM,sBAAO,MAAM,MAAM,CAAC,EAAE,SAAS,cAAc;AAAA,IACrD,CAAC;AAED,0BAAG,mCAAmC,YAAY;AAChD,YAAM,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC;AAC/B,YAAM,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC;AAC/B,YAAM,MAAM,IAAI,KAAK,EAAE;AACvB,YAAM,MAAM,IAAI,KAAK,EAAE;AACvB,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE;AACvC,gCAAO,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE;AAAA,IACzC,CAAC;AAED,0BAAG,yBAAyB,YAAY;AACtC,YAAM,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7B,YAAM,MAAM,QAAQ;AACpB,gBAAM,sBAAO,MAAM,QAAQ,CAAC,EAAE,SAAS,cAAc;AAAA,IACvD,CAAC;AAAA,EACH,CAAC;AACH;;;ACpIA,iBAAkB;AAEX,IAAM,cAAc,aAAE,OAAO,EAAE,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,IAAM,cAAc,aAAE,OAAO,EAAE,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,IAAM,QAAQ,aAAE,OAAO,CAAC,CAAC;AAEzB,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF;AAQO,IAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF;;;ACtBA,yBAA2B;AAoBpB,IAAM,MAAM,UAAc,+BAAW,EAAE,MAAM,GAAG,CAAC;AAEjD,IAAM,QAAQ,CAAC,OAAO,cAAc,EAAE,QAAI,+BAAW,GAAG,KAAK;AAG7D,IAAM,WAAW,CACtB,OAAmE,CAAC,OACrD;AAAA,EACf,aAAa,KAAK,mBAAe,+BAAW;AAAA,EAC5C,WAAW,KAAK,SACZ;AAAA,IACE,QAAQ;AAAA,MACN,MAAM,KAAK,UAAU;AAAA,MACrB,QAAQ,KAAK;AAAA,MACb,OAAO,MAAM;AAAA,IACf;AAAA,EACF,IACA,CAAC;AACP;AAEO,IAAM,MAAM,CAAC,SAAS,OAAuB;AAAA,EAClD,MAAM;AAAA,EACN,MAAM,EAAE,OAAO;AACjB;AAEO,IAAM,MAAM,CAAC,SAAS,OAAuB;AAAA,EAClD,MAAM;AAAA,EACN,MAAM,EAAE,OAAO;AACjB;AAEO,IAAM,QAAQ,OAAuB,EAAE,MAAM,SAAS,MAAM,CAAC,EAAE;AAM/D,IAAM,aAAa,OACxB,OACA,QACA,OACA,gBACqC;AACrC,QAAM,MAA+B,CAAC;AACtC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,UAAM,YAAY,MAAM,MAAM;AAAA,MAC5B;AAAA,MACA,CAAC,IAAI,CAAC,CAAC;AAAA,MACP,SAAS,EAAE,aAAa,OAAO,CAAC;AAAA,IAClC;AACA,QAAI,KAAK,GAAI,SAAqC;AAAA,EACpD;AACA,SAAO;AACT;AAKO,IAAM,UAAU,OACrB,OACA,UACqC;AACrC,QAAM,MAA+B,CAAC;AACtC,QAAM,MAAM,MAAqB,CAAC,MAAM;AACtC,QAAI,KAAK,CAA0B;AAAA,EACrC,GAAG,KAAK;AACR,SAAO;AACT;;;ACrFA,IAAAA,iBAA4D;AAiB5D,IAAM,SAAS,CAAC,SAAS,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAgC3D,IAAM,eAAe,CAAC,YAAoC;AAC/D,+BAAS,kBAAkB,QAAQ,IAAI,IAAI,MAAM;AAC/C,QAAI;AACJ,QAAI;AAOJ,mCAAW,MAAM;AACf,eAAS,QAAQ,QAAQ;AACzB,uBAAiB,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM;AACzD,cAAQ,OAAO,SAAS,MAAM;AAAA,IAChC,CAAC;AAED,kCAAU,YAAY;AACpB,cAAQ,OAAO,QAAQ;AACvB,YAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AAED,2BAAG,sCAAsC,MAAM;AAC7C,iCAAO,OAAO,OAAO,KAAK,EAAE,KAAK,QAAQ;AACzC,iCAAO,OAAO,MAAM,MAAM,EAAE,gBAAgB,CAAC;AAAA,IAC/C,CAAC;AAED,eAAW,SAAS,QAAQ;AAC1B,6BAAG,GAAG,KAAK,wBAAwB,MAAM;AACvC,mCAAO,MAAM,OAAO,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ;AAAA,MACnD,CAAC;AAED,6BAAG,GAAG,KAAK,wBAAwB,MAAM;AACvC,mCAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ;AAAA,MACtD,CAAC;AAED,6BAAG,GAAG,KAAK,6BAA6B,MAAM;AAC5C,mCAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,IAAI,QAAQ;AAAA,MACjE,CAAC;AAAA,IACH;AAEA,2BAAG,0BAA0B,MAAM;AACjC,iCAAO,MAAM,OAAO,KAAK,MAAM,cAAc,CAAC,EAAE,IAAI,QAAQ;AAAA,IAC9D,CAAC;AAED,2BAAG,6CAA6C,MAAM;AACpD,YAAM,SAAkC,EAAE,MAAM,OAAO;AACvD,aAAO,OAAO;AACd,iCAAO,MAAM,OAAO,KAAK,QAAQ,OAAO,CAAC,EAAE,IAAI,QAAQ;AAAA,IACzD,CAAC;AAED,2BAAG,iEAAiE,MAAM;AACxE,YAAM,QAAQ,OAAO,MAAM,EAAE,WAAW,MAAM,CAAC;AAC/C,iCAAO,OAAO,MAAM,KAAK,EAAE,KAAK,QAAQ;AACxC,iBAAW,SAAS,QAAQ;AAC1B,mCAAO,OAAO,MAAM,KAAK,CAAC,EAAE,KAAK,UAAU;AAAA,MAC7C;AACA,iCAAO,OAAO,MAAM,KAAK,EAAE,KAAK,UAAU;AAC1C,iCAAO,OAAO,MAAM,OAAO,EAAE,KAAK,UAAU;AAAA,IAC9C,CAAC;AAED,2BAAG,+CAA+C,MAAM;AACtD,YAAM,KAAK,OAAO,MAAM,EAAE,GAAG,EAAE,CAAC;AAChC,YAAM,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC;AAC5B,iCAAO,MAAM,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,QAAQ;AAAA,IAC9C,CAAC;AAED,2BAAG,uCAAuC,YAAY;AACpD,gBAAM,uBAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,cAAc;AACtD,gBAAM,uBAAO,OAAO,QAAQ,CAAC,EAAE,SAAS,cAAc;AAAA,IACxD,CAAC;AAAA,EACH,CAAC;AACH;;;ACzHA,iBAA8D;AAQ9D,IAAAC,iBAA0D;AAuFnD,IAAM,cAAc,CAAC,YAAmC;AAC7D,+BAAS,iBAAiB,QAAQ,IAAI,IAAI,MAAM;AAC9C,QAAI;AACJ,UAAM,OAAO,QAAQ,gBAAgB,CAAC;AAEtC,kCAAU,YAAY;AACpB,cAAQ,MAAM,QAAQ,QAAQ;AAC9B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK;AAAA,IACnB,CAAC;AAED,iCAAS,YAAY;AACnB,YAAM,MAAM,QAAQ;AAAA,IACtB,CAAC;AAED,iCAAS,UAAU,MAAM;AACvB,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;AACnC,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,aAAa;AAC5C,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/C,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,UAAU,IAAI,CAAC,EAAE,EAAE;AAAA,QAC7D;AAAA,MACF,CAAC;AAED,6BAAG,4CAA4C,YAAY;AACzD,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,cAAc,OAAO,IAAI,CAAC;AAChC,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,YAAY,CAAC;AAAA,QACrC;AACA,mCAAO,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;AAClC,mCAAO,UAAU,CAAC,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW;AAAA,MACxD,CAAC;AAED,6BAAG,yDAAyD,YAAY;AACtE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,UACtB;AAAA,QACF;AACA,kBAAM;AAAA,UACJ,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;AAAA,QACrE,EAAE,QAAQ,eAAe,2BAAgB;AAAA,MAC3C,CAAC;AAED,6BAAG,+DAA+D,YAAY;AAC5E,cAAM,IAAI,sBAAsB,IAAI,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,kBAAM;AAAA,UACJ,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;AAAA,QACrE,EAAE,QAAQ,eAAe,2BAAgB;AACzC,cAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACpE,mCAAO,KAAK,EAAE,aAAa,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,4DAA4D,YAAY;AACzE,cAAM,KAAK,QAAQ,IAAI,CAAC;AACxB,cAAM,KAAK,QAAQ,IAAI,CAAC;AACxB,cAAM,MAAM,SAAS,IAAI,CAAC;AAC1B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,SAAS,EAAE,QAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,QAC3C;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,MAAW,CAAC;AAAA,UAC7B,SAAS,EAAE,QAAQ,IAAI,aAAa,IAAI,CAAC;AAAA,QAC3C;AAEA,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,QAAQ,EAAE,aAAa,CAAC;AAE/B,cAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,UAClC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,CAAC,OAAO;AAAA,QACjB,CAAC;AACD,mCAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,mCAAO,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO;AAEnC,cAAM,gBAAgB,MAAM,QAAQ,OAAO,EAAE,aAAa,IAAI,CAAC;AAC/D,mCAAO,aAAa,EAAE,aAAa,CAAC;AAEpC,cAAM,UAAU,MAAM,QAAQ,OAAO;AAAA,UACnC,aAAa;AAAA,UACb,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAED,6BAAG,+BAA+B,YAAY;AAC5C,cAAM,IAAI,UAAU,IAAI,CAAC;AACzB,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACtE,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,QACZ,CAAC;AACD,mCAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACnE,mCAAO,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UAChC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QAC1C;AAIA,cAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,UAClC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,MAAM,EAAE,aAAa,CAAC;AAC7B,mCAAO,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,UAAU,GAAG,EAAE,EAAG,EAAE;AAAA,MAChD,CAAC;AAED,6BAAG,mCAAmC,YAAY;AAChD,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,OAAO,UAAU,CAAC,EAAE;AAAA,QACtB,CAAC;AACD,mCAAO,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UAClC,UAAU,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACpC;AACA,cAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,QAAQ,UAAU,UAAU,SAAS,CAAC,EAAE;AAAA,QAC1C,CAAC;AACD,mCAAO,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,UAClC,UAAU,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACxC;AAAA,MACF,CAAC;AAED,6BAAG,oDAAoD,YAAY;AACjE,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,cAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,UACpC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,UACf,gBAAgB;AAAA,QAClB,CAAC;AACD,mCAAO,SAAS,MAAM,EAAE,KAAK,CAAC;AAC9B,cAAM,cAAc,MAAM,QAAQ,OAAO;AAAA,UACvC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,QACjB,CAAC;AACD,mCAAO,YAAY,MAAM,EAAE,KAAK,CAAC;AAAA,MACnC,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AAEA,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,OAAO,UAAU,CAAC,EAAE;AAAA,QACtB,CAAC;AACD,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ;AAAA,UACnC,UAAU,CAAC,EAAE;AAAA,UACb,UAAU,CAAC,EAAE;AAAA,QACf,CAAC;AAAA,MACH,CAAC;AAED,6BAAG,iEAAiE,YAAY;AAC9E,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAGtE,cAAM,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AAC3C,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,eAAe;AAAA,QACjB,CAAC;AACD,mCAAO,GAAG,EAAE,aAAa,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,qEAAqE,YAAY;AAClF,cAAM,IAAI,aAAa,IAAI,CAAC;AAI5B,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;AACzD,cAAM,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,GAAM;AACzC,cAAM,MAAM,MAAM,QAAQ,OAAO;AAAA,UAC/B,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,gBAAgB;AAAA,QAClB,CAAC;AACD,mCAAO,GAAG,EAAE,aAAa,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,WAAW,GAAG;AACxB,cAAM,IAAI,WAAW,GAAG;AACxB,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,GAAG,cAAc,KAAK,CAAC;AACpE,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,mCAAO,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC7C,CAAC;AAMD,6BAAG,oDAAoD,YAAY;AACjE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC7B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,MAAM,GAAG,SAAS,CAAC;AAC9D,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACxE,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC7B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG,WAAW,CAAC;AACjE,mCAAO,GAAG,EAAE,aAAa,CAAC;AAC1B,mCAAO,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,KAAK;AAAA,MAClC,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC5B;AACA,cAAM,MAAM,MAAM,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG,QAAQ,CAAC;AAC9D,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,2BAA2B,MAAM;AACxC,6BAAG,sDAAsD,YAAY;AACnE,cAAM,IAAI,OAAO,IAAI,CAAC;AACtB,cAAM,QAAQ,MAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,MAAM,UAAU,EAAE,KAAK,CAAC;AAC/B,cAAM,SAAS,MAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,mCAAO,OAAO,UAAU,EAAE,KAAK,CAAC;AAAA,MAClC,CAAC;AAED,6BAAG,yDAAyD,YAAY;AACtE,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,KAAK,UAAU,IAAI,CAAC;AAC1B,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,IAAI,GAAM;AACnD,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,EAAE;AACxB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,KAAM,KAAK,EAAE,CAAC,CAAC;AAAA,MAC5D,CAAC;AAED,6BAAG,sCAAsC,YAAY;AACnD,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,QAAQ,eAAe,IAAI,CAAC;AAClC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,cAAM,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,mCAAO,OAAO,EAAE,YAAY;AAK5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AACzC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC5B;AACA,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,QAAQ,MAAM,EAAE,gBAAgB,CAAC;AACxC,mCAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAC1D,mCAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,EAAE,YAAY;AAAA,MAC9D,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AACvD,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAK,KAAe,KAAK,EAAE,CAAC,CAAC;AACpE,cAAM,SAAS,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;AACxD,mCAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACzD,CAAC;AAED,6BAAG,4DAA4D,YAAY;AACzE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAGtE,cAAM,UAAU,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,GAAO;AACjE,cAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AACpD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAED,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,UAAU,eAAe,IAAI,CAAC;AACpC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,QAAQ,CAAC,CAAC;AAC1D,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,QAAQ,CAAC;AAAA,QAC9B;AACA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,GAAO;AAClE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,eAAe,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,OAAO;AAC5D,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,YAAY,EAAE,YAAY;AAGjC,cAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,UAC5B,EAAE,GAAI,MAAgB,IAAI,WAAW;AAAA,UACrC;AAAA,QACF,CAAC;AACD,mCAAO,MAAM,MAAM,EAAE,gBAAgB,CAAC;AACtC,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC1D,CAAC;AAED,6BAAG,qDAAqD,YAAY;AAClE,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,KAAK,KAAK,IAAI,CAAC;AACrB,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,IAAI,GAAO;AACpD,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,kBAAM;AAAA,UACJ,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,GAAG,CAAC,CAAC;AAAA,QAC5C,EAAE,SAAS,YAAY;AAAA,MACzB,CAAC;AAED,6BAAG,2DAA2D,YAAY;AAGxE,cAAM,QAAQ,MAAM,QAAQ,QAAQ;AACpC,YAAI;AACF,gBAAM,MAAM,KAAK;AACjB,gBAAM,MAAM,KAAK;AACjB,gBAAM,UAAU,MAAM,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,IAAI,GAAI;AAC1D,qCAAO,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAA,QAC5B,UAAE;AACA,gBAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,oCAAoC,YAAY;AACjD,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,UAAU,MAAM,MAAM,MAAM;AAAA,UAChC,EAAE,GAAI,MAAgB,OAAO,OAAO;AAAA,QACtC,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,mCAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM;AACpC,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,GAAO;AAChE,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,cAAc;AAAA,MAC1D,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,GAAO;AAClE,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,UAAU,MAAM,MAAM,MAAM;AAAA,UAChC,EAAE,GAAI,MAAgB,IAAI,YAAY,OAAO,KAAK;AAAA,QACpD,CAAC;AACD,mCAAO,OAAO,EAAE,aAAa,CAAC;AAAA,MAChC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,SAAS,MAAM;AACtB,6BAAG,oCAAoC,YAAY;AACjD,cAAM,IAAI,SAAS,IAAI,CAAC;AACxB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,MAAgB,IAAI,GAAG,CAAC,CAAC;AAChD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrC,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,EAAE;AAAA,MAC1B,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AACzD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACrC,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,GAAO;AAC9D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,YAAY;AAAA,MACxD,CAAC;AAED,6BAAG,iDAAiD,YAAY;AAC9D,mCAAO,MAAM,MAAM,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACtD,mCAAO,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,WAAW,MAAM;AACxB,6BAAG,mDAAmD,YAAY;AAChE,cAAM,IAAI,WAAW,IAAI,CAAC;AAC1B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAErC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAGtE,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,cAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC3C,cAAM,MAAM,IAAI,CAAC,EAAE,GAAI,IAAc,IAAI,GAAI,GAAG,CAAC,CAAC;AAGlD,cAAM,cAAc,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AACnE,cAAM,KAAK,YAAY,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AACjD,mCAAO,EAAE,EAAE,YAAY;AACvB,cAAM,kBAAkB,GAAI;AAC5B,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,YAAY,CAAC,CAAC;AAO5D,YAAI;AACJ,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,0BAAc,EAAE;AAAA,UAClB;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,MAAM,OAAO,EAAE;AAAA,QAC5C;AACA,mCAAO,WAAW,EAAE,KAAK,IAAI;AAG7B,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,cAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC7C,mCAAO,IAAI,EAAE,YAAY;AACzB,mCAAO,KAAM,EAAE,EAAE,KAAK,eAAe;AACrC,mCAAO,KAAM,KAAK,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,4CAA4C,YAAY;AACzD,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEtE,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACzC,CAAC;AAED,6BAAG,iDAAiD,YAAY;AAC9D,mCAAO,MAAM,MAAM,QAAQ,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACxD,mCAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MACxC,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,cAAM,KAAK,iBAAiB,IAAI,CAAC;AACjC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,KAAK,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;AAC7C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE;AACnD,cAAM,MAAM,IAAI,MAAM;AAEtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,OAAO,CAAC,CAAC;AACvD,mCAAO,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAC9C,CAAC;AAED,6BAAG,2CAA2C,YAAY;AACxD,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,kBAAkB,GAAG;AAChC,cAAM,KAAK,kBAAkB,GAAG;AAChC,cAAM,KAAK,SAAS,GAAG;AACvB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtE,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AAEA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,YAA4B,OAC/B,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,EAAE,EACnE,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,OAAO,OAAO,EAAE;AAGlD,cAAM,MAAM;AAAA,UACV,OAAO;AAAA,YACL,CAAC,MAAM,EAAE,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW;AAAA,UAC9D;AAAA,QACF;AACA,cAAM,MAAM,MAAM,SAAS;AAG3B,cAAM,QAAQ,MAAM,MAAM,QAAQ;AAAA,UAChC,QAAQ,mBAAmB,GAAG;AAAA,QAChC,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAGpB,cAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC7D,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc;AAEzD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY;AACvD,mCAAO,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY;AAAA,MACzD,CAAC;AAED,6BAAG,2DAA2D,YAAY;AAMxE,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,EAAE;AACpE,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;AACvD,cAAM,MAAM;AAAA,UACV,KAAK,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,OAAO,OAAO,EAAE;AAAA,QACtD;AACA,cAAM,QAAQ,MAAM,MAAM,QAAQ;AAAA,UAChC,QAAQ,kBAAkB,GAAG;AAAA,QAC/B,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAED,6BAAG,uDAAuD,YAAY;AAIpE,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,yBAAyB,GAAG;AACtC,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEtE;AAAA,UACE,MAAM,MAAM,QAAQ;AAAA,YAClB,QAAQ,0BAA0B,GAAG;AAAA,YACrC,SAAS;AAAA,UACX,CAAC;AAAA,QACH,EAAE,KAAK,CAAC;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,qBAAqB,MAAM;AAClC,6BAAG,4CAA4C,YAAY;AACzD,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,gBAAgB,GAAG;AAC9B,cAAM,KAAK,gBAAgB,GAAG;AAC9B,cAAM,QAAQ,eAAe,GAAG;AAChC,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG;AAAA,UACb,EAAE,QAAQ,GAAG;AAAA,UACb,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC5B;AAEA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO;AAAA,UAClB,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW;AAAA,QAC5D;AACA,cAAM,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,GAAI,GAAa,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAGtE,cAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,QAAQ,iBAAiB,GAAG,IAAI,CAAC;AACnE,mCAAO,KAAK,EAAE,KAAK,CAAC;AAKpB,cAAM,cAAc,OAAO,SAAyC;AAClE,cAAI,KAAoB;AACxB,gBAAM,MAAM;AAAA,YACV,CAAC,MAAM;AACL,mBAAK,EAAE;AAAA,YACT;AAAA,YACA,EAAE,QAAQ,MAAM,cAAc,MAAM,OAAO,EAAE;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AACA,mCAAO,MAAM,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE;AACrC,mCAAO,MAAM,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE;AACrC,mCAAO,MAAM,YAAY,KAAK,CAAC,EAAE,gBAAgB,EAAE;AAAA,MACrD,CAAC;AAED,6BAAG,8DAA8D,YAAY;AAC3E,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,KAAK,iBAAiB,GAAG;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAC;AACtD,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,KAAK,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;AAC7C,cAAM,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AACrD,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,IAAc,OAAO,OAAO,CAAC,CAAC;AAEvD,cAAM,QAAQ,MAAM,MAAM,MAAM;AAAA,UAC9B,QAAQ,kBAAkB,GAAG;AAAA,UAC7B,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,cAAc,MAAM;AAC3B,6BAAG,6DAA6D,YAAY;AAC1E,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,IAAI,UAAU,EAAE;AAAA,UAC1B,EAAE,QAAQ,IAAI,UAAU,EAAE;AAAA,QAC5B,CAAC;AACD,cAAM,UAAU,MAAM,MAAM;AAAA,UAC1B,EAAE,QAAQ,IAAI,cAAc,KAAK;AAAA,UACjC;AAAA,QACF;AACA,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAA8B,CAAC;AACrC,cAAM,OAA8B,CAAC;AACrC,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,gBAAI,EAAE,WAAW,GAAI,MAAK,WAAW,EAAE;AACvC,gBAAI,EAAE,WAAW,GAAI,MAAK,WAAW,EAAE;AAAA,UACzC;AAAA,UACA,EAAE,QAAQ,OAAO,GAAG,OAAO,OAAO,IAAI;AAAA,QACxC;AACA,mCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAC5B,mCAAO,KAAK,QAAQ,EAAE,KAAK,CAAC;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAUD,iCAAS,SAAS,MAAM;AACtB,6BAAG,qDAAqD,YAAY;AAClE,cAAM,IAAI,gBAAgB,IAAI,CAAC;AAC/B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;AAAA,MAClC,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,IAAI,YAAY,IAAI,CAAC;AAC3B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,2DAA2D,YAAY;AACxE,cAAM,IAAI,eAAe,IAAI,CAAC;AAC9B,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC;AACnD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,IAAc,GAAG;AAAA,UAC5D,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAAA,MAC/B,CAAC;AAED,6BAAG,uEAAuE,YAAY;AACpF,cAAM,MAAM,IAAI;AAChB,cAAM,OAAO,mBAAmB,GAAG;AACnC,cAAM,OAAO,mBAAmB,GAAG;AACnC,cAAM,aAAa,kBAAkB,GAAG;AACxC,cAAM,UAAU,mBAAmB,GAAG;AACtC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,QAC3B;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,QAC3B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,YAAY,QAAQ,KAAK;AAAA,UACnC,EAAE,QAAQ,SAAS,QAAQ,MAAM,MAAM,OAAO;AAAA,QAChD,CAAC;AAED,cAAM,OAAO,MAAM,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,KAAO,MAAM;AACpE,cAAM,WAAW,KAAK;AAAA,UACpB,CAAC,MAAM,EAAE,WAAW,cAAc,EAAE,WAAW;AAAA,QACjD;AACA,mCAAO,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;AACvD,mCAAO,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,MAAM;AACrC,cAAM,MAAM,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAE7D,cAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,IAAI,GAAK;AAC1D,cAAM,UAAU,IACb,OAAO,CAAC,MAAM,EAAE,WAAW,cAAc,EAAE,WAAW,OAAO,EAC7D,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE;AAClD,mCAAO,OAAO,EAAE;AAAA,UACd,sBAAO,gBAAgB;AAAA,YACrB,EAAE,QAAQ,YAAY,MAAM,UAAU;AAAA,YACtC,EAAE,QAAQ,SAAS,MAAM,OAAO;AAAA,UAClC,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAED,6BAAG,iCAAiC,YAAY;AAC9C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,UAC3B,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,UAC3B,EAAE,QAAQ,GAAG,MAAM,QAAQ;AAAA,QAC7B,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,MAAM;AAAA,UACN,QAAQ,aAAa,GAAG;AAAA,UACxB,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,MACpC,CAAC;AAED,6BAAG,8BAA8B,YAAY;AAC3C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,cAAc,GAAG;AAC3B,cAAM,IAAI,cAAc,GAAG;AAC3B,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,MAAM,SAAS,GAAG,GAAG;AAAA,UAClC,EAAE,QAAQ,GAAG,MAAM,SAAS,GAAG,GAAG;AAAA,QACpC,CAAC;AACD,cAAM,UAAU,MAAM,MAAM,WAAW,EAAE,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC;AAClE,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAAO,oBAAI,IAAoB;AACrC,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,UAC/D,QAAQ,eAAe,GAAG;AAAA,UAC1B,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAC1B,mCAAO,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,yBAAyB,YAAY;AACtC,cAAM,MAAM,IAAI;AAChB,cAAM,MAAM,kBAAkB,GAAG;AACjC,cAAM,IAAI,gBAAgB,GAAG;AAC7B,cAAM,IAAI,gBAAgB,GAAG;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,UAC/C,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,QACjD,CAAC;AACD,cAAM,SAAS,MAAM,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAK;AACzD,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,EAAE,WAAW,CAAC;AAClE,cAAM,MAAM,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAEzD,cAAM,QAAQ,MAAM,MAAM,MAAM,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC;AACxD,mCAAO,KAAK,EAAE,KAAK,CAAC;AAIpB,cAAM,MAAM,oBAAI,IAAoB;AACpC,mBAAW,QAAQ,CAAC,GAAG,CAAC,GAAG;AACzB,gBAAM,MAAM,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG;AAAA,YACxD,QAAQ;AAAA,YACR,cAAc;AAAA,UAChB,CAAC;AAAA,QACH;AACA,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;AAC1B,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,uBAAuB,CAAC;AAAA,MAC7C,CAAC;AAED,6BAAG,2BAA2B,YAAY;AACxC,cAAM,MAAM,IAAI;AAChB,cAAM,MAAM,eAAe,GAAG;AAC9B,cAAM,IAAI,aAAa,GAAG;AAC1B,cAAM,IAAI,aAAa,GAAG;AAC1B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QAC1B;AACA,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,UAC/C,EAAE,QAAQ,GAAG,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AAAA,QACjD,CAAC;AACD,cAAM,SAAS,MAAM,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAK;AACzD,cAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,EAAE,WAAW,CAAC;AAClE,cAAM,MAAM,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,OAAO,EAAE,CAAC;AAE5D,cAAM,QAAQ,MAAM,MAAM,QAAQ,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC;AAC1D,mCAAO,KAAK,EAAE,KAAK,CAAC;AACpB,cAAM,UAAU,oBAAI,IAAqB;AACzC,mBAAW,QAAQ,CAAC,GAAG,CAAC,GAAG;AACzB,gBAAM,MAAM,cAAc,CAAC,MAAM,QAAQ,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG;AAAA,YACjE,QAAQ;AAAA,YACR,cAAc;AAAA,UAChB,CAAC;AAAA,QACH;AACA,mCAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AACjC,mCAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,MAClC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,YAAY,MAAM;AACzB,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AACrC,cAAM,YAA6D,CAAC;AACpE,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,sBAAU,KAAK,CAAC;AAAA,UAClB;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,KAAK;AAAA,QAClC;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAQ,UAAU,CAAC,EAAkC,IAAI,EAAE;AAAA,UACzD;AAAA,QACF;AAAA,MACF,CAAC;AAED,6BAAG,yCAAyC,YAAY;AACtD,cAAM,IAAI,cAAc,IAAI,CAAC;AAC7B,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,SAAS;AAAA,UAClC,EAAE,QAAQ,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE;AAAA,QACtC,CAAC;AACD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AACrC,cAAM,YAAqC,CAAC;AAC5C,cAAM,MAAM;AAAA,UACV,CAAC,MAAM;AACL,sBAAU,KAAK,CAA0B;AAAA,UAC3C;AAAA,UACA,EAAE,QAAQ,GAAG,cAAc,MAAM,YAAY,KAAK;AAAA,QACpD;AACA,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,mCAAQ,UAAU,CAAC,EAAkC,IAAI,EAAE;AAAA,UACzD;AAAA,QACF;AACA,mCAAO,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAAA,MAChD,CAAC;AAED,6BAAG,wCAAwC,YAAY;AACrD,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,CAAC;AACtC,mCAAO,OAAO,IAAI,EAAE,KAAK,CAAC;AAAA,MAC5B,CAAC;AAED,6BAAG,kDAAkD,YAAY;AAC/D,cAAM,IAAI,iBAAiB,IAAI,CAAC;AAChC,cAAM,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,mCAAO,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AAAA,MACvC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,iBAAiB,MAAM;AAC9B,6BAAG,+EAA+E,YAAY;AAC5F,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,OAAO,MAAM,GAAG;AACtB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,UAC7B,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,QAC/B,CAAC;AAED,cAAM,MAAkD,CAAC;AACzD,cAAM,YAAY,MAAM,MAAM;AAAA,UAC5B,CAAC,MAAM,IAAI,KAAK,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,OAAO,CAAC;AAAA,UACtD,EAAE,QAAQ,MAAM,GAAG,MAAM;AAAA,QAC3B;AACA,mCAAO,UAAU,KAAK,EAAE,KAAK,CAAC;AAC9B,mCAAO,UAAU,UAAU,EAAE,uBAAuB,EAAE;AACtD,mCAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;AAAA,UACtC,CAAC,OAAO,OAAO,MAAM,IAAI,EAAE,KAAK;AAAA,QAClC;AAEA,cAAM,cAAwB,CAAC;AAC/B,cAAM,MAAM,cAAc,CAAC,MAAM,YAAY,KAAK,EAAE,MAAM,GAAG;AAAA,UAC3D,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,KAAK,EAAE,KAAK,CAAC;AAExD,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;AAE5B,cAAM,WAAqB,CAAC;AAC5B,cAAM,MAAM,cAAc,CAAC,MAAM,SAAS,KAAK,EAAE,MAAM,GAAG;AAAA,UACxD,QAAQ,MAAM,GAAG;AAAA,UACjB,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC;AAEnD,cAAM,cAAwB,CAAC;AAC/B,cAAM,MAAM,cAAc,CAAC,MAAM,YAAY,KAAK,EAAE,MAAM,GAAG;AAAA,UAC3D,QAAQ,MAAM,GAAG;AAAA,UACjB,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;AAAA,MACpC,CAAC;AAED,6BAAG,yCAAyC,YAAY;AACtD,cAAM,MAAM,IAAI;AAChB,cAAM,UAAU;AAAA,UACd,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,UACT,MAAM,GAAG;AAAA,QACX;AACA,cAAM,MAAM,UAAU,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;AAC3D,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ,MAAM,GAAG;AAAA,UACjB,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,cAAM,QAAkB,CAAC;AACzB,cAAM,MAAM,cAAc,CAAC,MAAM,MAAM,KAAK,EAAE,MAAM,GAAG;AAAA,UACrD,QAAQ,MAAM,GAAG;AAAA,UACjB,OAAO;AAAA,UACP,OAAO,MAAM,GAAG,EAAE;AAAA,QACpB,CAAC;AACD,mCAAO,KAAK,EAAE,aAAa,CAAC;AAC5B,mCAAO,CAAC,GAAG,OAAO,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;AAAA,MACjE,CAAC;AAED,6BAAG,6BAA6B,YAAY;AAC1C,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,MAAM,GAAG;AACnB,cAAM,UAAU,MAAM,GAAG;AACzB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,QAAQ,CAAC,CAAC;AAC1D,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AAEzD,cAAM,UAAoD,CAAC;AAC3D,cAAM,MAAM;AAAA,UACV,CAAC,MAAM,QAAQ,KAAK,EAAE,QAAQ,EAAE,QAAQ,OAAO,EAAE,MAAM,CAAC;AAAA,UACxD,EAAE,QAAQ,MAAM,GAAG,MAAM,SAAS,KAAK;AAAA,QACzC;AACA,mCAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,mCAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM;AAIpC,cAAM,YAAsB,CAAC;AAC7B,cAAM,MAAM,cAAc,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM,GAAG;AAAA,UACzD,QAAQ,MAAM,GAAG;AAAA,UACjB,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;AAAA,MACrC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,eAAe,MAAM;AAC5B,6BAAG,wEAAmE,YAAY;AAChF,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,WAAW,OAAO,GAAG;AAC3B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACf,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,EAAE,CAAC;AAAA,UACR,SAAS,EAAE,QAAQ,SAAS,CAAC;AAAA,QAC/B;AAEA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,IAAI,EAAE,CAAC;AAC7D,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AACzB,mCAAO,MAAM,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACnD,oCAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,MAA4B,MAAM,EAAE,KAAK,CAAC;AACtE,mCAAO,MAAM,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACnD,oCAAQ,MAAM,IAAI,EAAE,GAAG,KAAK,MAA4B,MAAM,EAAE,KAAK,CAAC;AACtE,mCAAO,MAAM,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK;AAGtC,cAAM,QAAQ,MAAM,MAAM,YAAY,CAAC,CAAC;AACxC,mCAAO,MAAM,IAAI,EAAE,KAAK,CAAC;AAGzB,cAAM,UAAU,MAAM,MAAM,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC;AAC9D,mCAAO,QAAQ,IAAI,EAAE,KAAK,CAAC;AAAA,MAC7B,CAAC;AAED,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEtE,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,MAAM;AAAA,QACR,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AACrB,mCAAO,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACvC,oCAAQ,GAAG,KAAK,MAA4B,MAAM,EAAE,KAAK,CAAC;AAC1D,mCAAO,GAAG,MAAM,IAAI,EAAE,KAAK,aAAa;AACxC,oCAAQ,GAAG,MAAM,MAA4B,MAAM,EAAE,KAAK,CAAC;AAAA,MAC7D,CAAC;AAED,6BAAG,oEAA+D,YAAY;AAC5E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,UAAU,GAAG;AAEvB,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;AAC7D,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AAEA,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AAErB,mCAAO,GAAG,KAAK,EAAE,KAAK,CAAC;AACvB,mCAAO,GAAG,QAAQ,qBAAU,CAAC,EAAE,KAAK,CAAC;AACrC,mCAAO,GAAG,OAAO,WAAW,EAAE,KAAK,CAAC;AACpC,mCAAO,GAAG,OAAO,WAAW,EAAE,KAAK,CAAC;AAEpC,mCAAO,GAAG,QAAQ,qBAAU,CAAC,EAAE,KAAK,CAAC;AAAA,MACvC,CAAC;AAED,6BAAG,6EAA6E,YAAY;AAC1F,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,YAAY,GAAG;AACzB,cAAM,UAAU,cAAc,GAAG;AACjC,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,QAAQ,CAAC;AAAA,QAC9B;AAGA,cAAM,MAAM,MAAM,MAAM,YAA2B,CAAC,CAAC,CAAC;AACtD,mCAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAChD,oCAAQ,IAAI,IAAI,CAAC,GAAG,KAAK,MAA4B,MAAM,EAAE,KAAK,CAAC;AAGnE,cAAM,OAAO,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACvD,SAAS,CAAC,aAAa;AAAA,QACzB,CAAC;AACD,mCAAO,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AACjD,oCAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,MAA4B,MAAM,EAAE,KAAK,CAAC;AAGpE,cAAM,OAAO,MAAM,MAAM,YAA2B,CAAC,OAAO,GAAG;AAAA,UAC7D,SAAS,CAAC,eAAe,eAAe,OAAO;AAAA,QACjD,CAAC;AACD,mCAAO,KAAK,IAAI,OAAO,CAAC,EAAE,KAAK,KAAK;AAGpC,cAAM,SAAS,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACzD,SAAS,CAAC,0BAAe;AAAA,QAC3B,CAAC;AACD,mCAAO,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAAA,MACrD,CAAC;AAED,6BAAG,qDAAgD,YAAY;AAC7D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,UAAU,GAAG;AACvB,cAAM,KAAK,MAAM,MAAM;AAAA,UACrB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,KAAK,MAAM,MAAM;AAAA,UACrB;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AACA,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAGtE,cAAM,SAAS,GAAG,CAAC,EAAE;AACrB,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AACD,cAAM,IAAI,MAAM,IAAI,CAAC;AACrB,mCAAO,GAAG,KAAK,EAAE,KAAK,CAAC;AACvB,mCAAO,GAAG,KAAK,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;AAChC,mCAAO,GAAG,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;AAGjC,cAAM,QAAQ,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACxD,QAAQ;AAAA,QACV,CAAC;AACD,mCAAO,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,6BAAG,iEAA4D,YAAY;AACzE,cAAM,MAAM,IAAI;AAChB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,KAAK,OAAO,GAAG;AACrB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,QACzB;AACA,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,CAAC;AAAA,UACP,SAAS,EAAE,QAAQ,OAAO,CAAC;AAAA,QAC7B;AAGA,cAAM,SAAS,MAAM,MAAM,YAA2B;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;AAGzD,cAAM,QAAQ,MAAM,MAAM,YAA2B;AAAA,UACnD,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB,CAAC;AACD,mCAAO,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AAItC,cAAM,MAAM,MAAM,MAAM,YAA2B;AAAA,UACjD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE,KAAK,CAAC;AAAA,MAChE,CAAC;AAED,6BAAG,6DAA6D,YAAY;AAK1E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAGtE,cAAM,SAAS,MAAM,MAAM,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,GAAO;AAC9D,cAAM,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C,mCAAO,IAAI,EAAE,YAAY;AACzB,cAAM,SAAS,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,cAAM,MAAM,IAAI,MAAM;AACtB,cAAM,MAAM,MAAM,CAAC,EAAE,GAAI,MAAgB,OAAO,OAAO,CAAC,CAAC;AAGzD,cAAM,eAAyB,CAAC;AAChC,cAAM,MAAM,cAAc,CAAC,MAAM,aAAa,KAAK,EAAE,MAAM,GAAG;AAAA,UAC5D,QAAQ,QAAQ,GAAG;AAAA,UACnB,SAAS;AAAA,QACX,CAAC;AACD,mCAAO,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGhC,cAAM,QAAQ,MAAM,MAAM,YAA2B,YAAY;AACjE,mCAAO,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,aAAa;AAClD,mCAAO,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,6BAAG,6DAAwD,YAAY;AACrE,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAKtE,cAAM,MAAM,MAAM,MAAM,YAA2B,CAAC,CAAC;AACrD,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAC5B,mCAAO,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,MAC9B,CAAC;AAED,6BAAG,mEAA8D,YAAY;AAC3E,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,QAAQ,GAAG;AACrB,cAAM,MAAM;AAAA,UACV;AAAA,UACA,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvB,SAAS,EAAE,QAAQ,EAAE,CAAC;AAAA,QACxB;AAGA,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACpD,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC;AAC9B,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,cAAc;AAGrC,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG;AAAA,UACpD,OAAO;AAAA,QACT,CAAC;AACD,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;AAClE,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,cAAc;AAGrC,cAAM,IAAI,MAAM,MAAM,YAA2B,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;AACpE,mCAAO,EAAE,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,KAAK,aAAa;AAC/C,oCAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,MAA4B,MAAM,EAAE,KAAK,CAAC;AAClE,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AACtC,mCAAO,EAAE,IAAI,CAAC,GAAG,KAAK,EAAE,cAAc;AAAA,MACxC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,iCAAiC,MAAM;AAI9C,6BAAG,oDAAoD,YAAY;AACjE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,OAAO,GAAG;AACxB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,MAAM;AAAA,UAChB,EAAE,QAAQ,OAAO;AAAA,UACjB,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,OAAO,GAAG;AAAA,QACpB,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,MAAM,EAAE,KAAK,CAAC;AAAA,MACpD,CAAC;AAED,6BAAG,0DAA0D,YAAY;AACvE,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,OAAO,GAAG;AACxB,cAAM,SAAS,OAAO,GAAG;AACzB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,OAAO,CAAC,CAAC;AAC7D,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;AAAA,MAC9B,CAAC;AAED,6BAAG,+CAA+C,YAAY;AAC5D,cAAM,MAAM,IAAI;AAChB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,IAAI,OAAO,GAAG;AACpB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,EAAE;AAAA,UACZ,EAAE,QAAQ,EAAE;AAAA,UACZ,EAAE,QAAQ,MAAM;AAAA,QAClB,CAAC;AACD,cAAM,OAAiB,CAAC;AACxB,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG;AAAA,UACpD,QAAQ,QAAQ,GAAG;AAAA,QACrB,CAAC;AACD,mCAAO,KAAK,KAAK,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,8BAA8B,MAAM;AAC3C,6BAAG,iEAAiE,YAAY;AAC9E,cAAM,MAAM,IAAI;AAChB,cAAM,QAAQ,MAAM,GAAG;AACvB,cAAM,SAAS,MAAM,GAAG;AACxB,cAAM,MAAM,UAAU;AAAA,UACpB,EAAE,QAAQ,OAAO,UAAU,EAAE;AAAA,UAC7B,EAAE,QAAQ,QAAQ,UAAU,EAAE;AAAA,QAChC,CAAC;AACD,cAAM,UAAU,MAAM,MAAM;AAAA,UAC1B,EAAE,QAAQ,OAAO,GAAG,WAAW;AAAA,UAC/B;AAAA,QACF;AACA,mCAAO,OAAO,EAAE,KAAK,CAAC;AACtB,cAAM,OAAO,oBAAI,IAAoB;AACrC,cAAM,MAAM,cAAc,CAAC,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,UAC/D,QAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AACD,mCAAO,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC;AAC9B,mCAAO,KAAK,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAA,MACjC,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,sBAAsB,MAAM;AACnC,6BAAG,8CAA8C,YAAY;AAC3D,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,MAAM,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,cAAM,MAAM,OAAsB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtE,cAAM,YAAsB,CAAC;AAC7B,cAAM,EAAE,WAAW,IAAI,MAAM,MAAM;AAAA,UACjC,CAAC,MAAM,UAAU,KAAK,EAAE,MAAM;AAAA,UAC9B,EAAE,QAAQ,GAAG,cAAc,MAAM,OAAO,EAAE;AAAA,QAC5C;AACA,mCAAO,UAAU,EAAE,uBAAuB,CAAC;AAC3C,mCAAO,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,MAC/B,CAAC;AAAA,IACH,CAAC;AAED,iCAAS,8BAA8B,MAAM;AAC3C,6BAAG,sDAAsD,YAAY;AACnE,cAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,cAAM,YAAY,MAAM,WAAW,OAAO,GAAG,CAAC;AAC9C,mCAAO,SAAS,EAAE,aAAa,CAAC;AAChC,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,qCAAO,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,UAAU,IAAI,CAAC,EAAE,EAAE;AAAA,QAC7D;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,QAAI,KAAK,QAAQ;AACf,mCAAS,uBAAuB,MAAM;AACpC,+BAAG,6DAA6D,YAAY;AAI1E,gBAAM,SAAS,MAAM;AACrB,qCAAO,MAAM,EAAE,YAAY;AAC3B,gBAAM,WAAgC,CAAC;AACvC,cAAI;AACJ,gBAAM,UAAU,IAAI,QAAc,CAAC,QAAQ;AACzC,6BAAiB;AAAA,UACnB,CAAC;AACD,gBAAM,WAAW,MAAM,OAAQ,KAAK,OAAO,CAAC,MAAM;AAChD,qBAAS,KAAK,CAAC;AACf,2BAAe;AAAA,UACjB,CAAC;AACD,gBAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,cAAI;AACF,kBAAM,SAAS,UAAU,IAAI,CAAC;AAC9B,kBAAM,OAAO;AAAA,cACX;AAAA,cACA,CAAC,IAAI,CAAC,CAAC;AAAA,cACP,SAAS,EAAE,OAAO,CAAC;AAAA,YACrB;AAIA,kBAAM;AACN,uCAAO,SAAS,MAAM,EAAE,uBAAuB,CAAC;AAChD,uCAAO,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM;AACtC,uCAAO,SAAS,CAAC,EAAE,OAAO,MAAM,EAAE,uBAAuB,CAAC;AAAA,UAC5D,UAAE;AACA,kBAAM,OAAO,QAAQ;AACrB,kBAAM,QAAQ,QAAQ,SAAS,CAAC;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["import_vitest","import_vitest"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/cache-tck.ts","../src/fixtures/events.ts","../src/fixtures/helpers.ts","../src/logger-tck.ts","../src/store-tck.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module @rotorsoft/act-tck\n *\n * Test Compatibility Kit for {@link Store}, {@link Cache}, and {@link Logger}\n * ports of `@rotorsoft/act`.\n *\n * A TCK turns each port from \"interface plus tribal knowledge\" into an\n * executable contract a third-party adapter can validate itself against.\n * Drop one or more `run*Tck` invocations into your adapter's test suite,\n * point them at your factory, and the TCK exercises every method on the\n * corresponding interface.\n *\n * The in-tree adapters (`InMemoryStore`, `InMemoryCache`, `ConsoleLogger`,\n * `PostgresStore`, `SqliteStore`, and `@rotorsoft/act-pino`) are the first\n * customers of this package — if any of them stop honoring the contract,\n * the TCK fails first.\n *\n * @example Store adapter\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { MyStore } from \"../src/MyStore.js\";\n *\n * runStoreTck({\n * name: \"MyStore\",\n * factory: () => new MyStore({ ... }),\n * capabilities: { notify: true },\n * });\n * ```\n *\n * @example Cache adapter\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { RedisCache } from \"../src/RedisCache.js\";\n *\n * runCacheTck({\n * name: \"RedisCache\",\n * factory: () => new RedisCache({ url: process.env.REDIS_URL }),\n * });\n * ```\n *\n * @example Logger adapter\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { MyLogger } from \"../src/MyLogger.js\";\n *\n * runLoggerTck({\n * name: \"MyLogger\",\n * factory: () => new MyLogger({ level: \"trace\" }),\n * });\n * ```\n *\n * ## Port evolution\n *\n * When a port interface in `libs/act/src/types/ports.ts` changes — a new\n * method, a tightened contract, a new optional flag — extend the matching\n * `run*Tck` here so every adapter is forced to keep up. Gate new optional\n * methods behind a flag in the relevant `Capabilities` type so existing\n * adapters keep passing until they explicitly opt in.\n */\n\n// Re-export the port contracts so adapter authors only need a single\n// import line in their test files (`@rotorsoft/act-tck`) rather than\n// reaching into `@rotorsoft/act/types` for the interfaces and the TCK\n// for the run* functions. Same types — keeps the two paths from\n// drifting in adapter-author code.\nexport type {\n Cache,\n CacheEntry,\n Logger,\n Store,\n StoreNotification,\n} from \"@rotorsoft/act/types\";\nexport type { CacheTckOptions } from \"./cache-tck.js\";\nexport { runCacheTck } from \"./cache-tck.js\";\nexport type { CounterEvents } from \"./fixtures/events.js\";\nexport {\n COUNTER_EVENT_NAMES,\n CounterSchemas,\n Decremented,\n Incremented,\n Reset,\n} from \"./fixtures/events.js\";\nexport type {\n CommittedCounterEvent,\n CounterMessage,\n} from \"./fixtures/helpers.js\";\nexport {\n actor,\n collect,\n dec,\n inc,\n makeMeta,\n reset,\n seedStream,\n uid,\n} from \"./fixtures/helpers.js\";\nexport type { LoggerTckOptions } from \"./logger-tck.js\";\nexport { runLoggerTck } from \"./logger-tck.js\";\nexport type { StoreCapabilities, StoreTckOptions } from \"./store-tck.js\";\nexport { runStoreTck } from \"./store-tck.js\";\n","import type { Cache, CacheEntry } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runCacheTck}.\n */\nexport type CacheTckOptions = {\n /**\n * Display name for the implementation under test. Becomes the\n * top-level `describe` block in the vitest run.\n */\n readonly name: string;\n /**\n * Factory invoked before each test. Must return a fresh, empty cache\n * — tests assume zero starting entries. Any per-implementation tuning\n * (max size, TTL, etc.) is the factory's responsibility, but the TCK\n * itself sets ≤ 8 entries in any single test, so a default max of\n * `≥ 8` is safe.\n */\n readonly factory: () => Cache;\n};\n\nconst entry = (\n event_id: number,\n state: Record<string, unknown> = {}\n): CacheEntry<Record<string, unknown>> => ({\n state,\n version: event_id,\n event_id,\n patches: 1,\n snaps: 0,\n});\n\n/**\n * Runs the Cache contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * Covers the full {@link Cache} surface defined in\n * `libs/act/src/types/ports.ts`:\n * - get/set round-trip\n * - get on a missing key returns undefined\n * - invalidate removes a single stream without affecting others\n * - clear wipes all entries\n * - dispose is idempotent and awaitable\n * - cross-stream isolation\n *\n * Adapter-specific behavior (LRU ordering, TTL, size limits, …) stays\n * in the adapter's own test suite — the TCK only asserts the contract\n * every Cache must honor.\n *\n * @example\n * ```ts\n * import { runCacheTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryCache } from \"@rotorsoft/act\";\n *\n * runCacheTck({\n * name: \"InMemoryCache\",\n * factory: () => new InMemoryCache({ maxSize: 1000 }),\n * });\n * ```\n */\nexport const runCacheTck = (options: CacheTckOptions): void => {\n describe(`TCK / Cache / ${options.name}`, () => {\n let cache: Cache;\n\n beforeEach(() => {\n cache = options.factory();\n });\n\n afterEach(async () => {\n await cache.dispose();\n });\n\n it(\"returns undefined for an unset stream\", async () => {\n expect(await cache.get(\"missing\")).toBeUndefined();\n });\n\n it(\"set then get round-trips an entry\", async () => {\n const e = entry(1, { count: 7 });\n await cache.set(\"s1\", e);\n expect(await cache.get(\"s1\")).toEqual(e);\n });\n\n it(\"set overwrites a prior entry on the same stream\", async () => {\n await cache.set(\"s1\", entry(1, { count: 1 }));\n await cache.set(\"s1\", entry(2, { count: 2 }));\n const got = await cache.get<Record<string, unknown>>(\"s1\");\n expect(got?.event_id).toBe(2);\n expect(got?.state).toEqual({ count: 2 });\n });\n\n it(\"invalidate removes one stream and leaves others\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.set(\"b\", entry(2));\n await cache.invalidate(\"a\");\n expect(await cache.get(\"a\")).toBeUndefined();\n expect(await cache.get(\"b\")).toBeDefined();\n });\n\n it(\"invalidate on an unknown stream is a no-op\", async () => {\n await expect(cache.invalidate(\"never-set\")).resolves.toBeUndefined();\n });\n\n it(\"clear empties every stream\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.set(\"b\", entry(2));\n await cache.set(\"c\", entry(3));\n await cache.clear();\n expect(await cache.get(\"a\")).toBeUndefined();\n expect(await cache.get(\"b\")).toBeUndefined();\n expect(await cache.get(\"c\")).toBeUndefined();\n });\n\n it(\"clear on an empty cache is a no-op\", async () => {\n await expect(cache.clear()).resolves.toBeUndefined();\n });\n\n it(\"entries are isolated per stream\", async () => {\n const ea = entry(1, { id: \"a\" });\n const eb = entry(2, { id: \"b\" });\n await cache.set(\"a\", ea);\n await cache.set(\"b\", eb);\n expect(await cache.get(\"a\")).toEqual(ea);\n expect(await cache.get(\"b\")).toEqual(eb);\n });\n\n it(\"dispose is idempotent\", async () => {\n await cache.set(\"a\", entry(1));\n await cache.dispose();\n await expect(cache.dispose()).resolves.toBeUndefined();\n });\n });\n};\n","import { z } from \"zod\";\n\nexport const Incremented = z.object({ amount: z.number().int() });\nexport const Decremented = z.object({ amount: z.number().int() });\nexport const Reset = z.object({});\n\nexport const CounterSchemas = {\n Incremented,\n Decremented,\n Reset,\n} as const;\n\nexport type CounterEvents = {\n Incremented: z.infer<typeof Incremented>;\n Decremented: z.infer<typeof Decremented>;\n Reset: z.infer<typeof Reset>;\n};\n\nexport const COUNTER_EVENT_NAMES = [\n \"Incremented\",\n \"Decremented\",\n \"Reset\",\n] as const;\n","import { randomUUID } from \"node:crypto\";\nimport type {\n Committed,\n EventMeta,\n Message,\n Store,\n} from \"@rotorsoft/act/types\";\nimport type { CounterEvents } from \"./events.js\";\n\nexport type CounterMessage = Message<CounterEvents, keyof CounterEvents>;\nexport type CommittedCounterEvent = Committed<\n CounterEvents,\n keyof CounterEvents\n>;\n\n/**\n * Per-test unique identifier suffix. Use to namespace streams so tests\n * running in parallel against the same shared store (e.g., a real Postgres\n * instance) don't collide on stream names.\n */\nexport const uid = (): string => randomUUID().slice(0, 8);\n\nexport const actor = (name = \"tester\") => ({ id: randomUUID(), name });\n\n/** Build an EventMeta with a correlation id and optional action causation. */\nexport const makeMeta = (\n opts: { correlation?: string; stream?: string; action?: string } = {}\n): EventMeta => ({\n correlation: opts.correlation ?? randomUUID(),\n causation: opts.stream\n ? {\n action: {\n name: opts.action ?? \"Test\",\n stream: opts.stream,\n actor: actor(),\n },\n }\n : {},\n});\n\nexport const inc = (amount = 1): CounterMessage => ({\n name: \"Incremented\",\n data: { amount },\n});\n\nexport const dec = (amount = 1): CounterMessage => ({\n name: \"Decremented\",\n data: { amount },\n});\n\nexport const reset = (): CounterMessage => ({ name: \"Reset\", data: {} });\n\n/**\n * Commit `count` Incremented events to `stream` on the given store, each\n * within its own commit transaction (so they receive distinct event ids).\n */\nexport const seedStream = async (\n store: Store,\n stream: string,\n count: number,\n correlation?: string\n): Promise<CommittedCounterEvent[]> => {\n const out: CommittedCounterEvent[] = [];\n for (let i = 0; i < count; i++) {\n const committed = await store.commit<CounterEvents>(\n stream,\n [inc(1)],\n makeMeta({ correlation, stream })\n );\n out.push(...(committed as CommittedCounterEvent[]));\n }\n return out;\n};\n\n/**\n * Drain a `query` call into an array. Convenience wrapper for assertions.\n */\nexport const collect = async (\n store: Store,\n query: Parameters<Store[\"query\"]>[1]\n): Promise<CommittedCounterEvent[]> => {\n const out: CommittedCounterEvent[] = [];\n await store.query<CounterEvents>((e) => {\n out.push(e as CommittedCounterEvent);\n }, query);\n return out;\n};\n","import type { Logger } from \"@rotorsoft/act/types\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\n\n/**\n * Options for {@link runLoggerTck}.\n */\nexport type LoggerTckOptions = {\n /**\n * Display name for the implementation under test.\n */\n readonly name: string;\n /**\n * Factory invoked before each test. Must return a fresh logger\n * instance — tests do not assume any starting state.\n */\n readonly factory: () => Logger;\n};\n\nconst LEVELS = [\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\"] as const;\n\n/**\n * Runs the Logger contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The {@link Logger} contract is intentionally narrow: implementations\n * are pluggable wrappers around pino, winston, bunyan, console, etc.\n * The TCK verifies the **shape** of the contract, not the format of\n * the output (which is adapter-specific by design):\n * - every level method exists and is callable in both overload forms\n * `(msg)` and `(obj, msg?)`\n * - `child(bindings)` returns something that satisfies the same\n * contract and can itself spawn children\n * - `level` is a non-empty string\n * - `dispose` is awaitable and idempotent\n * - cyclic payloads must not throw (sinks may choose any fallback)\n *\n * Anything more (output format, level gating, color, file routing) is\n * adapter-specific and stays in the adapter's own test suite.\n *\n * @example\n * ```ts\n * import { runLoggerTck } from \"@rotorsoft/act-tck\";\n * import { ConsoleLogger } from \"@rotorsoft/act\";\n *\n * runLoggerTck({\n * name: \"ConsoleLogger\",\n * factory: () => new ConsoleLogger({ level: \"trace\" }),\n * });\n * ```\n */\nexport const runLoggerTck = (options: LoggerTckOptions): void => {\n describe(`TCK / Logger / ${options.name}`, () => {\n let logger: Logger;\n let originalStdout: typeof process.stdout.write;\n\n // Silence stdout during the TCK — we don't assert on output, and\n // chatty implementations would otherwise spam test runs. Loggers\n // that route elsewhere (stderr, files) won't appear in the test\n // report; checking their formatted output is the adapter's own\n // responsibility.\n beforeEach(() => {\n logger = options.factory();\n originalStdout = process.stdout.write.bind(process.stdout);\n process.stdout.write = (() => true) as typeof process.stdout.write;\n });\n\n afterEach(async () => {\n process.stdout.write = originalStdout;\n await logger.dispose();\n });\n\n it(\"exposes a non-empty `level` string\", () => {\n expect(typeof logger.level).toBe(\"string\");\n expect(logger.level.length).toBeGreaterThan(0);\n });\n\n for (const level of LEVELS) {\n it(`${level}(msg) does not throw`, () => {\n expect(() => logger[level](\"hello\")).not.toThrow();\n });\n\n it(`${level}(obj) does not throw`, () => {\n expect(() => logger[level]({ k: \"v\" })).not.toThrow();\n });\n\n it(`${level}(obj, msg) does not throw`, () => {\n expect(() => logger[level]({ k: \"v\" }, \"context\")).not.toThrow();\n });\n }\n\n it(\"accepts a null payload\", () => {\n expect(() => logger.info(null, \"null payload\")).not.toThrow();\n });\n\n it(\"accepts a cyclic payload without throwing\", () => {\n const cyclic: Record<string, unknown> = { name: \"loop\" };\n cyclic.self = cyclic;\n expect(() => logger.info(cyclic, \"cycle\")).not.toThrow();\n });\n\n it(\"child(bindings) returns a Logger satisfying the same contract\", () => {\n const child = logger.child({ requestId: \"abc\" });\n expect(typeof child.level).toBe(\"string\");\n for (const level of LEVELS) {\n expect(typeof child[level]).toBe(\"function\");\n }\n expect(typeof child.child).toBe(\"function\");\n expect(typeof child.dispose).toBe(\"function\");\n });\n\n it(\"child loggers can themselves spawn children\", () => {\n const c1 = logger.child({ a: 1 });\n const c2 = c1.child({ b: 2 });\n expect(() => c2.info(\"nested\")).not.toThrow();\n });\n\n it(\"dispose is idempotent and awaitable\", async () => {\n await expect(logger.dispose()).resolves.toBeUndefined();\n await expect(logger.dispose()).resolves.toBeUndefined();\n });\n });\n};\n","import {\n act,\n ConcurrencyError,\n InMemoryCache,\n SNAP_EVENT,\n TOMBSTONE_EVENT,\n} from \"@rotorsoft/act\";\nimport type {\n BlockedLease,\n Committed,\n Lease,\n ScanOptions,\n ScanResult,\n Schemas,\n Store,\n StoreNotification,\n} from \"@rotorsoft/act/types\";\nimport { afterAll, beforeAll, describe, expect, it } from \"vitest\";\nimport type { CounterEvents } from \"./fixtures/events.js\";\nimport {\n type CommittedCounterEvent,\n collect,\n dec,\n inc,\n makeMeta,\n reset as resetEvent,\n seedStream,\n uid,\n} from \"./fixtures/helpers.js\";\n\n/**\n * Optional features a {@link Store} implementation may or may not\n * support. Default to `false` — only enable a flag when the adapter\n * exposes the corresponding surface and you want the TCK to cover it.\n */\nexport type StoreCapabilities = {\n /**\n * Adapter implements {@link Store.notify}. When `true`, the TCK runs\n * a basic subscribe/dispose smoke test. Cross-process LISTEN/NOTIFY\n * semantics are not exercised — that needs two processes and stays\n * in the adapter's own suite.\n */\n readonly notify?: boolean;\n /**\n * Adapter implements {@link Store.restore}. When `true`, the TCK\n * runs the full restore suite — empty-source / single-stream /\n * multi-stream happy paths, ISO-string `created`, pre-existing\n * wipe, subscription clearing, causation remap, and atomic\n * rollback on mid-iteration throw.\n */\n readonly restore?: boolean;\n};\n\n/**\n * Options for {@link runStoreTck}.\n */\nexport type StoreTckOptions = {\n /**\n * Display name for the implementation under test.\n */\n readonly name: string;\n /**\n * Returns the {@link Store} instance under test. Called once during\n * `beforeAll`. The TCK does not assume a fresh store per test — each\n * test namespaces its streams via {@link uid} so they don't collide.\n * The TCK calls `store.seed()` once before any test runs and\n * `store.dispose()` after all tests, with `store.drop()` in between\n * if any test needs it.\n */\n readonly factory: () => Store | Promise<Store>;\n /**\n * Optional capabilities flags — see {@link StoreCapabilities}.\n */\n readonly capabilities?: StoreCapabilities;\n};\n\n/**\n * Runs the Store contract test compatibility kit against the\n * implementation produced by `options.factory`.\n *\n * The TCK is the executable definition of the {@link Store} contract.\n * Every method on the interface in `libs/act/src/types/ports.ts` has\n * matching cases here:\n *\n * - `commit` — single + multi-event commits, optimistic concurrency\n * - `query` — stream, names, correlation, before, after, created_after,\n * created_before, limit, with_snaps, stream_exact, backward traversal\n * - `subscribe` — idempotent re-subscribe, watermark return value\n * - `claim` / `ack` — lease lifecycle, dual frontiers, leased streams\n * not double-claimed\n * - `block` — blocked streams hidden from claim, only same-drainer can block\n * - `reset` — restart watermarks (including blocked), no-op for missing\n * - `prioritize` — bulk priority updates by filter\n * - `truncate` — snapshot vs tombstone seeding, empty inputs, missing streams\n * - `query_streams` — filters, exact-match, pagination, blocked\n * - `notify` (capability-gated) — subscribe + dispose smoke test\n *\n * Tests namespace their streams with a per-test {@link uid} so the\n * suite is parallel-safe against a shared backing store (e.g., a real\n * Postgres instance running tests for the whole monorepo concurrently).\n *\n * @example\n * ```ts\n * import { runStoreTck } from \"@rotorsoft/act-tck\";\n * import { InMemoryStore } from \"@rotorsoft/act\";\n *\n * runStoreTck({\n * name: \"InMemoryStore\",\n * factory: () => new InMemoryStore(),\n * });\n * ```\n */\nexport const runStoreTck = (options: StoreTckOptions): void => {\n describe(`TCK / Store / ${options.name}`, () => {\n let store: Store;\n // Spread (rather than `?? {}`) so the default-empty path doesn't\n // create a branch every adapter has to disprove. `{ ...undefined }`\n // is a runtime no-op that yields `{}`.\n const caps: StoreCapabilities = { ...options.capabilities };\n\n beforeAll(async () => {\n store = await options.factory();\n await store.drop();\n await store.seed();\n });\n\n afterAll(async () => {\n await store.dispose();\n });\n\n describe(\"commit\", () => {\n it(\"returns committed events with sequenced ids and versions\", async () => {\n const s = `commit-seq-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), dec(3)],\n makeMeta({ stream: s })\n );\n expect(committed).toHaveLength(3);\n expect(committed[0].version).toBe(0);\n expect(committed[1].version).toBe(1);\n expect(committed[2].version).toBe(2);\n expect(committed[0].name).toBe(\"Incremented\");\n expect(committed[2].data).toEqual({ amount: 3 });\n for (let i = 1; i < committed.length; i++) {\n expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n }\n });\n\n it(\"attaches correlation and stream metadata\", async () => {\n const s = `commit-meta-${uid()}`;\n const correlation = `cor-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s, correlation })\n );\n expect(committed[0].stream).toBe(s);\n expect(committed[0].meta.correlation).toBe(correlation);\n });\n\n it(\"throws ConcurrencyError when expectedVersion is wrong\", async () => {\n const s = `commit-cc-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s }),\n 0\n );\n await expect(\n store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }), 0)\n ).rejects.toBeInstanceOf(ConcurrencyError);\n });\n\n it(\"preserves prior events when a concurrent commit is rejected\", async () => {\n const s = `commit-cc-preserve-${uid()}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n await expect(\n store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }), 0)\n ).rejects.toBeInstanceOf(ConcurrencyError);\n const found = await collect(store, { stream: s, stream_exact: true });\n expect(found).toHaveLength(2);\n });\n });\n\n describe(\"query\", () => {\n it(\"filters by stream, names, correlation, limit, with_snaps\", async () => {\n const s1 = `q-s1-${uid()}`;\n const s2 = `q-s2-${uid()}`;\n const cor = `q-cor-${uid()}`;\n await store.commit<CounterEvents>(\n s1,\n [inc(1), dec(1)],\n makeMeta({ stream: s1, correlation: cor })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(2), dec(2), resetEvent()],\n makeMeta({ stream: s2, correlation: cor })\n );\n\n const byStream = await collect(store, {\n stream: s1,\n stream_exact: true,\n });\n expect(byStream).toHaveLength(2);\n\n const byName = await collect(store, {\n stream: s2,\n stream_exact: true,\n names: [\"Reset\"],\n });\n expect(byName).toHaveLength(1);\n expect(byName[0].name).toBe(\"Reset\");\n\n const byCorrelation = await collect(store, { correlation: cor });\n expect(byCorrelation).toHaveLength(5);\n\n const limited = await collect(store, {\n correlation: cor,\n limit: 2,\n });\n expect(limited).toHaveLength(2);\n });\n\n it(\"supports backward traversal\", async () => {\n const s = `q-back-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3)],\n makeMeta({ stream: s })\n );\n const forward = await collect(store, { stream: s, stream_exact: true });\n const backward = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n });\n expect(forward.map((e) => e.id)).toEqual(committed.map((c) => c.id));\n expect(backward.map((e) => e.id)).toEqual(\n [...committed].reverse().map((c) => c.id)\n );\n\n // Backward + limit — exercises the limit-break branch in the\n // backward-traversal path. Latest event only.\n const latest = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n limit: 1,\n });\n expect(latest).toHaveLength(1);\n expect(latest[0].id).toBe(committed.at(-1)!.id);\n });\n\n it(\"after/before bound the id range\", async () => {\n const s = `q-bounds-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3), inc(4)],\n makeMeta({ stream: s })\n );\n const afterFirst = await collect(store, {\n stream: s,\n stream_exact: true,\n after: committed[0].id,\n });\n expect(afterFirst.map((e) => e.id)).toEqual(\n committed.slice(1).map((c) => c.id)\n );\n const beforeLast = await collect(store, {\n stream: s,\n stream_exact: true,\n before: committed[committed.length - 1].id,\n });\n expect(beforeLast.map((e) => e.id)).toEqual(\n committed.slice(0, -1).map((c) => c.id)\n );\n });\n\n it(\"created_after/created_before filter by timestamp\", async () => {\n const s = `q-ts-${uid()}`;\n const before = new Date(Date.now() - 60_000);\n const future = new Date(Date.now() + 60_000);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const inWindow = await collect(store, {\n stream: s,\n stream_exact: true,\n created_after: before,\n created_before: future,\n });\n expect(inWindow.length).toBe(1);\n const outOfWindow = await collect(store, {\n stream: s,\n stream_exact: true,\n created_after: future,\n });\n expect(outOfWindow.length).toBe(0);\n });\n\n it(\"backward traversal short-circuits at `after` id boundary\", async () => {\n const s = `q-back-after-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), inc(3)],\n makeMeta({ stream: s })\n );\n // Backward from the end, but only events newer than committed[0].id.\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n after: committed[0].id,\n });\n expect(got.map((e) => e.id)).toEqual([\n committed[2].id,\n committed[1].id,\n ]);\n });\n\n it(\"backward traversal short-circuits at `created_after` boundary\", async () => {\n const s = `q-back-cafter-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Asking backward with created_after = now+1m should short-circuit\n // immediately because the only event was created before that bound.\n const future = new Date(Date.now() + 60_000);\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n created_after: future,\n });\n expect(got).toHaveLength(0);\n });\n\n it(\"backward traversal honors created_before by skipping newer events\", async () => {\n const s = `q-back-ts-${uid()}`;\n // `makeMeta()` with no stream — exercises the meta builder's\n // no-causation branch alongside the backward + created_before\n // path inside the adapter.\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta());\n const past = new Date(Date.now() - 60_000);\n const got = await collect(store, {\n stream: s,\n stream_exact: true,\n backward: true,\n created_before: past,\n });\n expect(got).toHaveLength(0);\n });\n\n it(\"stream_exact disables regex matching\", async () => {\n const tag = uid();\n const a = `q-exact-${tag}`;\n const b = `q-exact-${tag}-extra`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n const exact = await collect(store, { stream: a, stream_exact: true });\n expect(exact).toHaveLength(1);\n expect(exact[0].data).toEqual({ amount: 1 });\n });\n\n // Regex anchor contract — same across every Store. Caller controls\n // anchors. `^foo` for prefix, `foo$` for suffix, `^foo$` for whole-\n // string. A plain `foo` is a substring match. Auto-anchoring by the\n // adapter is a contract violation.\n it(\"plain regex without anchors is a substring match\", async () => {\n const tag = uid();\n const inner = `qr-${tag}-inner`;\n const longer = `qr-${tag}-inner-extra`;\n await store.commit<CounterEvents>(\n inner,\n [inc(1)],\n makeMeta({ stream: inner })\n );\n await store.commit<CounterEvents>(\n longer,\n [inc(2)],\n makeMeta({ stream: longer })\n );\n const got = await collect(store, { stream: `qr-${tag}-inner` });\n expect(got.map((e) => e.stream).sort()).toEqual([inner, longer].sort());\n });\n\n it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n const tag = uid();\n const inner = `qr-${tag}-anchor`;\n const longer = `qr-${tag}-anchor-extra`;\n await store.commit<CounterEvents>(\n inner,\n [inc(1)],\n makeMeta({ stream: inner })\n );\n await store.commit<CounterEvents>(\n longer,\n [inc(2)],\n makeMeta({ stream: longer })\n );\n const got = await collect(store, { stream: `^qr-${tag}-anchor$` });\n expect(got).toHaveLength(1);\n expect(got[0].stream).toBe(inner);\n });\n\n it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n const tag = uid();\n const a = `qr-${tag}-pfx-a`;\n const b = `qr-${tag}-pfx-b`;\n const other = `zz-${tag}-other`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n await store.commit<CounterEvents>(\n other,\n [inc(3)],\n makeMeta({ stream: other })\n );\n const got = await collect(store, { stream: `^qr-${tag}-pfx-` });\n expect(got.map((e) => e.stream).sort()).toEqual([a, b].sort());\n });\n });\n\n describe(\"subscribe + claim + ack\", () => {\n it(\"subscribes new streams and is idempotent on repeat\", async () => {\n const s = `sub-${uid()}`;\n const first = await store.subscribe([{ stream: s }]);\n expect(first.subscribed).toBe(1);\n const second = await store.subscribe([{ stream: s }]);\n expect(second.subscribed).toBe(0);\n });\n\n it(\"claims a subscribed stream and ack releases the lease\", async () => {\n const s = `claim-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const by = `worker-${uid()}`;\n const leased = await store.claim(100, 0, by, 10_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n expect(mine!.by).toBe(by);\n await store.ack([{ ...(mine as Lease), at: mine!.at + 1 }]);\n });\n\n it(\"does not double-claim a held lease\", async () => {\n const s = `claim-held-${uid()}`;\n const other = `claim-other-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leasedA = await store.claim(100, 0, `wA-${uid()}`, 100_000);\n const targetA = leasedA.find((l) => l.stream === s);\n expect(targetA).toBeDefined();\n // Subscribe + commit `other` only AFTER A's claim — fresh\n // subscriptions report `at=-1` which adapters treat as\n // claimable. We want `other` to be visible only to B so the\n // negative assertion below runs through a populated array.\n await store.subscribe([{ stream: other }]);\n await store.commit<CounterEvents>(\n other,\n [inc(2)],\n makeMeta({ stream: other })\n );\n const leasedB = await store.claim(100, 0, `wB-${uid()}`, 100_000);\n expect(leasedB.length).toBeGreaterThan(0);\n expect(leasedB.find((l) => l.stream === s)).toBeUndefined();\n expect(leasedB.find((l) => l.stream === other)).toBeDefined();\n });\n\n it(\"supports dual frontiers (lagging + leading)\", async () => {\n const s = `claim-dual-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n const first = await store.claim(100, 0, `w-${uid()}`, 1);\n const mine = first.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await store.ack([{ ...(mine as Lease), at: (mine as Lease).at + 1 }]);\n const second = await store.claim(0, 100, `w-${uid()}`, 1);\n expect(second.find((l) => l.stream === s)).toBeDefined();\n });\n\n it(\"dedupes when both frontiers would return the same stream\", async () => {\n const s = `claim-dedup-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Asking for both frontiers with overlapping budgets must not\n // return the same stream twice.\n const claimed = await store.claim(100, 100, `w-${uid()}`, 100_000);\n const matches = claimed.filter((l) => l.stream === s);\n expect(matches).toHaveLength(1);\n });\n\n it(\"silently ignores ack from the wrong holder\", async () => {\n const s = `ack-wrong-${uid()}`;\n const sibling = `ack-sibling-${uid()}`;\n await store.subscribe([{ stream: s }, { stream: sibling }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(\n sibling,\n [inc(2)],\n makeMeta({ stream: sibling })\n );\n const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const siblingLease = leased.find((l) => l.stream === sibling);\n expect(mine).toBeDefined();\n expect(siblingLease).toBeDefined();\n // Mix a correctly-held lease with an imposter ack so `acked`\n // ends up with one entry (the sibling) and the predicate runs.\n const acked = await store.ack([\n { ...(mine as Lease), by: \"imposter\" },\n siblingLease as Lease,\n ]);\n expect(acked.length).toBeGreaterThan(0);\n expect(acked.find((l) => l.stream === s)).toBeUndefined();\n });\n\n it(\"ack with a stale (lower) watermark does not throw\", async () => {\n const s = `ack-stale-${uid()}`;\n await store.subscribe([{ stream: s }]);\n const by = `w-${uid()}`;\n const leased = await store.claim(100, 0, by, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await expect(\n store.ack([{ ...(mine as Lease), at: -5 }])\n ).resolves.toBeDefined();\n });\n\n it(\"claim with no subscribed streams returns an empty array\", async () => {\n // Use a fresh adapter instance — the parent store is shared across\n // the suite and has subscribed streams already.\n const fresh = await options.factory();\n try {\n await fresh.drop();\n await fresh.seed();\n const claimed = await fresh.claim(1, 1, `w-${uid()}`, 1000);\n expect(claimed).toEqual([]);\n } finally {\n await fresh.dispose();\n }\n });\n });\n\n describe(\"block\", () => {\n it(\"hides blocked streams from claim\", async () => {\n const s = `block-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n const blocked = await store.block([\n { ...(mine as Lease), error: \"boom\" },\n ]);\n expect(blocked).toHaveLength(1);\n expect(blocked[0].error).toBe(\"boom\");\n const again = await store.claim(100, 100, `w2-${uid()}`, 100_000);\n expect(again.find((l) => l.stream === s)).toBeUndefined();\n });\n\n it(\"rejects block calls from a different holder\", async () => {\n const s = `block-wrong-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `right-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n const blocked = await store.block([\n { ...(mine as Lease), by: \"imposter\", error: \"no\" },\n ]);\n expect(blocked).toHaveLength(0);\n });\n });\n\n describe(\"reset\", () => {\n it(\"rewinds a stream watermark to -1\", async () => {\n const s = `reset-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n expect(mine).toBeDefined();\n await store.ack([{ ...(mine as Lease), at: 99 }]);\n expect(await store.reset([s])).toBe(1);\n const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n const back = after.find((l) => l.stream === s);\n expect(back).toBeDefined();\n expect(back!.at).toBe(-1);\n });\n\n it(\"clears blocked status when resetting\", async () => {\n const s = `reset-blk-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n expect(await store.reset([s])).toBe(1);\n const after = await store.claim(100, 0, `w2-${uid()}`, 100_000);\n expect(after.find((l) => l.stream === s)).toBeDefined();\n });\n\n it(\"returns 0 for unknown streams and empty input\", async () => {\n expect(await store.reset([`missing-${uid()}`])).toBe(0);\n expect(await store.reset([])).toBe(0);\n });\n });\n\n describe(\"unblock\", () => {\n it(\"clears blocked flag and preserves the watermark\", async () => {\n const s = `unblock-${uid()}`;\n await store.subscribe([{ stream: s }]);\n // Two events so the watermark advances past 0 before block.\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(2)], makeMeta({ stream: s }));\n\n // First lease + ack first event → watermark advances.\n const first = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = first.find((l) => l.stream === s);\n await store.ack([{ ...(m1 as Lease), at: m1!.at }]);\n\n // Capture watermark before block.\n const beforeBlock = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m2 = beforeBlock.find((l) => l.stream === s);\n expect(m2).toBeDefined();\n const watermarkBefore = m2!.at;\n await store.block([{ ...(m2 as Lease), error: \"permanent\" }]);\n\n // Stream is now blocked — query_streams must report it as such.\n // (Asserting on `claim()` would be flaky: an empty result is the\n // same as \"s not in the result,\" which short-circuits a find()\n // callback and leaves it uncovered when no other streams happen\n // to be claimable in the fixture.)\n let blockedFlag: boolean | undefined;\n await store.query_streams(\n (p) => {\n blockedFlag = p.blocked;\n },\n { stream: s, stream_exact: true, limit: 1 }\n );\n expect(blockedFlag).toBe(true);\n\n // Unblock — claim picks it back up at the same watermark.\n expect(await store.unblock([s])).toBe(1);\n const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const back = after.find((l) => l.stream === s);\n expect(back).toBeDefined();\n expect(back!.at).toBe(watermarkBefore);\n expect(back!.retry).toBe(0);\n });\n\n it(\"returns 0 when the stream is not blocked\", async () => {\n const s = `unblock-noop-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Stream exists but isn't blocked.\n expect(await store.unblock([s])).toBe(0);\n });\n\n it(\"returns 0 for unknown streams and empty input\", async () => {\n expect(await store.unblock([`missing-${uid()}`])).toBe(0);\n expect(await store.unblock([])).toBe(0);\n });\n\n it(\"only counts streams that were actually blocked\", async () => {\n const s1 = `unblock-mix-a-${uid()}`;\n const s2 = `unblock-mix-b-${uid()}`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = leased.find((l) => l.stream === s1);\n const others = leased.filter((l) => l.stream !== s1);\n await store.ack(others);\n // Block only s1.\n await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n expect(await store.unblock([s1, s2])).toBe(1);\n });\n\n it(\"filter form: unblocks by stream pattern\", async () => {\n const tag = uid();\n const s1 = `unblock-filter-${tag}-a`;\n const s2 = `unblock-filter-${tag}-b`;\n const s3 = `other-${tag}`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }, { stream: s3 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n await store.commit<CounterEvents>(\n s3,\n [inc(1)],\n makeMeta({ stream: s3 })\n );\n // Block all three.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const blockable: BlockedLease[] = leased\n .filter((l) => l.stream === s1 || l.stream === s2 || l.stream === s3)\n .map((l) => ({ ...(l as Lease), error: \"boom\" }));\n // Ack any other leases the test fixture's shared store left\n // outstanding so they don't pollute counts below.\n await store.ack(\n leased.filter(\n (l) => !(l.stream === s1 || l.stream === s2 || l.stream === s3)\n )\n );\n await store.block(blockable);\n\n // Filter targets only `unblock-filter-${tag}-` prefix → 2 of 3.\n const count = await store.unblock({\n stream: `^unblock-filter-${tag}-`,\n });\n expect(count).toBe(2);\n\n // s3 is still blocked.\n const after = await store.claim(100, 0, `w-${uid()}`, 100_000);\n expect(after.find((l) => l.stream === s3)).toBeUndefined();\n // s1 and s2 are unblocked and claimable.\n expect(after.find((l) => l.stream === s1)).toBeDefined();\n expect(after.find((l) => l.stream === s2)).toBeDefined();\n });\n\n it(\"filter form: empty filter unblocks every blocked stream\", async () => {\n // Set up an isolated set of blocked streams using a unique tag,\n // then assert the filter unblocks every one. We can't use the\n // truly empty filter `{}` across the shared TCK fixture because\n // other tests may leave blocked rows behind; use the tag as a\n // narrow proxy for \"everything in my scope.\"\n const tag = uid();\n const s1 = `unblock-empty-${tag}-a`;\n const s2 = `unblock-empty-${tag}-b`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.filter((l) => l.stream === s1 || l.stream === s2);\n await store.ack(leased.filter((l) => !mine.includes(l)));\n await store.block(\n mine.map((l) => ({ ...(l as Lease), error: \"boom\" }))\n );\n const count = await store.unblock({\n stream: `^unblock-empty-${tag}-`,\n });\n expect(count).toBe(2);\n });\n\n it(\"filter form: explicit blocked:false matches nothing\", async () => {\n // The implementation forces `blocked = true` regardless of what\n // the caller passed — operators can't accidentally \"unblock\"\n // already-unblocked streams.\n const tag = uid();\n const s = `unblock-blocked-false-${tag}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n // Stream is registered but not blocked.\n expect(\n await store.unblock({\n stream: `^unblock-blocked-false-${tag}`,\n blocked: false,\n })\n ).toBe(0);\n });\n });\n\n describe(\"reset filter form\", () => {\n it(\"resets streams matching a stream pattern\", async () => {\n const tag = uid();\n const s1 = `reset-filter-${tag}-a`;\n const s2 = `reset-filter-${tag}-b`;\n const other = `other-reset-${tag}`;\n await store.subscribe([\n { stream: s1 },\n { stream: s2 },\n { stream: other },\n ]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n await store.commit<CounterEvents>(\n other,\n [inc(1)],\n makeMeta({ stream: other })\n );\n // Advance watermarks for all three so the reset is observable.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.filter(\n (l) => l.stream === s1 || l.stream === s2 || l.stream === other\n );\n await store.ack(mine.map((l) => ({ ...(l as Lease), at: l.at + 100 })));\n\n // Filter targets only `reset-filter-${tag}-` prefix → 2 of 3.\n const count = await store.reset({ stream: `^reset-filter-${tag}-` });\n expect(count).toBe(2);\n\n // Inspect via query_streams (doesn't lease, no regex alternation\n // assumptions on SQLite's LIKE-pattern path) — fetch each name\n // by exact match and check the watermark independently.\n const positionFor = async (name: string): Promise<number | null> => {\n let at: number | null = null;\n await store.query_streams(\n (p) => {\n at = p.at;\n },\n { stream: name, stream_exact: true, limit: 1 }\n );\n return at;\n };\n expect(await positionFor(s1)).toBe(-1);\n expect(await positionFor(s2)).toBe(-1);\n expect(await positionFor(other)).toBeGreaterThan(-1);\n });\n\n it(\"filter form: resets only blocked streams when blocked:true\", async () => {\n const tag = uid();\n const s1 = `reset-blocked-${tag}-blocked`;\n const s2 = `reset-blocked-${tag}-fine`;\n await store.subscribe([{ stream: s1 }, { stream: s2 }]);\n await store.commit<CounterEvents>(\n s1,\n [inc(1)],\n makeMeta({ stream: s1 })\n );\n await store.commit<CounterEvents>(\n s2,\n [inc(1)],\n makeMeta({ stream: s2 })\n );\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const m1 = leased.find((l) => l.stream === s1);\n await store.ack(leased.filter((l) => l.stream !== s1));\n await store.block([{ ...(m1 as Lease), error: \"boom\" }]);\n\n const count = await store.reset({\n stream: `^reset-blocked-${tag}-`,\n blocked: true,\n });\n expect(count).toBe(1);\n });\n });\n\n describe(\"prioritize\", () => {\n it(\"sets priority directly, overriding subscribe's max() rule\", async () => {\n const tag = uid();\n const s1 = `pri-${tag}-a`;\n const s2 = `pri-${tag}-b`;\n await store.subscribe([\n { stream: s1, priority: 5 },\n { stream: s2, priority: 5 },\n ]);\n const updated = await store.prioritize(\n { stream: s1, stream_exact: true },\n 3\n );\n expect(updated).toBe(1);\n const got1: { priority?: number } = {};\n const got2: { priority?: number } = {};\n await store.query_streams(\n (p) => {\n if (p.stream === s1) got1.priority = p.priority;\n if (p.stream === s2) got2.priority = p.priority;\n },\n { stream: `pri-${tag}-.*`, limit: 100 }\n );\n expect(got1.priority).toBe(3);\n expect(got2.priority).toBe(5);\n });\n });\n\n // ACT-1103: drain lanes. The Store contract now carries lane on\n // every persisted-and-returned stream surface. Adapters that\n // haven't migrated will fail these cases — the signal is\n // intentional (\"the contract changed, your adapter needs to\n // surface lane\"). Lane mutability across subscribe calls is the\n // load-bearing case: the builder config wins on every restart, so\n // operators can move a stream by editing config and restarting\n // without a manual data migration.\n describe(\"lanes\", () => {\n it(\"subscribe defaults lane to 'default' when omitted\", async () => {\n const s = `lane-default-${uid()}`;\n await store.subscribe([{ stream: s }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"default\"]);\n });\n\n it(\"subscribe records the lane passed in\", async () => {\n const s = `lane-set-${uid()}`;\n await store.subscribe([{ stream: s, lane: \"slow\" }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"slow\"]);\n });\n\n it(\"subscribe re-lanes existing streams on subsequent calls\", async () => {\n const s = `lane-upsert-${uid()}`;\n await store.subscribe([{ stream: s, lane: \"slow\" }]);\n await store.subscribe([{ stream: s, lane: \"fast\" }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.lane as string), {\n stream: s,\n stream_exact: true,\n });\n expect(seen).toEqual([\"fast\"]);\n });\n\n it(\"claim() filters by lane when supplied and returns lane on the Lease\", async () => {\n const tag = uid();\n const src1 = `lane-claim-src1-${tag}`;\n const src2 = `lane-claim-src2-${tag}`;\n const subDefault = `lane-claim-def-${tag}`;\n const subSlow = `lane-claim-slow-${tag}`;\n await store.commit<CounterEvents>(\n src1,\n [inc(1)],\n makeMeta({ stream: src1 })\n );\n await store.commit<CounterEvents>(\n src2,\n [inc(1)],\n makeMeta({ stream: src2 })\n );\n await store.subscribe([\n { stream: subDefault, source: src1 },\n { stream: subSlow, source: src2, lane: \"slow\" },\n ]);\n\n const slow = await store.claim(50, 0, `w-slow-${tag}`, 1_000, \"slow\");\n const slowMine = slow.filter(\n (l) => l.stream === subDefault || l.stream === subSlow\n );\n expect(slowMine.map((l) => l.stream)).toEqual([subSlow]);\n expect(slowMine[0]?.lane).toBe(\"slow\");\n await store.ack(slowMine.map((l) => ({ ...l, at: l.at + 1 })));\n\n const all = await store.claim(50, 0, `w-all-${tag}`, 1_000);\n const allMine = all\n .filter((l) => l.stream === subDefault || l.stream === subSlow)\n .map((l) => ({ stream: l.stream, lane: l.lane }));\n expect(allMine).toEqual(\n expect.arrayContaining([\n { stream: subDefault, lane: \"default\" },\n { stream: subSlow, lane: \"slow\" },\n ])\n );\n });\n\n it(\"query_streams filters by lane\", async () => {\n const tag = uid();\n const a = `lane-q-a-${tag}`;\n const b = `lane-q-b-${tag}`;\n const c = `lane-q-c-${tag}`;\n await store.subscribe([\n { stream: a, lane: \"qslow\" },\n { stream: b, lane: \"qfast\" },\n { stream: c, lane: \"qslow\" },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n lane: \"qslow\",\n stream: `lane-q-.*-${tag}`,\n limit: 100,\n });\n expect(seen.sort()).toEqual([a, c]);\n });\n\n it(\"prioritize filters by lane\", async () => {\n const tag = uid();\n const a = `lane-pri-a-${tag}`;\n const b = `lane-pri-b-${tag}`;\n await store.subscribe([\n { stream: a, lane: `pslow-${tag}` },\n { stream: b, lane: `pfast-${tag}` },\n ]);\n const updated = await store.prioritize({ lane: `pslow-${tag}` }, 7);\n expect(updated).toBe(1);\n const seen = new Map<string, number>();\n await store.query_streams((p) => seen.set(p.stream, p.priority), {\n stream: `lane-pri-.*-${tag}`,\n limit: 100,\n });\n expect(seen.get(a)).toBe(7);\n expect(seen.get(b)).toBe(0);\n });\n\n it(\"reset filters by lane\", async () => {\n const tag = uid();\n const src = `lane-reset-src-${tag}`;\n const a = `lane-reset-a-${tag}`;\n const b = `lane-reset-b-${tag}`;\n await store.commit<CounterEvents>(\n src,\n [inc(1)],\n makeMeta({ stream: src })\n );\n await store.subscribe([\n { stream: a, source: src, lane: `rslow-${tag}` },\n { stream: b, source: src, lane: `rfast-${tag}` },\n ]);\n const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n const mine = leases.filter((l) => l.stream === a || l.stream === b);\n await store.ack(mine.map((l) => ({ ...l, at: l.at + 1 })));\n\n const count = await store.reset({ lane: `rslow-${tag}` });\n expect(count).toBe(1);\n // Fetch each stream by exact match — keeps the contract test\n // adapter-agnostic (PG `~` and SQLite anchor-aware LIKE both\n // honor `stream_exact: true` identically).\n const ats = new Map<string, number>();\n for (const name of [a, b]) {\n await store.query_streams((p) => ats.set(p.stream, p.at), {\n stream: name,\n stream_exact: true,\n });\n }\n expect(ats.get(a)).toBe(-1);\n expect(ats.get(b)).toBeGreaterThanOrEqual(0);\n });\n\n it(\"unblock filters by lane\", async () => {\n const tag = uid();\n const src = `lane-ub-src-${tag}`;\n const a = `lane-ub-a-${tag}`;\n const b = `lane-ub-b-${tag}`;\n await store.commit<CounterEvents>(\n src,\n [inc(1)],\n makeMeta({ stream: src })\n );\n await store.subscribe([\n { stream: a, source: src, lane: `uslow-${tag}` },\n { stream: b, source: src, lane: `ufast-${tag}` },\n ]);\n const leases = await store.claim(50, 0, `w-${tag}`, 5_000);\n const mine = leases.filter((l) => l.stream === a || l.stream === b);\n await store.block(mine.map((l) => ({ ...l, error: \"boom\" })));\n\n const count = await store.unblock({ lane: `uslow-${tag}` });\n expect(count).toBe(1);\n const blocked = new Map<string, boolean>();\n for (const name of [a, b]) {\n await store.query_streams((p) => blocked.set(p.stream, p.blocked), {\n stream: name,\n stream_exact: true,\n });\n }\n expect(blocked.get(a)).toBe(false);\n expect(blocked.get(b)).toBe(true);\n });\n });\n\n describe(\"truncate\", () => {\n it(\"seeds a tombstone when no snapshot is provided\", async () => {\n const s = `trunc-tomb-${uid()}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2)],\n makeMeta({ stream: s })\n );\n const result = await store.truncate([{ stream: s }]);\n expect(result.get(s)?.deleted).toBe(2);\n const remaining: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n remaining.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(remaining).toHaveLength(1);\n expect((remaining[0] as unknown as { name: string }).name).toBe(\n \"__tombstone__\"\n );\n });\n\n it(\"seeds a snapshot when one is provided\", async () => {\n const s = `trunc-snap-${uid()}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const result = await store.truncate([\n { stream: s, snapshot: { count: 7 } },\n ]);\n expect(result.get(s)?.deleted).toBe(1);\n const remaining: CommittedCounterEvent[] = [];\n await store.query<CounterEvents>(\n (e) => {\n remaining.push(e as CommittedCounterEvent);\n },\n { stream: s, stream_exact: true, with_snaps: true }\n );\n expect(remaining).toHaveLength(1);\n expect((remaining[0] as unknown as { name: string }).name).toBe(\n \"__snapshot__\"\n );\n expect(remaining[0].data).toEqual({ count: 7 });\n });\n\n it(\"returns an empty map for empty input\", async () => {\n const result = await store.truncate([]);\n expect(result.size).toBe(0);\n });\n\n it(\"returns 0 deleted for streams that don't exist\", async () => {\n const s = `trunc-missing-${uid()}`;\n const result = await store.truncate([{ stream: s }]);\n expect(result.get(s)?.deleted).toBe(0);\n });\n });\n\n describe(\"query_streams\", () => {\n it(\"returns positions filtered by stream regex, exact, source, and source_exact\", async () => {\n const tag = uid();\n const proj1 = `qs-${tag}-projection-tickets`;\n const proj2 = `qs-${tag}-projection-users`;\n const dyn1 = `qs-${tag}-stats-1`;\n const dyn2 = `qs-${tag}-stats-2`;\n const src1 = `qs-${tag}-src-1`;\n const src2 = `qs-${tag}-src-2`;\n await store.subscribe([\n { stream: proj1 },\n { stream: proj2 },\n { stream: dyn1, source: src1 },\n { stream: dyn2, source: src2 },\n ]);\n\n const all: Array<{ stream: string; source?: string }> = [];\n const allResult = await store.query_streams(\n (p) => all.push({ stream: p.stream, source: p.source }),\n { stream: `qs-${tag}-.*` }\n );\n expect(allResult.count).toBe(4);\n expect(allResult.maxEventId).toBeGreaterThanOrEqual(-1);\n expect(all.map((p) => p.stream).sort()).toEqual(\n [proj1, proj2, dyn1, dyn2].sort()\n );\n\n const projections: string[] = [];\n await store.query_streams((p) => projections.push(p.stream), {\n stream: `qs-${tag}-projection-.*`,\n });\n expect(projections.sort()).toEqual([proj1, proj2].sort());\n\n const exact: string[] = [];\n await store.query_streams((p) => exact.push(p.stream), {\n stream: dyn1,\n stream_exact: true,\n });\n expect(exact).toEqual([dyn1]);\n\n const bySource: string[] = [];\n await store.query_streams((p) => bySource.push(p.stream), {\n stream: `qs-${tag}-.*`,\n source: `qs-${tag}-src-.*`,\n });\n expect(bySource.sort()).toEqual([dyn1, dyn2].sort());\n\n const exactSource: string[] = [];\n await store.query_streams((p) => exactSource.push(p.stream), {\n stream: `qs-${tag}-.*`,\n source: src2,\n source_exact: true,\n });\n expect(exactSource).toEqual([dyn2]);\n });\n\n it(\"paginates with limit + after (keyset)\", async () => {\n const tag = uid();\n const streams = [\n `qp-${tag}-a`,\n `qp-${tag}-b`,\n `qp-${tag}-c`,\n `qp-${tag}-d`,\n ];\n await store.subscribe(streams.map((stream) => ({ stream })));\n const page1: string[] = [];\n await store.query_streams((p) => page1.push(p.stream), {\n stream: `qp-${tag}-.*`,\n limit: 2,\n });\n expect(page1).toHaveLength(2);\n const page2: string[] = [];\n await store.query_streams((p) => page2.push(p.stream), {\n stream: `qp-${tag}-.*`,\n limit: 2,\n after: page1.at(-1),\n });\n expect(page2).toHaveLength(2);\n expect([...page1, ...page2].sort()).toEqual([...streams].sort());\n });\n\n it(\"filters by blocked status\", async () => {\n const tag = uid();\n const s = `qb-${tag}`;\n const sibling = `qb-${tag}-other`;\n await store.subscribe([{ stream: s }, { stream: sibling }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === s);\n const others = leased.filter((l) => l.stream !== s);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n const blocked: Array<{ stream: string; error: string }> = [];\n await store.query_streams(\n (p) => blocked.push({ stream: p.stream, error: p.error }),\n { stream: `qb-${tag}.*`, blocked: true }\n );\n expect(blocked).toHaveLength(1);\n expect(blocked[0].error).toBe(\"boom\");\n\n // blocked: false — must exclude the blocked one but include\n // the sibling, exercising the other arm of the conditional.\n const unblocked: string[] = [];\n await store.query_streams((p) => unblocked.push(p.stream), {\n stream: `qb-${tag}.*`,\n blocked: false,\n });\n expect(unblocked).toEqual([sibling]);\n });\n });\n\n describe(\"query_stats\", () => {\n it(\"array input — returns head per stream, absent when not in input\", async () => {\n const tag = uid();\n const sA = `qst-${tag}-a`;\n const sB = `qst-${tag}-b`;\n const sUnasked = `qst-${tag}-unasked`;\n await store.commit<CounterEvents>(\n sA,\n [inc(1), inc(2)],\n makeMeta({ stream: sA })\n );\n await store.commit<CounterEvents>(\n sB,\n [dec(5)],\n makeMeta({ stream: sB })\n );\n await store.commit<CounterEvents>(\n sUnasked,\n [inc(99)],\n makeMeta({ stream: sUnasked })\n );\n\n const stats = await store.query_stats<CounterEvents>([sA, sB]);\n expect(stats.size).toBe(2);\n expect(stats.get(sA)?.head.name).toBe(\"Incremented\");\n expect((stats.get(sA)?.head.data as { amount: number }).amount).toBe(2);\n expect(stats.get(sB)?.head.name).toBe(\"Decremented\");\n expect((stats.get(sB)?.head.data as { amount: number }).amount).toBe(5);\n expect(stats.has(sUnasked)).toBe(false);\n\n // Empty input — empty result.\n const empty = await store.query_stats([]);\n expect(empty.size).toBe(0);\n\n // Unknown stream name — absent, not an error.\n const unknown = await store.query_stats([`qst-${tag}-missing`]);\n expect(unknown.size).toBe(0);\n });\n\n it(\"tail returns the earliest event per stream\", async () => {\n const tag = uid();\n const s = `qst-tail-${tag}`;\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(2)], makeMeta({ stream: s }));\n await store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }));\n\n const stats = await store.query_stats<CounterEvents>([s], {\n tail: true,\n });\n const r = stats.get(s);\n expect(r?.head.name).toBe(\"Incremented\");\n expect((r?.head.data as { amount: number }).amount).toBe(3);\n expect(r?.tail?.name).toBe(\"Incremented\");\n expect((r?.tail?.data as { amount: number }).amount).toBe(1);\n });\n\n it(\"count + names — full aggregates including framework markers\", async () => {\n const tag = uid();\n const s = `qst-cn-${tag}`;\n // 1 inc, then truncate (wipes + seeds snap), then 2 more incs + 1 dec\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n await store.truncate([{ stream: s, snapshot: { count: 99 } }]);\n await store.commit<CounterEvents>(\n s,\n [inc(2), inc(3), dec(1)],\n makeMeta({ stream: s })\n );\n\n const stats = await store.query_stats<CounterEvents>([s], {\n count: true,\n names: true,\n });\n const r = stats.get(s);\n // Post-truncate live events: snap + inc + inc + dec = 4\n expect(r?.count).toBe(4);\n expect(r?.names?.[SNAP_EVENT]).toBe(1);\n expect(r?.names?.Incremented).toBe(2);\n expect(r?.names?.Decremented).toBe(1);\n // Snapshot count is derivable from the names map — no separate field needed.\n expect(r?.names?.[SNAP_EVENT]).toBe(1);\n });\n\n it(\"exclude shifts head past filtered events; stream absent when all filtered\", async () => {\n const tag = uid();\n const s = `qst-excl-${tag}`;\n const sAllOut = `qst-allout-${tag}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), dec(2), inc(3)],\n makeMeta({ stream: s })\n );\n await store.commit<CounterEvents>(\n sAllOut,\n [inc(7)],\n makeMeta({ stream: sAllOut })\n );\n\n // Without exclude — head is the latest Incremented.\n const all = await store.query_stats<CounterEvents>([s]);\n expect(all.get(s)?.head.name).toBe(\"Incremented\");\n expect((all.get(s)?.head.data as { amount: number }).amount).toBe(3);\n\n // Exclude Incremented — head is now Decremented (the next-latest).\n const excl = await store.query_stats<CounterEvents>([s], {\n exclude: [\"Incremented\"],\n });\n expect(excl.get(s)?.head.name).toBe(\"Decremented\");\n expect((excl.get(s)?.head.data as { amount: number }).amount).toBe(2);\n\n // Exclude every name on a stream — that stream is absent from result.\n const wipe = await store.query_stats<CounterEvents>([sAllOut], {\n exclude: [\"Incremented\", \"Decremented\", \"Reset\"],\n });\n expect(wipe.has(sAllOut)).toBe(false);\n\n // Framework markers are typed in EventName<E> too — close-cycle pattern.\n const noTomb = await store.query_stats<CounterEvents>([s], {\n exclude: [TOMBSTONE_EVENT],\n });\n expect(noTomb.get(s)?.head.name).toBe(\"Incremented\");\n });\n\n it(\"before — time travel narrows head/tail/count\", async () => {\n const tag = uid();\n const s = `qst-tt-${tag}`;\n const c1 = await store.commit<CounterEvents>(\n s,\n [inc(1)],\n makeMeta({ stream: s })\n );\n const c2 = await store.commit<CounterEvents>(\n s,\n [inc(2)],\n makeMeta({ stream: s })\n );\n await store.commit<CounterEvents>(s, [inc(3)], makeMeta({ stream: s }));\n\n // Cutoff at id of c2's event — only c1's event is < cutoff\n const before = c2[0].id;\n const stats = await store.query_stats<CounterEvents>([s], {\n tail: true,\n count: true,\n before,\n });\n const r = stats.get(s);\n expect(r?.count).toBe(1);\n expect(r?.head.id).toBe(c1[0].id);\n expect(r?.tail?.id).toBe(c1[0].id);\n\n // Cutoff before any event — stream absent\n const empty = await store.query_stats<CounterEvents>([s], {\n before: 0,\n });\n expect(empty.has(s)).toBe(false);\n });\n\n it(\"filter form — stream regex, stream_exact, empty {} match\", async () => {\n const tag = uid();\n const sA = `qsf-${tag}-orders-1`;\n const sB = `qsf-${tag}-orders-2`;\n const sOther = `qsf-${tag}-users-1`;\n await store.commit<CounterEvents>(\n sA,\n [inc(1)],\n makeMeta({ stream: sA })\n );\n await store.commit<CounterEvents>(\n sB,\n [inc(2)],\n makeMeta({ stream: sB })\n );\n await store.commit<CounterEvents>(\n sOther,\n [inc(3)],\n makeMeta({ stream: sOther })\n );\n\n // Regex match — restrict to this tag's orders.\n const orders = await store.query_stats<CounterEvents>({\n stream: `^qsf-${tag}-orders-`,\n });\n expect([...orders.keys()].sort()).toEqual([sA, sB].sort());\n\n // Exact match — single stream.\n const exact = await store.query_stats<CounterEvents>({\n stream: sA,\n stream_exact: true,\n });\n expect([...exact.keys()]).toEqual([sA]);\n\n // Empty filter — matches every event-bearing stream visible to\n // this test's tag (filtered down to avoid sibling-test pollution).\n const all = await store.query_stats<CounterEvents>({\n stream: `^qsf-${tag}-`,\n });\n expect([...all.keys()].sort()).toEqual([sA, sB, sOther].sort());\n });\n\n it(\"compose with query_streams for subscription-level filters\", async () => {\n // `query_stats` only accepts event-stream selection. For\n // \"stats for blocked subscriptions\" etc., compose with\n // `query_streams` and pipe the names through. This test asserts\n // that two-call pattern works end-to-end.\n const tag = uid();\n const a = `qsc-${tag}-a`;\n const b = `qsc-${tag}-b`;\n await store.subscribe([{ stream: a }, { stream: b }]);\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [inc(2)], makeMeta({ stream: b }));\n\n // Block stream `a` via the standard claim → block path.\n const leased = await store.claim(100, 0, `w-${uid()}`, 100_000);\n const mine = leased.find((l) => l.stream === a);\n expect(mine).toBeDefined();\n const others = leased.filter((l) => l.stream !== a);\n await store.ack(others);\n await store.block([{ ...(mine as Lease), error: \"boom\" }]);\n\n // Step 1: subscription-level filter via query_streams.\n const blockedNames: string[] = [];\n await store.query_streams((p) => blockedNames.push(p.stream), {\n stream: `^qsc-${tag}-`,\n blocked: true,\n });\n expect(blockedNames).toEqual([a]);\n\n // Step 2: event-level stats for those streams.\n const stats = await store.query_stats<CounterEvents>(blockedNames);\n expect(stats.get(a)?.head.name).toBe(\"Incremented\");\n expect(stats.has(b)).toBe(false);\n });\n\n it(\"empty filter {} — matches every event-bearing stream\", async () => {\n const tag = uid();\n const a = `qse-${tag}-a`;\n const b = `qse-${tag}-b`;\n await store.commit<CounterEvents>(a, [inc(1)], makeMeta({ stream: a }));\n await store.commit<CounterEvents>(b, [dec(2)], makeMeta({ stream: b }));\n\n // {} matches all event-bearing streams globally — the TCK runs\n // against a shared store, so we only assert that this tag's\n // streams are present (other tests' streams may also appear).\n const all = await store.query_stats<CounterEvents>({});\n expect(all.has(a)).toBe(true);\n expect(all.has(b)).toBe(true);\n });\n\n it(\"stat-flag combinations — count-only, names-only, tail-only\", async () => {\n const tag = uid();\n const s = `qsfl-${tag}`;\n await store.commit<CounterEvents>(\n s,\n [inc(1), inc(2), dec(3)],\n makeMeta({ stream: s })\n );\n\n // count only → no names, no tail in result.\n const c = await store.query_stats<CounterEvents>([s], {\n count: true,\n });\n expect(c.get(s)?.count).toBe(3);\n expect(c.get(s)?.names).toBeUndefined();\n expect(c.get(s)?.tail).toBeUndefined();\n\n // names only → no count, no tail.\n const n = await store.query_stats<CounterEvents>([s], {\n names: true,\n });\n expect(n.get(s)?.names).toEqual({ Incremented: 2, Decremented: 1 });\n expect(n.get(s)?.count).toBeUndefined();\n expect(n.get(s)?.tail).toBeUndefined();\n\n // tail only → no count, no names. Cheap path (no full scan).\n const t = await store.query_stats<CounterEvents>([s], { tail: true });\n expect(t.get(s)?.tail?.name).toBe(\"Incremented\");\n expect((t.get(s)?.tail?.data as { amount: number }).amount).toBe(1);\n expect(t.get(s)?.count).toBeUndefined();\n expect(t.get(s)?.names).toBeUndefined();\n });\n });\n\n describe(\"query_streams anchor contract\", () => {\n // Same regex-anchor rules as `query`. Auto-anchoring by an adapter\n // is a contract violation — every store must honor caller-supplied\n // anchors identically.\n it(\"plain regex without anchors is a substring match\", async () => {\n const tag = uid();\n const inner = `qsr-${tag}-inner`;\n const longer = `qsr-${tag}-inner-extra`;\n const other = `zz-${tag}-other`;\n await store.subscribe([\n { stream: inner },\n { stream: longer },\n { stream: other },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `qsr-${tag}-inner`,\n });\n expect(seen.sort()).toEqual([inner, longer].sort());\n });\n\n it(\"caller-anchored `^name$` matches only the whole string\", async () => {\n const tag = uid();\n const inner = `qsr-${tag}-anchor`;\n const longer = `qsr-${tag}-anchor-extra`;\n await store.subscribe([{ stream: inner }, { stream: longer }]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `^qsr-${tag}-anchor$`,\n });\n expect(seen).toEqual([inner]);\n });\n\n it(\"caller-anchored `^prefix` matches by prefix\", async () => {\n const tag = uid();\n const a = `qsr-${tag}-pfx-a`;\n const b = `qsr-${tag}-pfx-b`;\n const other = `zz-${tag}-pfx-c`;\n await store.subscribe([\n { stream: a },\n { stream: b },\n { stream: other },\n ]);\n const seen: string[] = [];\n await store.query_streams((p) => seen.push(p.stream), {\n stream: `^qsr-${tag}-pfx-`,\n });\n expect(seen.sort()).toEqual([a, b].sort());\n });\n });\n\n describe(\"prioritize anchor contract\", () => {\n it(\"caller-anchored `^name$` filter matches only the whole string\", async () => {\n const tag = uid();\n const inner = `pr-${tag}-anchor`;\n const longer = `pr-${tag}-anchor-extra`;\n await store.subscribe([\n { stream: inner, priority: 0 },\n { stream: longer, priority: 0 },\n ]);\n const updated = await store.prioritize(\n { stream: `^pr-${tag}-anchor$` },\n 7\n );\n expect(updated).toBe(1);\n const seen = new Map<string, number>();\n await store.query_streams((p) => seen.set(p.stream, p.priority), {\n stream: `pr-${tag}-anchor`,\n });\n expect(seen.get(inner)).toBe(7);\n expect(seen.get(longer)).toBe(0);\n });\n });\n\n describe(\"query_streams head\", () => {\n it(\"maxEventId tracks the highest committed id\", async () => {\n const s = `head-${uid()}`;\n await store.subscribe([{ stream: s }]);\n await store.commit<CounterEvents>(s, [inc(1)], makeMeta({ stream: s }));\n const positions: string[] = [];\n const { maxEventId } = await store.query_streams(\n (p) => positions.push(p.stream),\n { stream: s, stream_exact: true, limit: 1 }\n );\n expect(maxEventId).toBeGreaterThanOrEqual(0);\n expect(positions).toEqual([s]);\n });\n });\n\n describe(\"seedStream helper coverage\", () => {\n it(\"commits N events with monotonically increasing ids\", async () => {\n const s = `seed-${uid()}`;\n const committed = await seedStream(store, s, 3);\n expect(committed).toHaveLength(3);\n for (let i = 1; i < committed.length; i++) {\n expect(committed[i].id).toBeGreaterThan(committed[i - 1].id);\n }\n });\n });\n\n // Use `describe.skipIf` rather than `if (caps.restore) { describe(...) }`\n // so the gating lives inside vitest's skip mechanism instead of an\n // `if` branch every consumer would have to disprove (all three\n // in-tree adapters opt in to restore).\n describe.skipIf(!caps.restore)(\"restore (capability)\", () => {\n // Restore wipes the whole store — every test starts from a\n // freshly-dropped + seeded baseline so no test inherits\n // another's post-restore state and so subsequent TCK blocks\n // (notify) get a predictable empty store.\n beforeEach(async () => {\n await store.drop();\n await store.seed();\n });\n\n /** Adapt an event array into the AsyncIterable contract. */\n const asSource = (\n events: Committed<Schemas, keyof Schemas>[]\n ): AsyncIterable<Committed<Schemas, keyof Schemas>> =>\n (async function* () {\n for (const e of events) yield e;\n })();\n\n /**\n * Build a {@link Committed} event with stub meta + the given\n * created date. `originalId` populates `id` — used by the\n * orchestrator's scan to key the causation remap. Tests pass\n * arbitrary values (often a counter) since they're only\n * consumed by the map.\n */\n const event = (\n originalId: number,\n stream: string,\n version: number,\n name: string,\n created: Date,\n data: Record<string, unknown> = {}\n ): Committed<Schemas, keyof Schemas> => ({\n id: originalId,\n name,\n data,\n stream,\n version,\n created,\n meta: { correlation: \"restore-tck\", causation: {} },\n });\n\n /**\n * Test-side helper that routes through the public `Act.restore`\n * orchestrator path bound to the store-under-test via the\n * scoped-ports bag. Validates that the adapter's `restore` HOF\n * integrates correctly with the framework's scan loop without\n * importing the framework's internal scan symbol directly.\n */\n const restore = async (\n source: AsyncIterable<Committed<Schemas, keyof Schemas>>,\n opts: ScanOptions = {}\n ): Promise<ScanResult> => {\n const cache = new InMemoryCache();\n const app = act().build({ scoped: { store, cache } });\n try {\n return await app.restore(source, opts);\n } finally {\n await cache.dispose();\n }\n };\n\n it(\"returns kept=0 on an empty source\", async () => {\n const result = await restore(asSource([]));\n expect(result.kept).toBe(0);\n expect(result.duration_ms).toBeGreaterThanOrEqual(0);\n expect(result.dropped).toEqual({\n closed_streams: 0,\n snapshots: 0,\n empty_streams: 0,\n });\n // Store ends empty.\n const events = await collect(store, { limit: 10 });\n expect(events).toHaveLength(0);\n });\n\n it(\"rebuilds a single stream and preserves `created` verbatim\", async () => {\n const s = `restore-single-${uid()}`;\n const t0 = new Date(\"2020-01-01T00:00:00.000Z\");\n const t1 = new Date(\"2020-01-02T00:00:00.000Z\");\n const t2 = new Date(\"2020-01-03T00:00:00.000Z\");\n const events = [\n event(1, s, 0, \"Incremented\", t0, { amount: 1 }),\n event(2, s, 1, \"Incremented\", t1, { amount: 2 }),\n event(3, s, 2, \"Decremented\", t2, { amount: 1 }),\n ];\n const result = await restore(asSource(events));\n expect(result.kept).toBe(3);\n const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n back.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(back).toHaveLength(3);\n expect(\n back.map((e) => ({\n stream: e.stream,\n version: e.version,\n name: e.name,\n created: e.created.toISOString(),\n data: e.data,\n }))\n ).toEqual([\n {\n stream: s,\n version: 0,\n name: \"Incremented\",\n created: t0.toISOString(),\n data: { amount: 1 },\n },\n {\n stream: s,\n version: 1,\n name: \"Incremented\",\n created: t1.toISOString(),\n data: { amount: 2 },\n },\n {\n stream: s,\n version: 2,\n name: \"Decremented\",\n created: t2.toISOString(),\n data: { amount: 1 },\n },\n ]);\n });\n\n it(\"rebuilds multiple streams interleaved\", async () => {\n const a = `restore-multi-a-${uid()}`;\n const b = `restore-multi-b-${uid()}`;\n const t = new Date(\"2020-06-01T00:00:00.000Z\");\n const events = [\n event(1, a, 0, \"Incremented\", t, { amount: 10 }),\n event(2, b, 0, \"Incremented\", t, { amount: 20 }),\n event(3, a, 1, \"Decremented\", t, { amount: 5 }),\n event(4, b, 1, \"Incremented\", t, { amount: 30 }),\n ];\n const result = await restore(asSource(events));\n expect(result.kept).toBe(4);\n const aBack: Committed<CounterEvents, keyof CounterEvents>[] = [];\n const bBack: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n aBack.push(e);\n },\n { stream: a, stream_exact: true }\n );\n await store.query<CounterEvents>(\n (e) => {\n bBack.push(e);\n },\n { stream: b, stream_exact: true }\n );\n expect(aBack.map((e) => e.version)).toEqual([0, 1]);\n expect(bBack.map((e) => e.version)).toEqual([0, 1]);\n });\n\n it(\"preserves Date `created` verbatim\", async () => {\n const s = `restore-isoc-${uid()}`;\n const iso = \"2021-07-15T12:34:56.789Z\";\n await restore(\n asSource([\n {\n id: 1,\n stream: s,\n version: 0,\n name: \"Incremented\",\n data: { amount: 1 },\n created: new Date(iso),\n meta: { correlation: \"restore-tck\", causation: {} },\n },\n ])\n );\n const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n back.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(back).toHaveLength(1);\n expect(back[0].created.toISOString()).toBe(iso);\n });\n\n it(\"wipes pre-existing events before inserting\", async () => {\n const old = `restore-old-${uid()}`;\n await store.commit<CounterEvents>(\n old,\n [inc(1), inc(2)],\n makeMeta({ stream: old })\n );\n const fresh = `restore-fresh-${uid()}`;\n const t = new Date(\"2020-01-01T00:00:00.000Z\");\n await restore(\n asSource([event(1, fresh, 0, \"Incremented\", t, { amount: 99 })])\n );\n // The old stream is gone.\n const oldBack = await collect(store, {\n stream: old,\n stream_exact: true,\n });\n expect(oldBack).toHaveLength(0);\n // Only the fresh stream remains.\n const freshBack = await collect(store, {\n stream: fresh,\n stream_exact: true,\n });\n expect(freshBack).toHaveLength(1);\n });\n\n it(\"clears subscription/stream-position metadata\", async () => {\n const sub = `restore-sub-${uid()}`;\n await store.subscribe([{ stream: sub, source: \"anything\" }]);\n const collectStreams = async () => {\n const out: string[] = [];\n await store.query_streams((p) => {\n out.push(p.stream);\n });\n return out;\n };\n const before = await collectStreams();\n expect(before.includes(sub)).toBe(true);\n await restore(asSource([]));\n const after = await collectStreams();\n expect(after.includes(sub)).toBe(false);\n });\n\n it(\"preserves snapshot events through restore\", async () => {\n // SNAP_EVENT is a framework marker — restore writes it\n // through but skips updating the max-non-snap-id indexes.\n // Covers the `event.name !== SNAP_EVENT` false branch.\n const s = `restore-snap-${uid()}`;\n const t = new Date(\"2020-04-01T00:00:00.000Z\");\n await restore(\n asSource([\n {\n id: 1,\n stream: s,\n version: 0,\n name: SNAP_EVENT,\n data: { count: 42 },\n created: t,\n meta: { correlation: \"snap\", causation: {} },\n },\n ])\n );\n const back = await collect(store, {\n stream: s,\n stream_exact: true,\n with_snaps: true,\n });\n expect(back).toHaveLength(1);\n expect((back[0] as { name: string }).name).toBe(SNAP_EVENT);\n });\n\n it(\"rewrites causation refs through the old→new id map\", async () => {\n // Sparse source ids (5, 7, 9) — adapter renumbers densely;\n // the event whose causation pointed at original id 5 must end\n // up pointing at the new id assigned to that same row.\n const s = `restore-caus-${uid()}`;\n const t = new Date(\"2020-08-01T00:00:00.000Z\");\n const events: Committed<Schemas, keyof Schemas>[] = [\n {\n id: 5,\n stream: s,\n version: 0,\n name: \"Incremented\",\n data: { amount: 1 },\n created: t,\n meta: { correlation: \"c\", causation: {} },\n },\n {\n id: 7,\n stream: s,\n version: 1,\n name: \"Incremented\",\n data: { amount: 2 },\n created: t,\n meta: {\n correlation: \"c\",\n causation: {\n event: { id: 5, name: \"Incremented\", stream: s },\n },\n },\n },\n {\n id: 9,\n stream: s,\n version: 2,\n name: \"Decremented\",\n data: { amount: 1 },\n created: t,\n meta: {\n correlation: \"c\",\n causation: {\n event: { id: 7, name: \"Incremented\", stream: s },\n },\n },\n },\n ];\n await restore(asSource(events));\n const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n back.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(back).toHaveLength(3);\n // First row's causation is empty.\n expect(back[0].meta.causation.event).toBeUndefined();\n // Second row's causation pointed at original id 5 → new id of row 0.\n expect(back[1].meta.causation.event?.id).toBe(back[0].id);\n // Third row's causation pointed at original id 7 → new id of row 1.\n expect(back[2].meta.causation.event?.id).toBe(back[1].id);\n });\n\n it(\"leaves causation refs unmapped when the target isn't in the source\", async () => {\n const s = `restore-orphan-${uid()}`;\n const t = new Date(\"2020-09-01T00:00:00.000Z\");\n await restore(\n asSource([\n {\n id: 1,\n stream: s,\n version: 0,\n name: \"Incremented\",\n data: { amount: 1 },\n created: t,\n meta: {\n correlation: \"c\",\n causation: {\n event: { id: 999, name: \"Phantom\", stream: \"ghost\" },\n },\n },\n },\n ])\n );\n const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n back.push(e);\n },\n { stream: s, stream_exact: true }\n );\n expect(back[0].meta.causation.event?.id).toBe(999);\n });\n\n it(\"rolls back atomically when the source throws mid-iteration\", async () => {\n // Pre-seed some events the rollback must restore.\n const original = `restore-pre-${uid()}`;\n const committed = await store.commit<CounterEvents>(\n original,\n [inc(1), inc(2), inc(3)],\n makeMeta({ stream: original })\n );\n const explosive: AsyncIterable<Committed<Schemas, keyof Schemas>> =\n (async function* () {\n yield event(\n 1,\n `restore-explode-${uid()}`,\n 0,\n \"Incremented\",\n new Date(),\n { amount: 1 }\n );\n throw new Error(\"boom\");\n })();\n await expect(restore(explosive)).rejects.toThrow(\"boom\");\n // Pre-call events still there.\n const back: Committed<CounterEvents, keyof CounterEvents>[] = [];\n await store.query<CounterEvents>(\n (e) => {\n back.push(e);\n },\n { stream: original, stream_exact: true }\n );\n expect(back).toHaveLength(3);\n expect(back.map((e) => e.id)).toEqual(committed.map((c) => c.id));\n });\n\n // ACT-1125 — compaction toggles + dry-run blocker scan + progress.\n\n it(\"drop_snapshots: skips SNAP_EVENT rows and counts them\", async () => {\n const s = `restore-drop-snap-${uid()}`;\n const t = new Date(\"2020-10-01T00:00:00.000Z\");\n const result = await restore(\n asSource([\n event(1, s, 0, \"Incremented\", t, { amount: 1 }),\n {\n id: 2,\n stream: s,\n version: 1,\n name: SNAP_EVENT,\n data: { count: 1 },\n created: t,\n meta: { correlation: \"snap\", causation: {} },\n },\n event(3, s, 2, \"Incremented\", t, { amount: 2 }),\n ]),\n { drop_snapshots: true }\n );\n expect(result.kept).toBe(2);\n expect(result.dropped.snapshots).toBe(1);\n // Verify the snapshot is gone from the rebuilt store.\n const back = await collect(store, {\n stream: s,\n stream_exact: true,\n with_snaps: true,\n });\n expect(back).toHaveLength(2);\n expect(\n back.every((e) => (e as { name: string }).name !== SNAP_EVENT)\n ).toBe(true);\n });\n\n it(\"on_progress fires once per event (caller throttles)\", async () => {\n const calls: number[] = [];\n const s = `restore-progress-${uid()}`;\n const t = new Date(\"2021-02-01T00:00:00.000Z\");\n await restore(\n asSource([\n event(1, s, 0, \"Incremented\", t, { amount: 1 }),\n event(2, s, 1, \"Incremented\", t, { amount: 2 }),\n ]),\n { on_progress: (p) => calls.push(p.processed) }\n );\n // One callback per event; values monotonic.\n expect(calls).toEqual([1, 2]);\n });\n });\n\n if (caps.notify) {\n describe(\"notify (capability)\", () => {\n it(\"delivers a notification when a different instance commits\", async () => {\n // Self-filtering contract: an instance does not see its own\n // commits. So we listen on `store` and write through a fresh\n // sibling instance pointing at the same backend.\n const notify = store.notify;\n expect(notify).toBeDefined();\n const received: StoreNotification[] = [];\n let resolveArrived!: () => void;\n const arrived = new Promise<void>((res) => {\n resolveArrived = res;\n });\n const disposer = await notify!.call(store, (n) => {\n received.push(n);\n resolveArrived();\n });\n const writer = await options.factory();\n try {\n const stream = `notify-${uid()}`;\n await writer.commit<CounterEvents>(\n stream,\n [inc(1)],\n makeMeta({ stream })\n );\n // No explicit timeout — vitest's default test timeout\n // bounds the wait. If notify silently fails to deliver,\n // the test will surface that as a clear timeout failure.\n await arrived;\n expect(received.length).toBeGreaterThanOrEqual(1);\n expect(received[0].stream).toBe(stream);\n expect(received[0].events.length).toBeGreaterThanOrEqual(1);\n } finally {\n await writer.dispose();\n await Promise.resolve(disposer());\n }\n });\n });\n }\n });\n};\n"],"mappings":"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","names":["import_vitest","import_vitest"]}
|