@aztec-labs/kv-store 6.0.0-nightly.20260829

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 (246) hide show
  1. package/README.md +19 -0
  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/deprecated/indexeddb/array.d.ts +22 -0
  6. package/dest/deprecated/indexeddb/array.d.ts.map +1 -0
  7. package/dest/deprecated/indexeddb/array.js +121 -0
  8. package/dest/deprecated/indexeddb/index.d.ts +7 -0
  9. package/dest/deprecated/indexeddb/index.d.ts.map +1 -0
  10. package/dest/deprecated/indexeddb/index.js +8 -0
  11. package/dest/deprecated/indexeddb/map.d.ts +38 -0
  12. package/dest/deprecated/indexeddb/map.d.ts.map +1 -0
  13. package/dest/deprecated/indexeddb/map.js +121 -0
  14. package/dest/deprecated/indexeddb/multi_map.d.ts +14 -0
  15. package/dest/deprecated/indexeddb/multi_map.d.ts.map +1 -0
  16. package/dest/deprecated/indexeddb/multi_map.js +108 -0
  17. package/dest/deprecated/indexeddb/set.d.ts +17 -0
  18. package/dest/deprecated/indexeddb/set.d.ts.map +1 -0
  19. package/dest/deprecated/indexeddb/set.js +24 -0
  20. package/dest/deprecated/indexeddb/singleton.d.ts +17 -0
  21. package/dest/deprecated/indexeddb/singleton.d.ts.map +1 -0
  22. package/dest/deprecated/indexeddb/singleton.js +41 -0
  23. package/dest/deprecated/indexeddb/store.d.ts +98 -0
  24. package/dest/deprecated/indexeddb/store.d.ts.map +1 -0
  25. package/dest/deprecated/indexeddb/store.js +171 -0
  26. package/dest/interfaces/array.d.ts +81 -0
  27. package/dest/interfaces/array.d.ts.map +1 -0
  28. package/dest/interfaces/array.js +1 -0
  29. package/dest/interfaces/array_test_suite.d.ts +3 -0
  30. package/dest/interfaces/array_test_suite.d.ts.map +1 -0
  31. package/dest/interfaces/array_test_suite.js +103 -0
  32. package/dest/interfaces/common.d.ts +25 -0
  33. package/dest/interfaces/common.d.ts.map +1 -0
  34. package/dest/interfaces/common.js +8 -0
  35. package/dest/interfaces/counter.d.ts +59 -0
  36. package/dest/interfaces/counter.d.ts.map +1 -0
  37. package/dest/interfaces/counter.js +1 -0
  38. package/dest/interfaces/index.d.ts +10 -0
  39. package/dest/interfaces/index.d.ts.map +1 -0
  40. package/dest/interfaces/index.js +8 -0
  41. package/dest/interfaces/map.d.ts +106 -0
  42. package/dest/interfaces/map.d.ts.map +1 -0
  43. package/dest/interfaces/map.js +3 -0
  44. package/dest/interfaces/map_test_suite.d.ts +3 -0
  45. package/dest/interfaces/map_test_suite.d.ts.map +1 -0
  46. package/dest/interfaces/map_test_suite.js +261 -0
  47. package/dest/interfaces/multi_map.d.ts +41 -0
  48. package/dest/interfaces/multi_map.d.ts.map +1 -0
  49. package/dest/interfaces/multi_map.js +3 -0
  50. package/dest/interfaces/multi_map_test_suite.d.ts +3 -0
  51. package/dest/interfaces/multi_map_test_suite.d.ts.map +1 -0
  52. package/dest/interfaces/multi_map_test_suite.js +363 -0
  53. package/dest/interfaces/set.d.ts +44 -0
  54. package/dest/interfaces/set.d.ts.map +1 -0
  55. package/dest/interfaces/set.js +1 -0
  56. package/dest/interfaces/set_test_suite.d.ts +3 -0
  57. package/dest/interfaces/set_test_suite.d.ts.map +1 -0
  58. package/dest/interfaces/set_test_suite.js +95 -0
  59. package/dest/interfaces/singleton.d.ts +29 -0
  60. package/dest/interfaces/singleton.d.ts.map +1 -0
  61. package/dest/interfaces/singleton.js +4 -0
  62. package/dest/interfaces/singleton_test_suite.d.ts +3 -0
  63. package/dest/interfaces/singleton_test_suite.d.ts.map +1 -0
  64. package/dest/interfaces/singleton_test_suite.js +29 -0
  65. package/dest/interfaces/store.d.ts +120 -0
  66. package/dest/interfaces/store.d.ts.map +1 -0
  67. package/dest/interfaces/store.js +1 -0
  68. package/dest/interfaces/utils.d.ts +18 -0
  69. package/dest/interfaces/utils.d.ts.map +1 -0
  70. package/dest/interfaces/utils.js +18 -0
  71. package/dest/lmdb/array.d.ts +24 -0
  72. package/dest/lmdb/array.d.ts.map +1 -0
  73. package/dest/lmdb/array.js +119 -0
  74. package/dest/lmdb/counter.d.ts +19 -0
  75. package/dest/lmdb/counter.d.ts.map +1 -0
  76. package/dest/lmdb/counter.js +50 -0
  77. package/dest/lmdb/index.d.ts +12 -0
  78. package/dest/lmdb/index.d.ts.map +1 -0
  79. package/dest/lmdb/index.js +25 -0
  80. package/dest/lmdb/map.d.ts +40 -0
  81. package/dest/lmdb/map.d.ts.map +1 -0
  82. package/dest/lmdb/map.js +156 -0
  83. package/dest/lmdb/multi_map.d.ts +13 -0
  84. package/dest/lmdb/multi_map.d.ts.map +1 -0
  85. package/dest/lmdb/multi_map.js +44 -0
  86. package/dest/lmdb/set.d.ts +18 -0
  87. package/dest/lmdb/set.d.ts.map +1 -0
  88. package/dest/lmdb/set.js +32 -0
  89. package/dest/lmdb/singleton.d.ts +14 -0
  90. package/dest/lmdb/singleton.d.ts.map +1 -0
  91. package/dest/lmdb/singleton.js +26 -0
  92. package/dest/lmdb/store.d.ts +94 -0
  93. package/dest/lmdb/store.d.ts.map +1 -0
  94. package/dest/lmdb/store.js +200 -0
  95. package/dest/lmdb-v2/array.d.ts +19 -0
  96. package/dest/lmdb-v2/array.d.ts.map +1 -0
  97. package/dest/lmdb-v2/array.js +103 -0
  98. package/dest/lmdb-v2/factory.d.ts +35 -0
  99. package/dest/lmdb-v2/factory.d.ts.map +1 -0
  100. package/dest/lmdb-v2/factory.js +126 -0
  101. package/dest/lmdb-v2/index.d.ts +3 -0
  102. package/dest/lmdb-v2/index.d.ts.map +1 -0
  103. package/dest/lmdb-v2/index.js +2 -0
  104. package/dest/lmdb-v2/map.d.ts +53 -0
  105. package/dest/lmdb-v2/map.d.ts.map +1 -0
  106. package/dest/lmdb-v2/map.js +106 -0
  107. package/dest/lmdb-v2/message.d.ts +131 -0
  108. package/dest/lmdb-v2/message.d.ts.map +1 -0
  109. package/dest/lmdb-v2/message.js +20 -0
  110. package/dest/lmdb-v2/multi_map.d.ts +52 -0
  111. package/dest/lmdb-v2/multi_map.d.ts.map +1 -0
  112. package/dest/lmdb-v2/multi_map.js +123 -0
  113. package/dest/lmdb-v2/read_transaction.d.ts +16 -0
  114. package/dest/lmdb-v2/read_transaction.d.ts.map +1 -0
  115. package/dest/lmdb-v2/read_transaction.js +137 -0
  116. package/dest/lmdb-v2/set.d.ts +15 -0
  117. package/dest/lmdb-v2/set.d.ts.map +1 -0
  118. package/dest/lmdb-v2/set.js +23 -0
  119. package/dest/lmdb-v2/singleton.d.ts +12 -0
  120. package/dest/lmdb-v2/singleton.d.ts.map +1 -0
  121. package/dest/lmdb-v2/singleton.js +31 -0
  122. package/dest/lmdb-v2/store.d.ts +43 -0
  123. package/dest/lmdb-v2/store.d.ts.map +1 -0
  124. package/dest/lmdb-v2/store.js +171 -0
  125. package/dest/lmdb-v2/tx-helpers.d.ts +6 -0
  126. package/dest/lmdb-v2/tx-helpers.d.ts.map +1 -0
  127. package/dest/lmdb-v2/tx-helpers.js +21 -0
  128. package/dest/lmdb-v2/utils.d.ts +8 -0
  129. package/dest/lmdb-v2/utils.d.ts.map +1 -0
  130. package/dest/lmdb-v2/utils.js +32 -0
  131. package/dest/lmdb-v2/write_transaction.d.ts +17 -0
  132. package/dest/lmdb-v2/write_transaction.d.ts.map +1 -0
  133. package/dest/lmdb-v2/write_transaction.js +258 -0
  134. package/dest/sqlite-opfs/array.d.ts +21 -0
  135. package/dest/sqlite-opfs/array.d.ts.map +1 -0
  136. package/dest/sqlite-opfs/array.js +128 -0
  137. package/dest/sqlite-opfs/errors.d.ts +54 -0
  138. package/dest/sqlite-opfs/errors.d.ts.map +1 -0
  139. package/dest/sqlite-opfs/errors.js +77 -0
  140. package/dest/sqlite-opfs/index.d.ts +14 -0
  141. package/dest/sqlite-opfs/index.d.ts.map +1 -0
  142. package/dest/sqlite-opfs/index.js +16 -0
  143. package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts +32 -0
  144. package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts.map +1 -0
  145. package/dest/sqlite-opfs/internal/ordered-binary-browser.js +448 -0
  146. package/dest/sqlite-opfs/manage.d.ts +22 -0
  147. package/dest/sqlite-opfs/manage.d.ts.map +1 -0
  148. package/dest/sqlite-opfs/manage.js +38 -0
  149. package/dest/sqlite-opfs/map.d.ts +35 -0
  150. package/dest/sqlite-opfs/map.d.ts.map +1 -0
  151. package/dest/sqlite-opfs/map.js +163 -0
  152. package/dest/sqlite-opfs/messages.d.ts +66 -0
  153. package/dest/sqlite-opfs/messages.d.ts.map +1 -0
  154. package/dest/sqlite-opfs/messages.js +5 -0
  155. package/dest/sqlite-opfs/multi_map.d.ts +16 -0
  156. package/dest/sqlite-opfs/multi_map.d.ts.map +1 -0
  157. package/dest/sqlite-opfs/multi_map.js +67 -0
  158. package/dest/sqlite-opfs/pool_integrity.d.ts +20 -0
  159. package/dest/sqlite-opfs/pool_integrity.d.ts.map +1 -0
  160. package/dest/sqlite-opfs/pool_integrity.js +282 -0
  161. package/dest/sqlite-opfs/pool_lock.d.ts +8 -0
  162. package/dest/sqlite-opfs/pool_lock.d.ts.map +1 -0
  163. package/dest/sqlite-opfs/pool_lock.js +47 -0
  164. package/dest/sqlite-opfs/set.d.ts +13 -0
  165. package/dest/sqlite-opfs/set.d.ts.map +1 -0
  166. package/dest/sqlite-opfs/set.js +19 -0
  167. package/dest/sqlite-opfs/singleton.d.ts +13 -0
  168. package/dest/sqlite-opfs/singleton.d.ts.map +1 -0
  169. package/dest/sqlite-opfs/singleton.js +48 -0
  170. package/dest/sqlite-opfs/store.d.ts +84 -0
  171. package/dest/sqlite-opfs/store.d.ts.map +1 -0
  172. package/dest/sqlite-opfs/store.js +318 -0
  173. package/dest/sqlite-opfs/worker.d.ts +2 -0
  174. package/dest/sqlite-opfs/worker.d.ts.map +1 -0
  175. package/dest/sqlite-opfs/worker.js +275 -0
  176. package/dest/stores/index.d.ts +3 -0
  177. package/dest/stores/index.d.ts.map +1 -0
  178. package/dest/stores/index.js +2 -0
  179. package/dest/stores/l2_tips_store.d.ts +23 -0
  180. package/dest/stores/l2_tips_store.d.ts.map +1 -0
  181. package/dest/stores/l2_tips_store.js +64 -0
  182. package/dest/utils.d.ts +15 -0
  183. package/dest/utils.d.ts.map +1 -0
  184. package/dest/utils.js +59 -0
  185. package/package.json +108 -0
  186. package/src/bench/shared_map_bench.ts +111 -0
  187. package/src/deprecated/indexeddb/array.ts +122 -0
  188. package/src/deprecated/indexeddb/index.ts +12 -0
  189. package/src/deprecated/indexeddb/map.ts +137 -0
  190. package/src/deprecated/indexeddb/multi_map.ts +106 -0
  191. package/src/deprecated/indexeddb/set.ts +37 -0
  192. package/src/deprecated/indexeddb/singleton.ts +52 -0
  193. package/src/deprecated/indexeddb/store.ts +214 -0
  194. package/src/interfaces/array.ts +92 -0
  195. package/src/interfaces/array_test_suite.ts +128 -0
  196. package/src/interfaces/common.ts +31 -0
  197. package/src/interfaces/counter.ts +65 -0
  198. package/src/interfaces/index.ts +9 -0
  199. package/src/interfaces/map.ts +117 -0
  200. package/src/interfaces/map_test_suite.ts +198 -0
  201. package/src/interfaces/multi_map.ts +45 -0
  202. package/src/interfaces/multi_map_test_suite.ts +372 -0
  203. package/src/interfaces/set.ts +48 -0
  204. package/src/interfaces/set_test_suite.ts +79 -0
  205. package/src/interfaces/singleton.ts +29 -0
  206. package/src/interfaces/singleton_test_suite.ts +44 -0
  207. package/src/interfaces/store.ts +142 -0
  208. package/src/interfaces/utils.ts +23 -0
  209. package/src/lmdb/array.ts +140 -0
  210. package/src/lmdb/counter.ts +67 -0
  211. package/src/lmdb/index.ts +41 -0
  212. package/src/lmdb/map.ts +177 -0
  213. package/src/lmdb/multi_map.ts +51 -0
  214. package/src/lmdb/set.ts +45 -0
  215. package/src/lmdb/singleton.ts +35 -0
  216. package/src/lmdb/store.ts +242 -0
  217. package/src/lmdb-v2/array.ts +120 -0
  218. package/src/lmdb-v2/factory.ts +184 -0
  219. package/src/lmdb-v2/index.ts +2 -0
  220. package/src/lmdb-v2/map.ts +136 -0
  221. package/src/lmdb-v2/message.ts +169 -0
  222. package/src/lmdb-v2/multi_map.ts +150 -0
  223. package/src/lmdb-v2/read_transaction.ts +156 -0
  224. package/src/lmdb-v2/set.ts +33 -0
  225. package/src/lmdb-v2/singleton.ts +38 -0
  226. package/src/lmdb-v2/store.ts +220 -0
  227. package/src/lmdb-v2/tx-helpers.ts +29 -0
  228. package/src/lmdb-v2/utils.ts +32 -0
  229. package/src/lmdb-v2/write_transaction.ts +315 -0
  230. package/src/sqlite-opfs/array.ts +124 -0
  231. package/src/sqlite-opfs/errors.ts +94 -0
  232. package/src/sqlite-opfs/index.ts +27 -0
  233. package/src/sqlite-opfs/internal/ordered-binary-browser.js +465 -0
  234. package/src/sqlite-opfs/manage.ts +46 -0
  235. package/src/sqlite-opfs/map.ts +163 -0
  236. package/src/sqlite-opfs/messages.ts +39 -0
  237. package/src/sqlite-opfs/multi_map.ts +74 -0
  238. package/src/sqlite-opfs/pool_integrity.ts +327 -0
  239. package/src/sqlite-opfs/pool_lock.ts +62 -0
  240. package/src/sqlite-opfs/set.ts +29 -0
  241. package/src/sqlite-opfs/singleton.ts +48 -0
  242. package/src/sqlite-opfs/store.ts +331 -0
  243. package/src/sqlite-opfs/worker.ts +259 -0
  244. package/src/stores/index.ts +3 -0
  245. package/src/stores/l2_tips_store.ts +67 -0
  246. package/src/utils.ts +98 -0
@@ -0,0 +1,120 @@
1
+ import type { AztecArray, AztecAsyncArray } from './array.js';
2
+ import type { Key, StoreSize, Value } from './common.js';
3
+ import type { AztecAsyncCounter, AztecCounter } from './counter.js';
4
+ import type { AztecAsyncMap, AztecMap } from './map.js';
5
+ import type { AztecAsyncMultiMap, AztecMultiMap } from './multi_map.js';
6
+ import type { AztecAsyncSet, AztecSet } from './set.js';
7
+ import type { AztecAsyncSingleton, AztecSingleton } from './singleton.js';
8
+ /** A key-value store */
9
+ export interface AztecKVStore {
10
+ syncGetters: true;
11
+ /**
12
+ * Creates a new map.
13
+ * @param name - The name of the map
14
+ * @returns The map
15
+ */
16
+ openMap<K extends Key, V extends Value>(name: string): AztecMap<K, V>;
17
+ /**
18
+ * Creates a new set.
19
+ * @param name - The name of the set
20
+ * @returns The set
21
+ */
22
+ openSet<K extends Key>(name: string): AztecSet<K>;
23
+ /**
24
+ * Creates a new multi-map.
25
+ * @param name - The name of the multi-map
26
+ * @returns The multi-map
27
+ */
28
+ openMultiMap<K extends Key, V extends Value>(name: string): AztecMultiMap<K, V>;
29
+ /**
30
+ * Creates a new array.
31
+ * @param name - The name of the array
32
+ * @returns The array
33
+ */
34
+ openArray<T extends Value>(name: string): AztecArray<T>;
35
+ /**
36
+ * Creates a new singleton.
37
+ * @param name - The name of the singleton
38
+ * @returns The singleton
39
+ */
40
+ openSingleton<T extends Value>(name: string): AztecSingleton<T>;
41
+ /**
42
+ * Creates a new count map.
43
+ * @param name - name of the counter
44
+ */
45
+ openCounter<K extends Key>(name: string): AztecCounter<K>;
46
+ /**
47
+ * Starts a transaction. All calls to read/write data while in a transaction are queued and executed atomically.
48
+ * @param callback - The callback to execute in a transaction
49
+ */
50
+ transaction<T extends Exclude<any, Promise<any>>>(callback: () => T): Promise<T>;
51
+ /**
52
+ * Clears all entries in the store
53
+ */
54
+ clear(): Promise<void>;
55
+ /**
56
+ * Deletes the store
57
+ */
58
+ delete(): Promise<void>;
59
+ /**
60
+ * Estimates the size of the store in bytes.
61
+ */
62
+ estimateSize(): Promise<StoreSize>;
63
+ /**
64
+ * Closes the store
65
+ */
66
+ close(): Promise<void>;
67
+ }
68
+ export interface AztecAsyncKVStore {
69
+ /**
70
+ * Creates a new map.
71
+ * @param name - The name of the map
72
+ * @returns The map
73
+ */
74
+ openMap<K extends Key, V extends Value>(name: string): AztecAsyncMap<K, V>;
75
+ /**
76
+ * Creates a new set.
77
+ * @param name - The name of the set
78
+ * @returns The set
79
+ */
80
+ openSet<K extends Key>(name: string): AztecAsyncSet<K>;
81
+ /**
82
+ * Creates a new multi-map.
83
+ * @param name - The name of the multi-map
84
+ * @returns The multi-map
85
+ */
86
+ openMultiMap<K extends Key, V extends Value>(name: string): AztecAsyncMultiMap<K, V>;
87
+ /**
88
+ * Creates a new array.
89
+ * @param name - The name of the array
90
+ * @returns The array
91
+ */
92
+ openArray<T extends Value>(name: string): AztecAsyncArray<T>;
93
+ /**
94
+ * Creates a new singleton.
95
+ * @param name - The name of the singleton
96
+ * @returns The singleton
97
+ */
98
+ openSingleton<T extends Value>(name: string): AztecAsyncSingleton<T>;
99
+ /**
100
+ * Creates a new count map.
101
+ * @param name - name of the counter
102
+ */
103
+ openCounter<K extends Key>(name: string): AztecAsyncCounter<K>;
104
+ /**
105
+ * Starts a transaction. All calls to read/write data while in a transaction are queued and executed atomically.
106
+ * @param callback - The callback to execute in a transaction
107
+ */
108
+ transactionAsync<T extends Exclude<any, Promise<any>>>(callback: () => Promise<T>): Promise<T>;
109
+ /** Clears all entries in the store */
110
+ clear(): Promise<void>;
111
+ /** Deletes the store */
112
+ delete(): Promise<void>;
113
+ /** Estimates the size of the store in bytes. */
114
+ estimateSize(): Promise<StoreSize>;
115
+ /** Closes the store */
116
+ close(): Promise<void>;
117
+ /** Backups the store to the target folder.*/
118
+ backupTo(dstPath: string, compact?: boolean): Promise<void>;
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSx3QkFBd0I7QUFDeEIsTUFBTSxXQUFXLFlBQVk7SUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQztJQUNsQjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEU7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsYUFBYSxD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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,18 @@
1
+ import type { AztecAsyncKVStore, AztecKVStore } from './store.js';
2
+ export declare const mockLogger: {
3
+ debug: (msg: string, data: any) => void;
4
+ info: (msg: string, data: any) => void;
5
+ warn: (msg: string, data: any) => void;
6
+ error: (msg: string, data: any) => void;
7
+ fatal: (msg: string, data: any) => void;
8
+ silent: (_msg: string, _data: any) => void;
9
+ verbose: (msg: string, data: any) => void;
10
+ trace: (msg: string, data: any) => void;
11
+ level: "trace";
12
+ isLevelEnabled: (_level: string) => boolean;
13
+ module: string;
14
+ createChild: () => /*elided*/ any;
15
+ getBindings: () => {};
16
+ };
17
+ export declare function isSyncStore(store: AztecKVStore | AztecAsyncKVStore): store is AztecAsyncKVStore;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmZhY2VzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRSxlQUFPLE1BQU0sVUFBVTs7Ozs7Ozs7Ozs7Ozs7Q0FjdEIsQ0FBQztBQUdGLHdCQUFnQixXQUFXLENBQUMsS0FBSyxFQUFFLFlBQVksR0FBRyxpQkFBaUIsR0FBRyxLQUFLLElBQUksaUJBQWlCLENBRS9GIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/interfaces/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CActB,CAAC;AAGF,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,iBAAiB,GAAG,KAAK,IAAI,iBAAiB,CAE/F"}
@@ -0,0 +1,18 @@
1
+ /* eslint-disable no-console */ export const mockLogger = {
2
+ debug: (msg, data)=>console.log(msg, data),
3
+ info: (msg, data)=>console.log(msg, data),
4
+ warn: (msg, data)=>console.log(msg, data),
5
+ error: (msg, data)=>console.error(msg, data),
6
+ fatal: (msg, data)=>console.error(msg, data),
7
+ silent: (_msg, _data)=>{},
8
+ verbose: (msg, data)=>console.log(msg, data),
9
+ trace: (msg, data)=>console.log(msg, data),
10
+ level: 'trace',
11
+ isLevelEnabled: (_level)=>true,
12
+ module: 'kv-store:mock-logger',
13
+ createChild: ()=>mockLogger,
14
+ getBindings: ()=>({})
15
+ };
16
+ /* eslint-enable no-console */ export function isSyncStore(store) {
17
+ return store.syncGetters === true;
18
+ }
@@ -0,0 +1,24 @@
1
+ import type { Database, Key } from 'lmdb';
2
+ import type { AztecArray, AztecAsyncArray } from '../interfaces/array.js';
3
+ import type { Value } from '../interfaces/common.js';
4
+ /**
5
+ * An persistent array backed by LMDB.
6
+ */
7
+ export declare class LmdbAztecArray<T extends Value> implements AztecArray<T>, AztecAsyncArray<T> {
8
+ #private;
9
+ constructor(db: Database<unknown, Key>, arrName: string);
10
+ get length(): number;
11
+ lengthAsync(): Promise<number>;
12
+ push(...vals: T[]): Promise<number>;
13
+ pop(): Promise<T | undefined>;
14
+ at(index: number): T | undefined;
15
+ atAsync(index: number): Promise<T | undefined>;
16
+ setAt(index: number, val: T): Promise<boolean>;
17
+ entries(): IterableIterator<[number, T]>;
18
+ entriesAsync(): AsyncIterableIterator<[number, T]>;
19
+ values(): IterableIterator<T>;
20
+ valuesAsync(): AsyncIterableIterator<T>;
21
+ [Symbol.iterator](): IterableIterator<T>;
22
+ [Symbol.asyncIterator](): AsyncIterableIterator<T>;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sbWRiL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTXJEOztHQUVHO0FBQ0gscUJBQWEsY0FBYyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQzs7SUFLdkYsWUFBWSxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUl0RDtJQUVELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FFbkI7SUFFRCxXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUU3QjtJQUVELElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBWWxDO0lBRUQsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBZTVCO0lBRUQsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FZL0I7SUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUU3QztJQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVU3QztJQUVBLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQWdCeEM7SUFFTSxZQUFZLElBQUkscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FJeEQ7SUFFQSxNQUFNLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBSTdCO0lBRU0sV0FBVyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUk3QztJQUVELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUV2QztJQUVELENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUVqRDtDQUtGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/lmdb/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAMrD;;GAEG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;;IAKvF,YAAY,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAItD;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAE7B;IAED,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlC;IAED,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAe5B;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAY/B;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAE7C;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAU7C;IAEA,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAgBxC;IAEM,YAAY,IAAI,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAIxD;IAEA,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAI7B;IAEM,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAI7C;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAEvC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAEjD;CAKF"}
@@ -0,0 +1,119 @@
1
+ var _computedKey, _computedKey1;
2
+ import { LmdbAztecSingleton } from './singleton.js';
3
+ _computedKey = Symbol.iterator, _computedKey1 = Symbol.asyncIterator;
4
+ /**
5
+ * An persistent array backed by LMDB.
6
+ */ export class LmdbAztecArray {
7
+ #db;
8
+ #name;
9
+ #length;
10
+ constructor(db, arrName){
11
+ this.#name = arrName;
12
+ this.#length = new LmdbAztecSingleton(db, `${arrName}:meta:length`);
13
+ this.#db = db;
14
+ }
15
+ get length() {
16
+ return this.#length.get() ?? 0;
17
+ }
18
+ lengthAsync() {
19
+ return Promise.resolve(this.length);
20
+ }
21
+ push(...vals) {
22
+ return this.#db.childTransaction(()=>{
23
+ let length = this.length;
24
+ for (const val of vals){
25
+ void this.#db.put(this.#slot(length), val);
26
+ length += 1;
27
+ }
28
+ void this.#length.set(length);
29
+ return length;
30
+ });
31
+ }
32
+ pop() {
33
+ return this.#db.childTransaction(()=>{
34
+ const length = this.length;
35
+ if (length === 0) {
36
+ return undefined;
37
+ }
38
+ const slot = this.#slot(length - 1);
39
+ const val = this.#db.get(slot);
40
+ void this.#db.remove(slot);
41
+ void this.#length.set(length - 1);
42
+ return val;
43
+ });
44
+ }
45
+ at(index) {
46
+ if (index < 0) {
47
+ index = this.length + index;
48
+ }
49
+ // the Array API only accepts indexes in the range [-this.length, this.length)
50
+ // so if after normalizing the index is still out of range, return undefined
51
+ if (index < 0 || index >= this.length) {
52
+ return undefined;
53
+ }
54
+ return this.#db.get(this.#slot(index));
55
+ }
56
+ atAsync(index) {
57
+ return Promise.resolve(this.at(index));
58
+ }
59
+ setAt(index, val) {
60
+ if (index < 0) {
61
+ index = this.length + index;
62
+ }
63
+ if (index < 0 || index >= this.length) {
64
+ return Promise.resolve(false);
65
+ }
66
+ return this.#db.put(this.#slot(index), val);
67
+ }
68
+ *entries() {
69
+ const transaction = this.#db.useReadTransaction();
70
+ try {
71
+ const values = this.#db.getRange({
72
+ start: this.#slot(0),
73
+ limit: this.length,
74
+ transaction
75
+ });
76
+ for (const { key, value } of values){
77
+ const index = key[3];
78
+ yield [
79
+ index,
80
+ value
81
+ ];
82
+ }
83
+ } finally{
84
+ transaction.done();
85
+ }
86
+ }
87
+ async *entriesAsync() {
88
+ for (const [key, value] of this.entries()){
89
+ yield [
90
+ key,
91
+ value
92
+ ];
93
+ }
94
+ }
95
+ *values() {
96
+ for (const [_, value] of this.entries()){
97
+ yield value;
98
+ }
99
+ }
100
+ async *valuesAsync() {
101
+ for (const [_, value] of this.entries()){
102
+ yield value;
103
+ }
104
+ }
105
+ [_computedKey]() {
106
+ return this.values();
107
+ }
108
+ [_computedKey1]() {
109
+ return this.valuesAsync();
110
+ }
111
+ #slot(index) {
112
+ return [
113
+ 'array',
114
+ this.#name,
115
+ 'slot',
116
+ index
117
+ ];
118
+ }
119
+ }
@@ -0,0 +1,19 @@
1
+ import type { Key as BaseKey, Database } from 'lmdb';
2
+ import type { Key, Range } from '../interfaces/common.js';
3
+ import type { AztecAsyncCounter, AztecCounter } from '../interfaces/counter.js';
4
+ /**
5
+ * A counter implementation backed by LMDB
6
+ */
7
+ export declare class LmdbAztecCounter<K extends Key> implements AztecCounter<K>, AztecAsyncCounter<K> {
8
+ #private;
9
+ constructor(db: Database<unknown, BaseKey>, name: string);
10
+ set(key: K, value: number): Promise<void>;
11
+ update(key: K, delta?: number): Promise<void>;
12
+ get(key: K): number;
13
+ getAsync(key: K): Promise<number>;
14
+ entries(range?: Range<K>): IterableIterator<[K, number]>;
15
+ entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, number]>;
16
+ keys(range?: Range<K>): IterableIterator<K>;
17
+ keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xtZGIvY291bnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHaEY7O0dBRUc7QUFDSCxxQkFBYSxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFFLFlBQVcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7SUFLM0YsWUFBWSxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUl2RDtJQUVLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUU5QztJQUVELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FpQnZDO0lBRUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUVsQjtJQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFaEM7SUFFRCxPQUFPLENBQUMsS0FBSyxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUUzRDtJQUVNLFlBQVksQ0FBQyxLQUFLLEdBQUUsS0FBSyxDQUFDLENBQUMsQ0FBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBRTVFO0lBRUQsSUFBSSxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBRTlDO0lBRU0sU0FBUyxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBRS9EO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../src/lmdb/counter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErD,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGhF;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,GAAG,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;;IAK3F,YAAY,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAIvD;IAEK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBvC;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAElB;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhC;IAED,OAAO,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAE3D;IAEM,YAAY,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAE5E;IAED,IAAI,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAE9C;IAEM,SAAS,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAE/D;CACF"}
@@ -0,0 +1,50 @@
1
+ import { LmdbAztecMap } from './map.js';
2
+ /**
3
+ * A counter implementation backed by LMDB
4
+ */ export class LmdbAztecCounter {
5
+ #db;
6
+ #name;
7
+ #map;
8
+ constructor(db, name){
9
+ this.#db = db;
10
+ this.#name = name;
11
+ this.#map = new LmdbAztecMap(db, name);
12
+ }
13
+ async set(key, value) {
14
+ await this.#map.set(key, value);
15
+ }
16
+ update(key, delta = 1) {
17
+ return this.#db.childTransaction(()=>{
18
+ const current = this.#map.get(key) ?? 0;
19
+ const next = current + delta;
20
+ if (next < 0) {
21
+ throw new Error(`Cannot update ${key} in counter ${this.#name} below zero`);
22
+ }
23
+ if (next === 0) {
24
+ void this.#map.delete(key);
25
+ } else {
26
+ // store the key inside the entry because LMDB might return an internal representation
27
+ // of the key when iterating over the database
28
+ void this.#map.set(key, next);
29
+ }
30
+ });
31
+ }
32
+ get(key) {
33
+ return this.#map.get(key) ?? 0;
34
+ }
35
+ getAsync(key) {
36
+ return Promise.resolve(this.get(key));
37
+ }
38
+ entries(range = {}) {
39
+ return this.#map.entries(range);
40
+ }
41
+ async *entriesAsync(range = {}) {
42
+ yield* this.entries(range);
43
+ }
44
+ keys(range = {}) {
45
+ return this.#map.keys(range);
46
+ }
47
+ async *keysAsync(range = {}) {
48
+ yield* this.keys(range);
49
+ }
50
+ }
@@ -0,0 +1,12 @@
1
+ import { type Logger } from '@aztec-labs/foundation/log';
2
+ import type { DataStoreConfig } from '@aztec-labs/stdlib/kv-store';
3
+ import { AztecLmdbStore } from './store.js';
4
+ export { AztecLmdbStore } from './store.js';
5
+ export declare function createStore(name: string, config: DataStoreConfig, schemaVersion?: number | undefined, log?: Logger): AztecLmdbStore | Promise<AztecLmdbStore>;
6
+ /**
7
+ * Opens a temporary store for testing purposes.
8
+ * @param ephemeral - true if the store should only exist in memory and not automatically be flushed to disk. Optional
9
+ * @returns A new store
10
+ */
11
+ export declare function openTmpStore(ephemeral?: boolean): AztecLmdbStore;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sbWRiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUluRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUMsd0JBQWdCLFdBQVcsQ0FDekIsSUFBSSxFQUFFLE1BQU0sRUFDWixNQUFNLEVBQUUsZUFBZSxFQUN2QixhQUFhLEdBQUUsTUFBTSxHQUFHLFNBQXFCLEVBQzdDLEdBQUcsR0FBRSxNQUFpQyw0Q0FrQnZDO0FBQ0Q7Ozs7R0FJRztBQUNILHdCQUFnQixZQUFZLENBQUMsU0FBUyxHQUFFLE9BQWUsR0FBRyxjQUFjLENBR3ZFIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lmdb/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAInE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,aAAa,GAAE,MAAM,GAAG,SAAqB,EAC7C,GAAG,GAAE,MAAiC,4CAkBvC;AACD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,cAAc,CAGvE"}
@@ -0,0 +1,25 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { join } from 'path';
3
+ import { initStoreForRollupAndSchemaVersion } from '../utils.js';
4
+ import { AztecLmdbStore } from './store.js';
5
+ export { AztecLmdbStore } from './store.js';
6
+ export function createStore(name, config, schemaVersion = undefined, log = createLogger('kv-store')) {
7
+ let { dataDirectory } = config;
8
+ if (typeof dataDirectory !== 'undefined') {
9
+ dataDirectory = join(dataDirectory, name);
10
+ }
11
+ 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`);
12
+ const store = AztecLmdbStore.open(dataDirectory, config.dataStoreMapSizeKb, false);
13
+ if (config.rollupAddress) {
14
+ return initStoreForRollupAndSchemaVersion(store, schemaVersion, config.rollupAddress, log);
15
+ }
16
+ return store;
17
+ }
18
+ /**
19
+ * Opens a temporary store for testing purposes.
20
+ * @param ephemeral - true if the store should only exist in memory and not automatically be flushed to disk. Optional
21
+ * @returns A new store
22
+ */ export function openTmpStore(ephemeral = false) {
23
+ const mapSize = 1024 * 1024 * 10; // 10 GB map size
24
+ return AztecLmdbStore.open(undefined, mapSize, ephemeral);
25
+ }
@@ -0,0 +1,40 @@
1
+ import type { Database } from 'lmdb';
2
+ import type { Key, Range, Value } from '../interfaces/common.js';
3
+ import type { AztecAsyncMap, AztecMap } from '../interfaces/map.js';
4
+ /** The slot where a key-value entry would be stored */
5
+ type MapValueSlot<K extends Key | Buffer> = ['map', string, 'slot', K];
6
+ /**
7
+ * A map backed by LMDB.
8
+ */
9
+ export declare class LmdbAztecMap<K extends Key, V extends Value> implements AztecMap<K, V>, AztecAsyncMap<K, V> {
10
+ protected db: Database<[K, V], MapValueSlot<K>>;
11
+ protected name: string;
12
+ protected startSentinel: MapValueSlot<Buffer>;
13
+ protected endSentinel: MapValueSlot<Buffer>;
14
+ constructor(rootDb: Database, mapName: string);
15
+ close(): Promise<void>;
16
+ get(key: K): V | undefined;
17
+ getAsync(key: K): Promise<V | undefined>;
18
+ has(key: K): boolean;
19
+ hasAsync(key: K): Promise<boolean>;
20
+ set(key: K, val: V): Promise<void>;
21
+ setMany(entries: {
22
+ key: K;
23
+ value: V;
24
+ }[]): Promise<void>;
25
+ swap(key: K, fn: (val: V | undefined) => V): Promise<void>;
26
+ setIfNotExists(key: K, val: V): Promise<boolean>;
27
+ delete(key: K): Promise<void>;
28
+ entries(range?: Range<K>): IterableIterator<[K, V]>;
29
+ entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
30
+ values(range?: Range<K>): IterableIterator<V>;
31
+ valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
32
+ size(): number;
33
+ sizeAsync(): Promise<number>;
34
+ keys(range?: Range<K>): IterableIterator<K>;
35
+ keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
36
+ protected slot(key: K): MapValueSlot<K>;
37
+ clear(): Promise<void>;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRSx1REFBdUQ7QUFDdkQsS0FBSyxZQUFZLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUV2RTs7R0FFRztBQUNILHFCQUFhLFlBQVksQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBRXZCLFNBQVMsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVDLFlBQVksTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQVM1QztJQUVELEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXJCO0lBRUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FFekI7SUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUV2QztJQUVELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FFbkI7SUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRUssR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXZDO0lBRUssT0FBTyxDQUFDLE9BQU8sRUFBRTtRQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0tBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJNUQ7SUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU16RDtJQUVELGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUsvQztJQUVLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFbEM7SUFFQSxPQUFPLENBQUMsS0FBSyxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQXlDdkQ7SUFFTSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBSW5FO0lBRUEsTUFBTSxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBSWpEO0lBRU0sV0FBVyxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBSWpFO0lBRUQsSUFBSSxJQUFJLE1BQU0sQ0FHYjtJQUVELFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTNCO0lBRUEsSUFBSSxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBSS9DO0lBRU0sU0FBUyxDQUFDLEtBQUssR0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBSS9EO0lBRUQsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FFdEM7SUFFSyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQVczQjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/lmdb/map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * A map backed by LMDB.
3
+ */ export class LmdbAztecMap {
4
+ db;
5
+ name;
6
+ startSentinel;
7
+ endSentinel;
8
+ constructor(rootDb, mapName){
9
+ this.name = mapName;
10
+ this.db = rootDb;
11
+ // sentinels are used to define the start and end of the map
12
+ // with LMDB's key encoding, no _primitive value_ can be "less than" an empty buffer or greater than Byte 255
13
+ // these will be used later to answer range queries
14
+ this.startSentinel = [
15
+ 'map',
16
+ this.name,
17
+ 'slot',
18
+ Buffer.from([])
19
+ ];
20
+ this.endSentinel = [
21
+ 'map',
22
+ this.name,
23
+ 'slot',
24
+ Buffer.from([
25
+ 255
26
+ ])
27
+ ];
28
+ }
29
+ close() {
30
+ return this.db.close();
31
+ }
32
+ get(key) {
33
+ return this.db.get(this.slot(key))?.[1];
34
+ }
35
+ getAsync(key) {
36
+ return Promise.resolve(this.get(key));
37
+ }
38
+ has(key) {
39
+ return this.db.doesExist(this.slot(key));
40
+ }
41
+ hasAsync(key) {
42
+ return Promise.resolve(this.has(key));
43
+ }
44
+ async set(key, val) {
45
+ await this.db.put(this.slot(key), [
46
+ key,
47
+ val
48
+ ]);
49
+ }
50
+ async setMany(entries) {
51
+ for (const { key, value } of entries){
52
+ await this.set(key, value);
53
+ }
54
+ }
55
+ swap(key, fn) {
56
+ return this.db.childTransaction(()=>{
57
+ const slot = this.slot(key);
58
+ const entry = this.db.get(slot);
59
+ void this.db.put(slot, [
60
+ key,
61
+ fn(entry?.[1])
62
+ ]);
63
+ });
64
+ }
65
+ setIfNotExists(key, val) {
66
+ const slot = this.slot(key);
67
+ return this.db.ifNoExists(slot, ()=>{
68
+ void this.db.put(slot, [
69
+ key,
70
+ val
71
+ ]);
72
+ });
73
+ }
74
+ async delete(key) {
75
+ await this.db.remove(this.slot(key));
76
+ }
77
+ *entries(range = {}) {
78
+ const transaction = this.db.useReadTransaction();
79
+ try {
80
+ const { reverse = false, limit } = range;
81
+ // LMDB has a quirk where it expects start > end when reverse=true
82
+ // in that case, we need to swap the start and end sentinels
83
+ const start = reverse ? range.end ? this.slot(range.end) : this.endSentinel : range.start ? this.slot(range.start) : this.startSentinel;
84
+ const end = reverse ? range.start ? this.slot(range.start) : this.startSentinel : range.end ? this.slot(range.end) : this.endSentinel;
85
+ const lmdbRange = {
86
+ start,
87
+ end,
88
+ reverse,
89
+ limit,
90
+ transaction
91
+ };
92
+ const iterator = this.db.getRange(lmdbRange);
93
+ for (const { value: [key, value] } of iterator){
94
+ yield [
95
+ key,
96
+ value
97
+ ];
98
+ }
99
+ } finally{
100
+ transaction.done();
101
+ }
102
+ }
103
+ async *entriesAsync(range) {
104
+ for (const entry of this.entries(range)){
105
+ yield entry;
106
+ }
107
+ }
108
+ *values(range = {}) {
109
+ for (const [_, value] of this.entries(range)){
110
+ yield value;
111
+ }
112
+ }
113
+ async *valuesAsync(range = {}) {
114
+ for await (const [_, value] of this.entriesAsync(range)){
115
+ yield value;
116
+ }
117
+ }
118
+ size() {
119
+ const iterator = this.db.getRange({
120
+ start: this.startSentinel,
121
+ end: this.endSentinel
122
+ });
123
+ return iterator.asArray.length;
124
+ }
125
+ sizeAsync() {
126
+ return Promise.resolve(this.size());
127
+ }
128
+ *keys(range = {}) {
129
+ for (const [key, _] of this.entries(range)){
130
+ yield key;
131
+ }
132
+ }
133
+ async *keysAsync(range = {}) {
134
+ for await (const [key, _] of this.entriesAsync(range)){
135
+ yield key;
136
+ }
137
+ }
138
+ slot(key) {
139
+ return [
140
+ 'map',
141
+ this.name,
142
+ 'slot',
143
+ key
144
+ ];
145
+ }
146
+ async clear() {
147
+ const lmdbRange = {
148
+ start: this.startSentinel,
149
+ end: this.endSentinel
150
+ };
151
+ const iterator = this.db.getRange(lmdbRange);
152
+ for (const { key } of iterator){
153
+ await this.db.remove(key);
154
+ }
155
+ }
156
+ }