@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.
- package/README.md +19 -0
- package/dest/bench/shared_map_bench.d.ts +19 -0
- package/dest/bench/shared_map_bench.d.ts.map +1 -0
- package/dest/bench/shared_map_bench.js +91 -0
- package/dest/deprecated/indexeddb/array.d.ts +22 -0
- package/dest/deprecated/indexeddb/array.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/array.js +121 -0
- package/dest/deprecated/indexeddb/index.d.ts +7 -0
- package/dest/deprecated/indexeddb/index.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/index.js +8 -0
- package/dest/deprecated/indexeddb/map.d.ts +38 -0
- package/dest/deprecated/indexeddb/map.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/map.js +121 -0
- package/dest/deprecated/indexeddb/multi_map.d.ts +14 -0
- package/dest/deprecated/indexeddb/multi_map.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/multi_map.js +108 -0
- package/dest/deprecated/indexeddb/set.d.ts +17 -0
- package/dest/deprecated/indexeddb/set.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/set.js +24 -0
- package/dest/deprecated/indexeddb/singleton.d.ts +17 -0
- package/dest/deprecated/indexeddb/singleton.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/singleton.js +41 -0
- package/dest/deprecated/indexeddb/store.d.ts +98 -0
- package/dest/deprecated/indexeddb/store.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/store.js +171 -0
- package/dest/interfaces/array.d.ts +81 -0
- package/dest/interfaces/array.d.ts.map +1 -0
- package/dest/interfaces/array.js +1 -0
- package/dest/interfaces/array_test_suite.d.ts +3 -0
- package/dest/interfaces/array_test_suite.d.ts.map +1 -0
- package/dest/interfaces/array_test_suite.js +103 -0
- package/dest/interfaces/common.d.ts +25 -0
- package/dest/interfaces/common.d.ts.map +1 -0
- package/dest/interfaces/common.js +8 -0
- package/dest/interfaces/counter.d.ts +59 -0
- package/dest/interfaces/counter.d.ts.map +1 -0
- package/dest/interfaces/counter.js +1 -0
- package/dest/interfaces/index.d.ts +10 -0
- package/dest/interfaces/index.d.ts.map +1 -0
- package/dest/interfaces/index.js +8 -0
- package/dest/interfaces/map.d.ts +106 -0
- package/dest/interfaces/map.d.ts.map +1 -0
- package/dest/interfaces/map.js +3 -0
- package/dest/interfaces/map_test_suite.d.ts +3 -0
- package/dest/interfaces/map_test_suite.d.ts.map +1 -0
- package/dest/interfaces/map_test_suite.js +261 -0
- package/dest/interfaces/multi_map.d.ts +41 -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 +363 -0
- package/dest/interfaces/set.d.ts +44 -0
- package/dest/interfaces/set.d.ts.map +1 -0
- package/dest/interfaces/set.js +1 -0
- package/dest/interfaces/set_test_suite.d.ts +3 -0
- package/dest/interfaces/set_test_suite.d.ts.map +1 -0
- package/dest/interfaces/set_test_suite.js +95 -0
- package/dest/interfaces/singleton.d.ts +29 -0
- package/dest/interfaces/singleton.d.ts.map +1 -0
- package/dest/interfaces/singleton.js +4 -0
- package/dest/interfaces/singleton_test_suite.d.ts +3 -0
- package/dest/interfaces/singleton_test_suite.d.ts.map +1 -0
- package/dest/interfaces/singleton_test_suite.js +29 -0
- package/dest/interfaces/store.d.ts +120 -0
- package/dest/interfaces/store.d.ts.map +1 -0
- package/dest/interfaces/store.js +1 -0
- package/dest/interfaces/utils.d.ts +18 -0
- package/dest/interfaces/utils.d.ts.map +1 -0
- package/dest/interfaces/utils.js +18 -0
- package/dest/lmdb/array.d.ts +24 -0
- package/dest/lmdb/array.d.ts.map +1 -0
- package/dest/lmdb/array.js +119 -0
- package/dest/lmdb/counter.d.ts +19 -0
- package/dest/lmdb/counter.d.ts.map +1 -0
- package/dest/lmdb/counter.js +50 -0
- package/dest/lmdb/index.d.ts +12 -0
- package/dest/lmdb/index.d.ts.map +1 -0
- package/dest/lmdb/index.js +25 -0
- package/dest/lmdb/map.d.ts +40 -0
- package/dest/lmdb/map.d.ts.map +1 -0
- package/dest/lmdb/map.js +156 -0
- package/dest/lmdb/multi_map.d.ts +13 -0
- package/dest/lmdb/multi_map.d.ts.map +1 -0
- package/dest/lmdb/multi_map.js +44 -0
- package/dest/lmdb/set.d.ts +18 -0
- package/dest/lmdb/set.d.ts.map +1 -0
- package/dest/lmdb/set.js +32 -0
- package/dest/lmdb/singleton.d.ts +14 -0
- package/dest/lmdb/singleton.d.ts.map +1 -0
- package/dest/lmdb/singleton.js +26 -0
- package/dest/lmdb/store.d.ts +94 -0
- package/dest/lmdb/store.d.ts.map +1 -0
- package/dest/lmdb/store.js +200 -0
- package/dest/lmdb-v2/array.d.ts +19 -0
- package/dest/lmdb-v2/array.d.ts.map +1 -0
- package/dest/lmdb-v2/array.js +103 -0
- package/dest/lmdb-v2/factory.d.ts +35 -0
- package/dest/lmdb-v2/factory.d.ts.map +1 -0
- package/dest/lmdb-v2/factory.js +126 -0
- package/dest/lmdb-v2/index.d.ts +3 -0
- package/dest/lmdb-v2/index.d.ts.map +1 -0
- package/dest/lmdb-v2/index.js +2 -0
- package/dest/lmdb-v2/map.d.ts +53 -0
- package/dest/lmdb-v2/map.d.ts.map +1 -0
- package/dest/lmdb-v2/map.js +106 -0
- package/dest/lmdb-v2/message.d.ts +131 -0
- package/dest/lmdb-v2/message.d.ts.map +1 -0
- package/dest/lmdb-v2/message.js +20 -0
- package/dest/lmdb-v2/multi_map.d.ts +52 -0
- package/dest/lmdb-v2/multi_map.d.ts.map +1 -0
- package/dest/lmdb-v2/multi_map.js +123 -0
- package/dest/lmdb-v2/read_transaction.d.ts +16 -0
- package/dest/lmdb-v2/read_transaction.d.ts.map +1 -0
- package/dest/lmdb-v2/read_transaction.js +137 -0
- package/dest/lmdb-v2/set.d.ts +15 -0
- package/dest/lmdb-v2/set.d.ts.map +1 -0
- package/dest/lmdb-v2/set.js +23 -0
- package/dest/lmdb-v2/singleton.d.ts +12 -0
- package/dest/lmdb-v2/singleton.d.ts.map +1 -0
- package/dest/lmdb-v2/singleton.js +31 -0
- package/dest/lmdb-v2/store.d.ts +43 -0
- package/dest/lmdb-v2/store.d.ts.map +1 -0
- package/dest/lmdb-v2/store.js +171 -0
- package/dest/lmdb-v2/tx-helpers.d.ts +6 -0
- package/dest/lmdb-v2/tx-helpers.d.ts.map +1 -0
- package/dest/lmdb-v2/tx-helpers.js +21 -0
- package/dest/lmdb-v2/utils.d.ts +8 -0
- package/dest/lmdb-v2/utils.d.ts.map +1 -0
- package/dest/lmdb-v2/utils.js +32 -0
- package/dest/lmdb-v2/write_transaction.d.ts +17 -0
- package/dest/lmdb-v2/write_transaction.d.ts.map +1 -0
- package/dest/lmdb-v2/write_transaction.js +258 -0
- package/dest/sqlite-opfs/array.d.ts +21 -0
- package/dest/sqlite-opfs/array.d.ts.map +1 -0
- package/dest/sqlite-opfs/array.js +128 -0
- package/dest/sqlite-opfs/errors.d.ts +54 -0
- package/dest/sqlite-opfs/errors.d.ts.map +1 -0
- package/dest/sqlite-opfs/errors.js +77 -0
- package/dest/sqlite-opfs/index.d.ts +14 -0
- package/dest/sqlite-opfs/index.d.ts.map +1 -0
- package/dest/sqlite-opfs/index.js +16 -0
- package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts +32 -0
- package/dest/sqlite-opfs/internal/ordered-binary-browser.d.ts.map +1 -0
- package/dest/sqlite-opfs/internal/ordered-binary-browser.js +448 -0
- package/dest/sqlite-opfs/manage.d.ts +22 -0
- package/dest/sqlite-opfs/manage.d.ts.map +1 -0
- package/dest/sqlite-opfs/manage.js +38 -0
- package/dest/sqlite-opfs/map.d.ts +35 -0
- package/dest/sqlite-opfs/map.d.ts.map +1 -0
- package/dest/sqlite-opfs/map.js +163 -0
- package/dest/sqlite-opfs/messages.d.ts +66 -0
- package/dest/sqlite-opfs/messages.d.ts.map +1 -0
- package/dest/sqlite-opfs/messages.js +5 -0
- package/dest/sqlite-opfs/multi_map.d.ts +16 -0
- package/dest/sqlite-opfs/multi_map.d.ts.map +1 -0
- package/dest/sqlite-opfs/multi_map.js +67 -0
- package/dest/sqlite-opfs/pool_integrity.d.ts +20 -0
- package/dest/sqlite-opfs/pool_integrity.d.ts.map +1 -0
- package/dest/sqlite-opfs/pool_integrity.js +282 -0
- package/dest/sqlite-opfs/pool_lock.d.ts +8 -0
- package/dest/sqlite-opfs/pool_lock.d.ts.map +1 -0
- package/dest/sqlite-opfs/pool_lock.js +47 -0
- package/dest/sqlite-opfs/set.d.ts +13 -0
- package/dest/sqlite-opfs/set.d.ts.map +1 -0
- package/dest/sqlite-opfs/set.js +19 -0
- package/dest/sqlite-opfs/singleton.d.ts +13 -0
- package/dest/sqlite-opfs/singleton.d.ts.map +1 -0
- package/dest/sqlite-opfs/singleton.js +48 -0
- package/dest/sqlite-opfs/store.d.ts +84 -0
- package/dest/sqlite-opfs/store.d.ts.map +1 -0
- package/dest/sqlite-opfs/store.js +318 -0
- package/dest/sqlite-opfs/worker.d.ts +2 -0
- package/dest/sqlite-opfs/worker.d.ts.map +1 -0
- package/dest/sqlite-opfs/worker.js +275 -0
- package/dest/stores/index.d.ts +3 -0
- package/dest/stores/index.d.ts.map +1 -0
- package/dest/stores/index.js +2 -0
- package/dest/stores/l2_tips_store.d.ts +23 -0
- package/dest/stores/l2_tips_store.d.ts.map +1 -0
- package/dest/stores/l2_tips_store.js +64 -0
- package/dest/utils.d.ts +15 -0
- package/dest/utils.d.ts.map +1 -0
- package/dest/utils.js +59 -0
- package/package.json +108 -0
- package/src/bench/shared_map_bench.ts +111 -0
- package/src/deprecated/indexeddb/array.ts +122 -0
- package/src/deprecated/indexeddb/index.ts +12 -0
- package/src/deprecated/indexeddb/map.ts +137 -0
- package/src/deprecated/indexeddb/multi_map.ts +106 -0
- package/src/deprecated/indexeddb/set.ts +37 -0
- package/src/deprecated/indexeddb/singleton.ts +52 -0
- package/src/deprecated/indexeddb/store.ts +214 -0
- package/src/interfaces/array.ts +92 -0
- package/src/interfaces/array_test_suite.ts +128 -0
- package/src/interfaces/common.ts +31 -0
- package/src/interfaces/counter.ts +65 -0
- package/src/interfaces/index.ts +9 -0
- package/src/interfaces/map.ts +117 -0
- package/src/interfaces/map_test_suite.ts +198 -0
- package/src/interfaces/multi_map.ts +45 -0
- package/src/interfaces/multi_map_test_suite.ts +372 -0
- package/src/interfaces/set.ts +48 -0
- package/src/interfaces/set_test_suite.ts +79 -0
- package/src/interfaces/singleton.ts +29 -0
- package/src/interfaces/singleton_test_suite.ts +44 -0
- package/src/interfaces/store.ts +142 -0
- package/src/interfaces/utils.ts +23 -0
- package/src/lmdb/array.ts +140 -0
- package/src/lmdb/counter.ts +67 -0
- package/src/lmdb/index.ts +41 -0
- package/src/lmdb/map.ts +177 -0
- package/src/lmdb/multi_map.ts +51 -0
- package/src/lmdb/set.ts +45 -0
- package/src/lmdb/singleton.ts +35 -0
- package/src/lmdb/store.ts +242 -0
- package/src/lmdb-v2/array.ts +120 -0
- package/src/lmdb-v2/factory.ts +184 -0
- package/src/lmdb-v2/index.ts +2 -0
- package/src/lmdb-v2/map.ts +136 -0
- package/src/lmdb-v2/message.ts +169 -0
- package/src/lmdb-v2/multi_map.ts +150 -0
- package/src/lmdb-v2/read_transaction.ts +156 -0
- package/src/lmdb-v2/set.ts +33 -0
- package/src/lmdb-v2/singleton.ts +38 -0
- package/src/lmdb-v2/store.ts +220 -0
- package/src/lmdb-v2/tx-helpers.ts +29 -0
- package/src/lmdb-v2/utils.ts +32 -0
- package/src/lmdb-v2/write_transaction.ts +315 -0
- package/src/sqlite-opfs/array.ts +124 -0
- package/src/sqlite-opfs/errors.ts +94 -0
- package/src/sqlite-opfs/index.ts +27 -0
- package/src/sqlite-opfs/internal/ordered-binary-browser.js +465 -0
- package/src/sqlite-opfs/manage.ts +46 -0
- package/src/sqlite-opfs/map.ts +163 -0
- package/src/sqlite-opfs/messages.ts +39 -0
- package/src/sqlite-opfs/multi_map.ts +74 -0
- package/src/sqlite-opfs/pool_integrity.ts +327 -0
- package/src/sqlite-opfs/pool_lock.ts +62 -0
- package/src/sqlite-opfs/set.ts +29 -0
- package/src/sqlite-opfs/singleton.ts +48 -0
- package/src/sqlite-opfs/store.ts +331 -0
- package/src/sqlite-opfs/worker.ts +259 -0
- package/src/stores/index.ts +3 -0
- package/src/stores/l2_tips_store.ts +67 -0
- package/src/utils.ts +98 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
2
|
+
import { createLogger } from '@aztec-labs/foundation/log';
|
|
3
|
+
import { DatabaseVersionManager } from '@aztec-labs/stdlib/database-version/manager';
|
|
4
|
+
import { copyFile, mkdir, mkdtemp, rm } from 'fs/promises';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { AztecLMDBStoreV2 } from './store.js';
|
|
8
|
+
const MAX_READERS = 16;
|
|
9
|
+
export async function createStore(name, schemaVersion, config, bindings, options = {}) {
|
|
10
|
+
const log = createLogger('kv-store:lmdb-v2:' + name, bindings);
|
|
11
|
+
const { dataDirectory, rollupAddress: rollupFromConfig } = config;
|
|
12
|
+
let store;
|
|
13
|
+
if (typeof dataDirectory !== 'undefined') {
|
|
14
|
+
// Get rollup address from contracts config, or use zero address
|
|
15
|
+
const subDir = join(dataDirectory, name);
|
|
16
|
+
await mkdir(subDir, {
|
|
17
|
+
recursive: true
|
|
18
|
+
});
|
|
19
|
+
const rollupAddress = rollupFromConfig ?? EthAddress.ZERO;
|
|
20
|
+
// Create a version manager
|
|
21
|
+
const versionManager = new DatabaseVersionManager({
|
|
22
|
+
schemaVersion,
|
|
23
|
+
rollupAddress,
|
|
24
|
+
dataDirectory: subDir,
|
|
25
|
+
onOpen: (dbDirectory)=>AztecLMDBStoreV2.new(dbDirectory, config.dataStoreMapSizeKb, MAX_READERS, ()=>Promise.resolve(), bindings),
|
|
26
|
+
onUpgrade: options.onUpgrade,
|
|
27
|
+
schemaVersionMismatchPolicy: options.schemaVersionMismatchPolicy,
|
|
28
|
+
versionFileReadFailurePolicy: options.versionFileReadFailurePolicy
|
|
29
|
+
});
|
|
30
|
+
log.info(`Creating ${name} data store at directory ${subDir} with map size ${config.dataStoreMapSizeKb} KB (LMDB v2)`);
|
|
31
|
+
[store] = await versionManager.open();
|
|
32
|
+
} else {
|
|
33
|
+
store = await openTmpStore(name, true, config.dataStoreMapSizeKb, MAX_READERS, bindings);
|
|
34
|
+
}
|
|
35
|
+
return store;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Open a persistent on-disk store rooted in OS tmpdir. Caller chooses whether to
|
|
39
|
+
* auto-remove the directory on close. Uses standard durable LMDB flags (fsync on
|
|
40
|
+
* every commit) — for full in-memory / NOSYNC semantics use `openEphemeralStore`.
|
|
41
|
+
*/ export async function openTmpStore(name, cleanupTmpDir = true, dbMapSizeKb = 10 * 1_024 * 1_024, maxReaders = MAX_READERS, bindings) {
|
|
42
|
+
const log = createLogger('kv-store:lmdb-v2:' + name, bindings);
|
|
43
|
+
const dataDir = await mkdtemp(join(tmpdir(), name + '-'));
|
|
44
|
+
log.debug(`Created temporary data store at: ${dataDir} with size: ${dbMapSizeKb} KB (LMDB v2)`);
|
|
45
|
+
// pass a cleanup callback because process.on('beforeExit', cleanup) does not work under Jest
|
|
46
|
+
const cleanup = async ()=>{
|
|
47
|
+
if (cleanupTmpDir) {
|
|
48
|
+
try {
|
|
49
|
+
await rm(dataDir, {
|
|
50
|
+
recursive: true,
|
|
51
|
+
force: true,
|
|
52
|
+
maxRetries: 3
|
|
53
|
+
});
|
|
54
|
+
log.debug(`Deleted temporary data store: ${dataDir}`);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
log.warn(`Failed to delete temporary data directory (LMDB v2) ${dataDir}: ${err}`);
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
log.debug(`Leaving temporary data store: ${dataDir}`);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, cleanup, bindings, false);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Open a fully-ephemeral store: a fresh tmpdir backing file, LMDB opened with
|
|
66
|
+
* MDB_NOSYNC | MDB_NOMETASYNC (no fsync, kernel-only writeback), and the directory
|
|
67
|
+
* unconditionally removed on close. Intended for tests and worker-local scratch
|
|
68
|
+
* stores where durability is explicitly not desired.
|
|
69
|
+
*/ export async function openEphemeralStore(name, dbMapSizeKb = 10 * 1_024 * 1_024, maxReaders = MAX_READERS, bindings) {
|
|
70
|
+
const log = createLogger('kv-store:lmdb-v2:' + name, bindings);
|
|
71
|
+
const dataDir = await mkdtemp(join(tmpdir(), name + '-'));
|
|
72
|
+
log.debug(`Created ephemeral data store at: ${dataDir} with size: ${dbMapSizeKb} KB (LMDB v2)`);
|
|
73
|
+
const cleanup = async ()=>{
|
|
74
|
+
try {
|
|
75
|
+
await rm(dataDir, {
|
|
76
|
+
recursive: true,
|
|
77
|
+
force: true,
|
|
78
|
+
maxRetries: 3
|
|
79
|
+
});
|
|
80
|
+
log.debug(`Deleted ephemeral data store: ${dataDir}`);
|
|
81
|
+
} catch (err) {
|
|
82
|
+
log.warn(`Failed to delete ephemeral data directory (LMDB v2) ${dataDir}: ${err}`);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
return AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, cleanup, bindings, true);
|
|
86
|
+
}
|
|
87
|
+
export async function openStoreAt(dataDir, dbMapSizeKb = 10 * 1_024 * 1_024, maxReaders = MAX_READERS, bindings) {
|
|
88
|
+
const log = createLogger('kv-store:lmdb-v2', bindings);
|
|
89
|
+
log.debug(`Opening data store at: ${dataDir} with size: ${dbMapSizeKb} KB (LMDB v2)`);
|
|
90
|
+
return await AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, undefined, bindings);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Open a fully-ephemeral store seeded from an existing `data.mdb` file. Creates a fresh tmpdir,
|
|
94
|
+
* copies `srcDataMdbPath` into it as `data.mdb`, opens with MDB_NOSYNC | MDB_NOMETASYNC, and
|
|
95
|
+
* removes the tmpdir on close. Intended for worker clones of a main-thread-built store — the
|
|
96
|
+
* source file is never written to.
|
|
97
|
+
*/ export async function cloneEphemeralStoreFrom(srcDataMdbPath, name, dbMapSizeKb = 10 * 1_024 * 1_024, maxReaders = MAX_READERS, bindings) {
|
|
98
|
+
const log = createLogger('kv-store:lmdb-v2:' + name, bindings);
|
|
99
|
+
const dataDir = await mkdtemp(join(tmpdir(), name + '-'));
|
|
100
|
+
await copyFile(srcDataMdbPath, join(dataDir, 'data.mdb'));
|
|
101
|
+
log.debug(`Cloned ephemeral data store at: ${dataDir} from ${srcDataMdbPath} (LMDB v2)`);
|
|
102
|
+
const cleanup = async ()=>{
|
|
103
|
+
try {
|
|
104
|
+
await rm(dataDir, {
|
|
105
|
+
recursive: true,
|
|
106
|
+
force: true,
|
|
107
|
+
maxRetries: 3
|
|
108
|
+
});
|
|
109
|
+
log.debug(`Deleted ephemeral data store: ${dataDir}`);
|
|
110
|
+
} catch (err) {
|
|
111
|
+
log.warn(`Failed to delete ephemeral data directory (LMDB v2) ${dataDir}: ${err}`);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
return AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, cleanup, bindings, true);
|
|
115
|
+
}
|
|
116
|
+
export async function openVersionedStoreAt(dataDirectory, schemaVersion, rollupAddress, dbMapSizeKb = 10 * 1_024 * 1_024, maxReaders = MAX_READERS, bindings) {
|
|
117
|
+
const log = createLogger('kv-store:lmdb-v2', bindings);
|
|
118
|
+
log.debug(`Opening data store at: ${dataDirectory} with size: ${dbMapSizeKb} KB (LMDB v2)`);
|
|
119
|
+
const [store] = await new DatabaseVersionManager({
|
|
120
|
+
schemaVersion,
|
|
121
|
+
rollupAddress,
|
|
122
|
+
dataDirectory,
|
|
123
|
+
onOpen: (dataDir)=>AztecLMDBStoreV2.new(dataDir, dbMapSizeKb, maxReaders, undefined, bindings)
|
|
124
|
+
}).open();
|
|
125
|
+
return store;
|
|
126
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './store.js';
|
|
2
|
+
export * from './factory.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sbWRiLXYyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Key, Range, Value } from '../interfaces/common.js';
|
|
2
|
+
import type { AztecAsyncMap } from '../interfaces/map.js';
|
|
3
|
+
import type { AztecLMDBStoreV2 } from './store.js';
|
|
4
|
+
export declare class LMDBMap<K extends Key, V extends Value> implements AztecAsyncMap<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 values at the given keys.
|
|
17
|
+
* @param entries - The entries to set
|
|
18
|
+
*/
|
|
19
|
+
setMany(entries: {
|
|
20
|
+
key: K;
|
|
21
|
+
value: V;
|
|
22
|
+
}[]): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Sets the value at the given key if it does not already exist.
|
|
25
|
+
* @param key - The key to set the value at
|
|
26
|
+
* @param val - The value to set
|
|
27
|
+
*/
|
|
28
|
+
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Deletes the value at the given key.
|
|
31
|
+
* @param key - The key to delete the value at
|
|
32
|
+
*/
|
|
33
|
+
delete(key: K): Promise<void>;
|
|
34
|
+
getAsync(key: K): Promise<V | undefined>;
|
|
35
|
+
hasAsync(key: K): Promise<boolean>;
|
|
36
|
+
sizeAsync(): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Iterates over the map's key-value entries in the key's natural order
|
|
39
|
+
* @param range - The range of keys to iterate over
|
|
40
|
+
*/
|
|
41
|
+
entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
|
|
42
|
+
/**
|
|
43
|
+
* Iterates over the map's values in the key's natural order
|
|
44
|
+
* @param range - The range of keys to iterate over
|
|
45
|
+
*/
|
|
46
|
+
valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
|
|
47
|
+
/**
|
|
48
|
+
* Iterates over the map's keys in the key's natural order
|
|
49
|
+
* @param range - The range of keys to iterate over
|
|
50
|
+
*/
|
|
51
|
+
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi12Mi9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUluRCxxQkFBYSxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxDQUFFLFlBQVcsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFLL0UsT0FBTyxDQUFDLEtBQUs7SUFKZixPQUFPLENBQUMsTUFBTSxDQUFTO0lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQWlCO0lBRWhDLFlBQ1UsS0FBSyxFQUFFLGdCQUFnQixFQUMvQixJQUFJLEVBQUUsTUFBTSxFQUdiO0lBQ0Q7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVqQztJQUVEOzs7T0FHRztJQUNHLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtLQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBTTVEO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVUvQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUI7SUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUt2QztJQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFakM7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUUzQjtJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0E4Qm5FO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FJN0Q7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUkzRDtDQUNGIn0=
|
|
@@ -0,0 +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,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,qBAAa,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAK/E,OAAO,CAAC,KAAK;IAJf,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;IAEhC,YACU,KAAK,EAAE,gBAAgB,EAC/B,IAAI,EAAE,MAAM,EAGb;IACD;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjC;IAED;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5D;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/C;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAKvC;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjC;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3B;IAED;;;OAGG;IACI,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CA8BnE;IAED;;;OAGG;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAI7D;IAED;;;OAGG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAI3D;CACF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Encoder } from 'msgpackr';
|
|
2
|
+
import { execInReadTx, execInWriteTx } from './tx-helpers.js';
|
|
3
|
+
import { deserializeKey, maxKey, minKey, serializeKey } from './utils.js';
|
|
4
|
+
export class LMDBMap {
|
|
5
|
+
store;
|
|
6
|
+
prefix;
|
|
7
|
+
encoder;
|
|
8
|
+
constructor(store, name){
|
|
9
|
+
this.store = store;
|
|
10
|
+
this.encoder = new Encoder();
|
|
11
|
+
this.prefix = `map:${name}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Sets the value at the given key.
|
|
15
|
+
* @param key - The key to set the value at
|
|
16
|
+
* @param val - The value to set
|
|
17
|
+
*/ set(key, val) {
|
|
18
|
+
return execInWriteTx(this.store, (tx)=>tx.set(serializeKey(this.prefix, key), this.encoder.pack(val)));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sets the values at the given keys.
|
|
22
|
+
* @param entries - The entries to set
|
|
23
|
+
*/ async setMany(entries) {
|
|
24
|
+
await execInWriteTx(this.store, async (tx)=>{
|
|
25
|
+
for (const { key, value } of entries){
|
|
26
|
+
await tx.set(serializeKey(this.prefix, key), this.encoder.pack(value));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sets the value at the given key if it does not already exist.
|
|
32
|
+
* @param key - The key to set the value at
|
|
33
|
+
* @param val - The value to set
|
|
34
|
+
*/ setIfNotExists(key, val) {
|
|
35
|
+
return execInWriteTx(this.store, async (tx)=>{
|
|
36
|
+
const strKey = serializeKey(this.prefix, key);
|
|
37
|
+
const exists = !!await tx.get(strKey);
|
|
38
|
+
if (!exists) {
|
|
39
|
+
await tx.set(strKey, this.encoder.pack(val));
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Deletes the value at the given key.
|
|
47
|
+
* @param key - The key to delete the value at
|
|
48
|
+
*/ delete(key) {
|
|
49
|
+
return execInWriteTx(this.store, (tx)=>tx.remove(serializeKey(this.prefix, key)));
|
|
50
|
+
}
|
|
51
|
+
getAsync(key) {
|
|
52
|
+
return execInReadTx(this.store, async (tx)=>{
|
|
53
|
+
const val = await tx.get(serializeKey(this.prefix, key));
|
|
54
|
+
return val ? this.encoder.unpack(val) : undefined;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
hasAsync(key) {
|
|
58
|
+
return execInReadTx(this.store, async (tx)=>!!await tx.get(serializeKey(this.prefix, key)));
|
|
59
|
+
}
|
|
60
|
+
sizeAsync() {
|
|
61
|
+
return execInReadTx(this.store, (tx)=>tx.countEntries(minKey(this.prefix), maxKey(this.prefix), false));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Iterates over the map's key-value entries in the key's natural order
|
|
65
|
+
* @param range - The range of keys to iterate over
|
|
66
|
+
*/ async *entriesAsync(range) {
|
|
67
|
+
const reverse = range?.reverse ?? false;
|
|
68
|
+
const startKey = range?.start !== undefined ? serializeKey(this.prefix, range.start) : minKey(this.prefix);
|
|
69
|
+
const endKey = range?.end !== undefined ? serializeKey(this.prefix, range.end) : reverse ? maxKey(this.prefix) : undefined;
|
|
70
|
+
let tx = this.store.getCurrentWriteTx();
|
|
71
|
+
const shouldClose = !tx;
|
|
72
|
+
tx ??= this.store.getReadTx();
|
|
73
|
+
try {
|
|
74
|
+
for await (const [key, val] of tx.iterate(reverse ? endKey : startKey, reverse ? startKey : endKey, reverse, range?.limit)){
|
|
75
|
+
const deserializedKey = deserializeKey(this.prefix, key);
|
|
76
|
+
if (deserializedKey === false) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
yield [
|
|
80
|
+
deserializedKey,
|
|
81
|
+
this.encoder.unpack(val)
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
} finally{
|
|
85
|
+
if (shouldClose) {
|
|
86
|
+
tx.close();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Iterates over the map's values in the key's natural order
|
|
92
|
+
* @param range - The range of keys to iterate over
|
|
93
|
+
*/ async *valuesAsync(range) {
|
|
94
|
+
for await (const [_, value] of this.entriesAsync(range)){
|
|
95
|
+
yield value;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Iterates over the map's keys in the key's natural order
|
|
100
|
+
* @param range - The range of keys to iterate over
|
|
101
|
+
*/ async *keysAsync(range) {
|
|
102
|
+
for await (const [key, _] of this.entriesAsync(range)){
|
|
103
|
+
yield key;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export declare enum Database {
|
|
2
|
+
DATA = "data",
|
|
3
|
+
INDEX = "index"
|
|
4
|
+
}
|
|
5
|
+
export declare const CURSOR_PAGE_SIZE = 10;
|
|
6
|
+
export declare enum LMDBMessageType {
|
|
7
|
+
OPEN_DATABASE = 100,
|
|
8
|
+
GET = 101,
|
|
9
|
+
HAS = 102,
|
|
10
|
+
START_CURSOR = 103,
|
|
11
|
+
ADVANCE_CURSOR = 104,
|
|
12
|
+
ADVANCE_CURSOR_COUNT = 105,
|
|
13
|
+
CLOSE_CURSOR = 106,
|
|
14
|
+
BATCH = 107,
|
|
15
|
+
STATS = 108,
|
|
16
|
+
CLOSE = 109,
|
|
17
|
+
COPY_STORE = 110
|
|
18
|
+
}
|
|
19
|
+
type Key = Uint8Array;
|
|
20
|
+
type Value = Uint8Array;
|
|
21
|
+
type OptionalValues = Array<Value[] | null>;
|
|
22
|
+
type KeyOptionalValues = [Key, null | Array<Value>];
|
|
23
|
+
type KeyValues = [Key, Value[]];
|
|
24
|
+
interface OpenDatabaseRequest {
|
|
25
|
+
db: string;
|
|
26
|
+
uniqueKeys?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface GetRequest {
|
|
29
|
+
keys: Key[];
|
|
30
|
+
db: string;
|
|
31
|
+
}
|
|
32
|
+
interface GetResponse {
|
|
33
|
+
values: OptionalValues;
|
|
34
|
+
}
|
|
35
|
+
interface HasRequest {
|
|
36
|
+
entries: KeyOptionalValues[];
|
|
37
|
+
db: string;
|
|
38
|
+
}
|
|
39
|
+
interface StartCursorRequest {
|
|
40
|
+
key: Key;
|
|
41
|
+
reverse: boolean;
|
|
42
|
+
count: number | null;
|
|
43
|
+
onePage: boolean | null;
|
|
44
|
+
db: string;
|
|
45
|
+
}
|
|
46
|
+
interface AdvanceCursorRequest {
|
|
47
|
+
cursor: number;
|
|
48
|
+
count: number | null;
|
|
49
|
+
}
|
|
50
|
+
interface AdvanceCursorCountRequest {
|
|
51
|
+
cursor: number;
|
|
52
|
+
endKey: Key;
|
|
53
|
+
}
|
|
54
|
+
interface CloseCursorRequest {
|
|
55
|
+
cursor: number;
|
|
56
|
+
}
|
|
57
|
+
interface CopyStoreRequest {
|
|
58
|
+
dstPath: string;
|
|
59
|
+
compact: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface Batch {
|
|
62
|
+
addEntries: Array<KeyValues>;
|
|
63
|
+
removeEntries: Array<KeyOptionalValues>;
|
|
64
|
+
}
|
|
65
|
+
interface BatchRequest {
|
|
66
|
+
batches: Map<string, Batch>;
|
|
67
|
+
}
|
|
68
|
+
export type LMDBRequestBody = {
|
|
69
|
+
[LMDBMessageType.OPEN_DATABASE]: OpenDatabaseRequest;
|
|
70
|
+
[LMDBMessageType.GET]: GetRequest;
|
|
71
|
+
[LMDBMessageType.HAS]: HasRequest;
|
|
72
|
+
[LMDBMessageType.START_CURSOR]: StartCursorRequest;
|
|
73
|
+
[LMDBMessageType.ADVANCE_CURSOR]: AdvanceCursorRequest;
|
|
74
|
+
[LMDBMessageType.ADVANCE_CURSOR_COUNT]: AdvanceCursorCountRequest;
|
|
75
|
+
[LMDBMessageType.CLOSE_CURSOR]: CloseCursorRequest;
|
|
76
|
+
[LMDBMessageType.BATCH]: BatchRequest;
|
|
77
|
+
[LMDBMessageType.STATS]: void;
|
|
78
|
+
[LMDBMessageType.CLOSE]: void;
|
|
79
|
+
[LMDBMessageType.COPY_STORE]: CopyStoreRequest;
|
|
80
|
+
};
|
|
81
|
+
interface GetResponse {
|
|
82
|
+
values: OptionalValues;
|
|
83
|
+
}
|
|
84
|
+
interface HasResponse {
|
|
85
|
+
exists: boolean[];
|
|
86
|
+
}
|
|
87
|
+
interface StartCursorResponse {
|
|
88
|
+
cursor: number | null;
|
|
89
|
+
entries: Array<KeyValues>;
|
|
90
|
+
}
|
|
91
|
+
interface AdvanceCursorResponse {
|
|
92
|
+
entries: Array<KeyValues>;
|
|
93
|
+
done: boolean;
|
|
94
|
+
}
|
|
95
|
+
interface AdvanceCursorCountResponse {
|
|
96
|
+
count: number;
|
|
97
|
+
done: boolean;
|
|
98
|
+
}
|
|
99
|
+
interface BatchResponse {
|
|
100
|
+
durationNs: number;
|
|
101
|
+
}
|
|
102
|
+
interface BoolResponse {
|
|
103
|
+
ok: true;
|
|
104
|
+
}
|
|
105
|
+
interface StatsResponse {
|
|
106
|
+
stats: Array<{
|
|
107
|
+
name: string;
|
|
108
|
+
numDataItems: bigint | number;
|
|
109
|
+
totalUsedSize: bigint | number;
|
|
110
|
+
}>;
|
|
111
|
+
dbMapSizeBytes: bigint | number;
|
|
112
|
+
dbPhysicalFileSizeBytes: bigint | number;
|
|
113
|
+
}
|
|
114
|
+
export type LMDBResponseBody = {
|
|
115
|
+
[LMDBMessageType.OPEN_DATABASE]: BoolResponse;
|
|
116
|
+
[LMDBMessageType.GET]: GetResponse;
|
|
117
|
+
[LMDBMessageType.HAS]: HasResponse;
|
|
118
|
+
[LMDBMessageType.START_CURSOR]: StartCursorResponse;
|
|
119
|
+
[LMDBMessageType.ADVANCE_CURSOR]: AdvanceCursorResponse;
|
|
120
|
+
[LMDBMessageType.ADVANCE_CURSOR_COUNT]: AdvanceCursorCountResponse;
|
|
121
|
+
[LMDBMessageType.CLOSE_CURSOR]: BoolResponse;
|
|
122
|
+
[LMDBMessageType.BATCH]: BatchResponse;
|
|
123
|
+
[LMDBMessageType.STATS]: StatsResponse;
|
|
124
|
+
[LMDBMessageType.CLOSE]: BoolResponse;
|
|
125
|
+
[LMDBMessageType.COPY_STORE]: BoolResponse;
|
|
126
|
+
};
|
|
127
|
+
export interface LMDBMessageChannel {
|
|
128
|
+
sendMessage<T extends LMDBMessageType>(msgType: T, body: LMDBRequestBody[T]): Promise<LMDBResponseBody[T]>;
|
|
129
|
+
}
|
|
130
|
+
export {};
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xtZGItdjIvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBWSxRQUFRO0lBQ2xCLElBQUksU0FBUztJQUNiLEtBQUssVUFBVTtDQUNoQjtBQUVELGVBQU8sTUFBTSxnQkFBZ0IsS0FBSyxDQUFDO0FBRW5DLG9CQUFZLGVBQWU7SUFDekIsYUFBYSxNQUFNO0lBQ25CLEdBQUcsTUFBQTtJQUNILEdBQUcsTUFBQTtJQUVILFlBQVksTUFBQTtJQUNaLGNBQWMsTUFBQTtJQUNkLG9CQUFvQixNQUFBO0lBQ3BCLFlBQVksTUFBQTtJQUVaLEtBQUssTUFBQTtJQUVMLEtBQUssTUFBQTtJQUVMLEtBQUssTUFBQTtJQUNMLFVBQVUsTUFBQTtDQUNYO0FBRUQsS0FBSyxHQUFHLEdBQUcsVUFBVSxDQUFDO0FBQ3RCLEtBQUssS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN4QixLQUFLLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUMsS0FBSyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEQsS0FBSyxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUVoQyxVQUFVLG1CQUFtQjtJQUMzQixFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ1gsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDO0NBQ3RCO0FBRUQsVUFBVSxVQUFVO0lBQ2xCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLEVBQUUsRUFBRSxNQUFNLENBQUM7Q0FDWjtBQUVELFVBQVUsV0FBVztJQUNuQixNQUFNLEVBQUUsY0FBYyxDQUFDO0NBQ3hCO0FBRUQsVUFBVSxVQUFVO0lBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export var Database = /*#__PURE__*/ function(Database) {
|
|
2
|
+
Database["DATA"] = "data";
|
|
3
|
+
Database["INDEX"] = "index";
|
|
4
|
+
return Database;
|
|
5
|
+
}({});
|
|
6
|
+
export const CURSOR_PAGE_SIZE = 10;
|
|
7
|
+
export var LMDBMessageType = /*#__PURE__*/ function(LMDBMessageType) {
|
|
8
|
+
LMDBMessageType[LMDBMessageType["OPEN_DATABASE"] = 100] = "OPEN_DATABASE";
|
|
9
|
+
LMDBMessageType[LMDBMessageType["GET"] = 101] = "GET";
|
|
10
|
+
LMDBMessageType[LMDBMessageType["HAS"] = 102] = "HAS";
|
|
11
|
+
LMDBMessageType[LMDBMessageType["START_CURSOR"] = 103] = "START_CURSOR";
|
|
12
|
+
LMDBMessageType[LMDBMessageType["ADVANCE_CURSOR"] = 104] = "ADVANCE_CURSOR";
|
|
13
|
+
LMDBMessageType[LMDBMessageType["ADVANCE_CURSOR_COUNT"] = 105] = "ADVANCE_CURSOR_COUNT";
|
|
14
|
+
LMDBMessageType[LMDBMessageType["CLOSE_CURSOR"] = 106] = "CLOSE_CURSOR";
|
|
15
|
+
LMDBMessageType[LMDBMessageType["BATCH"] = 107] = "BATCH";
|
|
16
|
+
LMDBMessageType[LMDBMessageType["STATS"] = 108] = "STATS";
|
|
17
|
+
LMDBMessageType[LMDBMessageType["CLOSE"] = 109] = "CLOSE";
|
|
18
|
+
LMDBMessageType[LMDBMessageType["COPY_STORE"] = 110] = "COPY_STORE";
|
|
19
|
+
return LMDBMessageType;
|
|
20
|
+
}({});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Key, Range, Value } 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 extends Value> 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
|
+
setMany(entries: {
|
|
16
|
+
key: K;
|
|
17
|
+
value: V;
|
|
18
|
+
}[]): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Sets the value at the given key if it does not already exist.
|
|
21
|
+
* @param key - The key to set the value at
|
|
22
|
+
* @param val - The value to set
|
|
23
|
+
*/
|
|
24
|
+
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Deletes the value at the given key.
|
|
27
|
+
* @param key - The key to delete the value at
|
|
28
|
+
*/
|
|
29
|
+
delete(key: K): Promise<void>;
|
|
30
|
+
getAsync(key: K): Promise<V | undefined>;
|
|
31
|
+
hasAsync(key: K): Promise<boolean>;
|
|
32
|
+
sizeAsync(): Promise<number>;
|
|
33
|
+
/**
|
|
34
|
+
* Iterates over the map's key-value entries in the key's natural order
|
|
35
|
+
* @param range - The range of keys to iterate over
|
|
36
|
+
*/
|
|
37
|
+
entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterates over the map's values in the key's natural order
|
|
40
|
+
* @param range - The range of keys to iterate over
|
|
41
|
+
*/
|
|
42
|
+
valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
|
|
43
|
+
/**
|
|
44
|
+
* Iterates over the map's keys in the key's natural order
|
|
45
|
+
* @param range - The range of keys to iterate over
|
|
46
|
+
*/
|
|
47
|
+
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
48
|
+
deleteValue(key: K, val: V | undefined): Promise<void>;
|
|
49
|
+
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
50
|
+
getValueCountAsync(key: K): Promise<number>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfbWFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi12Mi9tdWx0aV9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXJFLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSW5ELHFCQUFhLFlBQVksQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBSXpGLE9BQU8sQ0FBQyxLQUFLO0lBSGYsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsT0FBTyxDQUFpQjtJQUNoQyxZQUNVLEtBQUssRUFBRSxnQkFBZ0IsRUFDL0IsSUFBSSxFQUFFLE1BQU0sRUFHYjtJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFakM7SUFFSyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7S0FBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU01RDtJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FTL0M7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTVCO0lBRUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FLdkM7SUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRUQsU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFM0I7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBOEJuRTtJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBSTdEO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FJM0Q7SUFFRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXJEO0lBRU0sY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBS3REO0lBRUQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBSzFDO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi_map.d.ts","sourceRoot":"","sources":["../../src/lmdb-v2/multi_map.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,qBAAa,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,CAAE,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIzF,OAAO,CAAC,KAAK;IAHf,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiB;IAChC,YACU,KAAK,EAAE,gBAAgB,EAC/B,IAAI,EAAE,MAAM,EAGb;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjC;IAEK,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5D;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/C;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAKvC;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjC;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3B;IAED;;;OAGG;IACI,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CA8BnE;IAED;;;OAGG;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAI7D;IAED;;;OAGG;IACI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAI3D;IAED,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;IAEM,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAKtD;IAED,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1C;CACF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Encoder } from 'msgpackr/pack';
|
|
2
|
+
import { MAXIMUM_KEY, toBufferKey } from 'ordered-binary';
|
|
3
|
+
import { execInReadTx, execInWriteTx } from './tx-helpers.js';
|
|
4
|
+
import { deserializeKey, maxKey, minKey, serializeKey } from './utils.js';
|
|
5
|
+
export class LMDBMultiMap {
|
|
6
|
+
store;
|
|
7
|
+
prefix;
|
|
8
|
+
encoder;
|
|
9
|
+
constructor(store, name){
|
|
10
|
+
this.store = store;
|
|
11
|
+
this.encoder = new Encoder();
|
|
12
|
+
this.prefix = `multimap:${name}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sets the value at the given key.
|
|
16
|
+
* @param key - The key to set the value at
|
|
17
|
+
* @param val - The value to set
|
|
18
|
+
*/ set(key, val) {
|
|
19
|
+
return execInWriteTx(this.store, (tx)=>tx.setIndex(serializeKey(this.prefix, key), this.encoder.pack(val)));
|
|
20
|
+
}
|
|
21
|
+
async setMany(entries) {
|
|
22
|
+
await execInWriteTx(this.store, async (tx)=>{
|
|
23
|
+
for (const { key, value } of entries){
|
|
24
|
+
await tx.setIndex(serializeKey(this.prefix, key), this.encoder.pack(value));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sets the value at the given key if it does not already exist.
|
|
30
|
+
* @param key - The key to set the value at
|
|
31
|
+
* @param val - The value to set
|
|
32
|
+
*/ setIfNotExists(key, val) {
|
|
33
|
+
return execInWriteTx(this.store, async (tx)=>{
|
|
34
|
+
const exists = !!await this.getAsync(key);
|
|
35
|
+
if (!exists) {
|
|
36
|
+
await tx.setIndex(serializeKey(this.prefix, key), this.encoder.pack(val));
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Deletes the value at the given key.
|
|
44
|
+
* @param key - The key to delete the value at
|
|
45
|
+
*/ delete(key) {
|
|
46
|
+
return execInWriteTx(this.store, (tx)=>tx.removeIndex(serializeKey(this.prefix, key)));
|
|
47
|
+
}
|
|
48
|
+
getAsync(key) {
|
|
49
|
+
return execInReadTx(this.store, async (tx)=>{
|
|
50
|
+
const val = await tx.getIndex(serializeKey(this.prefix, key));
|
|
51
|
+
return val.length > 0 ? this.encoder.unpack(val[0]) : undefined;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
hasAsync(key) {
|
|
55
|
+
return execInReadTx(this.store, async (tx)=>(await tx.getIndex(serializeKey(this.prefix, key))).length > 0);
|
|
56
|
+
}
|
|
57
|
+
sizeAsync() {
|
|
58
|
+
return execInReadTx(this.store, (tx)=>tx.countEntriesIndex(minKey(this.prefix), maxKey(this.prefix), false));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Iterates over the map's key-value entries in the key's natural order
|
|
62
|
+
* @param range - The range of keys to iterate over
|
|
63
|
+
*/ async *entriesAsync(range) {
|
|
64
|
+
const reverse = range?.reverse ?? false;
|
|
65
|
+
const startKey = range?.start ? serializeKey(this.prefix, range.start) : minKey(this.prefix);
|
|
66
|
+
const endKey = range?.end ? serializeKey(this.prefix, range.end) : reverse ? maxKey(this.prefix) : undefined;
|
|
67
|
+
let tx = this.store.getCurrentWriteTx();
|
|
68
|
+
const shouldClose = !tx;
|
|
69
|
+
tx ??= this.store.getReadTx();
|
|
70
|
+
try {
|
|
71
|
+
for await (const [key, vals] of tx.iterateIndex(reverse ? endKey : startKey, reverse ? startKey : endKey, reverse, range?.limit)){
|
|
72
|
+
const deserializedKey = deserializeKey(this.prefix, key);
|
|
73
|
+
if (!deserializedKey) {
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
for (const val of vals){
|
|
77
|
+
yield [
|
|
78
|
+
deserializedKey,
|
|
79
|
+
this.encoder.unpack(val)
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} finally{
|
|
84
|
+
if (shouldClose) {
|
|
85
|
+
tx.close();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Iterates over the map's values in the key's natural order
|
|
91
|
+
* @param range - The range of keys to iterate over
|
|
92
|
+
*/ async *valuesAsync(range) {
|
|
93
|
+
for await (const [_, value] of this.entriesAsync(range)){
|
|
94
|
+
yield value;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Iterates over the map's keys in the key's natural order
|
|
99
|
+
* @param range - The range of keys to iterate over
|
|
100
|
+
*/ async *keysAsync(range) {
|
|
101
|
+
for await (const [key, _] of this.entriesAsync(range)){
|
|
102
|
+
yield key;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
deleteValue(key, val) {
|
|
106
|
+
return execInWriteTx(this.store, (tx)=>tx.removeIndex(serializeKey(this.prefix, key), this.encoder.pack(val)));
|
|
107
|
+
}
|
|
108
|
+
async *getValuesAsync(key) {
|
|
109
|
+
const values = await execInReadTx(this.store, (tx)=>tx.getIndex(serializeKey(this.prefix, key)));
|
|
110
|
+
for (const value of values){
|
|
111
|
+
yield this.encoder.unpack(value);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
getValueCountAsync(key) {
|
|
115
|
+
const startKey = serializeKey(this.prefix, key);
|
|
116
|
+
const endKey = toBufferKey([
|
|
117
|
+
this.prefix,
|
|
118
|
+
key,
|
|
119
|
+
MAXIMUM_KEY
|
|
120
|
+
]);
|
|
121
|
+
return execInReadTx(this.store, (tx)=>tx.countEntriesIndex(startKey, endKey, false));
|
|
122
|
+
}
|
|
123
|
+
}
|