@quereus/store 4.10.0 → 4.12.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.
Files changed (85) hide show
  1. package/README.md +143 -13
  2. package/dist/src/common/cached-kv-store.d.ts +16 -0
  3. package/dist/src/common/cached-kv-store.d.ts.map +1 -1
  4. package/dist/src/common/cached-kv-store.js +64 -6
  5. package/dist/src/common/cached-kv-store.js.map +1 -1
  6. package/dist/src/common/index.d.ts +2 -0
  7. package/dist/src/common/index.d.ts.map +1 -1
  8. package/dist/src/common/index.js +4 -0
  9. package/dist/src/common/index.js.map +1 -1
  10. package/dist/src/common/key-builder.d.ts +9 -6
  11. package/dist/src/common/key-builder.d.ts.map +1 -1
  12. package/dist/src/common/key-builder.js +17 -6
  13. package/dist/src/common/key-builder.js.map +1 -1
  14. package/dist/src/common/kv-store.d.ts +142 -4
  15. package/dist/src/common/kv-store.d.ts.map +1 -1
  16. package/dist/src/common/kv-store.js +21 -1
  17. package/dist/src/common/kv-store.js.map +1 -1
  18. package/dist/src/common/memory-store.d.ts +1 -0
  19. package/dist/src/common/memory-store.d.ts.map +1 -1
  20. package/dist/src/common/memory-store.js +16 -1
  21. package/dist/src/common/memory-store.js.map +1 -1
  22. package/dist/src/common/paged-iterate.d.ts +42 -0
  23. package/dist/src/common/paged-iterate.d.ts.map +1 -0
  24. package/dist/src/common/paged-iterate.js +113 -0
  25. package/dist/src/common/paged-iterate.js.map +1 -0
  26. package/dist/src/common/pk-key-resolution.d.ts +17 -4
  27. package/dist/src/common/pk-key-resolution.d.ts.map +1 -1
  28. package/dist/src/common/pk-key-resolution.js +23 -8
  29. package/dist/src/common/pk-key-resolution.js.map +1 -1
  30. package/dist/src/common/serialization.d.ts +11 -1
  31. package/dist/src/common/serialization.d.ts.map +1 -1
  32. package/dist/src/common/serialization.js +114 -31
  33. package/dist/src/common/serialization.js.map +1 -1
  34. package/dist/src/common/store-module-access-plan.d.ts +1 -1
  35. package/dist/src/common/store-module-access-plan.d.ts.map +1 -1
  36. package/dist/src/common/store-module-access-plan.js +434 -105
  37. package/dist/src/common/store-module-access-plan.js.map +1 -1
  38. package/dist/src/common/store-module-alter-column.d.ts.map +1 -1
  39. package/dist/src/common/store-module-alter-column.js +25 -2
  40. package/dist/src/common/store-module-alter-column.js.map +1 -1
  41. package/dist/src/common/store-module-alter.d.ts.map +1 -1
  42. package/dist/src/common/store-module-alter.js +36 -13
  43. package/dist/src/common/store-module-alter.js.map +1 -1
  44. package/dist/src/common/store-module-catalog.d.ts +6 -4
  45. package/dist/src/common/store-module-catalog.d.ts.map +1 -1
  46. package/dist/src/common/store-module-catalog.js +8 -6
  47. package/dist/src/common/store-module-catalog.js.map +1 -1
  48. package/dist/src/common/store-module-index.d.ts +98 -7
  49. package/dist/src/common/store-module-index.d.ts.map +1 -1
  50. package/dist/src/common/store-module-index.js +236 -81
  51. package/dist/src/common/store-module-index.js.map +1 -1
  52. package/dist/src/common/store-module.d.ts.map +1 -1
  53. package/dist/src/common/store-module.js +7 -3
  54. package/dist/src/common/store-module.js.map +1 -1
  55. package/dist/src/common/store-table-base.d.ts +30 -0
  56. package/dist/src/common/store-table-base.d.ts.map +1 -1
  57. package/dist/src/common/store-table-base.js +71 -12
  58. package/dist/src/common/store-table-base.js.map +1 -1
  59. package/dist/src/common/store-table-constraints.js +3 -3
  60. package/dist/src/common/store-table-constraints.js.map +1 -1
  61. package/dist/src/common/store-table-scan.d.ts +208 -98
  62. package/dist/src/common/store-table-scan.d.ts.map +1 -1
  63. package/dist/src/common/store-table-scan.js +353 -105
  64. package/dist/src/common/store-table-scan.js.map +1 -1
  65. package/dist/src/testing/index.d.ts +18 -2
  66. package/dist/src/testing/index.d.ts.map +1 -1
  67. package/dist/src/testing/index.js +17 -2
  68. package/dist/src/testing/index.js.map +1 -1
  69. package/dist/src/testing/kv-conformance.d.ts +101 -3
  70. package/dist/src/testing/kv-conformance.d.ts.map +1 -1
  71. package/dist/src/testing/kv-conformance.js +277 -7
  72. package/dist/src/testing/kv-conformance.js.map +1 -1
  73. package/dist/src/testing/kv-lifecycle.d.ts +22 -0
  74. package/dist/src/testing/kv-lifecycle.d.ts.map +1 -0
  75. package/dist/src/testing/kv-lifecycle.js +12 -0
  76. package/dist/src/testing/kv-lifecycle.js.map +1 -0
  77. package/dist/src/testing/kv-naming-conformance.d.ts +77 -0
  78. package/dist/src/testing/kv-naming-conformance.d.ts.map +1 -0
  79. package/dist/src/testing/kv-naming-conformance.js +208 -0
  80. package/dist/src/testing/kv-naming-conformance.js.map +1 -0
  81. package/dist/src/testing/kv-reclaim-conformance.d.ts +52 -0
  82. package/dist/src/testing/kv-reclaim-conformance.d.ts.map +1 -0
  83. package/dist/src/testing/kv-reclaim-conformance.js +287 -0
  84. package/dist/src/testing/kv-reclaim-conformance.js.map +1 -0
  85. package/package.json +5 -5
@@ -5,8 +5,8 @@
5
5
  * contract (not against any single backend), invoked once per backend. Each backend
6
6
  * supplies only a small {@link KVBackend} adapter (how to open / reopen / tear down);
7
7
  * this file supplies every assertion. A behavior that drifts on one backend then
8
- * fails the suite instead of silently diverging across the three interchangeable
9
- * stores (in-memory, LevelDB, IndexedDB).
8
+ * fails the suite instead of silently diverging across the interchangeable stores
9
+ * (in-memory, LevelDB, IndexedDB, React Native LevelDB, NativeScript SQLite).
10
10
  *
11
11
  * Deps are deliberately minimal so this file can be compiled into `@quereus/store`'s
12
12
  * normal `src` build without dragging a test framework into the shipped package:
@@ -25,6 +25,122 @@ import assert from 'node:assert/strict';
25
25
  import { compareBytes } from '../common/bytes.js';
26
26
  import { encodeCompositeKey } from '../common/encoding.js';
27
27
  import { assertBytes, b, u8 } from './kv-assert.js';
28
+ /**
29
+ * Assert that `store.iterate(options)` reads a BOUNDED amount from backing storage:
30
+ * consume `take` entries, then stop, and check the meter.
31
+ *
32
+ * The allowance is `take + maxReadAhead - 1`: a backend that reads one entry per yield
33
+ * reads exactly `take`, and one that pages reads at most `take` rounded up past a batch
34
+ * boundary. Crucially the allowance does NOT grow with the size of the range, so a
35
+ * backend that materializes the whole range fails however large the range is — which is
36
+ * the property the bounded-iteration tier exists to pin. Passing `take` = the whole range
37
+ * pins the other half of the contract, that total work is linear: a backend paging by
38
+ * `limit`/`offset` reads a bounded FIRST batch but O(n²) overall.
39
+ *
40
+ * Exported standalone so a spec can drive it against a deliberately-buffering store
41
+ * double and prove it rejects (see `bounded-iterate.spec.ts`).
42
+ *
43
+ * @param store - The store under test.
44
+ * @param meter - Read instrumentation for whatever `store` reads from.
45
+ * @param options - Iterate options. The range must hold at least `take` entries.
46
+ * @param take - Entries to consume before stopping. Default 1 (prefix-and-stop).
47
+ */
48
+ export async function assertBoundedIterate(store, meter, options, take = 1) {
49
+ assert.ok(take >= 1, `assertBoundedIterate: take must be >= 1, got ${take}`);
50
+ const baseline = meter.entriesRead();
51
+ let consumed = 0;
52
+ for await (const _entry of store.iterate(options)) {
53
+ if (++consumed >= take)
54
+ break;
55
+ }
56
+ const read = meter.entriesRead() - baseline;
57
+ // Guards against a vacuous pass: a store that yields nothing reads nothing, and a
58
+ // meter wired to the wrong thing reports zero however the store behaves.
59
+ assert.strictEqual(consumed, take, `expected to consume ${take} entries before stopping, got ${consumed} — the range is too small to measure`);
60
+ assert.ok(read >= 1, 'the read meter counted nothing — it is not wired to what this store reads from');
61
+ const allowed = take + meter.maxReadAhead - 1;
62
+ assert.ok(read <= allowed, `bounded iteration: consuming ${take} entr${take === 1 ? 'y' : 'ies'} read ${read} from backing storage, ` +
63
+ `allowance is ${allowed} (take + maxReadAhead - 1, maxReadAhead=${meter.maxReadAhead})`);
64
+ }
65
+ /**
66
+ * Assert the POSITIONAL half of {@link KVStore.getMany}'s contract: answers by position
67
+ * for an unsorted key list, a miss that stays at its own index, the empty list, a repeated
68
+ * key in independent buffers, and an interleave of already-read and never-read keys.
69
+ *
70
+ * Seeds keys 1..5 itself, so pass a store the caller has NOT seeded.
71
+ *
72
+ * The other half of the contract — K keys cost ONE round trip — is not checked here: it
73
+ * needs a {@link PointReadMeter}, which only a backend's own adapter can supply, so the
74
+ * tier registers it separately.
75
+ *
76
+ * Exported standalone so a spec can drive it against store doubles built to violate the
77
+ * contract and prove it REJECTS (see `batch-point-read.spec.ts`), the same way
78
+ * {@link assertBoundedIterate} is driven against a buffering double.
79
+ */
80
+ export async function assertBatchPointRead(store) {
81
+ await seed1to5(store);
82
+ await assertPositionalOverUnsortedKeys(store);
83
+ await assertMissKeepsItsPosition(store);
84
+ await assertEmptyKeyList(store);
85
+ await assertDuplicateKeysGetIndependentBuffers(store);
86
+ await assertWarmAndColdKeysInterleave(store);
87
+ }
88
+ /**
89
+ * Deliberately unsorted: a backend that sorts its keys internally, or that fills results
90
+ * in arrival order, must still answer by POSITION.
91
+ */
92
+ async function assertPositionalOverUnsortedKeys(store) {
93
+ const keys = [b(4), b(1), b(5), b(2)];
94
+ const got = await store.getMany(keys);
95
+ assert.strictEqual(got.length, keys.length, 'getMany must answer one value per key');
96
+ assertBytes(got[0], b(40), 'unsorted key list: position 0');
97
+ assertBytes(got[1], b(10), 'unsorted key list: position 1');
98
+ assertBytes(got[2], b(50), 'unsorted key list: position 2');
99
+ assertBytes(got[3], b(20), 'unsorted key list: position 3');
100
+ }
101
+ /**
102
+ * The miss is in the MIDDLE: a backend that omits absent keys would return a SHORTER array
103
+ * whose tail has slid down one position.
104
+ */
105
+ async function assertMissKeepsItsPosition(store) {
106
+ const got = await store.getMany([b(1), b(99), b(3)]);
107
+ assert.strictEqual(got.length, 3, 'a miss must not shorten the result');
108
+ assertBytes(got[0], b(10), 'the key before the miss keeps its own position');
109
+ assert.strictEqual(got[1], undefined, 'the absent key reads as undefined');
110
+ assertBytes(got[2], b(30), 'the key after the miss keeps its own position');
111
+ }
112
+ async function assertEmptyKeyList(store) {
113
+ assert.deepStrictEqual(await store.getMany([]), [], 'getMany([]) must resolve to []');
114
+ }
115
+ /**
116
+ * Buffer ownership extends ACROSS positions: one buffer filed at two indices would pass
117
+ * the value checks and fail the scribble.
118
+ */
119
+ async function assertDuplicateKeysGetIndependentBuffers(store) {
120
+ const got = await store.getMany([b(2), b(3), b(2)]);
121
+ assert.strictEqual(got.length, 3, 'a repeated key must not collapse the result');
122
+ assertBytes(got[0], b(20), 'repeated key: first position');
123
+ assertBytes(got[1], b(30), 'repeated key: the key between the repeats');
124
+ assertBytes(got[2], b(20), 'a repeated key must be answered at every position');
125
+ got[0][0] = 99;
126
+ assertBytes(got[2], b(20), 'the duplicate position must be its own buffer');
127
+ }
128
+ /**
129
+ * A cache in front of the store (`CachedKVStore`) serves the warm keys from memory and
130
+ * batches only the cold ones, remembering where each miss belongs. Interleaving hits,
131
+ * misses, and an absent key catches a re-derived mapping.
132
+ */
133
+ async function assertWarmAndColdKeysInterleave(store) {
134
+ await store.get(b(2));
135
+ await store.get(b(4));
136
+ const got = await store.getMany([b(1), b(4), b(99), b(2), b(5)]);
137
+ assert.strictEqual(got.length, 5, 'a warm/cold mix must answer one value per key');
138
+ assertBytes(got[0], b(10), 'warm/cold mix: cold key at position 0');
139
+ assertBytes(got[1], b(40), 'warm/cold mix: warm key at position 1');
140
+ assert.strictEqual(got[2], undefined, 'warm/cold mix: absent key at position 2');
141
+ assertBytes(got[3], b(20), 'warm/cold mix: warm key at position 3');
142
+ assertBytes(got[4], b(50), 'warm/cold mix: cold key at position 4');
143
+ }
28
144
  // ============================================================================
29
145
  // Assertion + iteration helpers
30
146
  // ============================================================================
@@ -44,6 +160,10 @@ async function seed1to5(store) {
44
160
  for (let i = 1; i <= 5; i++)
45
161
  await store.put(b(i), b(i * 10));
46
162
  }
163
+ /** 2-byte big-endian key for the large-range tiers (0..65535) — byte order matches key order. */
164
+ const enc = (n) => b((n >> 8) & 0xff, n & 0xff);
165
+ /** Inverse of {@link enc}. */
166
+ const dec = (k) => (k[0] << 8) | k[1];
47
167
  // ============================================================================
48
168
  // Tier 6 golden vector — cross-backend byte-ordering agreement
49
169
  // ============================================================================
@@ -88,8 +208,12 @@ const key1 = (v) => encodeCompositeKey([v]);
88
208
  */
89
209
  export function runKVStoreConformance(name, makeBackend) {
90
210
  // Probe (no open()/teardown() — the factory only builds the adapter object) to
91
- // learn whether this backend persists across a reopen.
92
- const supportsReopen = typeof makeBackend().reopen === 'function';
211
+ // learn whether this backend persists across a reopen, and whether it can report
212
+ // what it reads from backing storage.
213
+ const probe = makeBackend();
214
+ const supportsReopen = typeof probe.reopen === 'function';
215
+ const supportsReadMeter = probe.readMeter !== undefined;
216
+ const supportsPointReadMeter = probe.pointReadMeter !== undefined;
93
217
  describe(name, () => {
94
218
  let backend;
95
219
  let store;
@@ -249,12 +373,13 @@ export function runKVStoreConformance(name, makeBackend) {
249
373
  // ------------------------------------------------------------------
250
374
  describe('tier 3: streaming iteration across a batch boundary', () => {
251
375
  const COUNT = 306; // > 256 so iteration crosses at least one IndexedDB page boundary
252
- const enc = (n) => b((n >> 8) & 0xff, n & 0xff); // 2-byte big-endian
253
- const dec = (k) => (k[0] << 8) | k[1];
254
376
  beforeEach(async () => {
377
+ // Value = key. Values must be UNIQUE across the whole fixture (not `i & 0xff`,
378
+ // which repeats every 256 entries) so the pairing case below can catch a
379
+ // backend that misaligns keys against values by a whole page.
255
380
  const batch = store.batch();
256
381
  for (let i = 0; i < COUNT; i++)
257
- batch.put(enc(i), b(i & 0xff));
382
+ batch.put(enc(i), enc(i));
258
383
  await batch.write();
259
384
  });
260
385
  it('streams every entry once, ascending, while awaiting an unrelated get each step', async () => {
@@ -269,6 +394,36 @@ export function runKVStoreConformance(name, makeBackend) {
269
394
  for (let i = 0; i < COUNT; i++)
270
395
  assert.strictEqual(seen[i], i, `entry ${i}`);
271
396
  });
397
+ it('pairs every value with its own key across the batch boundary', async () => {
398
+ // A backend that reads keys and values as two separate bulk requests (IndexedDB's
399
+ // getAllKeys + getAll) could zip them out of step and hand back real-looking rows
400
+ // filed under the wrong keys. Values are unique here, so any misalignment shows.
401
+ let seen = 0;
402
+ for await (const entry of store.iterate()) {
403
+ assert.strictEqual(dec(entry.value), dec(entry.key), `entry ${dec(entry.key)} came back carrying value ${dec(entry.value)}`);
404
+ seen++;
405
+ }
406
+ assert.strictEqual(seen, COUNT);
407
+ });
408
+ it('mutating yielded keys/values mid-iteration does not perturb resumption', async () => {
409
+ // A paged backend derives the next page's resume edge from the last key of this
410
+ // page. If it captures that edge AFTER handing the entry to the consumer, a
411
+ // consumer scribbling on the key moves where the next page starts — skipping or
412
+ // repeating entries. Tier 2 pins the single-page version of the read-buffer
413
+ // contract; this is the version that crosses a page boundary.
414
+ const seen = [];
415
+ for await (const entry of store.iterate()) {
416
+ seen.push(dec(entry.key));
417
+ entry.key.fill(0xff);
418
+ entry.value.fill(0xff);
419
+ }
420
+ assert.strictEqual(seen.length, COUNT, 'every entry must be seen exactly once');
421
+ for (let i = 0; i < COUNT; i++)
422
+ assert.strictEqual(seen[i], i, `entry ${i}`);
423
+ // ...and the scribbles must not have reached the store's own buffers.
424
+ assertBytes(await store.get(enc(0)), enc(0));
425
+ assertBytes(await store.get(enc(COUNT - 1)), enc(COUNT - 1));
426
+ });
272
427
  it('honors reverse across the batch boundary', async () => {
273
428
  const seen = [];
274
429
  for await (const entry of store.iterate({ reverse: true }))
@@ -431,6 +586,121 @@ export function runKVStoreConformance(name, makeBackend) {
431
586
  assertBytes(await store.get(key1(5n)), b(2));
432
587
  });
433
588
  });
589
+ // ------------------------------------------------------------------
590
+ // Tier 7 — bounded iteration (see KVStore.iterate's contract)
591
+ //
592
+ // The unmetered cases run everywhere: they pin that abandoning an iteration
593
+ // releases whatever the backend held. The metered cases need the adapter to
594
+ // supply a ReadMeter, because a KVStore handle cannot see its own reads.
595
+ // ------------------------------------------------------------------
596
+ describe('tier 7: bounded iteration', () => {
597
+ it('breaking out mid-iteration leaves the store usable and closeable', async () => {
598
+ await seed1to5(store);
599
+ let seen = 0;
600
+ for await (const _entry of store.iterate()) {
601
+ seen++;
602
+ break;
603
+ }
604
+ assert.strictEqual(seen, 1);
605
+ // An iterator/transaction left open by the abandoned scan would wedge these.
606
+ assertBytes(await store.get(b(3)), b(30));
607
+ assert.deepStrictEqual(await keysOf(store), [b(1), b(2), b(3), b(4), b(5)]);
608
+ await store.close(); // must resolve, not hang on an unreleased handle
609
+ });
610
+ it('an exception thrown from the loop body propagates and leaves the store usable', async () => {
611
+ await seed1to5(store);
612
+ await assert.rejects(async () => {
613
+ for await (const _entry of store.iterate()) {
614
+ throw new Error('consumer boom');
615
+ }
616
+ }, /consumer boom/);
617
+ assertBytes(await store.get(b(3)), b(30));
618
+ assert.deepStrictEqual(await keysOf(store), [b(1), b(2), b(3), b(4), b(5)]);
619
+ });
620
+ if (supportsReadMeter) {
621
+ describe('metered: reads stay bounded regardless of range size', () => {
622
+ let meter;
623
+ let count;
624
+ beforeEach(async () => {
625
+ meter = backend.readMeter;
626
+ // Big enough that a backend materializing the range blows the allowance
627
+ // by orders of magnitude, whatever its batch size is. Several batches
628
+ // deep, so the full-drain case below actually exercises resumption.
629
+ count = Math.max(3 * meter.maxReadAhead, 512);
630
+ const batch = store.batch();
631
+ for (let i = 0; i < count; i++)
632
+ batch.put(enc(i), b(i & 0xff));
633
+ await batch.write();
634
+ });
635
+ it('an unbounded iterate stopped after one entry reads at most one batch', async () => {
636
+ await assertBoundedIterate(store, meter);
637
+ });
638
+ it('the same holds in reverse', async () => {
639
+ await assertBoundedIterate(store, meter, { reverse: true });
640
+ });
641
+ it('a small limit costs the limit, not the range', async () => {
642
+ // NOTE: on a backend whose batch is much larger than 5 this case adds
643
+ // little over the unbounded one — the allowance is dominated by
644
+ // maxReadAhead, so it cannot tell "pushed the limit down" from "read a
645
+ // whole batch". It is exact for a one-entry-per-yield backend. If a
646
+ // backend ever needs its limit pushdown pinned specifically, assert on
647
+ // a limit LARGER than its batch instead of adding slack here.
648
+ await assertBoundedIterate(store, meter, { limit: 5 }, 5);
649
+ });
650
+ it('draining the whole range costs about one read per entry', async () => {
651
+ // Prefix cases above cannot see a backend that pages by re-reading from
652
+ // the start and discarding a growing prefix (`limit`/`offset` paging):
653
+ // its FIRST batch is bounded, and only the total goes quadratic.
654
+ await assertBoundedIterate(store, meter, undefined, count);
655
+ });
656
+ });
657
+ }
658
+ });
659
+ // ------------------------------------------------------------------
660
+ // Tier 8 — batch point-read (see KVStore.getMany's contract)
661
+ //
662
+ // The correctness cases run everywhere: positional results, misses in place,
663
+ // independent buffers — see `assertBatchPointRead`. The round-trip case needs the
664
+ // adapter to supply a PointReadMeter, because a KVStore handle cannot see its own
665
+ // round trips.
666
+ // ------------------------------------------------------------------
667
+ describe('tier 8: batch point-read', () => {
668
+ it('answers positionally: unsorted keys, misses in place, duplicates, empty list', async () => {
669
+ // Every assertion lives in the exported helper, which `batch-point-read.spec.ts`
670
+ // drives against deliberately-wrong doubles to prove these cases bite.
671
+ await assertBatchPointRead(store);
672
+ });
673
+ it('mutating a returned value does not corrupt the store', async () => {
674
+ // Same read-buffer contract tier 1 pins for `get`.
675
+ await seed1to5(store);
676
+ const got = await store.getMany([b(1)]);
677
+ got[0][0] = 99;
678
+ assertBytes(await store.get(b(1)), b(10), 'a later get must be unaffected');
679
+ assertBytes((await store.getMany([b(1)]))[0], b(10), 'a later getMany must be unaffected');
680
+ });
681
+ it('getMany rejects after close()', async () => {
682
+ await store.close();
683
+ await assert.rejects(() => store.getMany([b(1)]), /closed/i);
684
+ });
685
+ if (supportsPointReadMeter) {
686
+ it('costs exactly ONE round trip to backing storage, whatever K is', async () => {
687
+ const meter = backend.pointReadMeter;
688
+ await seed1to5(store);
689
+ // Guard against a vacuous pass: a meter wired to the wrong thing reports
690
+ // zero however the store behaves, so prove one `get` moves it first.
691
+ const beforeGet = meter.roundTrips();
692
+ await store.get(b(1));
693
+ assert.ok(meter.roundTrips() - beforeGet >= 1, 'the point-read meter counted nothing for a single get() — it is not wired to what this store reads from');
694
+ const baseline = meter.roundTrips();
695
+ const keys = [b(4), b(1), b(5), b(2), b(99)];
696
+ const got = await store.getMany(keys);
697
+ const trips = meter.roundTrips() - baseline;
698
+ assert.strictEqual(got.length, keys.length);
699
+ assert.strictEqual(trips, 1, `getMany over ${keys.length} keys took ${trips} round trips to backing storage, expected exactly 1 ` +
700
+ '(a backend that fell back to one get per key takes one per key)');
701
+ });
702
+ }
703
+ });
434
704
  });
435
705
  }
436
706
  //# sourceMappingURL=kv-conformance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kv-conformance.js","sourceRoot":"","sources":["../../../src/testing/kv-conformance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kv-conformance.js","sourceRoot":"","sources":["../../../src/testing/kv-conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The per-backend lifecycle adapter shared by every PROVIDER-level battery.
3
+ *
4
+ * The batteries that assert a {@link KVStoreProvider} property (rather than a
5
+ * {@link KVStore} one) all need exactly the same two things from a backend: how to open a
6
+ * provider over an empty keyspace, and how to release whatever that created. Declaring the
7
+ * pair once means a plugin's adapters stay interchangeable — one closure can be handed to
8
+ * every such battery — and a battery added later inherits the shape instead of inventing a
9
+ * third copy of it.
10
+ */
11
+ import type { KVStoreProvider } from '../common/kv-store.js';
12
+ /**
13
+ * Per-backend lifecycle adapter. Each battery drives its own per-test lifecycle and calls
14
+ * the factory fresh for every test, so state never leaks between tests.
15
+ */
16
+ export interface KVProviderLifecycle {
17
+ /** Open a provider over a fresh, EMPTY physical keyspace. Called once per test. */
18
+ open(): Promise<KVStoreProvider>;
19
+ /** Release everything open() created (close the provider, rm dirs / delete dbs). */
20
+ teardown(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=kv-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/testing/kv-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,mFAAmF;IACnF,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACjC,oFAAoF;IACpF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The per-backend lifecycle adapter shared by every PROVIDER-level battery.
3
+ *
4
+ * The batteries that assert a {@link KVStoreProvider} property (rather than a
5
+ * {@link KVStore} one) all need exactly the same two things from a backend: how to open a
6
+ * provider over an empty keyspace, and how to release whatever that created. Declaring the
7
+ * pair once means a plugin's adapters stay interchangeable — one closure can be handed to
8
+ * every such battery — and a battery added later inherits the shape instead of inventing a
9
+ * third copy of it.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=kv-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-lifecycle.js","sourceRoot":"","sources":["../../../src/testing/kv-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Shared physical-store-name distinctness battery — test-support; run under Mocha.
3
+ *
4
+ * Third sibling of {@link runKVStoreConformance} (the {@link KVStore} contract) and
5
+ * {@link runKVProviderConformance} (the atomic multi-store commit). This one asserts a
6
+ * single PROVIDER-level property that every backend must hold:
7
+ *
8
+ * Two logical stores the engine considers distinct never share one physical store.
9
+ *
10
+ * Why it exists as a shared battery rather than a per-plugin test: the engine's only
11
+ * collision guard, `StoreModule.assertStoreNameFree`, compares LOGICAL store names
12
+ * (`{schema}.{table}` from `buildDataStoreName`) as plain JS strings. That guard stands
13
+ * in for a physical collision check only while each provider's translation from the
14
+ * logical name to its own native name (a LevelDB sublevel, an IndexedDB object store, a
15
+ * SQLite table, an on-device LevelDB file) is INJECTIVE — two different logical names can
16
+ * never come out the same. A provider that lowercases, strips punctuation, or otherwise
17
+ * folds characters breaks that silently: two `create table`s both succeed and their rows
18
+ * then interleave in one physical store. Nothing in the type system prevents the next
19
+ * provider from reintroducing it, so the property is pinned behaviorally here.
20
+ *
21
+ * The battery needs nothing beyond the public {@link KVStoreProvider} surface, so it runs
22
+ * for every backend: it writes a distinct marker into each store under ONE shared key and
23
+ * checks each store still reads back its own marker. Two entries sharing a physical store
24
+ * show up as one marker having overwritten another.
25
+ *
26
+ * A provider MAY reject a name its native namespace cannot represent — a throw from
27
+ * `getStore`/`getIndexStore` passes that entry, and the rejected entries are reported so
28
+ * the corpus cannot silently shrink to nothing. Silently folding two names onto one store
29
+ * never passes. Entries marked {@link StoreSpec.mustAccept} (logical names using only
30
+ * `[a-z0-9_.]`, which any KV namespace can represent) may not be rejected at all.
31
+ *
32
+ * Dependency and Mocha-global handling mirror kv-conformance.ts — see its header.
33
+ *
34
+ * NOTE: this asserts distinctness, not decodability. An injective encoding is what the
35
+ * property needs; nothing here requires a provider to be able to recover the logical name
36
+ * from the physical one, and no shipped provider does.
37
+ *
38
+ * NOTE: the marker check reads back through the very handles it wrote through, so a
39
+ * provider that (a) caches one read-your-own-writes handle PER LOGICAL NAME — as
40
+ * `IndexedDBProvider` does, wrapping each store in `CachedKVStore` — and (b) folds two
41
+ * logical names onto one physical store BELOW that cache would serve each marker from its
42
+ * own cache and pass. No shipped provider does both: the only caching provider names its
43
+ * object stores verbatim, so its folding (if any) would happen at the cache key and be
44
+ * caught. If a provider ever gains a lossy escape underneath a per-name cache, re-read the
45
+ * markers through handles reopened after `closeStore`/`closeIndexStore` instead.
46
+ */
47
+ import type { KVStoreProvider } from '../common/kv-store.js';
48
+ import type { KVProviderLifecycle } from './kv-lifecycle.js';
49
+ /**
50
+ * Per-backend lifecycle adapter — the shared provider-battery shape, so a plugin's spec can
51
+ * hand one closure to this battery and to {@link runStoreReclaimConformance} alike. The
52
+ * suite drives its own per-test lifecycle and calls {@link makeNamingBackend} fresh for
53
+ * every test, so state never leaks between tests.
54
+ */
55
+ export type KVNamingBackend = KVProviderLifecycle;
56
+ /**
57
+ * Assert `provider` gives every logical store in {@link DISTINCT_STORES} its OWN physical
58
+ * store: write one marker per store under a single shared key, then check each store still
59
+ * reads back its own. A shared physical store shows up as one marker having replaced
60
+ * another.
61
+ *
62
+ * Exported standalone (like {@link assertBoundedIterate}) so a spec can drive it against a
63
+ * provider double built to violate the property and prove it rejects — a guard nobody has
64
+ * watched fail is not a guard. See `test/store-name-distinctness.spec.ts`.
65
+ *
66
+ * @param provider - A provider over a fresh, EMPTY physical keyspace.
67
+ * @param report - Where to record names the provider refused. Refusal is allowed (a
68
+ * namespace that genuinely cannot represent a name must reject it rather than fold it),
69
+ * but never silently: the battery logs whatever lands here.
70
+ */
71
+ export declare function assertStoreNamesDistinct(provider: KVStoreProvider, report?: string[]): Promise<void>;
72
+ /**
73
+ * Register the store-name distinctness battery under `describe(name)`. Call once per
74
+ * backend, from the same spec file that registers {@link runKVStoreConformance}.
75
+ */
76
+ export declare function runStoreNameDistinctness(name: string, makeNamingBackend: () => KVNamingBackend): void;
77
+ //# sourceMappingURL=kv-naming-conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-naming-conformance.d.ts","sourceRoot":"","sources":["../../../src/testing/kv-naming-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAGH,OAAO,KAAK,EAAW,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAU7D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAgFlD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC7C,QAAQ,EAAE,eAAe,EACzB,MAAM,GAAE,MAAM,EAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,GAAG,IAAI,CAoFrG"}