@aztec/kv-store 5.0.0-private.20260318 → 5.0.0-rc.1

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 (91) hide show
  1. package/README.md +8 -1
  2. package/dest/bench/shared_map_bench.d.ts +19 -0
  3. package/dest/bench/shared_map_bench.d.ts.map +1 -0
  4. package/dest/bench/shared_map_bench.js +91 -0
  5. package/dest/indexeddb/index.js +1 -1
  6. package/dest/interfaces/array_test_suite.d.ts +1 -1
  7. package/dest/interfaces/array_test_suite.d.ts.map +1 -1
  8. package/dest/interfaces/array_test_suite.js +33 -34
  9. package/dest/interfaces/index.d.ts +2 -2
  10. package/dest/interfaces/index.d.ts.map +1 -1
  11. package/dest/interfaces/map_test_suite.d.ts +1 -1
  12. package/dest/interfaces/map_test_suite.d.ts.map +1 -1
  13. package/dest/interfaces/map_test_suite.js +32 -33
  14. package/dest/interfaces/multi_map_test_suite.d.ts +1 -1
  15. package/dest/interfaces/multi_map_test_suite.d.ts.map +1 -1
  16. package/dest/interfaces/multi_map_test_suite.js +68 -69
  17. package/dest/interfaces/set_test_suite.d.ts +1 -1
  18. package/dest/interfaces/set_test_suite.d.ts.map +1 -1
  19. package/dest/interfaces/set_test_suite.js +13 -14
  20. package/dest/interfaces/singleton_test_suite.d.ts +1 -1
  21. package/dest/interfaces/singleton_test_suite.d.ts.map +1 -1
  22. package/dest/interfaces/singleton_test_suite.js +6 -7
  23. package/dest/lmdb/index.js +2 -2
  24. package/dest/lmdb-v2/factory.d.ts +28 -3
  25. package/dest/lmdb-v2/factory.d.ts.map +1 -1
  26. package/dest/lmdb-v2/factory.js +61 -10
  27. package/dest/lmdb-v2/read_transaction.js +21 -19
  28. package/dest/lmdb-v2/store.d.ts +2 -2
  29. package/dest/lmdb-v2/store.d.ts.map +1 -1
  30. package/dest/lmdb-v2/store.js +4 -4
  31. package/dest/sqlite-opfs/array.d.ts +21 -0
  32. package/dest/sqlite-opfs/array.d.ts.map +1 -0
  33. package/dest/sqlite-opfs/array.js +128 -0
  34. package/dest/sqlite-opfs/errors.d.ts +27 -0
  35. package/dest/sqlite-opfs/errors.d.ts.map +1 -0
  36. package/dest/sqlite-opfs/errors.js +34 -0
  37. package/dest/sqlite-opfs/index.d.ts +16 -0
  38. package/dest/sqlite-opfs/index.d.ts.map +1 -0
  39. package/dest/sqlite-opfs/index.js +22 -0
  40. package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts +32 -0
  41. package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts.map +1 -0
  42. package/dest/sqlite-opfs/internal/ordered-binary-browser.js +448 -0
  43. package/dest/sqlite-opfs/map.d.ts +35 -0
  44. package/dest/sqlite-opfs/map.d.ts.map +1 -0
  45. package/dest/sqlite-opfs/map.js +163 -0
  46. package/dest/sqlite-opfs/messages.d.ts +66 -0
  47. package/dest/sqlite-opfs/messages.d.ts.map +1 -0
  48. package/dest/sqlite-opfs/messages.js +5 -0
  49. package/dest/sqlite-opfs/multi_map.d.ts +16 -0
  50. package/dest/sqlite-opfs/multi_map.d.ts.map +1 -0
  51. package/dest/sqlite-opfs/multi_map.js +67 -0
  52. package/dest/sqlite-opfs/set.d.ts +13 -0
  53. package/dest/sqlite-opfs/set.d.ts.map +1 -0
  54. package/dest/sqlite-opfs/set.js +19 -0
  55. package/dest/sqlite-opfs/singleton.d.ts +13 -0
  56. package/dest/sqlite-opfs/singleton.d.ts.map +1 -0
  57. package/dest/sqlite-opfs/singleton.js +48 -0
  58. package/dest/sqlite-opfs/store.d.ts +79 -0
  59. package/dest/sqlite-opfs/store.d.ts.map +1 -0
  60. package/dest/sqlite-opfs/store.js +281 -0
  61. package/dest/sqlite-opfs/worker.d.ts +2 -0
  62. package/dest/sqlite-opfs/worker.d.ts.map +1 -0
  63. package/dest/sqlite-opfs/worker.js +248 -0
  64. package/dest/stores/l2_tips_store.d.ts +7 -13
  65. package/dest/stores/l2_tips_store.d.ts.map +1 -1
  66. package/dest/stores/l2_tips_store.js +24 -43
  67. package/package.json +22 -19
  68. package/src/bench/shared_map_bench.ts +111 -0
  69. package/src/indexeddb/index.ts +1 -1
  70. package/src/interfaces/array_test_suite.ts +33 -35
  71. package/src/interfaces/index.ts +1 -1
  72. package/src/interfaces/map_test_suite.ts +32 -34
  73. package/src/interfaces/multi_map_test_suite.ts +65 -67
  74. package/src/interfaces/set_test_suite.ts +13 -15
  75. package/src/interfaces/singleton_test_suite.ts +6 -8
  76. package/src/lmdb/index.ts +2 -2
  77. package/src/lmdb-v2/factory.ts +79 -9
  78. package/src/lmdb-v2/read_transaction.ts +23 -23
  79. package/src/lmdb-v2/store.ts +4 -2
  80. package/src/sqlite-opfs/array.ts +124 -0
  81. package/src/sqlite-opfs/errors.ts +44 -0
  82. package/src/sqlite-opfs/index.ts +39 -0
  83. package/src/sqlite-opfs/internal/ordered-binary-browser.js +465 -0
  84. package/src/sqlite-opfs/map.ts +163 -0
  85. package/src/sqlite-opfs/messages.ts +39 -0
  86. package/src/sqlite-opfs/multi_map.ts +74 -0
  87. package/src/sqlite-opfs/set.ts +29 -0
  88. package/src/sqlite-opfs/singleton.ts +48 -0
  89. package/src/sqlite-opfs/store.ts +296 -0
  90. package/src/sqlite-opfs/worker.ts +230 -0
  91. package/src/stores/l2_tips_store.ts +20 -41
package/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # KV Store
2
2
 
3
- The Aztec KV store is an implementation of a durable key-value database with a pluggable backend. The only supported backend right now is LMDB by using the [`lmdb-js` package](https://github.com/kriszyp/lmdb-js).
3
+ The Aztec KV store is an implementation of a durable key-value database with a pluggable backend. Four backends are available, each exposed as its own package entrypoint:
4
+
5
+ - `@aztec/kv-store/lmdb-v2`: server / Node. The current default for node components.
6
+ - `@aztec/kv-store/lmdb`: the legacy LMDB backend, backed by [`lmdb-js`](https://github.com/kriszyp/lmdb-js).
7
+ - `@aztec/kv-store/indexeddb`: browser, backed by IndexedDB.
8
+ - `@aztec/kv-store/sqlite-opfs`: browser, backed by SQLite over the Origin Private File System.
9
+
10
+ The backend is selected at import time. You import `createStore` (and friends) from the entrypoint you want.
4
11
 
5
12
  This package exports a number of primitive data structures that can be used to build domain-specific databases in each node component (e.g. a PXE database or an Archiver database). The data structures supported:
6
13
 
@@ -0,0 +1,19 @@
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import type { AztecAsyncKVStore } from '../interfaces/store.js';
3
+ /** One benchmark measurement. */
4
+ export type BenchResult = {
5
+ /** Benchmark name (includes the backend prefix for disambiguation). */
6
+ name: string;
7
+ value: number;
8
+ unit: 'ms' | 'us';
9
+ };
10
+ export type BenchReporter = (results: BenchResult[]) => void | Promise<void>;
11
+ /**
12
+ * Runs the standard Map benchmark suite against any `AztecAsyncKVStore` backend,
13
+ * populates `results`, and calls `reporter` in `afterAll`.
14
+ *
15
+ * Kept free of Node-only deps (`fs`, `path`) so the same runner works under
16
+ * vitest-browser for IndexedDB and SQLite-OPFS.
17
+ */
18
+ export declare function describeAztecMapBench(backendPrefix: string, getStore: () => Promise<AztecAsyncKVStore>, logger: Logger, reporter: BenchReporter): void;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkX21hcF9iZW5jaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JlbmNoL3NoYXJlZF9tYXBfYmVuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxpQ0FBaUM7QUFDakMsTUFBTSxNQUFNLFdBQVcsR0FBRztJQUN4Qix1RUFBdUU7SUFDdkUsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQztDQUNuQixDQUFDO0FBRUYsTUFBTSxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTdFOzs7Ozs7R0FNRztBQUNILHdCQUFnQixxQkFBcUIsQ0FDbkMsYUFBYSxFQUFFLE1BQU0sRUFDckIsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQzFDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFFLGFBQWEsUUFrRnhCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared_map_bench.d.ts","sourceRoot":"","sources":["../../src/bench/shared_map_bench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,iCAAiC;AACjC,MAAM,MAAM,WAAW,GAAG;IACxB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,EAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,QAkFxB"}
@@ -0,0 +1,91 @@
1
+ import { Timer } from '@aztec/foundation/timer';
2
+ /**
3
+ * Runs the standard Map benchmark suite against any `AztecAsyncKVStore` backend,
4
+ * populates `results`, and calls `reporter` in `afterAll`.
5
+ *
6
+ * Kept free of Node-only deps (`fs`, `path`) so the same runner works under
7
+ * vitest-browser for IndexedDB and SQLite-OPFS.
8
+ */ export function describeAztecMapBench(backendPrefix, getStore, logger, reporter) {
9
+ describe(`${backendPrefix} Map benchmarks`, ()=>{
10
+ let store;
11
+ let map;
12
+ const results = [];
13
+ const generateKeyValuePairs = (count, offset = 0)=>{
14
+ const keys = Array.from({
15
+ length: count
16
+ }, (_, i)=>`key-${i + offset}`);
17
+ const values = Array.from({
18
+ length: count
19
+ }, (_, i)=>`value-${i + offset}`);
20
+ return keys.map((key, i)=>({
21
+ key,
22
+ value: values[i]
23
+ }));
24
+ };
25
+ const record = (name, value, unit)=>{
26
+ results.push({
27
+ name: `${backendPrefix}/Map/${name}`,
28
+ value,
29
+ unit
30
+ });
31
+ };
32
+ beforeEach(async ()=>{
33
+ store = await getStore();
34
+ map = store.openMap('test');
35
+ });
36
+ afterEach(async ()=>{
37
+ await store.delete();
38
+ });
39
+ afterAll(async ()=>{
40
+ const pretty = results.map((r)=>`${r.name}: ${r.value.toFixed(2)} ${r.unit}`).join('\n');
41
+ logger.info(`\n${pretty}\n`);
42
+ await reporter(results);
43
+ });
44
+ it('adds individual values', async ()=>{
45
+ const pairs = generateKeyValuePairs(1000);
46
+ const timer = new Timer();
47
+ for (const pair of pairs){
48
+ await map.set(pair.key, pair.value);
49
+ }
50
+ record('Individual insertion', timer.ms() / pairs.length, 'ms');
51
+ });
52
+ it('adds batched values', async ()=>{
53
+ const batches = Array.from({
54
+ length: 100
55
+ }, (_, i)=>generateKeyValuePairs(1000, i * 1000));
56
+ const timer = new Timer();
57
+ for (const batch of batches){
58
+ await map.setMany(batch);
59
+ }
60
+ record(`Batch insertion of ${batches[0].length} items`, timer.ms() / batches.length, 'ms');
61
+ });
62
+ it('reads individual values', async ()=>{
63
+ const pairs = generateKeyValuePairs(10000);
64
+ await map.setMany(pairs);
65
+ const timer = new Timer();
66
+ for (const pair of pairs){
67
+ await map.getAsync(pair.key);
68
+ }
69
+ record('Individual read', timer.ms() * 1000 / pairs.length, 'us');
70
+ });
71
+ it('reads via a cursor', async ()=>{
72
+ const pairs = generateKeyValuePairs(10000);
73
+ await map.setMany(pairs);
74
+ const timer = new Timer();
75
+ for await (const _ of map.entriesAsync()){
76
+ // consume
77
+ }
78
+ record(`Iterator per item read of ${pairs.length} items`, timer.ms() * 1000 / pairs.length, 'us');
79
+ });
80
+ it('reads the size of the map', async ()=>{
81
+ const numIterations = 1000;
82
+ const pairs = generateKeyValuePairs(10000);
83
+ await map.setMany(pairs);
84
+ const timer = new Timer();
85
+ for(let i = 0; i < numIterations; i++){
86
+ await map.sizeAsync();
87
+ }
88
+ record(`Read size of ${pairs.length} items`, timer.ms() * 1000 / numIterations, 'us');
89
+ });
90
+ });
91
+ }
@@ -9,7 +9,7 @@ export async function createStore(name, config, schemaVersion = undefined, log =
9
9
  }
10
10
  log.info(dataDirectory ? `Creating ${name} data store at directory ${dataDirectory} with map size ${config.dataStoreMapSizeKb} KB` : `Creating ${name} ephemeral data store with map size ${config.dataStoreMapSizeKb} KB`);
11
11
  const store = await AztecIndexedDBStore.open(createLogger('kv-store:indexeddb'), dataDirectory ?? '', false);
12
- return initStoreForRollupAndSchemaVersion(store, schemaVersion, config.l1Contracts?.rollupAddress, log);
12
+ return initStoreForRollupAndSchemaVersion(store, schemaVersion, config.rollupAddress, log);
13
13
  }
14
14
  export function openTmpStore(ephemeral = false) {
15
15
  return AztecIndexedDBStore.open(createLogger('kv-store:indexeddb'), undefined, ephemeral);
@@ -1,3 +1,3 @@
1
1
  import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
2
2
  export declare function describeAztecArray(testName: string, getStore: () => AztecKVStore | Promise<AztecAsyncKVStore>, forceAsync?: boolean): void;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfdGVzdF9zdWl0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvYXJyYXlfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHbEUsd0JBQWdCLGtCQUFrQixDQUNoQyxRQUFRLEVBQUUsTUFBTSxFQUNoQixRQUFRLEVBQUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQ3pELFVBQVUsR0FBRSxPQUFlLFFBc0g1QiJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfdGVzdF9zdWl0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvYXJyYXlfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHbEUsd0JBQWdCLGtCQUFrQixDQUNoQyxRQUFRLEVBQUUsTUFBTSxFQUNoQixRQUFRLEVBQUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQ3pELFVBQVUsR0FBRSxPQUFlLFFBc0g1QiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"array_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/array_test_suite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAsH5B"}
1
+ {"version":3,"file":"array_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/array_test_suite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAsH5B"}
@@ -1,5 +1,4 @@
1
1
  import { toArray } from '@aztec/foundation/iterable';
2
- import { expect } from 'chai';
3
2
  import { isSyncStore } from './utils.js';
4
3
  export function describeAztecArray(testName, getStore, forceAsync = false) {
5
4
  describe(testName, ()=>{
@@ -28,56 +27,56 @@ export function describeAztecArray(testName, getStore, forceAsync = false) {
28
27
  await arr.push(1);
29
28
  await arr.push(2);
30
29
  await arr.push(3);
31
- expect(await length()).to.equal(3);
32
- expect(await arr.pop()).to.equal(3);
33
- expect(await arr.pop()).to.equal(2);
34
- expect(await arr.pop()).to.equal(1);
35
- expect(await arr.pop()).to.equal(undefined);
30
+ expect(await length()).toBe(3);
31
+ expect(await arr.pop()).toBe(3);
32
+ expect(await arr.pop()).toBe(2);
33
+ expect(await arr.pop()).toBe(1);
34
+ expect(await arr.pop()).toBe(undefined);
36
35
  });
37
36
  it('should be able to get values by index', async ()=>{
38
37
  await arr.push(1);
39
38
  await arr.push(2);
40
39
  await arr.push(3);
41
- expect(await at(0)).to.equal(1);
42
- expect(await at(1)).to.equal(2);
43
- expect(await at(2)).to.equal(3);
44
- expect(await at(3)).to.equal(undefined);
45
- expect(await at(-1)).to.equal(3);
46
- expect(await at(-2)).to.equal(2);
47
- expect(await at(-3)).to.equal(1);
48
- expect(await at(-4)).to.equal(undefined);
40
+ expect(await at(0)).toBe(1);
41
+ expect(await at(1)).toBe(2);
42
+ expect(await at(2)).toBe(3);
43
+ expect(await at(3)).toBe(undefined);
44
+ expect(await at(-1)).toBe(3);
45
+ expect(await at(-2)).toBe(2);
46
+ expect(await at(-3)).toBe(1);
47
+ expect(await at(-4)).toBe(undefined);
49
48
  });
50
49
  it('should be able to set values by index', async ()=>{
51
50
  await arr.push(1);
52
51
  await arr.push(2);
53
52
  await arr.push(3);
54
- expect(await arr.setAt(0, 4)).to.equal(true);
55
- expect(await arr.setAt(1, 5)).to.equal(true);
56
- expect(await arr.setAt(2, 6)).to.equal(true);
57
- expect(await arr.setAt(3, 7)).to.equal(false);
58
- expect(await at(0)).to.equal(4);
59
- expect(await at(1)).to.equal(5);
60
- expect(await at(2)).to.equal(6);
61
- expect(await at(3)).to.equal(undefined);
62
- expect(await arr.setAt(-1, 8)).to.equal(true);
63
- expect(await arr.setAt(-2, 9)).to.equal(true);
64
- expect(await arr.setAt(-3, 10)).to.equal(true);
65
- expect(await arr.setAt(-4, 11)).to.equal(false);
66
- expect(await at(-1)).to.equal(8);
67
- expect(await at(-2)).to.equal(9);
68
- expect(await at(-3)).to.equal(10);
69
- expect(await at(-4)).to.equal(undefined);
53
+ expect(await arr.setAt(0, 4)).toBe(true);
54
+ expect(await arr.setAt(1, 5)).toBe(true);
55
+ expect(await arr.setAt(2, 6)).toBe(true);
56
+ expect(await arr.setAt(3, 7)).toBe(false);
57
+ expect(await at(0)).toBe(4);
58
+ expect(await at(1)).toBe(5);
59
+ expect(await at(2)).toBe(6);
60
+ expect(await at(3)).toBe(undefined);
61
+ expect(await arr.setAt(-1, 8)).toBe(true);
62
+ expect(await arr.setAt(-2, 9)).toBe(true);
63
+ expect(await arr.setAt(-3, 10)).toBe(true);
64
+ expect(await arr.setAt(-4, 11)).toBe(false);
65
+ expect(await at(-1)).toBe(8);
66
+ expect(await at(-2)).toBe(9);
67
+ expect(await at(-3)).toBe(10);
68
+ expect(await at(-4)).toBe(undefined);
70
69
  });
71
70
  it('should be able to iterate over values', async ()=>{
72
71
  await arr.push(1);
73
72
  await arr.push(2);
74
73
  await arr.push(3);
75
- expect(await values()).to.deep.equal([
74
+ expect(await values()).toEqual([
76
75
  1,
77
76
  2,
78
77
  3
79
78
  ]);
80
- expect(await entries()).to.deep.equal([
79
+ expect(await entries()).toEqual([
81
80
  [
82
81
  0,
83
82
  1
@@ -97,8 +96,8 @@ export function describeAztecArray(testName, getStore, forceAsync = false) {
97
96
  await arr.push(2);
98
97
  await arr.push(3);
99
98
  const arr2 = store.openArray('test');
100
- expect(await length(arr2)).to.equal(3);
101
- expect(await values(arr2)).to.deep.equal(await values());
99
+ expect(await length(arr2)).toBe(3);
100
+ expect(await values(arr2)).toEqual(await values());
102
101
  });
103
102
  });
104
103
  }
@@ -6,5 +6,5 @@ export * from './store.js';
6
6
  export * from './set.js';
7
7
  export * from './multi_map.js';
8
8
  export { mapRange } from './common.js';
9
- export type { CustomRange, Range, StoreSize } from './common.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQyJ9
9
+ export type { CustomRange, Key, Range, StoreSize } from './common.js';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
2
2
  export declare function describeAztecMap(testName: string, getStore: () => AztecKVStore | Promise<AztecAsyncKVStore>, forceAsync?: boolean): void;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL21hcF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSx3QkFBZ0IsZ0JBQWdCLENBQzlCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFFBQVEsRUFBRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDekQsVUFBVSxHQUFFLE9BQWUsUUEyTDVCIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL21hcF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSx3QkFBZ0IsZ0JBQWdCLENBQzlCLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFFBQVEsRUFBRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDekQsVUFBVSxHQUFFLE9BQWUsUUEyTDVCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"map_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/map_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QA2L5B"}
1
+ {"version":3,"file":"map_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/map_test_suite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QA2L5B"}
@@ -1,5 +1,4 @@
1
1
  import { toArray } from '@aztec/foundation/iterable';
2
- import { expect } from 'chai';
3
2
  import { isSyncStore } from './utils.js';
4
3
  export function describeAztecMap(testName, getStore, forceAsync = false) {
5
4
  describe(testName, ()=>{
@@ -30,9 +29,9 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
30
29
  it('should be able to set and get values', async ()=>{
31
30
  await map.set('foo', 'bar');
32
31
  await map.set('baz', 'qux');
33
- expect(await get('foo')).to.equal('bar');
34
- expect(await get('baz')).to.equal('qux');
35
- expect(await get('quux')).to.equal(undefined);
32
+ expect(await get('foo')).toBe('bar');
33
+ expect(await get('baz')).toBe('qux');
34
+ expect(await get('quux')).toBe(undefined);
36
35
  });
37
36
  it('should be able to set many values', async ()=>{
38
37
  const pairs = Array.from({
@@ -43,62 +42,62 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
43
42
  }));
44
43
  await map.setMany(pairs);
45
44
  for (const { key, value } of pairs){
46
- expect(await get(key)).to.equal(value);
45
+ expect(await get(key)).toBe(value);
47
46
  }
48
47
  });
49
48
  it('should be able to overwrite values', async ()=>{
50
49
  await map.set('foo', 'bar');
51
50
  await map.set('foo', 'baz');
52
- expect(await get('foo')).to.equal('baz');
51
+ expect(await get('foo')).toBe('baz');
53
52
  });
54
53
  it('should be able to set values if they do not exist', async ()=>{
55
- expect(await map.setIfNotExists('foo', 'bar')).to.equal(true);
56
- expect(await map.setIfNotExists('foo', 'baz')).to.equal(false);
57
- expect(await get('foo')).to.equal('bar');
54
+ expect(await map.setIfNotExists('foo', 'bar')).toBe(true);
55
+ expect(await map.setIfNotExists('foo', 'baz')).toBe(false);
56
+ expect(await get('foo')).toBe('bar');
58
57
  });
59
58
  it('should be able to delete values', async ()=>{
60
59
  await map.set('foo', 'bar');
61
60
  await map.set('baz', 'qux');
62
61
  await map.delete('foo');
63
- expect(await get('foo')).to.equal(undefined);
64
- expect(await get('baz')).to.equal('qux');
62
+ expect(await get('foo')).toBe(undefined);
63
+ expect(await get('baz')).toBe('qux');
65
64
  });
66
65
  it('should be able to return size of the map', async ()=>{
67
66
  await map.set('foo', 'bar');
68
- expect(await size()).to.equal(1);
67
+ expect(await size()).toBe(1);
69
68
  await map.set('baz', 'qux');
70
- expect(await size()).to.equal(2);
69
+ expect(await size()).toBe(2);
71
70
  await map.delete('foo');
72
- expect(await size()).to.equal(1);
71
+ expect(await size()).toBe(1);
73
72
  });
74
73
  it('returns 0 for empty map size', async ()=>{
75
- expect(await size()).to.equal(0);
74
+ expect(await size()).toBe(0);
76
75
  });
77
76
  it('calculates size correctly across multiple operations', async ()=>{
78
- expect(await size()).to.equal(0);
77
+ expect(await size()).toBe(0);
79
78
  // Add items
80
79
  await map.set('a', 'value1');
81
80
  await map.set('b', 'value2');
82
81
  await map.set('c', 'value3');
83
- expect(await size()).to.equal(3);
82
+ expect(await size()).toBe(3);
84
83
  // Update existing (size should not change)
85
84
  await map.set('b', 'updated');
86
- expect(await size()).to.equal(3);
85
+ expect(await size()).toBe(3);
87
86
  // Delete some
88
87
  await map.delete('a');
89
- expect(await size()).to.equal(2);
88
+ expect(await size()).toBe(2);
90
89
  // Delete all
91
90
  await map.delete('b');
92
91
  await map.delete('c');
93
- expect(await size()).to.equal(0);
92
+ expect(await size()).toBe(0);
94
93
  });
95
94
  it('should be able to iterate over entries when there are no keys', async ()=>{
96
- expect(await entries()).to.deep.equal([]);
95
+ expect(await entries()).toEqual([]);
97
96
  });
98
97
  it('should be able to iterate over entries', async ()=>{
99
98
  await map.set('foo', 'bar');
100
99
  await map.set('baz', 'qux');
101
- expect(await entries()).to.deep.equal([
100
+ expect(await entries()).toEqual([
102
101
  [
103
102
  'baz',
104
103
  'qux'
@@ -112,7 +111,7 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
112
111
  it('should be able to iterate over values', async ()=>{
113
112
  await map.set('foo', 'bar');
114
113
  await map.set('baz', 'quux');
115
- expect(await values()).to.deep.equal([
114
+ expect(await values()).toEqual([
116
115
  'quux',
117
116
  'bar'
118
117
  ]);
@@ -120,7 +119,7 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
120
119
  it('should be able to iterate over keys', async ()=>{
121
120
  await map.set('foo', 'bar');
122
121
  await map.set('baz', 'qux');
123
- expect(await keys()).to.deep.equal([
122
+ expect(await keys()).toEqual([
124
123
  'baz',
125
124
  'foo'
126
125
  ]);
@@ -128,7 +127,7 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
128
127
  it('should be able to iterate over string keys that represent numbers', async ()=>{
129
128
  await map.set('0x22', 'bar');
130
129
  await map.set('0x31', 'qux');
131
- expect(await keys()).to.deep.equal([
130
+ expect(await keys()).toEqual([
132
131
  '0x22',
133
132
  '0x31'
134
133
  ]);
@@ -204,7 +203,7 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
204
203
  await map.set(b, 'b');
205
204
  await map.set(c, 'c');
206
205
  await map.set(d, 'd');
207
- expect(await keys()).to.deep.equal([
206
+ expect(await keys()).toEqual([
208
207
  a,
209
208
  b,
210
209
  c,
@@ -213,19 +212,19 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
213
212
  expect(await keys({
214
213
  start: b,
215
214
  end: c
216
- })).to.deep.equal([
215
+ })).toEqual([
217
216
  b
218
217
  ]);
219
218
  expect(await keys({
220
219
  start: b
221
- })).to.deep.equal([
220
+ })).toEqual([
222
221
  b,
223
222
  c,
224
223
  d
225
224
  ]);
226
225
  expect(await keys({
227
226
  end: c
228
- })).to.deep.equal([
227
+ })).toEqual([
229
228
  a,
230
229
  b
231
230
  ]);
@@ -233,26 +232,26 @@ export function describeAztecMap(testName, getStore, forceAsync = false) {
233
232
  start: b,
234
233
  end: c,
235
234
  reverse: true
236
- })).to.deep.equal([
235
+ })).toEqual([
237
236
  c
238
237
  ]);
239
238
  expect(await keys({
240
239
  start: b,
241
240
  limit: 1
242
- })).to.deep.equal([
241
+ })).toEqual([
243
242
  b
244
243
  ]);
245
244
  expect(await keys({
246
245
  start: b,
247
246
  reverse: true
248
- })).to.deep.equal([
247
+ })).toEqual([
249
248
  d,
250
249
  c
251
250
  ]);
252
251
  expect(await keys({
253
252
  end: b,
254
253
  reverse: true
255
- })).to.deep.equal([
254
+ })).toEqual([
256
255
  b,
257
256
  a
258
257
  ]);
@@ -1,3 +1,3 @@
1
1
  import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
2
2
  export declare function describeAztecMultiMap(testName: string, getStore: () => AztecKVStore | Promise<AztecAsyncKVStore>, forceAsync?: boolean): void;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfbWFwX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL211bHRpX21hcF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSx3QkFBZ0IscUJBQXFCLENBQ25DLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFFBQVEsRUFBRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDekQsVUFBVSxHQUFFLE9BQWUsUUF5VzVCIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfbWFwX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL211bHRpX21hcF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSx3QkFBZ0IscUJBQXFCLENBQ25DLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFFBQVEsRUFBRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDekQsVUFBVSxHQUFFLE9BQWUsUUF5VzVCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"multi_map_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/multi_map_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAyW5B"}
1
+ {"version":3,"file":"multi_map_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/multi_map_test_suite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAyW5B"}