@aztec/kv-store 0.73.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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 (124) hide show
  1. package/dest/config.js +5 -7
  2. package/dest/indexeddb/array.js +44 -36
  3. package/dest/indexeddb/index.js +1 -4
  4. package/dest/indexeddb/map.js +72 -43
  5. package/dest/indexeddb/set.js +3 -4
  6. package/dest/indexeddb/singleton.js +17 -22
  7. package/dest/indexeddb/store.js +97 -93
  8. package/dest/interfaces/array.js +3 -2
  9. package/dest/interfaces/array_test_suite.js +29 -25
  10. package/dest/interfaces/common.js +3 -2
  11. package/dest/interfaces/counter.js +1 -2
  12. package/dest/interfaces/index.js +0 -1
  13. package/dest/interfaces/map.js +3 -2
  14. package/dest/interfaces/map_test_suite.js +87 -42
  15. package/dest/interfaces/set.js +1 -2
  16. package/dest/interfaces/set_test_suite.js +59 -22
  17. package/dest/interfaces/singleton.js +4 -2
  18. package/dest/interfaces/singleton_test_suite.js +7 -10
  19. package/dest/interfaces/store.js +1 -2
  20. package/dest/interfaces/store_test_suite.js +6 -9
  21. package/dest/interfaces/utils.js +12 -15
  22. package/dest/lmdb/array.js +46 -41
  23. package/dest/lmdb/counter.js +18 -24
  24. package/dest/lmdb/index.js +2 -6
  25. package/dest/lmdb/map.js +90 -68
  26. package/dest/lmdb/set.js +4 -5
  27. package/dest/lmdb/singleton.js +13 -14
  28. package/dest/lmdb/store.js +124 -134
  29. package/dest/lmdb-v2/factory.js +25 -17
  30. package/dest/lmdb-v2/index.js +0 -1
  31. package/dest/lmdb-v2/map.js +82 -85
  32. package/dest/lmdb-v2/message.js +6 -7
  33. package/dest/lmdb-v2/read_transaction.js +65 -53
  34. package/dest/lmdb-v2/singleton.js +7 -5
  35. package/dest/lmdb-v2/store.js +52 -29
  36. package/dest/lmdb-v2/utils.js +30 -30
  37. package/dest/lmdb-v2/write_transaction.js +130 -110
  38. package/dest/stores/index.js +0 -1
  39. package/dest/stores/l2_tips_store.js +26 -12
  40. package/dest/utils.js +3 -7
  41. package/package.json +6 -6
  42. package/src/interfaces/index.ts +1 -1
  43. package/src/lmdb-v2/factory.ts +10 -0
  44. package/src/lmdb-v2/store.ts +29 -3
  45. package/dest/config.d.ts +0 -17
  46. package/dest/config.d.ts.map +0 -1
  47. package/dest/indexeddb/array.d.ts +0 -21
  48. package/dest/indexeddb/array.d.ts.map +0 -1
  49. package/dest/indexeddb/index.d.ts +0 -7
  50. package/dest/indexeddb/index.d.ts.map +0 -1
  51. package/dest/indexeddb/map.d.ts +0 -26
  52. package/dest/indexeddb/map.d.ts.map +0 -1
  53. package/dest/indexeddb/set.d.ts +0 -17
  54. package/dest/indexeddb/set.d.ts.map +0 -1
  55. package/dest/indexeddb/singleton.d.ts +0 -16
  56. package/dest/indexeddb/singleton.d.ts.map +0 -1
  57. package/dest/indexeddb/store.d.ts +0 -97
  58. package/dest/indexeddb/store.d.ts.map +0 -1
  59. package/dest/interfaces/array.d.ts +0 -80
  60. package/dest/interfaces/array.d.ts.map +0 -1
  61. package/dest/interfaces/array_test_suite.d.ts +0 -3
  62. package/dest/interfaces/array_test_suite.d.ts.map +0 -1
  63. package/dest/interfaces/common.d.ts +0 -23
  64. package/dest/interfaces/common.d.ts.map +0 -1
  65. package/dest/interfaces/counter.d.ts +0 -59
  66. package/dest/interfaces/counter.d.ts.map +0 -1
  67. package/dest/interfaces/index.d.ts +0 -8
  68. package/dest/interfaces/index.d.ts.map +0 -1
  69. package/dest/interfaces/map.d.ts +0 -134
  70. package/dest/interfaces/map.d.ts.map +0 -1
  71. package/dest/interfaces/map_test_suite.d.ts +0 -3
  72. package/dest/interfaces/map_test_suite.d.ts.map +0 -1
  73. package/dest/interfaces/set.d.ts +0 -44
  74. package/dest/interfaces/set.d.ts.map +0 -1
  75. package/dest/interfaces/set_test_suite.d.ts +0 -3
  76. package/dest/interfaces/set_test_suite.d.ts.map +0 -1
  77. package/dest/interfaces/singleton.d.ts +0 -29
  78. package/dest/interfaces/singleton.d.ts.map +0 -1
  79. package/dest/interfaces/singleton_test_suite.d.ts +0 -3
  80. package/dest/interfaces/singleton_test_suite.d.ts.map +0 -1
  81. package/dest/interfaces/store.d.ts +0 -145
  82. package/dest/interfaces/store.d.ts.map +0 -1
  83. package/dest/interfaces/store_test_suite.d.ts +0 -3
  84. package/dest/interfaces/store_test_suite.d.ts.map +0 -1
  85. package/dest/interfaces/utils.d.ts +0 -16
  86. package/dest/interfaces/utils.d.ts.map +0 -1
  87. package/dest/lmdb/array.d.ts +0 -23
  88. package/dest/lmdb/array.d.ts.map +0 -1
  89. package/dest/lmdb/counter.d.ts +0 -19
  90. package/dest/lmdb/counter.d.ts.map +0 -1
  91. package/dest/lmdb/index.d.ts +0 -12
  92. package/dest/lmdb/index.d.ts.map +0 -1
  93. package/dest/lmdb/map.d.ts +0 -52
  94. package/dest/lmdb/map.d.ts.map +0 -1
  95. package/dest/lmdb/set.d.ts +0 -18
  96. package/dest/lmdb/set.d.ts.map +0 -1
  97. package/dest/lmdb/singleton.d.ts +0 -14
  98. package/dest/lmdb/singleton.d.ts.map +0 -1
  99. package/dest/lmdb/store.d.ts +0 -110
  100. package/dest/lmdb/store.d.ts.map +0 -1
  101. package/dest/lmdb-v2/factory.d.ts +0 -7
  102. package/dest/lmdb-v2/factory.d.ts.map +0 -1
  103. package/dest/lmdb-v2/index.d.ts +0 -3
  104. package/dest/lmdb-v2/index.d.ts.map +0 -1
  105. package/dest/lmdb-v2/map.d.ts +0 -86
  106. package/dest/lmdb-v2/map.d.ts.map +0 -1
  107. package/dest/lmdb-v2/message.d.ts +0 -112
  108. package/dest/lmdb-v2/message.d.ts.map +0 -1
  109. package/dest/lmdb-v2/read_transaction.d.ts +0 -14
  110. package/dest/lmdb-v2/read_transaction.d.ts.map +0 -1
  111. package/dest/lmdb-v2/singleton.d.ts +0 -12
  112. package/dest/lmdb-v2/singleton.d.ts.map +0 -1
  113. package/dest/lmdb-v2/store.d.ts +0 -41
  114. package/dest/lmdb-v2/store.d.ts.map +0 -1
  115. package/dest/lmdb-v2/utils.d.ts +0 -19
  116. package/dest/lmdb-v2/utils.d.ts.map +0 -1
  117. package/dest/lmdb-v2/write_transaction.d.ts +0 -19
  118. package/dest/lmdb-v2/write_transaction.d.ts.map +0 -1
  119. package/dest/stores/index.d.ts +0 -2
  120. package/dest/stores/index.d.ts.map +0 -1
  121. package/dest/stores/l2_tips_store.d.ts +0 -13
  122. package/dest/stores/l2_tips_store.d.ts.map +0 -1
  123. package/dest/utils.d.ts +0 -12
  124. package/dest/utils.d.ts.map +0 -1
@@ -1,30 +1,30 @@
1
- var _WriteTransaction_instances, _WriteTransaction_iterate;
2
- import { __classPrivateFieldGet } from "tslib";
3
1
  import { Database, LMDBMessageType } from './message.js';
4
2
  import { ReadTransaction } from './read_transaction.js';
5
- import { dedupeSortedArray, findInSortedArray, findIndexInSortedArray, insertIntoSortedArray, keyCmp, merge, removeAnyOf, removeFromSortedArray, singleKeyCmp, } from './utils.js';
3
+ import { dedupeSortedArray, findInSortedArray, findIndexInSortedArray, insertIntoSortedArray, keyCmp, merge, removeAnyOf, removeFromSortedArray, singleKeyCmp } from './utils.js';
6
4
  export class WriteTransaction extends ReadTransaction {
7
- constructor() {
8
- super(...arguments);
9
- _WriteTransaction_instances.add(this);
10
- // exposed for tests
11
- this.dataBatch = {
12
- addEntries: [],
13
- removeEntries: [],
14
- };
15
- this.indexBatch = {
16
- addEntries: [],
17
- removeEntries: [],
18
- };
19
- }
5
+ // exposed for tests
6
+ dataBatch = {
7
+ addEntries: [],
8
+ removeEntries: []
9
+ };
10
+ indexBatch = {
11
+ addEntries: [],
12
+ removeEntries: []
13
+ };
20
14
  set(key, value) {
21
15
  this.assertIsOpen();
22
16
  const addEntry = findInSortedArray(this.dataBatch.addEntries, key, singleKeyCmp);
23
17
  if (!addEntry) {
24
- insertIntoSortedArray(this.dataBatch.addEntries, [key, [value]], keyCmp);
25
- }
26
- else {
27
- addEntry[1] = [value];
18
+ insertIntoSortedArray(this.dataBatch.addEntries, [
19
+ key,
20
+ [
21
+ value
22
+ ]
23
+ ], keyCmp);
24
+ } else {
25
+ addEntry[1] = [
26
+ value
27
+ ];
28
28
  }
29
29
  const removeEntryIndex = findIndexInSortedArray(this.dataBatch.removeEntries, key, singleKeyCmp);
30
30
  if (removeEntryIndex > -1) {
@@ -35,7 +35,10 @@ export class WriteTransaction extends ReadTransaction {
35
35
  remove(key) {
36
36
  const removeEntryIndex = findIndexInSortedArray(this.dataBatch.removeEntries, key, singleKeyCmp);
37
37
  if (removeEntryIndex === -1) {
38
- this.dataBatch.removeEntries.push([key, null]);
38
+ this.dataBatch.removeEntries.push([
39
+ key,
40
+ null
41
+ ]);
39
42
  }
40
43
  const addEntryIndex = findIndexInSortedArray(this.dataBatch.addEntries, key, singleKeyCmp);
41
44
  if (addEntryIndex > -1) {
@@ -73,9 +76,11 @@ export class WriteTransaction extends ReadTransaction {
73
76
  if (addEntries) {
74
77
  merge(addEntries[1], values, Buffer.compare);
75
78
  dedupeSortedArray(addEntries[1], Buffer.compare);
76
- }
77
- else {
78
- insertIntoSortedArray(this.indexBatch.addEntries, [key, values], keyCmp);
79
+ } else {
80
+ insertIntoSortedArray(this.indexBatch.addEntries, [
81
+ key,
82
+ values
83
+ ], keyCmp);
79
84
  }
80
85
  return Promise.resolve();
81
86
  }
@@ -90,9 +95,11 @@ export class WriteTransaction extends ReadTransaction {
90
95
  }
91
96
  if (removeEntries) {
92
97
  removeEntries[1] = null;
93
- }
94
- else {
95
- insertIntoSortedArray(this.indexBatch.removeEntries, [key, null], keyCmp);
98
+ } else {
99
+ insertIntoSortedArray(this.indexBatch.removeEntries, [
100
+ key,
101
+ null
102
+ ], keyCmp);
96
103
  }
97
104
  return Promise.resolve();
98
105
  }
@@ -103,12 +110,14 @@ export class WriteTransaction extends ReadTransaction {
103
110
  }
104
111
  }
105
112
  if (removeEntries) {
106
- removeEntries[1] ?? (removeEntries[1] = []);
113
+ removeEntries[1] ??= [];
107
114
  merge(removeEntries[1], values, Buffer.compare);
108
115
  dedupeSortedArray(removeEntries[1], Buffer.compare);
109
- }
110
- else {
111
- insertIntoSortedArray(this.indexBatch.removeEntries, [key, values], keyCmp);
116
+ } else {
117
+ insertIntoSortedArray(this.indexBatch.removeEntries, [
118
+ key,
119
+ values
120
+ ], keyCmp);
112
121
  }
113
122
  return Promise.resolve();
114
123
  }
@@ -130,10 +139,10 @@ export class WriteTransaction extends ReadTransaction {
130
139
  return results;
131
140
  }
132
141
  async *iterate(startKey, endKey, reverse, limit) {
133
- yield* __classPrivateFieldGet(this, _WriteTransaction_instances, "m", _WriteTransaction_iterate).call(this, super.iterate(startKey, endKey, reverse), this.dataBatch, startKey, endKey, reverse, limit, (committed, toAdd) => (toAdd.length > 0 ? toAdd[0] : committed), vals => vals[0]);
142
+ yield* this.#iterate(super.iterate(startKey, endKey, reverse), this.dataBatch, startKey, endKey, reverse, limit, (committed, toAdd)=>toAdd.length > 0 ? toAdd[0] : committed, (vals)=>vals[0]);
134
143
  }
135
144
  async *iterateIndex(startKey, endKey, reverse, limit) {
136
- yield* __classPrivateFieldGet(this, _WriteTransaction_instances, "m", _WriteTransaction_iterate).call(this, super.iterateIndex(startKey, endKey, reverse), this.indexBatch, startKey, endKey, reverse, limit, (committed, toAdd, toRemove) => {
145
+ yield* this.#iterate(super.iterateIndex(startKey, endKey, reverse), this.indexBatch, startKey, endKey, reverse, limit, (committed, toAdd, toRemove)=>{
137
146
  if (toAdd.length > 0) {
138
147
  merge(committed, toAdd, Buffer.compare);
139
148
  dedupeSortedArray(committed, Buffer.compare);
@@ -142,93 +151,104 @@ export class WriteTransaction extends ReadTransaction {
142
151
  removeAnyOf(committed, toRemove, Buffer.compare);
143
152
  }
144
153
  return committed;
145
- }, vals => vals);
154
+ }, (vals)=>vals);
146
155
  }
147
- async commit() {
156
+ async *#iterate(iterator, batch, startKey, endKey, reverse = false, limit, merge, map) {
148
157
  this.assertIsOpen();
149
- this.close();
150
- await this.channel.sendMessage(LMDBMessageType.BATCH, {
151
- batches: new Map([
152
- [Database.DATA, this.dataBatch],
153
- [Database.INDEX, this.indexBatch],
154
- ]),
155
- });
156
- }
157
- }
158
- _WriteTransaction_instances = new WeakSet(), _WriteTransaction_iterate = async function* _WriteTransaction_iterate(iterator, batch, startKey, endKey, reverse = false, limit, merge, map) {
159
- this.assertIsOpen();
160
- // make a copy of this in case we're running in reverse
161
- const uncommittedEntries = [...batch.addEntries];
162
- // used to check we're in the right order when comparing between a key and uncommittedEntries
163
- let cmpDirection = -1;
164
- if (reverse) {
165
- cmpDirection = 1;
166
- uncommittedEntries.reverse();
167
- }
168
- let uncommittedEntriesIdx = 0;
169
- while (uncommittedEntriesIdx < uncommittedEntries.length) {
170
- const entry = uncommittedEntries[uncommittedEntriesIdx];
171
- // go to the first key in our cache that would be captured by the iterator
172
- if (Buffer.compare(entry[0], startKey) !== cmpDirection) {
173
- break;
174
- }
175
- uncommittedEntriesIdx++;
176
- }
177
- let count = 0;
178
- // helper to early return if we've reached our limit
179
- const checkLimit = typeof limit === 'number' ? () => count < limit : () => true;
180
- for await (const [key, values] of iterator) {
181
- // yield every key that we have cached that's captured by the iterator
182
- while (uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()) {
158
+ // make a copy of this in case we're running in reverse
159
+ const uncommittedEntries = [
160
+ ...batch.addEntries
161
+ ];
162
+ // used to check we're in the right order when comparing between a key and uncommittedEntries
163
+ let cmpDirection = -1;
164
+ if (reverse) {
165
+ cmpDirection = 1;
166
+ uncommittedEntries.reverse();
167
+ }
168
+ let uncommittedEntriesIdx = 0;
169
+ while(uncommittedEntriesIdx < uncommittedEntries.length){
183
170
  const entry = uncommittedEntries[uncommittedEntriesIdx];
184
- if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
171
+ // go to the first key in our cache that would be captured by the iterator
172
+ if (Buffer.compare(entry[0], startKey) !== cmpDirection) {
185
173
  break;
186
174
  }
187
- if (Buffer.compare(entry[0], key) === cmpDirection) {
188
- count++;
189
- yield [entry[0], map(entry[1])];
175
+ uncommittedEntriesIdx++;
176
+ }
177
+ let count = 0;
178
+ // helper to early return if we've reached our limit
179
+ const checkLimit = typeof limit === 'number' ? ()=>count < limit : ()=>true;
180
+ for await (const [key, values] of iterator){
181
+ // yield every key that we have cached that's captured by the iterator
182
+ while(uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()){
183
+ const entry = uncommittedEntries[uncommittedEntriesIdx];
184
+ if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
185
+ break;
186
+ }
187
+ if (Buffer.compare(entry[0], key) === cmpDirection) {
188
+ count++;
189
+ yield [
190
+ entry[0],
191
+ map(entry[1])
192
+ ];
193
+ } else {
194
+ break;
195
+ }
196
+ uncommittedEntriesIdx++;
190
197
  }
191
- else {
198
+ if (!checkLimit()) {
192
199
  break;
193
200
  }
194
- uncommittedEntriesIdx++;
195
- }
196
- if (!checkLimit()) {
197
- // we reached the imposed `limit`
198
- break;
199
- }
200
- const toRemove = findInSortedArray(batch.removeEntries, key, singleKeyCmp);
201
- // at this point we've either exhausted all uncommitted entries,
202
- // we reached a key strictly greater/smaller than `key`
203
- // or we found the key itself
204
- // check if it's the key and use the uncommitted value
205
- let toAdd = [];
206
- if (uncommittedEntriesIdx < uncommittedEntries.length &&
207
- Buffer.compare(uncommittedEntries[uncommittedEntriesIdx][0], key) === 0) {
208
- toAdd = uncommittedEntries[uncommittedEntriesIdx][1];
209
- uncommittedEntriesIdx++;
210
- }
211
- if (toRemove && !toRemove[1]) {
212
- // we were told to delete this key entirely
213
- continue;
201
+ const toRemove = findInSortedArray(batch.removeEntries, key, singleKeyCmp);
202
+ // at this point we've either exhausted all uncommitted entries,
203
+ // we reached a key strictly greater/smaller than `key`
204
+ // or we found the key itself
205
+ // check if it's the key and use the uncommitted value
206
+ let toAdd = [];
207
+ if (uncommittedEntriesIdx < uncommittedEntries.length && Buffer.compare(uncommittedEntries[uncommittedEntriesIdx][0], key) === 0) {
208
+ toAdd = uncommittedEntries[uncommittedEntriesIdx][1];
209
+ uncommittedEntriesIdx++;
210
+ }
211
+ if (toRemove && !toRemove[1]) {
212
+ continue;
213
+ } else {
214
+ const mergedValues = merge(values, toAdd, toRemove?.[1] ?? []);
215
+ if (mergedValues) {
216
+ count++;
217
+ yield [
218
+ key,
219
+ mergedValues
220
+ ];
221
+ }
222
+ }
214
223
  }
215
- else {
216
- const mergedValues = merge(values, toAdd, toRemove?.[1] ?? []);
217
- if (mergedValues) {
218
- count++;
219
- yield [key, mergedValues];
224
+ // emit all the uncommitted data that would be captured by this iterator
225
+ while(uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()){
226
+ const entry = uncommittedEntries[uncommittedEntriesIdx];
227
+ if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
228
+ break;
220
229
  }
230
+ count++;
231
+ yield [
232
+ entry[0],
233
+ map(entry[1])
234
+ ];
235
+ uncommittedEntriesIdx++;
221
236
  }
222
237
  }
223
- // emit all the uncommitted data that would be captured by this iterator
224
- while (uncommittedEntriesIdx < uncommittedEntries.length && checkLimit()) {
225
- const entry = uncommittedEntries[uncommittedEntriesIdx];
226
- if (endKey && Buffer.compare(entry[0], endKey) !== cmpDirection) {
227
- break;
228
- }
229
- count++;
230
- yield [entry[0], map(entry[1])];
231
- uncommittedEntriesIdx++;
238
+ async commit() {
239
+ this.assertIsOpen();
240
+ this.close();
241
+ await this.channel.sendMessage(LMDBMessageType.BATCH, {
242
+ batches: new Map([
243
+ [
244
+ Database.DATA,
245
+ this.dataBatch
246
+ ],
247
+ [
248
+ Database.INDEX,
249
+ this.indexBatch
250
+ ]
251
+ ])
252
+ });
232
253
  }
233
- };
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVfdHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi12Mi93cml0ZV90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixLQUFLLEVBQ0wsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixZQUFZLEdBQ2IsTUFBTSxZQUFZLENBQUM7QUFFcEIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFBckQ7OztRQUNFLG9CQUFvQjtRQUNKLGNBQVMsR0FBVTtZQUNqQyxVQUFVLEVBQUUsRUFBRTtZQUNkLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUM7UUFDYyxlQUFVLEdBQVU7WUFDbEMsVUFBVSxFQUFFLEVBQUU7WUFDZCxhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDO0lBa1NKLENBQUM7SUFoU0MsR0FBRyxDQUFDLEdBQWUsRUFBRSxLQUFpQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxD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
254
+ }
@@ -1,2 +1 @@
1
1
  export * from './l2_tips_store.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUMifQ==
@@ -1,8 +1,15 @@
1
- /** Stores currently synced L2 tips and unfinalized block hashes. */
2
- export class L2TipsStore {
3
- constructor(store, namespace) {
4
- this.l2TipsStore = store.openMap([namespace, 'l2_tips'].join('_'));
5
- this.l2BlockHashesStore = store.openMap([namespace, 'l2_block_hashes'].join('_'));
1
+ /** Stores currently synced L2 tips and unfinalized block hashes. */ export class L2TipsStore {
2
+ l2TipsStore;
3
+ l2BlockHashesStore;
4
+ constructor(store, namespace){
5
+ this.l2TipsStore = store.openMap([
6
+ namespace,
7
+ 'l2_tips'
8
+ ].join('_'));
9
+ this.l2BlockHashesStore = store.openMap([
10
+ namespace,
11
+ 'l2_block_hashes'
12
+ ].join('_'));
6
13
  }
7
14
  getL2BlockHash(number) {
8
15
  return this.l2BlockHashesStore.getAsync(number);
@@ -11,24 +18,30 @@ export class L2TipsStore {
11
18
  return {
12
19
  latest: await this.getL2Tip('latest'),
13
20
  finalized: await this.getL2Tip('finalized'),
14
- proven: await this.getL2Tip('proven'),
21
+ proven: await this.getL2Tip('proven')
15
22
  };
16
23
  }
17
24
  async getL2Tip(tag) {
18
25
  const blockNumber = await this.l2TipsStore.getAsync(tag);
19
26
  if (blockNumber === undefined || blockNumber === 0) {
20
- return { number: 0, hash: undefined };
27
+ return {
28
+ number: 0,
29
+ hash: undefined
30
+ };
21
31
  }
22
32
  const blockHash = await this.l2BlockHashesStore.getAsync(blockNumber);
23
33
  if (!blockHash) {
24
34
  throw new Error(`Block hash not found for block number ${blockNumber}`);
25
35
  }
26
- return { number: blockNumber, hash: blockHash };
36
+ return {
37
+ number: blockNumber,
38
+ hash: blockHash
39
+ };
27
40
  }
28
41
  async handleBlockStreamEvent(event) {
29
- switch (event.type) {
42
+ switch(event.type){
30
43
  case 'blocks-added':
31
- for (const block of event.blocks) {
44
+ for (const block of event.blocks){
32
45
  await this.l2BlockHashesStore.set(block.number, (await block.header.hash()).toString());
33
46
  }
34
47
  await this.l2TipsStore.set('latest', event.blocks.at(-1).number);
@@ -41,11 +54,12 @@ export class L2TipsStore {
41
54
  break;
42
55
  case 'chain-finalized':
43
56
  await this.l2TipsStore.set('finalized', event.blockNumber);
44
- for await (const key of this.l2BlockHashesStore.keysAsync({ end: event.blockNumber })) {
57
+ for await (const key of this.l2BlockHashesStore.keysAsync({
58
+ end: event.blockNumber
59
+ })){
45
60
  await this.l2BlockHashesStore.delete(key);
46
61
  }
47
62
  break;
48
63
  }
49
64
  }
50
65
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvbDJfdGlwc19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLFdBQVc7SUFJdEIsWUFBWSxLQUF3QixFQUFFLFNBQWlCO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE9BQU87WUFDTCxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUMzQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBZTtRQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBeUI7UUFDM0QsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxjQUFjO2dCQUNqQixLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtZQUNSLEtBQUssY0FBYztnQkFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNO1lBQ1IsS0FBSyxpQkFBaUI7Z0JBQ3BCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUN0RixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
package/dest/utils.js CHANGED
@@ -5,24 +5,20 @@ import { isSyncStore } from './interfaces/utils.js';
5
5
  * @param store - The store to check
6
6
  * @param rollupAddress - The ETH address of the rollup contract
7
7
  * @returns A promise that resolves when the store is cleared, or rejects if the rollup address does not match
8
- */
9
- export async function initStoreForRollup(store, rollupAddress, log) {
8
+ */ export async function initStoreForRollup(store, rollupAddress, log) {
10
9
  if (!rollupAddress) {
11
10
  throw new Error('Rollup address is required');
12
11
  }
13
12
  const rollupAddressValue = store.openSingleton('rollupAddress');
14
13
  const rollupAddressString = rollupAddress.toString();
15
- const storedRollupAddressString = isSyncStore(store)
16
- ? rollupAddressValue.get()
17
- : await rollupAddressValue.getAsync();
14
+ const storedRollupAddressString = isSyncStore(store) ? rollupAddressValue.get() : await rollupAddressValue.getAsync();
18
15
  if (typeof storedRollupAddressString !== 'undefined' && storedRollupAddressString !== rollupAddressString) {
19
16
  log?.warn(`Rollup address mismatch. Clearing entire database...`, {
20
17
  expected: rollupAddressString,
21
- found: storedRollupAddressString,
18
+ found: storedRollupAddressString
22
19
  });
23
20
  await store.clear();
24
21
  }
25
22
  await rollupAddressValue.set(rollupAddressString);
26
23
  return store;
27
24
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLEtBQVEsRUFDUixhQUF5QixFQUN6QixHQUFZO0lBRVosSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFxQyxlQUFlLENBQUMsQ0FBQztJQUNwRyxNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyRCxNQUFNLHlCQUF5QixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbEQsQ0FBQyxDQUFFLGtCQUF5RSxDQUFDLEdBQUcsRUFBRTtRQUNsRixDQUFDLENBQUMsTUFBTyxrQkFBOEUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVyRyxJQUFJLE9BQU8seUJBQXlCLEtBQUssV0FBVyxJQUFJLHlCQUF5QixLQUFLLG1CQUFtQixFQUFFLENBQUM7UUFDMUcsR0FBRyxFQUFFLElBQUksQ0FBQyxzREFBc0QsRUFBRTtZQUNoRSxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLEtBQUssRUFBRSx5QkFBeUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sa0JBQWtCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDbEQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/kv-store",
3
- "version": "0.73.0",
3
+ "version": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/interfaces/index.js",
@@ -17,7 +17,7 @@
17
17
  "clean": "rm -rf ./dest .tsbuildinfo",
18
18
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
19
19
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
20
- "test:node": "NODE_NO_WARNINGS=1 mocha --config ./.mocharc.json --reporter dot",
20
+ "test:node": "NODE_NO_WARNINGS=1 mocha --config ./.mocharc.json",
21
21
  "test:browser": "wtr --config ./web-test-runner.config.mjs",
22
22
  "test": "yarn test:node && yarn test:browser && true",
23
23
  "generate": "mkdir -p build && cp -v ../../barretenberg/cpp/build-pic/lib/nodejs_module.node build"
@@ -27,10 +27,10 @@
27
27
  "./package.local.json"
28
28
  ],
29
29
  "dependencies": {
30
- "@aztec/circuit-types": "0.73.0",
31
- "@aztec/ethereum": "0.73.0",
32
- "@aztec/foundation": "0.73.0",
33
- "@aztec/native": "0.73.0",
30
+ "@aztec/circuit-types": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
31
+ "@aztec/ethereum": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
32
+ "@aztec/foundation": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
33
+ "@aztec/native": "0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2",
34
34
  "idb": "^8.0.0",
35
35
  "lmdb": "^3.2.0",
36
36
  "msgpackr": "^1.11.2",
@@ -4,4 +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
- export { Range, StoreSize } from './common.js';
7
+ export type { Range, StoreSize } from './common.js';
@@ -77,3 +77,13 @@ export async function openTmpStore(
77
77
 
78
78
  return AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, cleanup, log);
79
79
  }
80
+
81
+ export function openStoreAt(
82
+ dataDir: string,
83
+ dbMapSizeKb = 10 * 1_024 * 1_024, // 10GB
84
+ maxReaders = MAX_READERS,
85
+ log: Logger = createLogger('kv-store:lmdb-v2'),
86
+ ): Promise<AztecLMDBStoreV2> {
87
+ log.debug(`Opening data store at: ${dataDir} with size: ${dbMapSizeKb} KB (LMDB v2)`);
88
+ return AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, undefined, log);
89
+ }
@@ -25,6 +25,7 @@ import { LMDBSingleValue } from './singleton.js';
25
25
  import { WriteTransaction } from './write_transaction.js';
26
26
 
27
27
  export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
28
+ private open = false;
28
29
  private channel: MsgpackChannel<LMDBMessageType, LMDBRequestBody, LMDBResponseBody>;
29
30
  private writerCtx = new AsyncLocalStorage<WriteTransaction>();
30
31
  private writerQueue = new SerialQueue();
@@ -43,18 +44,24 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
43
44
  this.availableCursors = new Semaphore(maxReaders - 1);
44
45
  }
45
46
 
47
+ public get dataDirectory(): string {
48
+ return this.dataDir;
49
+ }
50
+
46
51
  private async start() {
47
52
  this.writerQueue.start();
48
53
 
49
- await this.sendMessage(LMDBMessageType.OPEN_DATABASE, {
54
+ await this.channel.sendMessage(LMDBMessageType.OPEN_DATABASE, {
50
55
  db: Database.DATA,
51
56
  uniqueKeys: true,
52
57
  });
53
58
 
54
- await this.sendMessage(LMDBMessageType.OPEN_DATABASE, {
59
+ await this.channel.sendMessage(LMDBMessageType.OPEN_DATABASE, {
55
60
  db: Database.INDEX,
56
61
  uniqueKeys: false,
57
62
  });
63
+
64
+ this.open = true;
58
65
  }
59
66
 
60
67
  public static async new(
@@ -70,10 +77,16 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
70
77
  }
71
78
 
72
79
  public getReadTx(): ReadTransaction {
80
+ if (!this.open) {
81
+ throw new Error('Store is closed');
82
+ }
73
83
  return new ReadTransaction(this);
74
84
  }
75
85
 
76
86
  public getCurrentWriteTx(): WriteTransaction | undefined {
87
+ if (!this.open) {
88
+ throw new Error('Store is closed');
89
+ }
77
90
  const currentWrite = this.writerCtx.getStore();
78
91
  return currentWrite;
79
92
  }
@@ -105,6 +118,10 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
105
118
  async transactionAsync<T extends Exclude<any, Promise<any>>>(
106
119
  callback: (tx: WriteTransaction) => Promise<T>,
107
120
  ): Promise<T> {
121
+ if (!this.open) {
122
+ throw new Error('Store is closed');
123
+ }
124
+
108
125
  // transactionAsync might be called recursively
109
126
  // send any writes to the parent tx, but don't close it
110
127
  // if the callback throws then the parent tx will rollback automatically
@@ -144,14 +161,23 @@ export class AztecLMDBStoreV2 implements AztecAsyncKVStore, LMDBMessageChannel {
144
161
  }
145
162
 
146
163
  async close() {
164
+ if (!this.open) {
165
+ // already closed
166
+ return;
167
+ }
168
+ this.open = false;
147
169
  await this.writerQueue.cancel();
148
- await this.sendMessage(LMDBMessageType.CLOSE, undefined);
170
+ await this.channel.sendMessage(LMDBMessageType.CLOSE, undefined);
149
171
  }
150
172
 
151
173
  public async sendMessage<T extends LMDBMessageType>(
152
174
  msgType: T,
153
175
  body: LMDBRequestBody[T],
154
176
  ): Promise<LMDBResponseBody[T]> {
177
+ if (!this.open) {
178
+ throw new Error('Store is closed');
179
+ }
180
+
155
181
  if (msgType === LMDBMessageType.START_CURSOR) {
156
182
  await this.availableCursors.acquire();
157
183
  }
package/dest/config.d.ts DELETED
@@ -1,17 +0,0 @@
1
- import { type ConfigMappingsType } from '@aztec/foundation/config';
2
- import { type EthAddress } from '@aztec/foundation/eth-address';
3
- export type DataStoreConfig = {
4
- dataDirectory: string | undefined;
5
- dataStoreMapSizeKB: number;
6
- l1Contracts?: {
7
- rollupAddress: EthAddress;
8
- };
9
- };
10
- export declare const dataConfigMappings: ConfigMappingsType<DataStoreConfig>;
11
- /**
12
- * Returns the archiver configuration from the environment variables.
13
- * Note: If an environment variable is not set, the default value is used.
14
- * @returns The archiver configuration.
15
- */
16
- export declare function getDataConfigFromEnv(): DataStoreConfig;
17
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG;IAC5B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE;QAAE,aAAa,EAAE,UAAU,CAAA;KAAE,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CAAC,eAAe,CAclE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
@@ -1,21 +0,0 @@
1
- import { type IDBPDatabase, type IDBPObjectStore } from 'idb';
2
- import { type AztecAsyncArray } from '../interfaces/array.js';
3
- import { type AztecIDBSchema } from './store.js';
4
- /**
5
- * A persistent array backed by IndexedDB.
6
- */
7
- export declare class IndexedDBAztecArray<T> implements AztecAsyncArray<T> {
8
- #private;
9
- constructor(rootDB: IDBPDatabase<AztecIDBSchema>, name: string);
10
- set db(db: IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'> | undefined);
11
- get db(): IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'>;
12
- lengthAsync(): Promise<number>;
13
- push(...vals: T[]): Promise<number>;
14
- pop(): Promise<T | undefined>;
15
- atAsync(index: number): Promise<T | undefined>;
16
- setAt(index: number, val: T): Promise<boolean>;
17
- entriesAsync(): AsyncIterableIterator<[number, T]>;
18
- valuesAsync(): AsyncIterableIterator<T>;
19
- [Symbol.asyncIterator](): AsyncIterableIterator<T>;
20
- }
21
- //# sourceMappingURL=array.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/indexeddb/array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,KAAK,CAAC;AAE9D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;;gBAMnD,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM;IAM9D,IAAI,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,EAEpF;IAED,IAAI,EAAE,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAEvE;IAEK,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ9B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAenC,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAa7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAW9C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB7C,YAAY,IAAI,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAQlD,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC;IAM9C,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;CAOnD"}
@@ -1,7 +0,0 @@
1
- import { type Logger } from '@aztec/foundation/log';
2
- import { type DataStoreConfig } from '../config.js';
3
- import { AztecIndexedDBStore } from './store.js';
4
- export { AztecIndexedDBStore } from './store.js';
5
- export declare function createStore(name: string, config: DataStoreConfig, log?: Logger): Promise<AztecIndexedDBStore>;
6
- export declare function openTmpStore(ephemeral?: boolean): Promise<AztecIndexedDBStore>;
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexeddb/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,GAAE,MAAiC,gCAgB9G;AAED,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAErF"}