@aztec/kv-store 0.47.1 → 0.49.2
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/interfaces/store.d.ts +9 -1
- package/dest/interfaces/store.d.ts.map +1 -1
- package/dest/lmdb/store.d.ts +11 -2
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +32 -11
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +11 -2
- package/package.json +2 -2
- package/src/interfaces/store.ts +11 -1
- package/src/lmdb/store.ts +30 -8
- package/src/utils.ts +10 -1
|
@@ -47,8 +47,16 @@ export interface AztecKVStore {
|
|
|
47
47
|
*/
|
|
48
48
|
transaction<T extends Exclude<any, Promise<any>>>(callback: () => T): Promise<T>;
|
|
49
49
|
/**
|
|
50
|
-
* Clears the store
|
|
50
|
+
* Clears all entries in the store
|
|
51
51
|
*/
|
|
52
52
|
clear(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Forks the store.
|
|
55
|
+
*/
|
|
56
|
+
fork(): Promise<AztecKVStore>;
|
|
57
|
+
/**
|
|
58
|
+
* Deletes the store
|
|
59
|
+
*/
|
|
60
|
+
delete(): Promise<void>;
|
|
53
61
|
}
|
|
54
62
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;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;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;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;CACzB"}
|
package/dest/lmdb/store.d.ts
CHANGED
|
@@ -10,7 +10,9 @@ import { type AztecKVStore } from '../interfaces/store.js';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class AztecLmdbStore implements AztecKVStore {
|
|
12
12
|
#private;
|
|
13
|
-
|
|
13
|
+
readonly isEphemeral: boolean;
|
|
14
|
+
private path?;
|
|
15
|
+
constructor(rootDb: RootDatabase, isEphemeral: boolean, path?: string | undefined);
|
|
14
16
|
/**
|
|
15
17
|
* Creates a new AztecKVStore backed by LMDB. The path to the database is optional. If not provided,
|
|
16
18
|
* the database will be stored in a temporary location and be deleted when the process exists.
|
|
@@ -25,6 +27,11 @@ export declare class AztecLmdbStore implements AztecKVStore {
|
|
|
25
27
|
* @returns The store
|
|
26
28
|
*/
|
|
27
29
|
static open(path?: string, ephemeral?: boolean, log?: import("@aztec/foundation/log").Logger): AztecLmdbStore;
|
|
30
|
+
/**
|
|
31
|
+
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
32
|
+
* @returns A new AztecLmdbStore.
|
|
33
|
+
*/
|
|
34
|
+
fork(): Promise<AztecLmdbStore>;
|
|
28
35
|
/**
|
|
29
36
|
* Creates a new AztecMap in the store.
|
|
30
37
|
* @param name - Name of the map
|
|
@@ -63,8 +70,10 @@ export declare class AztecLmdbStore implements AztecKVStore {
|
|
|
63
70
|
*/
|
|
64
71
|
transaction<T>(callback: () => T): Promise<T>;
|
|
65
72
|
/**
|
|
66
|
-
* Clears the store
|
|
73
|
+
* Clears all entries in the store
|
|
67
74
|
*/
|
|
68
75
|
clear(): Promise<void>;
|
|
76
|
+
/** Deletes this store */
|
|
77
|
+
delete(): Promise<void>;
|
|
69
78
|
}
|
|
70
79
|
//# sourceMappingURL=store.d.ts.map
|
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":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAIxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;;aAMC,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC;gBAAzE,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,CAAC,oBAAQ;IAgB7F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IAMjB;;;OAGG;IACG,IAAI;IAYV;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAInE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI7D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9F;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAIjD;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACG,KAAK;IAIX,yBAAyB;IACnB,MAAM;CAGb"}
|
package/dest/lmdb/store.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
var _AztecLmdbStore_rootDb, _AztecLmdbStore_data, _AztecLmdbStore_multiMapData;
|
|
1
|
+
var _AztecLmdbStore_rootDb, _AztecLmdbStore_data, _AztecLmdbStore_multiMapData, _AztecLmdbStore_log;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { mkdtemp } from 'fs/promises';
|
|
4
5
|
import { open } from 'lmdb';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
5
8
|
import { LmdbAztecArray } from './array.js';
|
|
6
9
|
import { LmdbAztecCounter } from './counter.js';
|
|
7
10
|
import { LmdbAztecMap } from './map.js';
|
|
@@ -11,10 +14,13 @@ import { LmdbAztecSingleton } from './singleton.js';
|
|
|
11
14
|
* A key-value store backed by LMDB.
|
|
12
15
|
*/
|
|
13
16
|
export class AztecLmdbStore {
|
|
14
|
-
constructor(rootDb) {
|
|
17
|
+
constructor(rootDb, isEphemeral, path) {
|
|
18
|
+
this.isEphemeral = isEphemeral;
|
|
19
|
+
this.path = path;
|
|
15
20
|
_AztecLmdbStore_rootDb.set(this, void 0);
|
|
16
21
|
_AztecLmdbStore_data.set(this, void 0);
|
|
17
22
|
_AztecLmdbStore_multiMapData.set(this, void 0);
|
|
23
|
+
_AztecLmdbStore_log.set(this, createDebugLogger('aztec:kv-store:lmdb'));
|
|
18
24
|
__classPrivateFieldSet(this, _AztecLmdbStore_rootDb, rootDb, "f");
|
|
19
25
|
// big bucket to store all the data
|
|
20
26
|
__classPrivateFieldSet(this, _AztecLmdbStore_data, rootDb.openDB('data', {
|
|
@@ -41,12 +47,23 @@ export class AztecLmdbStore {
|
|
|
41
47
|
* @returns The store
|
|
42
48
|
*/
|
|
43
49
|
static open(path, ephemeral = false, log = createDebugLogger('aztec:kv-store:lmdb')) {
|
|
44
|
-
log.
|
|
45
|
-
const rootDb = open({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
log.verbose(`Opening LMDB database at ${path || 'temporary location'}`);
|
|
51
|
+
const rootDb = open({ path, noSync: ephemeral });
|
|
52
|
+
return new AztecLmdbStore(rootDb, ephemeral, path);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
56
|
+
* @returns A new AztecLmdbStore.
|
|
57
|
+
*/
|
|
58
|
+
async fork() {
|
|
59
|
+
const baseDir = this.path ? dirname(this.path) : tmpdir();
|
|
60
|
+
__classPrivateFieldGet(this, _AztecLmdbStore_log, "f").debug(`Forking store with basedir ${baseDir}`);
|
|
61
|
+
const forkPath = (await mkdtemp(join(baseDir, 'aztec-store-fork-'))) + (this.isEphemeral || !this.path ? '/data.mdb' : '');
|
|
62
|
+
__classPrivateFieldGet(this, _AztecLmdbStore_log, "f").verbose(`Forking store to ${forkPath}`);
|
|
63
|
+
await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").backup(forkPath, false);
|
|
64
|
+
const forkDb = open(forkPath, { noSync: this.isEphemeral });
|
|
65
|
+
__classPrivateFieldGet(this, _AztecLmdbStore_log, "f").debug(`Forked store at ${forkPath} opened successfully`);
|
|
66
|
+
return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
|
|
50
67
|
}
|
|
51
68
|
/**
|
|
52
69
|
* Creates a new AztecMap in the store.
|
|
@@ -100,11 +117,15 @@ export class AztecLmdbStore {
|
|
|
100
117
|
return __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").transaction(callback);
|
|
101
118
|
}
|
|
102
119
|
/**
|
|
103
|
-
* Clears the store
|
|
120
|
+
* Clears all entries in the store
|
|
104
121
|
*/
|
|
105
122
|
async clear() {
|
|
106
123
|
await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").clearAsync();
|
|
107
124
|
}
|
|
125
|
+
/** Deletes this store */
|
|
126
|
+
async delete() {
|
|
127
|
+
await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").drop();
|
|
128
|
+
}
|
|
108
129
|
}
|
|
109
|
-
_AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap();
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
130
|
+
_AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap(), _AztecLmdbStore_log = new WeakMap();
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVFyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU16QixZQUFZLE1BQW9CLEVBQWtCLFdBQW9CLEVBQVUsSUFBYTtRQUEzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUFVLFNBQUksR0FBSixJQUFJLENBQVM7UUFMN0YseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFDdEMsOEJBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDBCQUFXLE1BQU0sTUFBQSxDQUFDO1FBRXRCLG1DQUFtQztRQUNuQyx1QkFBQSxJQUFJLHdCQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2pDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSxnQkFBZ0I7U0FDOUIsQ0FB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
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,2BASlD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAC7D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,YAAY,CAErE"}
|
package/dest/utils.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { AztecLmdbStore } from './lmdb/store.js';
|
|
3
3
|
export function createStore(config, rollupAddress, log = createDebugLogger('aztec:kv-store')) {
|
|
4
|
-
|
|
4
|
+
if (config.dataDirectory) {
|
|
5
|
+
log.info(`Using data directory: ${config.dataDirectory}`);
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
log.info('Using ephemeral data directory');
|
|
9
|
+
}
|
|
10
|
+
return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
|
|
5
11
|
}
|
|
6
12
|
/**
|
|
7
13
|
* Clears the store if the rollup address does not match the one stored in the database.
|
|
@@ -11,6 +17,9 @@ export function createStore(config, rollupAddress, log = createDebugLogger('azte
|
|
|
11
17
|
* @returns A promise that resolves when the store is cleared, or rejects if the rollup address does not match
|
|
12
18
|
*/
|
|
13
19
|
export async function initStoreForRollup(store, rollupAddress, log) {
|
|
20
|
+
if (!rollupAddress) {
|
|
21
|
+
throw new Error('Rollup address is required');
|
|
22
|
+
}
|
|
14
23
|
const rollupAddressValue = store.openSingleton('rollupAddress');
|
|
15
24
|
const rollupAddressString = rollupAddress.toString();
|
|
16
25
|
const storedRollupAddressString = rollupAddressValue.get();
|
|
@@ -29,4 +38,4 @@ export async function initStoreForRollup(store, rollupAddress, log) {
|
|
|
29
38
|
export function openTmpStore(ephemeral = false) {
|
|
30
39
|
return AztecLmdbStore.open(undefined, ephemeral);
|
|
31
40
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTZDLEVBQzdDLGFBQXlCLEVBQ3pCLE1BQWMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFFakQsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBUSxFQUNSLGFBQXlCLEVBQ3pCLEdBQVk7SUFFWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQXFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFM0QsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFdBQVcsSUFBSSx5QkFBeUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFHLEdBQUcsRUFBRSxJQUFJLENBQ1AscUNBQXFDLGFBQWEsV0FBVyxrQkFBa0IsK0JBQStCLENBQy9HLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFxQixLQUFLO0lBQ3JELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/kv-store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/interfaces/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@aztec/foundation": "0.
|
|
55
|
+
"@aztec/foundation": "0.49.2",
|
|
56
56
|
"lmdb": "^3.0.6"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
package/src/interfaces/store.ts
CHANGED
|
@@ -55,7 +55,17 @@ export interface AztecKVStore {
|
|
|
55
55
|
transaction<T extends Exclude<any, Promise<any>>>(callback: () => T): Promise<T>;
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
|
-
* Clears the store
|
|
58
|
+
* Clears all entries in the store
|
|
59
59
|
*/
|
|
60
60
|
clear(): Promise<void>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Forks the store.
|
|
64
|
+
*/
|
|
65
|
+
fork(): Promise<AztecKVStore>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Deletes the store
|
|
69
|
+
*/
|
|
70
|
+
delete(): Promise<void>;
|
|
61
71
|
}
|
package/src/lmdb/store.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
2
|
|
|
3
|
+
import { mkdtemp } from 'fs/promises';
|
|
3
4
|
import { type Database, type Key, type RootDatabase, open } from 'lmdb';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
4
7
|
|
|
5
8
|
import { type AztecArray } from '../interfaces/array.js';
|
|
6
9
|
import { type AztecCounter } from '../interfaces/counter.js';
|
|
@@ -21,8 +24,9 @@ export class AztecLmdbStore implements AztecKVStore {
|
|
|
21
24
|
#rootDb: RootDatabase;
|
|
22
25
|
#data: Database<unknown, Key>;
|
|
23
26
|
#multiMapData: Database<unknown, Key>;
|
|
27
|
+
#log = createDebugLogger('aztec:kv-store:lmdb');
|
|
24
28
|
|
|
25
|
-
constructor(rootDb: RootDatabase) {
|
|
29
|
+
constructor(rootDb: RootDatabase, public readonly isEphemeral: boolean, private path?: string) {
|
|
26
30
|
this.#rootDb = rootDb;
|
|
27
31
|
|
|
28
32
|
// big bucket to store all the data
|
|
@@ -56,12 +60,25 @@ export class AztecLmdbStore implements AztecKVStore {
|
|
|
56
60
|
ephemeral: boolean = false,
|
|
57
61
|
log = createDebugLogger('aztec:kv-store:lmdb'),
|
|
58
62
|
): AztecLmdbStore {
|
|
59
|
-
log.
|
|
60
|
-
const rootDb = open({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
log.verbose(`Opening LMDB database at ${path || 'temporary location'}`);
|
|
64
|
+
const rootDb = open({ path, noSync: ephemeral });
|
|
65
|
+
return new AztecLmdbStore(rootDb, ephemeral, path);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
|
|
70
|
+
* @returns A new AztecLmdbStore.
|
|
71
|
+
*/
|
|
72
|
+
async fork() {
|
|
73
|
+
const baseDir = this.path ? dirname(this.path) : tmpdir();
|
|
74
|
+
this.#log.debug(`Forking store with basedir ${baseDir}`);
|
|
75
|
+
const forkPath =
|
|
76
|
+
(await mkdtemp(join(baseDir, 'aztec-store-fork-'))) + (this.isEphemeral || !this.path ? '/data.mdb' : '');
|
|
77
|
+
this.#log.verbose(`Forking store to ${forkPath}`);
|
|
78
|
+
await this.#rootDb.backup(forkPath, false);
|
|
79
|
+
const forkDb = open(forkPath, { noSync: this.isEphemeral });
|
|
80
|
+
this.#log.debug(`Forked store at ${forkPath} opened successfully`);
|
|
81
|
+
return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
|
|
65
82
|
}
|
|
66
83
|
|
|
67
84
|
/**
|
|
@@ -123,9 +140,14 @@ export class AztecLmdbStore implements AztecKVStore {
|
|
|
123
140
|
}
|
|
124
141
|
|
|
125
142
|
/**
|
|
126
|
-
* Clears the store
|
|
143
|
+
* Clears all entries in the store
|
|
127
144
|
*/
|
|
128
145
|
async clear() {
|
|
129
146
|
await this.#rootDb.clearAsync();
|
|
130
147
|
}
|
|
148
|
+
|
|
149
|
+
/** Deletes this store */
|
|
150
|
+
async delete() {
|
|
151
|
+
await this.#rootDb.drop();
|
|
152
|
+
}
|
|
131
153
|
}
|
package/src/utils.ts
CHANGED
|
@@ -9,7 +9,13 @@ export function createStore(
|
|
|
9
9
|
rollupAddress: EthAddress,
|
|
10
10
|
log: Logger = createDebugLogger('aztec:kv-store'),
|
|
11
11
|
) {
|
|
12
|
-
|
|
12
|
+
if (config.dataDirectory) {
|
|
13
|
+
log.info(`Using data directory: ${config.dataDirectory}`);
|
|
14
|
+
} else {
|
|
15
|
+
log.info('Using ephemeral data directory');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
/**
|
|
@@ -24,6 +30,9 @@ export async function initStoreForRollup<T extends AztecKVStore>(
|
|
|
24
30
|
rollupAddress: EthAddress,
|
|
25
31
|
log?: Logger,
|
|
26
32
|
): Promise<T> {
|
|
33
|
+
if (!rollupAddress) {
|
|
34
|
+
throw new Error('Rollup address is required');
|
|
35
|
+
}
|
|
27
36
|
const rollupAddressValue = store.openSingleton<ReturnType<EthAddress['toString']>>('rollupAddress');
|
|
28
37
|
const rollupAddressString = rollupAddress.toString();
|
|
29
38
|
const storedRollupAddressString = rollupAddressValue.get();
|