@aztec/kv-store 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.75.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 (122) hide show
  1. package/dest/config.d.ts +17 -0
  2. package/dest/config.d.ts.map +1 -0
  3. package/dest/config.js +7 -5
  4. package/dest/indexeddb/array.d.ts +21 -0
  5. package/dest/indexeddb/array.d.ts.map +1 -0
  6. package/dest/indexeddb/array.js +36 -44
  7. package/dest/indexeddb/index.d.ts +7 -0
  8. package/dest/indexeddb/index.d.ts.map +1 -0
  9. package/dest/indexeddb/index.js +4 -1
  10. package/dest/indexeddb/map.d.ts +26 -0
  11. package/dest/indexeddb/map.d.ts.map +1 -0
  12. package/dest/indexeddb/map.js +43 -72
  13. package/dest/indexeddb/set.d.ts +17 -0
  14. package/dest/indexeddb/set.d.ts.map +1 -0
  15. package/dest/indexeddb/set.js +4 -3
  16. package/dest/indexeddb/singleton.d.ts +16 -0
  17. package/dest/indexeddb/singleton.d.ts.map +1 -0
  18. package/dest/indexeddb/singleton.js +22 -17
  19. package/dest/indexeddb/store.d.ts +97 -0
  20. package/dest/indexeddb/store.d.ts.map +1 -0
  21. package/dest/indexeddb/store.js +93 -97
  22. package/dest/interfaces/array.d.ts +80 -0
  23. package/dest/interfaces/array.d.ts.map +1 -0
  24. package/dest/interfaces/array.js +2 -3
  25. package/dest/interfaces/array_test_suite.d.ts +3 -0
  26. package/dest/interfaces/array_test_suite.d.ts.map +1 -0
  27. package/dest/interfaces/array_test_suite.js +25 -29
  28. package/dest/interfaces/common.d.ts +23 -0
  29. package/dest/interfaces/common.d.ts.map +1 -0
  30. package/dest/interfaces/common.js +2 -3
  31. package/dest/interfaces/counter.d.ts +59 -0
  32. package/dest/interfaces/counter.d.ts.map +1 -0
  33. package/dest/interfaces/counter.js +2 -1
  34. package/dest/interfaces/index.d.ts +8 -0
  35. package/dest/interfaces/index.d.ts.map +1 -0
  36. package/dest/interfaces/index.js +1 -0
  37. package/dest/interfaces/map.d.ts +134 -0
  38. package/dest/interfaces/map.d.ts.map +1 -0
  39. package/dest/interfaces/map.js +2 -3
  40. package/dest/interfaces/map_test_suite.d.ts +3 -0
  41. package/dest/interfaces/map_test_suite.d.ts.map +1 -0
  42. package/dest/interfaces/map_test_suite.js +42 -87
  43. package/dest/interfaces/set.d.ts +44 -0
  44. package/dest/interfaces/set.d.ts.map +1 -0
  45. package/dest/interfaces/set.js +2 -1
  46. package/dest/interfaces/set_test_suite.d.ts +3 -0
  47. package/dest/interfaces/set_test_suite.d.ts.map +1 -0
  48. package/dest/interfaces/set_test_suite.js +22 -59
  49. package/dest/interfaces/singleton.d.ts +29 -0
  50. package/dest/interfaces/singleton.d.ts.map +1 -0
  51. package/dest/interfaces/singleton.js +2 -4
  52. package/dest/interfaces/singleton_test_suite.d.ts +3 -0
  53. package/dest/interfaces/singleton_test_suite.d.ts.map +1 -0
  54. package/dest/interfaces/singleton_test_suite.js +10 -7
  55. package/dest/interfaces/store.d.ts +145 -0
  56. package/dest/interfaces/store.d.ts.map +1 -0
  57. package/dest/interfaces/store.js +2 -1
  58. package/dest/interfaces/store_test_suite.d.ts +3 -0
  59. package/dest/interfaces/store_test_suite.d.ts.map +1 -0
  60. package/dest/interfaces/store_test_suite.js +9 -6
  61. package/dest/interfaces/utils.d.ts +16 -0
  62. package/dest/interfaces/utils.d.ts.map +1 -0
  63. package/dest/interfaces/utils.js +15 -12
  64. package/dest/lmdb/array.d.ts +23 -0
  65. package/dest/lmdb/array.d.ts.map +1 -0
  66. package/dest/lmdb/array.js +41 -46
  67. package/dest/lmdb/counter.d.ts +19 -0
  68. package/dest/lmdb/counter.d.ts.map +1 -0
  69. package/dest/lmdb/counter.js +24 -18
  70. package/dest/lmdb/index.d.ts +12 -0
  71. package/dest/lmdb/index.d.ts.map +1 -0
  72. package/dest/lmdb/index.js +6 -2
  73. package/dest/lmdb/map.d.ts +52 -0
  74. package/dest/lmdb/map.d.ts.map +1 -0
  75. package/dest/lmdb/map.js +68 -90
  76. package/dest/lmdb/set.d.ts +18 -0
  77. package/dest/lmdb/set.d.ts.map +1 -0
  78. package/dest/lmdb/set.js +5 -4
  79. package/dest/lmdb/singleton.d.ts +14 -0
  80. package/dest/lmdb/singleton.d.ts.map +1 -0
  81. package/dest/lmdb/singleton.js +14 -13
  82. package/dest/lmdb/store.d.ts +110 -0
  83. package/dest/lmdb/store.d.ts.map +1 -0
  84. package/dest/lmdb/store.js +134 -124
  85. package/dest/lmdb-v2/factory.d.ts +9 -0
  86. package/dest/lmdb-v2/factory.d.ts.map +1 -0
  87. package/dest/lmdb-v2/factory.js +19 -22
  88. package/dest/lmdb-v2/index.d.ts +3 -0
  89. package/dest/lmdb-v2/index.d.ts.map +1 -0
  90. package/dest/lmdb-v2/index.js +1 -0
  91. package/dest/lmdb-v2/map.d.ts +86 -0
  92. package/dest/lmdb-v2/map.d.ts.map +1 -0
  93. package/dest/lmdb-v2/map.js +85 -82
  94. package/dest/lmdb-v2/message.d.ts +112 -0
  95. package/dest/lmdb-v2/message.d.ts.map +1 -0
  96. package/dest/lmdb-v2/message.js +7 -6
  97. package/dest/lmdb-v2/read_transaction.d.ts +14 -0
  98. package/dest/lmdb-v2/read_transaction.d.ts.map +1 -0
  99. package/dest/lmdb-v2/read_transaction.js +53 -65
  100. package/dest/lmdb-v2/singleton.d.ts +12 -0
  101. package/dest/lmdb-v2/singleton.d.ts.map +1 -0
  102. package/dest/lmdb-v2/singleton.js +5 -7
  103. package/dest/lmdb-v2/store.d.ts +43 -0
  104. package/dest/lmdb-v2/store.d.ts.map +1 -0
  105. package/dest/lmdb-v2/store.js +26 -27
  106. package/dest/lmdb-v2/utils.d.ts +19 -0
  107. package/dest/lmdb-v2/utils.d.ts.map +1 -0
  108. package/dest/lmdb-v2/utils.js +30 -30
  109. package/dest/lmdb-v2/write_transaction.d.ts +19 -0
  110. package/dest/lmdb-v2/write_transaction.d.ts.map +1 -0
  111. package/dest/lmdb-v2/write_transaction.js +110 -130
  112. package/dest/stores/index.d.ts +2 -0
  113. package/dest/stores/index.d.ts.map +1 -0
  114. package/dest/stores/index.js +1 -0
  115. package/dest/stores/l2_tips_store.d.ts +13 -0
  116. package/dest/stores/l2_tips_store.d.ts.map +1 -0
  117. package/dest/stores/l2_tips_store.js +12 -26
  118. package/dest/utils.d.ts +12 -0
  119. package/dest/utils.d.ts.map +1 -0
  120. package/dest/utils.js +7 -3
  121. package/package.json +6 -6
  122. package/src/interfaces/index.ts +1 -1
@@ -0,0 +1,59 @@
1
+ import { type Key, type Range } from './common.js';
2
+ /**
3
+ * A map that counts how many times it sees a key. Once 0 is reached, that key is removed from the map.
4
+ * Iterating over the map will only return keys that have a count over 0.
5
+ *
6
+ * Keys are stored in sorted order
7
+ */
8
+ interface AztecBaseCounter<K extends Key = Key> {
9
+ /**
10
+ * Resets the count of the given key to the given value.
11
+ * @param key - The key to reset
12
+ * @param value - The value to reset the key to
13
+ */
14
+ set(key: K, value: number): Promise<void>;
15
+ /**
16
+ * Updates the count of the given key by the given delta. This can be used to increment or decrement the count.
17
+ * Once a key's count reaches 0, it is removed from the map.
18
+ *
19
+ * @param key - The key to update
20
+ * @param delta - The amount to modify the key by
21
+ */
22
+ update(key: K, delta: number): Promise<void>;
23
+ }
24
+ export interface AztecCounter<K extends Key = Key> extends AztecBaseCounter<K> {
25
+ /**
26
+ * Gets the current count.
27
+ * @param key - The key to get the count of
28
+ */
29
+ get(key: K): number;
30
+ /**
31
+ * Returns keys in the map in sorted order. Only returns keys that have been seen at least once.
32
+ * @param range - The range of keys to iterate over
33
+ */
34
+ keys(range: Range<K>): IterableIterator<K>;
35
+ /**
36
+ * Returns keys and their counts in the map sorted by the key. Only returns keys that have been seen at least once.
37
+ * @param range - The range of keys to iterate over
38
+ */
39
+ entries(range: Range<K>): IterableIterator<[K, number]>;
40
+ }
41
+ export interface AztecAsyncCounter<K extends Key = Key> extends AztecBaseCounter<K> {
42
+ /**
43
+ * Gets the current count.
44
+ * @param key - The key to get the count of
45
+ */
46
+ getAsync(key: K): Promise<number>;
47
+ /**
48
+ * Returns keys in the map in sorted order. Only returns keys that have been seen at least once.
49
+ * @param range - The range of keys to iterate over
50
+ */
51
+ keysAsync(range: Range<K>): AsyncIterableIterator<K>;
52
+ /**
53
+ * Returns keys and their counts in the map sorted by the key. Only returns keys that have been seen at least once.
54
+ * @param range - The range of keys to iterate over
55
+ */
56
+ entriesAsync(range: Range<K>): AsyncIterableIterator<[K, number]>;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/interfaces/counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;GAKG;AACH,UAAU,gBAAgB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IAC5C;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC5E;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAE3C;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACjF;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAErD;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;CACnE"}
@@ -1 +1,2 @@
1
- export { };
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL2NvdW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,8 @@
1
+ export * from './array.js';
2
+ export * from './map.js';
3
+ export * from './counter.js';
4
+ export * from './singleton.js';
5
+ export * from './store.js';
6
+ export * from './set.js';
7
+ export { Range, StoreSize } from './common.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -4,3 +4,4 @@ export * from './counter.js';
4
4
  export * from './singleton.js';
5
5
  export * from './store.js';
6
6
  export * from './set.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDIn0=
@@ -0,0 +1,134 @@
1
+ import { type Key, type Range } from './common.js';
2
+ /**
3
+ * A map backed by a persistent store.
4
+ */
5
+ interface AztecBaseMap<K extends Key, V> {
6
+ /**
7
+ * Sets the value at the given key.
8
+ * @param key - The key to set the value at
9
+ * @param val - The value to set
10
+ */
11
+ set(key: K, val: V): Promise<void>;
12
+ /**
13
+ * Sets the value at the given key if it does not already exist.
14
+ * @param key - The key to set the value at
15
+ * @param val - The value to set
16
+ */
17
+ setIfNotExists(key: K, val: V): Promise<boolean>;
18
+ /**
19
+ * Deletes the value at the given key.
20
+ * @param key - The key to delete the value at
21
+ */
22
+ delete(key: K): Promise<void>;
23
+ }
24
+ export interface AztecMap<K extends Key, V> extends AztecBaseMap<K, V> {
25
+ /**
26
+ * Gets the value at the given key.
27
+ * @param key - The key to get the value from
28
+ */
29
+ get(key: K): V | undefined;
30
+ /**
31
+ * Checks if a key exists in the map.
32
+ * @param key - The key to check
33
+ * @returns True if the key exists, false otherwise
34
+ */
35
+ has(key: K): boolean;
36
+ /**
37
+ * Iterates over the map's key-value entries in the key's natural order
38
+ * @param range - The range of keys to iterate over
39
+ */
40
+ entries(range?: Range<K>): IterableIterator<[K, V]>;
41
+ /**
42
+ * Iterates over the map's values in the key's natural order
43
+ * @param range - The range of keys to iterate over
44
+ */
45
+ values(range?: Range<K>): IterableIterator<V>;
46
+ /**
47
+ * Iterates over the map's keys in the key's natural order
48
+ * @param range - The range of keys to iterate over
49
+ */
50
+ keys(range?: Range<K>): IterableIterator<K>;
51
+ /**
52
+ * Clears the map.
53
+ */
54
+ clear(): Promise<void>;
55
+ }
56
+ export interface AztecMapWithSize<K extends Key, V> extends AztecMap<K, V> {
57
+ /**
58
+ * Gets the size of the map.
59
+ * @returns The size of the map
60
+ */
61
+ size(): number;
62
+ }
63
+ /**
64
+ * A map backed by a persistent store that can have multiple values for a single key.
65
+ */
66
+ export interface AztecMultiMap<K extends Key, V> extends AztecMap<K, V> {
67
+ /**
68
+ * Gets all the values at the given key.
69
+ * @param key - The key to get the values from
70
+ */
71
+ getValues(key: K): IterableIterator<V>;
72
+ /**
73
+ * Deletes a specific value at the given key.
74
+ * @param key - The key to delete the value at
75
+ * @param val - The value to delete
76
+ */
77
+ deleteValue(key: K, val: V): Promise<void>;
78
+ }
79
+ export interface AztecMultiMapWithSize<K extends Key, V> extends AztecMultiMap<K, V> {
80
+ /**
81
+ * Gets the size of the map.
82
+ * @returns The size of the map
83
+ */
84
+ size(): number;
85
+ }
86
+ /**
87
+ * A map backed by a persistent store.
88
+ */
89
+ export interface AztecAsyncMap<K extends Key, V> extends AztecBaseMap<K, V> {
90
+ /**
91
+ * Gets the value at the given key.
92
+ * @param key - The key to get the value from
93
+ */
94
+ getAsync(key: K): Promise<V | undefined>;
95
+ /**
96
+ * Checks if a key exists in the map.
97
+ * @param key - The key to check
98
+ * @returns True if the key exists, false otherwise
99
+ */
100
+ hasAsync(key: K): Promise<boolean>;
101
+ /**
102
+ * Iterates over the map's key-value entries in the key's natural order
103
+ * @param range - The range of keys to iterate over
104
+ */
105
+ entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
106
+ /**
107
+ * Iterates over the map's values in the key's natural order
108
+ * @param range - The range of keys to iterate over
109
+ */
110
+ valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
111
+ /**
112
+ * Iterates over the map's keys in the key's natural order
113
+ * @param range - The range of keys to iterate over
114
+ */
115
+ keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
116
+ }
117
+ /**
118
+ * A map backed by a persistent store that can have multiple values for a single key.
119
+ */
120
+ export interface AztecAsyncMultiMap<K extends Key, V> extends AztecAsyncMap<K, V> {
121
+ /**
122
+ * Gets all the values at the given key.
123
+ * @param key - The key to get the values from
124
+ */
125
+ getValuesAsync(key: K): AsyncIterableIterator<V>;
126
+ /**
127
+ * Deletes a specific value at the given key.
128
+ * @param key - The key to delete the value at
129
+ * @param val - The value to delete
130
+ */
131
+ deleteValue(key: K, val: V): Promise<void>;
132
+ }
133
+ export {};
134
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/interfaces/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,UAAU,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;IACrC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AACD,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE3B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpD;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAE9C;;;OAGG;IACH,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAE5C;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE;;;OAGG;IACH,IAAI,IAAI,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAEvC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAClF;;;OAGG;IACH,IAAI,IAAI,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAEzC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9D;;;OAGG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAExD;;;OAGG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAEjD;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C"}
@@ -1,3 +1,2 @@
1
- /**
2
- * A map backed by a persistent store that can have multiple values for a single key.
3
- */ export { };
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,3 @@
1
+ import { type AztecAsyncKVStore, type AztecKVStore } from './store.js';
2
+ export declare function describeAztecMap(testName: string, getStore: () => AztecKVStore | Promise<AztecAsyncKVStore>, forceAsync?: boolean): void;
3
+ //# sourceMappingURL=map_test_suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/map_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAkI5B"}
@@ -2,150 +2,105 @@ import { toArray } from '@aztec/foundation/iterable';
2
2
  import { expect } from 'chai';
3
3
  import { isSyncStore } from './utils.js';
4
4
  export function describeAztecMap(testName, getStore, forceAsync = false) {
5
- describe(testName, ()=>{
5
+ describe(testName, () => {
6
6
  let store;
7
7
  let map;
8
- beforeEach(async ()=>{
8
+ beforeEach(async () => {
9
9
  store = await getStore();
10
10
  map = store.openMultiMap('test');
11
11
  });
12
- afterEach(async ()=>{
12
+ afterEach(async () => {
13
13
  await store.delete();
14
14
  });
15
15
  async function get(key, sut = map) {
16
- return isSyncStore(store) && !forceAsync ? sut.get(key) : await sut.getAsync(key);
16
+ return isSyncStore(store) && !forceAsync
17
+ ? sut.get(key)
18
+ : await sut.getAsync(key);
17
19
  }
18
20
  async function entries() {
19
- return isSyncStore(store) && !forceAsync ? await toArray(map.entries()) : await toArray(map.entriesAsync());
21
+ return isSyncStore(store) && !forceAsync
22
+ ? await toArray(map.entries())
23
+ : await toArray(map.entriesAsync());
20
24
  }
21
25
  async function values() {
22
- return isSyncStore(store) && !forceAsync ? await toArray(map.values()) : await toArray(map.valuesAsync());
26
+ return isSyncStore(store) && !forceAsync
27
+ ? await toArray(map.values())
28
+ : await toArray(map.valuesAsync());
23
29
  }
24
30
  async function keys(range, sut = map) {
25
- return isSyncStore(store) && !forceAsync ? await toArray(sut.keys(range)) : await toArray(sut.keysAsync(range));
31
+ return isSyncStore(store) && !forceAsync
32
+ ? await toArray(sut.keys(range))
33
+ : await toArray(sut.keysAsync(range));
26
34
  }
27
35
  async function getValues(key) {
28
- return isSyncStore(store) && !forceAsync ? await toArray(map.getValues(key)) : await toArray(map.getValuesAsync(key));
36
+ return isSyncStore(store) && !forceAsync
37
+ ? await toArray(map.getValues(key))
38
+ : await toArray(map.getValuesAsync(key));
29
39
  }
30
- it('should be able to set and get values', async ()=>{
40
+ it('should be able to set and get values', async () => {
31
41
  await map.set('foo', 'bar');
32
42
  await map.set('baz', 'qux');
33
43
  expect(await get('foo')).to.equal('bar');
34
44
  expect(await get('baz')).to.equal('qux');
35
45
  expect(await get('quux')).to.equal(undefined);
36
46
  });
37
- it('should be able to set values if they do not exist', async ()=>{
47
+ it('should be able to set values if they do not exist', async () => {
38
48
  expect(await map.setIfNotExists('foo', 'bar')).to.equal(true);
39
49
  expect(await map.setIfNotExists('foo', 'baz')).to.equal(false);
40
50
  expect(await get('foo')).to.equal('bar');
41
51
  });
42
- it('should be able to delete values', async ()=>{
52
+ it('should be able to delete values', async () => {
43
53
  await map.set('foo', 'bar');
44
54
  await map.set('baz', 'qux');
45
55
  await map.delete('foo');
46
56
  expect(await get('foo')).to.equal(undefined);
47
57
  expect(await get('baz')).to.equal('qux');
48
58
  });
49
- it('should be able to iterate over entries when there are no keys', async ()=>{
59
+ it('should be able to iterate over entries when there are no keys', async () => {
50
60
  expect(await entries()).to.deep.equal([]);
51
61
  });
52
- it('should be able to iterate over entries', async ()=>{
62
+ it('should be able to iterate over entries', async () => {
53
63
  await map.set('foo', 'bar');
54
64
  await map.set('baz', 'qux');
55
65
  expect(await entries()).to.deep.equal([
56
- [
57
- 'baz',
58
- 'qux'
59
- ],
60
- [
61
- 'foo',
62
- 'bar'
63
- ]
66
+ ['baz', 'qux'],
67
+ ['foo', 'bar'],
64
68
  ]);
65
69
  });
66
- it('should be able to iterate over values', async ()=>{
70
+ it('should be able to iterate over values', async () => {
67
71
  await map.set('foo', 'bar');
68
72
  await map.set('baz', 'quux');
69
- expect(await values()).to.deep.equal([
70
- 'quux',
71
- 'bar'
72
- ]);
73
+ expect(await values()).to.deep.equal(['quux', 'bar']);
73
74
  });
74
- it('should be able to iterate over keys', async ()=>{
75
+ it('should be able to iterate over keys', async () => {
75
76
  await map.set('foo', 'bar');
76
77
  await map.set('baz', 'qux');
77
- expect(await keys()).to.deep.equal([
78
- 'baz',
79
- 'foo'
80
- ]);
78
+ expect(await keys()).to.deep.equal(['baz', 'foo']);
81
79
  });
82
- it('should be able to get multiple values for a single key', async ()=>{
80
+ it('should be able to get multiple values for a single key', async () => {
83
81
  await map.set('foo', 'bar');
84
82
  await map.set('foo', 'baz');
85
- expect(await getValues('foo')).to.deep.equal([
86
- 'bar',
87
- 'baz'
88
- ]);
83
+ expect(await getValues('foo')).to.deep.equal(['bar', 'baz']);
89
84
  });
90
- it('should be able to delete individual values for a single key', async ()=>{
85
+ it('should be able to delete individual values for a single key', async () => {
91
86
  await map.set('foo', 'bar');
92
87
  await map.set('foo', 'baz');
93
88
  await map.deleteValue('foo', 'bar');
94
- expect(await getValues('foo')).to.deep.equal([
95
- 'baz'
96
- ]);
89
+ expect(await getValues('foo')).to.deep.equal(['baz']);
97
90
  });
98
- it('supports range queries', async ()=>{
91
+ it('supports range queries', async () => {
99
92
  await map.set('a', 'a');
100
93
  await map.set('b', 'b');
101
94
  await map.set('c', 'c');
102
95
  await map.set('d', 'd');
103
- expect(await keys({
104
- start: 'b',
105
- end: 'c'
106
- })).to.deep.equal([
107
- 'b'
108
- ]);
109
- expect(await keys({
110
- start: 'b'
111
- })).to.deep.equal([
112
- 'b',
113
- 'c',
114
- 'd'
115
- ]);
116
- expect(await keys({
117
- end: 'c'
118
- })).to.deep.equal([
119
- 'a',
120
- 'b'
121
- ]);
122
- expect(await keys({
123
- start: 'b',
124
- end: 'c',
125
- reverse: true
126
- })).to.deep.equal([
127
- 'c'
128
- ]);
129
- expect(await keys({
130
- start: 'b',
131
- limit: 1
132
- })).to.deep.equal([
133
- 'b'
134
- ]);
135
- expect(await keys({
136
- start: 'b',
137
- reverse: true
138
- })).to.deep.equal([
139
- 'd',
140
- 'c'
141
- ]);
142
- expect(await keys({
143
- end: 'b',
144
- reverse: true
145
- })).to.deep.equal([
146
- 'b',
147
- 'a'
148
- ]);
96
+ expect(await keys({ start: 'b', end: 'c' })).to.deep.equal(['b']);
97
+ expect(await keys({ start: 'b' })).to.deep.equal(['b', 'c', 'd']);
98
+ expect(await keys({ end: 'c' })).to.deep.equal(['a', 'b']);
99
+ expect(await keys({ start: 'b', end: 'c', reverse: true })).to.deep.equal(['c']);
100
+ expect(await keys({ start: 'b', limit: 1 })).to.deep.equal(['b']);
101
+ expect(await keys({ start: 'b', reverse: true })).to.deep.equal(['d', 'c']);
102
+ expect(await keys({ end: 'b', reverse: true })).to.deep.equal(['b', 'a']);
149
103
  });
150
104
  });
151
105
  }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwX3Rlc3Rfc3VpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9tYXBfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFBZ0IsRUFDaEIsUUFBeUQsRUFDekQsYUFBc0IsS0FBSztJQUUzQixRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN0QixJQUFJLEtBQXVDLENBQUM7UUFDNUMsSUFBSSxHQUFpRSxDQUFDO1FBRXRFLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQixLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUN6QixHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBaUIsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQVEsRUFBRSxNQUFvRCxHQUFHO1lBQ2xGLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDdEMsQ0FBQyxDQUFFLEdBQStCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDM0MsQ0FBQyxDQUFDLE1BQU8sR0FBb0MsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELEtBQUssVUFBVSxPQUFPO1lBQ3BCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFB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QUFDLENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
@@ -0,0 +1,44 @@
1
+ import { type Key, type Range } from './common.js';
2
+ /**
3
+ * A set backed by a persistent store.
4
+ */
5
+ interface AztecBaseSet<K extends Key> {
6
+ /**
7
+ * Adds the given value.
8
+ * @param key - The key to add.
9
+ */
10
+ add(key: K): Promise<void>;
11
+ /**
12
+ * Deletes the given key.
13
+ * @param key - The key to delete.
14
+ */
15
+ delete(key: K): Promise<void>;
16
+ }
17
+ export interface AztecSet<K extends Key> extends AztecBaseSet<K> {
18
+ /**
19
+ * Checks if a key exists in the set.
20
+ * @param key - The key to check
21
+ * @returns True if the key exists, false otherwise
22
+ */
23
+ has(key: K): boolean;
24
+ /**
25
+ * Iterates over the sets's keys entries in the key's natural order
26
+ * @param range - The range of keys to iterate over
27
+ */
28
+ entries(range?: Range<K>): IterableIterator<K>;
29
+ }
30
+ export interface AztecAsyncSet<K extends Key> extends AztecBaseSet<K> {
31
+ /**
32
+ * Checks if a key exists in the set.
33
+ * @param key - The key to check
34
+ * @returns True if the key exists, false otherwise
35
+ */
36
+ hasAsync(key: K): Promise<boolean>;
37
+ /**
38
+ * Iterates over the sets's keys entries in the key's natural order
39
+ * @param range - The range of keys to iterate over
40
+ */
41
+ entriesAsync(range?: Range<K>): AsyncIterableIterator<K>;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/interfaces/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,UAAU,YAAY,CAAC,CAAC,SAAS,GAAG;IAClC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IAC9D;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,GAAG,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACnE;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;;OAGG;IACH,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAC1D"}
@@ -1 +1,2 @@
1
- export { };
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyZmFjZXMvc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,3 @@
1
+ import { type AztecAsyncKVStore, type AztecKVStore } from './store.js';
2
+ export declare function describeAztecSet(testName: string, getStore: () => AztecKVStore | Promise<AztecAsyncKVStore>, forceAsync?: boolean): void;
3
+ //# sourceMappingURL=set_test_suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set_test_suite.d.ts","sourceRoot":"","sources":["../../src/interfaces/set_test_suite.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,EACzD,UAAU,GAAE,OAAe,QAoE5B"}
@@ -2,95 +2,58 @@ import { toArray } from '@aztec/foundation/iterable';
2
2
  import { expect } from 'chai';
3
3
  import { isSyncStore } from './utils.js';
4
4
  export function describeAztecSet(testName, getStore, forceAsync = false) {
5
- describe(testName, ()=>{
5
+ describe(testName, () => {
6
6
  let store;
7
7
  let set;
8
- beforeEach(async ()=>{
8
+ beforeEach(async () => {
9
9
  store = await getStore();
10
10
  set = store.openSet('test');
11
11
  });
12
- afterEach(async ()=>{
12
+ afterEach(async () => {
13
13
  await store.delete();
14
14
  });
15
15
  async function has(key) {
16
- return isSyncStore(store) && !forceAsync ? set.has(key) : await set.hasAsync(key);
16
+ return isSyncStore(store) && !forceAsync
17
+ ? set.has(key)
18
+ : await set.hasAsync(key);
17
19
  }
18
20
  async function entries(range) {
19
- return isSyncStore(store) && !forceAsync ? await toArray(set.entries(range)) : await toArray(set.entriesAsync(range));
21
+ return isSyncStore(store) && !forceAsync
22
+ ? await toArray(set.entries(range))
23
+ : await toArray(set.entriesAsync(range));
20
24
  }
21
- it('should be able to set and get values', async ()=>{
25
+ it('should be able to set and get values', async () => {
22
26
  await set.add('foo');
23
27
  await set.add('baz');
24
28
  expect(await has('foo')).to.equal(true);
25
29
  expect(await has('baz')).to.equal(true);
26
30
  expect(await has('bar')).to.equal(false);
27
31
  });
28
- it('should be able to delete values', async ()=>{
32
+ it('should be able to delete values', async () => {
29
33
  await set.add('foo');
30
34
  await set.add('baz');
31
35
  await set.delete('foo');
32
36
  expect(await has('foo')).to.equal(false);
33
37
  expect(await has('baz')).to.equal(true);
34
38
  });
35
- it('should be able to iterate over entries', async ()=>{
39
+ it('should be able to iterate over entries', async () => {
36
40
  await set.add('baz');
37
41
  await set.add('foo');
38
- expect(await entries()).to.deep.equal([
39
- 'baz',
40
- 'foo'
41
- ]);
42
+ expect(await entries()).to.deep.equal(['baz', 'foo']);
42
43
  });
43
- it('supports range queries', async ()=>{
44
+ it('supports range queries', async () => {
44
45
  await set.add('a');
45
46
  await set.add('b');
46
47
  await set.add('c');
47
48
  await set.add('d');
48
- expect(await entries({
49
- start: 'b',
50
- end: 'c'
51
- })).to.deep.equal([
52
- 'b'
53
- ]);
54
- expect(await entries({
55
- start: 'b'
56
- })).to.deep.equal([
57
- 'b',
58
- 'c',
59
- 'd'
60
- ]);
61
- expect(await entries({
62
- end: 'c'
63
- })).to.deep.equal([
64
- 'a',
65
- 'b'
66
- ]);
67
- expect(await entries({
68
- start: 'b',
69
- end: 'c',
70
- reverse: true
71
- })).to.deep.equal([
72
- 'c'
73
- ]);
74
- expect(await entries({
75
- start: 'b',
76
- limit: 1
77
- })).to.deep.equal([
78
- 'b'
79
- ]);
80
- expect(await entries({
81
- start: 'b',
82
- reverse: true
83
- })).to.deep.equal([
84
- 'd',
85
- 'c'
86
- ]);
87
- expect(await entries({
88
- end: 'b',
89
- reverse: true
90
- })).to.deep.equal([
91
- 'b',
92
- 'a'
93
- ]);
49
+ expect(await entries({ start: 'b', end: 'c' })).to.deep.equal(['b']);
50
+ expect(await entries({ start: 'b' })).to.deep.equal(['b', 'c', 'd']);
51
+ expect(await entries({ end: 'c' })).to.deep.equal(['a', 'b']);
52
+ expect(await entries({ start: 'b', end: 'c', reverse: true })).to.deep.equal(['c']);
53
+ expect(await entries({ start: 'b', limit: 1 })).to.deep.equal(['b']);
54
+ expect(await entries({ start: 'b', reverse: true })).to.deep.equal(['d', 'c']);
55
+ expect(await entries({ end: 'b', reverse: true })).to.deep.equal(['b', 'a']);
94
56
  });
95
57
  });
96
58
  }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0X3Rlc3Rfc3VpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9zZXRfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFBZ0IsRUFDaEIsUUFBeUQsRUFDekQsYUFBc0IsS0FBSztJQUUzQixRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN0QixJQUFJLEtBQXVDLENBQUM7UUFDNUMsSUFBSSxHQUE2QyxDQUFDO1FBRWxELFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQixLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztZQUN6QixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBUyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNuQixNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssVUFBVSxHQUFHLENBQUMsR0FBVztZQUM1QixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQ3RDLENBQUMsQ0FBRSxHQUF3QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxNQUFPLEdBQTZCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtCO1lBQ3ZDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFD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QUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRixNQUFNLENBQUMsTUFBTSxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=