@aztec/kv-store 0.81.0 → 0.82.1-alpha-testnet.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +3 -1
- package/dest/indexeddb/map.d.ts +5 -4
- package/dest/indexeddb/map.d.ts.map +1 -1
- package/dest/indexeddb/map.js +13 -53
- package/dest/indexeddb/multi_map.d.ts +12 -0
- package/dest/indexeddb/multi_map.d.ts.map +1 -0
- package/dest/indexeddb/multi_map.js +54 -0
- package/dest/indexeddb/store.d.ts +2 -1
- package/dest/indexeddb/store.d.ts.map +1 -1
- package/dest/indexeddb/store.js +2 -1
- package/dest/interfaces/index.d.ts +1 -0
- package/dest/interfaces/index.d.ts.map +1 -1
- package/dest/interfaces/index.js +1 -0
- package/dest/interfaces/map.d.ts +0 -46
- package/dest/interfaces/map.d.ts.map +1 -1
- package/dest/interfaces/map.js +1 -1
- package/dest/interfaces/map_test_suite.d.ts.map +1 -1
- package/dest/interfaces/map_test_suite.js +6 -20
- package/dest/interfaces/multi_map.d.ts +35 -0
- package/dest/interfaces/multi_map.d.ts.map +1 -0
- package/dest/interfaces/multi_map.js +3 -0
- package/dest/interfaces/multi_map_test_suite.d.ts +3 -0
- package/dest/interfaces/multi_map_test_suite.d.ts.map +1 -0
- package/dest/interfaces/multi_map_test_suite.js +151 -0
- package/dest/interfaces/store.d.ts +2 -13
- package/dest/interfaces/store.d.ts.map +1 -1
- package/dest/lmdb/map.d.ts +2 -18
- package/dest/lmdb/map.d.ts.map +1 -1
- package/dest/lmdb/map.js +0 -81
- package/dest/lmdb/multi_map.d.ts +12 -0
- package/dest/lmdb/multi_map.d.ts.map +1 -0
- package/dest/lmdb/multi_map.js +29 -0
- package/dest/lmdb/store.d.ts +2 -13
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +3 -16
- package/dest/lmdb-v2/array.d.ts.map +1 -1
- package/dest/lmdb-v2/array.js +1 -0
- package/dest/lmdb-v2/map.d.ts +1 -43
- package/dest/lmdb-v2/map.d.ts.map +1 -1
- package/dest/lmdb-v2/map.js +1 -100
- package/dest/lmdb-v2/multi_map.d.ts +46 -0
- package/dest/lmdb-v2/multi_map.d.ts.map +1 -0
- package/dest/lmdb-v2/multi_map.js +103 -0
- package/dest/lmdb-v2/singleton.d.ts.map +1 -1
- package/dest/lmdb-v2/singleton.js +1 -0
- package/dest/lmdb-v2/store.d.ts +2 -1
- package/dest/lmdb-v2/store.d.ts.map +1 -1
- package/dest/lmdb-v2/store.js +5 -1
- package/package.json +5 -5
- package/src/config.ts +3 -1
- package/src/indexeddb/map.ts +15 -47
- package/src/indexeddb/multi_map.ts +53 -0
- package/src/indexeddb/store.ts +9 -3
- package/src/interfaces/index.ts +1 -0
- package/src/interfaces/map.ts +0 -52
- package/src/interfaces/map_test_suite.ts +18 -33
- package/src/interfaces/multi_map.ts +38 -0
- package/src/interfaces/multi_map_test_suite.ts +143 -0
- package/src/interfaces/store.ts +2 -22
- package/src/lmdb/map.ts +2 -88
- package/src/lmdb/multi_map.ts +35 -0
- package/src/lmdb/store.ts +5 -27
- package/src/lmdb-v2/array.ts +1 -0
- package/src/lmdb-v2/map.ts +2 -120
- package/src/lmdb-v2/multi_map.ts +126 -0
- package/src/lmdb-v2/singleton.ts +1 -0
- package/src/lmdb-v2/store.ts +7 -2
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AztecArray, AztecAsyncArray } from './array.js';
|
|
2
2
|
import type { Key, StoreSize } from './common.js';
|
|
3
3
|
import type { AztecAsyncCounter, AztecCounter } from './counter.js';
|
|
4
|
-
import type { AztecAsyncMap,
|
|
4
|
+
import type { AztecAsyncMap, AztecMap } from './map.js';
|
|
5
|
+
import type { AztecAsyncMultiMap, AztecMultiMap } from './multi_map.js';
|
|
5
6
|
import type { AztecAsyncSet, AztecSet } from './set.js';
|
|
6
7
|
import type { AztecAsyncSingleton, AztecSingleton } from './singleton.js';
|
|
7
8
|
/** A key-value store */
|
|
@@ -25,18 +26,6 @@ export interface AztecKVStore {
|
|
|
25
26
|
* @returns The multi-map
|
|
26
27
|
*/
|
|
27
28
|
openMultiMap<K extends Key, V>(name: string): AztecMultiMap<K, V>;
|
|
28
|
-
/**
|
|
29
|
-
* Creates a new multi-map with size.
|
|
30
|
-
* @param name - The name of the multi-map
|
|
31
|
-
* @returns The multi-map
|
|
32
|
-
*/
|
|
33
|
-
openMultiMapWithSize<K extends Key, V>(name: string): AztecMultiMapWithSize<K, V>;
|
|
34
|
-
/**
|
|
35
|
-
* Creates a new map with size.
|
|
36
|
-
* @param name - The name of the map
|
|
37
|
-
* @returns The map
|
|
38
|
-
*/
|
|
39
|
-
openMapWithSize<K extends Key, V>(name: string): AztecMapWithSize<K, V>;
|
|
40
29
|
/**
|
|
41
30
|
* Creates a new array.
|
|
42
31
|
* @param name - The name of the array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE1E,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,IAAI,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7D;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAEvD;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAE/C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAEvD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAE/D;;;OAGG;IACH,gBAAgB,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
package/dest/lmdb/map.d.ts
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
import type { Database } from 'lmdb';
|
|
4
4
|
import type { Key, Range } from '../interfaces/common.js';
|
|
5
|
-
import type {
|
|
5
|
+
import type { AztecAsyncMap, AztecMap } from '../interfaces/map.js';
|
|
6
6
|
/** The slot where a key-value entry would be stored */
|
|
7
7
|
type MapValueSlot<K extends Key | Buffer> = ['map', string, 'slot', K];
|
|
8
8
|
/**
|
|
9
9
|
* A map backed by LMDB.
|
|
10
10
|
*/
|
|
11
|
-
export declare class LmdbAztecMap<K extends Key, V> implements
|
|
11
|
+
export declare class LmdbAztecMap<K extends Key, V> implements AztecMap<K, V>, AztecAsyncMap<K, V> {
|
|
12
12
|
protected db: Database<[K, V], MapValueSlot<K>>;
|
|
13
13
|
protected name: string;
|
|
14
14
|
protected startSentinel: MapValueSlot<Buffer>;
|
|
@@ -17,15 +17,12 @@ export declare class LmdbAztecMap<K extends Key, V> implements AztecMultiMap<K,
|
|
|
17
17
|
close(): Promise<void>;
|
|
18
18
|
get(key: K): V | undefined;
|
|
19
19
|
getAsync(key: K): Promise<V | undefined>;
|
|
20
|
-
getValues(key: K): IterableIterator<V>;
|
|
21
|
-
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
22
20
|
has(key: K): boolean;
|
|
23
21
|
hasAsync(key: K): Promise<boolean>;
|
|
24
22
|
set(key: K, val: V): Promise<void>;
|
|
25
23
|
swap(key: K, fn: (val: V | undefined) => V): Promise<void>;
|
|
26
24
|
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
27
25
|
delete(key: K): Promise<void>;
|
|
28
|
-
deleteValue(key: K, val: V): Promise<void>;
|
|
29
26
|
entries(range?: Range<K>): IterableIterator<[K, V]>;
|
|
30
27
|
entriesAsync(range?: Range<K> | undefined): AsyncIterableIterator<[K, V]>;
|
|
31
28
|
values(range?: Range<K>): IterableIterator<V>;
|
|
@@ -35,18 +32,5 @@ export declare class LmdbAztecMap<K extends Key, V> implements AztecMultiMap<K,
|
|
|
35
32
|
protected slot(key: K): MapValueSlot<K>;
|
|
36
33
|
clear(): Promise<void>;
|
|
37
34
|
}
|
|
38
|
-
export declare class LmdbAztecMapWithSize<K extends Key, V> extends LmdbAztecMap<K, V> implements AztecMapWithSize<K, V>, AztecAsyncMultiMap<K, V> {
|
|
39
|
-
#private;
|
|
40
|
-
constructor(rootDb: Database, mapName: string);
|
|
41
|
-
set(key: K, val: V): Promise<void>;
|
|
42
|
-
delete(key: K): Promise<void>;
|
|
43
|
-
deleteValue(key: K, val: V): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Gets the size of the map by counting entries.
|
|
46
|
-
* @returns The number of entries in the map
|
|
47
|
-
*/
|
|
48
|
-
size(): number;
|
|
49
|
-
clearCache(): void;
|
|
50
|
-
}
|
|
51
35
|
export {};
|
|
52
36
|
//# sourceMappingURL=map.d.ts.map
|
package/dest/lmdb/map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/lmdb/map.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,MAAM,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/lmdb/map.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,MAAM,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEpE,uDAAuD;AACvD,KAAK,YAAY,CAAC,CAAC,SAAS,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAEvE;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,YAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACxF,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBAEhC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IAW7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAI1B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1C,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,OAAO,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA2CjD,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAM/E,MAAM,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAM3C,WAAW,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAMjE,IAAI,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAMzC,SAAS,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAMhE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAIjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
|
package/dest/lmdb/map.js
CHANGED
|
@@ -35,24 +35,6 @@
|
|
|
35
35
|
getAsync(key) {
|
|
36
36
|
return Promise.resolve(this.get(key));
|
|
37
37
|
}
|
|
38
|
-
*getValues(key) {
|
|
39
|
-
const transaction = this.db.useReadTransaction();
|
|
40
|
-
try {
|
|
41
|
-
const values = this.db.getValues(this.slot(key), {
|
|
42
|
-
transaction
|
|
43
|
-
});
|
|
44
|
-
for (const value of values){
|
|
45
|
-
yield value?.[1];
|
|
46
|
-
}
|
|
47
|
-
} finally{
|
|
48
|
-
transaction.done();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async *getValuesAsync(key) {
|
|
52
|
-
for (const value of this.getValues(key)){
|
|
53
|
-
yield value;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
38
|
has(key) {
|
|
57
39
|
return this.db.doesExist(this.slot(key));
|
|
58
40
|
}
|
|
@@ -87,12 +69,6 @@
|
|
|
87
69
|
async delete(key) {
|
|
88
70
|
await this.db.remove(this.slot(key));
|
|
89
71
|
}
|
|
90
|
-
async deleteValue(key, val) {
|
|
91
|
-
await this.db.remove(this.slot(key), [
|
|
92
|
-
key,
|
|
93
|
-
val
|
|
94
|
-
]);
|
|
95
|
-
}
|
|
96
72
|
*entries(range = {}) {
|
|
97
73
|
const transaction = this.db.useReadTransaction();
|
|
98
74
|
try {
|
|
@@ -163,60 +139,3 @@
|
|
|
163
139
|
}
|
|
164
140
|
}
|
|
165
141
|
}
|
|
166
|
-
export class LmdbAztecMapWithSize extends LmdbAztecMap {
|
|
167
|
-
#sizeCache;
|
|
168
|
-
constructor(rootDb, mapName){
|
|
169
|
-
super(rootDb, mapName);
|
|
170
|
-
}
|
|
171
|
-
async set(key, val) {
|
|
172
|
-
await this.db.childTransaction(()=>{
|
|
173
|
-
const exists = this.db.doesExist(this.slot(key));
|
|
174
|
-
this.db.putSync(this.slot(key), [
|
|
175
|
-
key,
|
|
176
|
-
val
|
|
177
|
-
], {
|
|
178
|
-
appendDup: true
|
|
179
|
-
});
|
|
180
|
-
if (!exists) {
|
|
181
|
-
this.#sizeCache = undefined; // Invalidate cache
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
async delete(key) {
|
|
186
|
-
await this.db.childTransaction(async ()=>{
|
|
187
|
-
const exists = this.db.doesExist(this.slot(key));
|
|
188
|
-
if (exists) {
|
|
189
|
-
await this.db.remove(this.slot(key));
|
|
190
|
-
this.#sizeCache = undefined; // Invalidate cache
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
async deleteValue(key, val) {
|
|
195
|
-
await this.db.childTransaction(async ()=>{
|
|
196
|
-
const exists = this.db.doesExist(this.slot(key));
|
|
197
|
-
if (exists) {
|
|
198
|
-
await this.db.remove(this.slot(key), [
|
|
199
|
-
key,
|
|
200
|
-
val
|
|
201
|
-
]);
|
|
202
|
-
this.#sizeCache = undefined; // Invalidate cache
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Gets the size of the map by counting entries.
|
|
208
|
-
* @returns The number of entries in the map
|
|
209
|
-
*/ size() {
|
|
210
|
-
if (this.#sizeCache === undefined) {
|
|
211
|
-
this.#sizeCache = this.db.getCount({
|
|
212
|
-
start: this.startSentinel,
|
|
213
|
-
end: this.endSentinel
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
return this.#sizeCache;
|
|
217
|
-
}
|
|
218
|
-
// Reset cache on clear/drop operations
|
|
219
|
-
clearCache() {
|
|
220
|
-
this.#sizeCache = undefined;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Key } from '../interfaces/common.js';
|
|
2
|
+
import type { AztecAsyncMultiMap, AztecMultiMap } from '../interfaces/multi_map.js';
|
|
3
|
+
import { LmdbAztecMap } from './map.js';
|
|
4
|
+
/**
|
|
5
|
+
* A map backed by LMDB.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LmdbAztecMultiMap<K extends Key, V> extends LmdbAztecMap<K, V> implements AztecMultiMap<K, V>, AztecAsyncMultiMap<K, V> {
|
|
8
|
+
getValues(key: K): IterableIterator<V>;
|
|
9
|
+
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
10
|
+
deleteValue(key: K, val: V): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=multi_map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi_map.d.ts","sourceRoot":"","sources":["../../src/lmdb/multi_map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAC7C,SAAQ,YAAY,CAAC,CAAC,EAAE,CAAC,CACzB,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAchC,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAMjD,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LmdbAztecMap } from './map.js';
|
|
2
|
+
/**
|
|
3
|
+
* A map backed by LMDB.
|
|
4
|
+
*/ export class LmdbAztecMultiMap extends LmdbAztecMap {
|
|
5
|
+
*getValues(key) {
|
|
6
|
+
const transaction = this.db.useReadTransaction();
|
|
7
|
+
try {
|
|
8
|
+
const values = this.db.getValues(this.slot(key), {
|
|
9
|
+
transaction
|
|
10
|
+
});
|
|
11
|
+
for (const value of values){
|
|
12
|
+
yield value?.[1];
|
|
13
|
+
}
|
|
14
|
+
} finally{
|
|
15
|
+
transaction.done();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async *getValuesAsync(key) {
|
|
19
|
+
for (const value of this.getValues(key)){
|
|
20
|
+
yield value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async deleteValue(key, val) {
|
|
24
|
+
await this.db.remove(this.slot(key), [
|
|
25
|
+
key,
|
|
26
|
+
val
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
}
|
package/dest/lmdb/store.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { type RootDatabase } from 'lmdb';
|
|
|
2
2
|
import type { AztecArray, AztecAsyncArray } from '../interfaces/array.js';
|
|
3
3
|
import type { Key, StoreSize } from '../interfaces/common.js';
|
|
4
4
|
import type { AztecAsyncCounter, AztecCounter } from '../interfaces/counter.js';
|
|
5
|
-
import type { AztecAsyncMap,
|
|
5
|
+
import type { AztecAsyncMap, AztecMap } from '../interfaces/map.js';
|
|
6
|
+
import type { AztecAsyncMultiMap, AztecMultiMap } from '../interfaces/multi_map.js';
|
|
6
7
|
import type { AztecAsyncSet, AztecSet } from '../interfaces/set.js';
|
|
7
8
|
import type { AztecAsyncSingleton, AztecSingleton } from '../interfaces/singleton.js';
|
|
8
9
|
import type { AztecAsyncKVStore, AztecKVStore } from '../interfaces/store.js';
|
|
@@ -54,18 +55,6 @@ export declare class AztecLmdbStore implements AztecKVStore, AztecAsyncKVStore {
|
|
|
54
55
|
*/
|
|
55
56
|
openMultiMap<K extends Key, V>(name: string): AztecMultiMap<K, V> & AztecAsyncMultiMap<K, V>;
|
|
56
57
|
openCounter<K extends Key>(name: string): AztecCounter<K> & AztecAsyncCounter<K>;
|
|
57
|
-
/**
|
|
58
|
-
* Creates a new AztecMultiMapWithSize in the store. A multi-map with size stores multiple values for a single key automatically.
|
|
59
|
-
* @param name - Name of the map
|
|
60
|
-
* @returns A new AztecMultiMapWithSize
|
|
61
|
-
*/
|
|
62
|
-
openMultiMapWithSize<K extends Key, V>(name: string): AztecMultiMapWithSize<K, V>;
|
|
63
|
-
/**
|
|
64
|
-
* Creates a new AztecMapWithSize in the store.
|
|
65
|
-
* @param name - Name of the map
|
|
66
|
-
* @returns A new AztecMapWithSize
|
|
67
|
-
*/
|
|
68
|
-
openMapWithSize<K extends Key, V>(name: string): AztecMapWithSize<K, V>;
|
|
69
58
|
/**
|
|
70
59
|
* Creates a new AztecArray in the store.
|
|
71
60
|
* @param name - Name of the array
|
package/dest/lmdb/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY,EAAE,iBAAiB;;aAQlB,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI;IAPpF,WAAW,OAAiB;gBAOhB,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,EAAE,MAAM;IAgB5F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAkB,EAAE,4BAA4B;IACzD,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAAgC,GAClC,cAAc;IASjB;;;OAGG;IACG,IAAI;IAWV;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAIpE;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAI5F,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAIhF;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAI9D;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAI1E;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;;;OAIG;IACG,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjE;;OAEG;IACG,KAAK;IAMX;;OAEG;IACG,IAAI;IAMV;;OAEG;IACG,KAAK;IAMX,kEAAkE;IAC5D,MAAM;IASZ,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAiBlC,OAAO,CAAC,iBAAiB;CA2B1B"}
|
package/dest/lmdb/store.js
CHANGED
|
@@ -6,7 +6,8 @@ import { tmpdir } from 'os';
|
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { LmdbAztecArray } from './array.js';
|
|
8
8
|
import { LmdbAztecCounter } from './counter.js';
|
|
9
|
-
import { LmdbAztecMap
|
|
9
|
+
import { LmdbAztecMap } from './map.js';
|
|
10
|
+
import { LmdbAztecMultiMap } from './multi_map.js';
|
|
10
11
|
import { LmdbAztecSet } from './set.js';
|
|
11
12
|
import { LmdbAztecSingleton } from './singleton.js';
|
|
12
13
|
/**
|
|
@@ -96,26 +97,12 @@ import { LmdbAztecSingleton } from './singleton.js';
|
|
|
96
97
|
* @param name - Name of the map
|
|
97
98
|
* @returns A new AztecMultiMap
|
|
98
99
|
*/ openMultiMap(name) {
|
|
99
|
-
return new
|
|
100
|
+
return new LmdbAztecMultiMap(this.#multiMapData, name);
|
|
100
101
|
}
|
|
101
102
|
openCounter(name) {
|
|
102
103
|
return new LmdbAztecCounter(this.#data, name);
|
|
103
104
|
}
|
|
104
105
|
/**
|
|
105
|
-
* Creates a new AztecMultiMapWithSize in the store. A multi-map with size stores multiple values for a single key automatically.
|
|
106
|
-
* @param name - Name of the map
|
|
107
|
-
* @returns A new AztecMultiMapWithSize
|
|
108
|
-
*/ openMultiMapWithSize(name) {
|
|
109
|
-
return new LmdbAztecMapWithSize(this.#multiMapData, name);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Creates a new AztecMapWithSize in the store.
|
|
113
|
-
* @param name - Name of the map
|
|
114
|
-
* @returns A new AztecMapWithSize
|
|
115
|
-
*/ openMapWithSize(name) {
|
|
116
|
-
return new LmdbAztecMapWithSize(this.#data, name);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
106
|
* Creates a new AztecArray in the store.
|
|
120
107
|
* @param name - Name of the array
|
|
121
108
|
* @returns A new AztecArray
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/array.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/array.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,gBAAgB,EAA+B,MAAM,YAAY,CAAC;AAG3E,qBAAa,SAAS,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAKzC,OAAO,CAAC,KAAK;IAJzB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAS;gBAEH,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAKzD,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAgB7B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAc9C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAexC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,YAAY,IAAI,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IA2BlD,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC;IAM9C,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;CAGnD"}
|
package/dest/lmdb-v2/array.js
CHANGED
package/dest/lmdb-v2/map.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Key, Range } from '../interfaces/common.js';
|
|
2
|
-
import type { AztecAsyncMap
|
|
2
|
+
import type { AztecAsyncMap } from '../interfaces/map.js';
|
|
3
3
|
import { type AztecLMDBStoreV2 } from './store.js';
|
|
4
4
|
export declare class LMDBMap<K extends Key, V> implements AztecAsyncMap<K, V> {
|
|
5
5
|
private store;
|
|
@@ -41,46 +41,4 @@ export declare class LMDBMap<K extends Key, V> implements AztecAsyncMap<K, V> {
|
|
|
41
41
|
*/
|
|
42
42
|
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
43
43
|
}
|
|
44
|
-
export declare class LMDBMultiMap<K extends Key, V> implements AztecAsyncMultiMap<K, V> {
|
|
45
|
-
private store;
|
|
46
|
-
private prefix;
|
|
47
|
-
private encoder;
|
|
48
|
-
constructor(store: AztecLMDBStoreV2, name: string);
|
|
49
|
-
/**
|
|
50
|
-
* Sets the value at the given key.
|
|
51
|
-
* @param key - The key to set the value at
|
|
52
|
-
* @param val - The value to set
|
|
53
|
-
*/
|
|
54
|
-
set(key: K, val: V): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Sets the value at the given key if it does not already exist.
|
|
57
|
-
* @param key - The key to set the value at
|
|
58
|
-
* @param val - The value to set
|
|
59
|
-
*/
|
|
60
|
-
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
61
|
-
/**
|
|
62
|
-
* Deletes the value at the given key.
|
|
63
|
-
* @param key - The key to delete the value at
|
|
64
|
-
*/
|
|
65
|
-
delete(key: K): Promise<void>;
|
|
66
|
-
getAsync(key: K): Promise<V | undefined>;
|
|
67
|
-
hasAsync(key: K): Promise<boolean>;
|
|
68
|
-
/**
|
|
69
|
-
* Iterates over the map's key-value entries in the key's natural order
|
|
70
|
-
* @param range - The range of keys to iterate over
|
|
71
|
-
*/
|
|
72
|
-
entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
|
|
73
|
-
/**
|
|
74
|
-
* Iterates over the map's values in the key's natural order
|
|
75
|
-
* @param range - The range of keys to iterate over
|
|
76
|
-
*/
|
|
77
|
-
valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
|
|
78
|
-
/**
|
|
79
|
-
* Iterates over the map's keys in the key's natural order
|
|
80
|
-
* @param range - The range of keys to iterate over
|
|
81
|
-
*/
|
|
82
|
-
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
83
|
-
deleteValue(key: K, val: V | undefined): Promise<void>;
|
|
84
|
-
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
85
|
-
}
|
|
86
44
|
//# sourceMappingURL=map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,KAAK,gBAAgB,EAA+B,MAAM,YAAY,CAAC;AAGhF,qBAAa,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAIvD,OAAO,CAAC,KAAK;IAHzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;gBAEZ,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAGzD;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAYhD;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAOxC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC;;;OAGG;IACI,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA8BpE;;;OAGG;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAM9D;;;OAGG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;CAK7D"}
|
package/dest/lmdb-v2/map.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Encoder } from 'msgpackr';
|
|
2
|
+
// eslint-disable-next-line import/no-cycle
|
|
2
3
|
import { execInReadTx, execInWriteTx } from './store.js';
|
|
3
4
|
import { deserializeKey, maxKey, minKey, serializeKey } from './utils.js';
|
|
4
5
|
export class LMDBMap {
|
|
@@ -91,103 +92,3 @@ export class LMDBMap {
|
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
|
-
export class LMDBMultiMap {
|
|
95
|
-
store;
|
|
96
|
-
prefix;
|
|
97
|
-
encoder;
|
|
98
|
-
constructor(store, name){
|
|
99
|
-
this.store = store;
|
|
100
|
-
this.encoder = new Encoder();
|
|
101
|
-
this.prefix = `multimap:${name}`;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Sets the value at the given key.
|
|
105
|
-
* @param key - The key to set the value at
|
|
106
|
-
* @param val - The value to set
|
|
107
|
-
*/ set(key, val) {
|
|
108
|
-
return execInWriteTx(this.store, (tx)=>tx.setIndex(serializeKey(this.prefix, key), this.encoder.pack(val)));
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Sets the value at the given key if it does not already exist.
|
|
112
|
-
* @param key - The key to set the value at
|
|
113
|
-
* @param val - The value to set
|
|
114
|
-
*/ setIfNotExists(key, val) {
|
|
115
|
-
return execInWriteTx(this.store, async (tx)=>{
|
|
116
|
-
const exists = !!await this.getAsync(key);
|
|
117
|
-
if (!exists) {
|
|
118
|
-
await tx.setIndex(serializeKey(this.prefix, key), this.encoder.pack(val));
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
return false;
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Deletes the value at the given key.
|
|
126
|
-
* @param key - The key to delete the value at
|
|
127
|
-
*/ delete(key) {
|
|
128
|
-
return execInWriteTx(this.store, (tx)=>tx.removeIndex(serializeKey(this.prefix, key)));
|
|
129
|
-
}
|
|
130
|
-
getAsync(key) {
|
|
131
|
-
return execInReadTx(this.store, async (tx)=>{
|
|
132
|
-
const val = await tx.getIndex(serializeKey(this.prefix, key));
|
|
133
|
-
return val.length > 0 ? this.encoder.unpack(val[0]) : undefined;
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
hasAsync(key) {
|
|
137
|
-
return execInReadTx(this.store, async (tx)=>(await tx.getIndex(serializeKey(this.prefix, key))).length > 0);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Iterates over the map's key-value entries in the key's natural order
|
|
141
|
-
* @param range - The range of keys to iterate over
|
|
142
|
-
*/ async *entriesAsync(range) {
|
|
143
|
-
const reverse = range?.reverse ?? false;
|
|
144
|
-
const startKey = range?.start ? serializeKey(this.prefix, range.start) : minKey(this.prefix);
|
|
145
|
-
const endKey = range?.end ? serializeKey(this.prefix, range.end) : reverse ? maxKey(this.prefix) : undefined;
|
|
146
|
-
let tx = this.store.getCurrentWriteTx();
|
|
147
|
-
const shouldClose = !tx;
|
|
148
|
-
tx ??= this.store.getReadTx();
|
|
149
|
-
try {
|
|
150
|
-
for await (const [key, vals] of tx.iterateIndex(reverse ? endKey : startKey, reverse ? startKey : endKey, reverse, range?.limit)){
|
|
151
|
-
const deserializedKey = deserializeKey(this.prefix, key);
|
|
152
|
-
if (!deserializedKey) {
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
for (const val of vals){
|
|
156
|
-
yield [
|
|
157
|
-
deserializedKey,
|
|
158
|
-
this.encoder.unpack(val)
|
|
159
|
-
];
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
} finally{
|
|
163
|
-
if (shouldClose) {
|
|
164
|
-
tx.close();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Iterates over the map's values in the key's natural order
|
|
170
|
-
* @param range - The range of keys to iterate over
|
|
171
|
-
*/ async *valuesAsync(range) {
|
|
172
|
-
for await (const [_, value] of this.entriesAsync(range)){
|
|
173
|
-
yield value;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Iterates over the map's keys in the key's natural order
|
|
178
|
-
* @param range - The range of keys to iterate over
|
|
179
|
-
*/ async *keysAsync(range) {
|
|
180
|
-
for await (const [key, _] of this.entriesAsync(range)){
|
|
181
|
-
yield key;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
deleteValue(key, val) {
|
|
185
|
-
return execInWriteTx(this.store, (tx)=>tx.removeIndex(serializeKey(this.prefix, key), this.encoder.pack(val)));
|
|
186
|
-
}
|
|
187
|
-
async *getValuesAsync(key) {
|
|
188
|
-
const values = await execInReadTx(this.store, (tx)=>tx.getIndex(serializeKey(this.prefix, key)));
|
|
189
|
-
for (const value of values){
|
|
190
|
-
yield this.encoder.unpack(value);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Key, Range } from '../interfaces/common.js';
|
|
2
|
+
import type { AztecAsyncMultiMap } from '../interfaces/multi_map.js';
|
|
3
|
+
import { type AztecLMDBStoreV2 } from './store.js';
|
|
4
|
+
export declare class LMDBMultiMap<K extends Key, V> implements AztecAsyncMultiMap<K, V> {
|
|
5
|
+
private store;
|
|
6
|
+
private prefix;
|
|
7
|
+
private encoder;
|
|
8
|
+
constructor(store: AztecLMDBStoreV2, name: string);
|
|
9
|
+
/**
|
|
10
|
+
* Sets the value at the given key.
|
|
11
|
+
* @param key - The key to set the value at
|
|
12
|
+
* @param val - The value to set
|
|
13
|
+
*/
|
|
14
|
+
set(key: K, val: V): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Sets the value at the given key if it does not already exist.
|
|
17
|
+
* @param key - The key to set the value at
|
|
18
|
+
* @param val - The value to set
|
|
19
|
+
*/
|
|
20
|
+
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Deletes the value at the given key.
|
|
23
|
+
* @param key - The key to delete the value at
|
|
24
|
+
*/
|
|
25
|
+
delete(key: K): Promise<void>;
|
|
26
|
+
getAsync(key: K): Promise<V | undefined>;
|
|
27
|
+
hasAsync(key: K): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Iterates over the map's key-value entries in the key's natural order
|
|
30
|
+
* @param range - The range of keys to iterate over
|
|
31
|
+
*/
|
|
32
|
+
entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
|
|
33
|
+
/**
|
|
34
|
+
* Iterates over the map's values in the key's natural order
|
|
35
|
+
* @param range - The range of keys to iterate over
|
|
36
|
+
*/
|
|
37
|
+
valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterates over the map's keys in the key's natural order
|
|
40
|
+
* @param range - The range of keys to iterate over
|
|
41
|
+
*/
|
|
42
|
+
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
43
|
+
deleteValue(key: K, val: V | undefined): Promise<void>;
|
|
44
|
+
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=multi_map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi_map.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/multi_map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,KAAK,gBAAgB,EAA+B,MAAM,YAAY,CAAC;AAGhF,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAE,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGjE,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;gBACZ,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAIzD;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhD;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAOxC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC;;;OAGG;IACI,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgCpE;;;OAGG;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAM9D;;;OAGG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAM5D,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;CAMxD"}
|