@aztec/kv-store 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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 +10 -1
- 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/{indexeddb → deprecated/indexeddb}/array.js +18 -6
- 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/{indexeddb → deprecated/indexeddb}/map.js +23 -13
- package/dest/deprecated/indexeddb/multi_map.d.ts +14 -0
- package/dest/deprecated/indexeddb/multi_map.d.ts.map +1 -0
- package/dest/{indexeddb → deprecated/indexeddb}/multi_map.js +16 -1
- package/dest/deprecated/indexeddb/set.d.ts +17 -0
- package/dest/deprecated/indexeddb/set.d.ts.map +1 -0
- package/dest/deprecated/indexeddb/singleton.d.ts +17 -0
- package/dest/deprecated/indexeddb/singleton.d.ts.map +1 -0
- package/dest/{indexeddb → deprecated/indexeddb}/singleton.js +3 -1
- package/dest/deprecated/indexeddb/store.d.ts +98 -0
- package/dest/deprecated/indexeddb/store.d.ts.map +1 -0
- package/dest/{indexeddb → deprecated/indexeddb}/store.js +8 -4
- package/dest/interfaces/array_test_suite.d.ts +1 -1
- package/dest/interfaces/array_test_suite.d.ts.map +1 -1
- package/dest/interfaces/array_test_suite.js +33 -34
- package/dest/interfaces/index.d.ts +2 -2
- package/dest/interfaces/index.d.ts.map +1 -1
- package/dest/interfaces/map_test_suite.d.ts +1 -1
- package/dest/interfaces/map_test_suite.d.ts.map +1 -1
- package/dest/interfaces/map_test_suite.js +74 -29
- package/dest/interfaces/multi_map_test_suite.d.ts +1 -1
- package/dest/interfaces/multi_map_test_suite.d.ts.map +1 -1
- package/dest/interfaces/multi_map_test_suite.js +84 -60
- package/dest/interfaces/set_test_suite.d.ts +1 -1
- package/dest/interfaces/set_test_suite.d.ts.map +1 -1
- package/dest/interfaces/set_test_suite.js +13 -14
- package/dest/interfaces/singleton_test_suite.d.ts +1 -1
- package/dest/interfaces/singleton_test_suite.d.ts.map +1 -1
- package/dest/interfaces/singleton_test_suite.js +6 -7
- package/dest/interfaces/utils.d.ts +2 -1
- package/dest/interfaces/utils.d.ts.map +1 -1
- package/dest/interfaces/utils.js +2 -1
- package/dest/lmdb/index.d.ts +3 -3
- package/dest/lmdb/index.d.ts.map +1 -1
- package/dest/lmdb/index.js +4 -4
- package/dest/lmdb/store.d.ts +3 -3
- package/dest/lmdb/store.d.ts.map +1 -1
- package/dest/lmdb/store.js +12 -8
- package/dest/lmdb-v2/factory.d.ts +33 -7
- package/dest/lmdb-v2/factory.d.ts.map +1 -1
- package/dest/lmdb-v2/factory.js +72 -16
- package/dest/lmdb-v2/read_transaction.js +21 -19
- package/dest/lmdb-v2/store.d.ts +3 -3
- package/dest/lmdb-v2/store.d.ts.map +1 -1
- package/dest/lmdb-v2/store.js +5 -4
- 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 +317 -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/l2_tips_store.d.ts +7 -13
- package/dest/stores/l2_tips_store.d.ts.map +1 -1
- package/dest/stores/l2_tips_store.js +24 -43
- package/dest/utils.d.ts +9 -6
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +51 -16
- package/package.json +30 -26
- package/src/bench/shared_map_bench.ts +111 -0
- package/src/{indexeddb → deprecated/indexeddb}/array.ts +6 -6
- package/src/deprecated/indexeddb/index.ts +12 -0
- package/src/{indexeddb → deprecated/indexeddb}/map.ts +26 -13
- package/src/{indexeddb → deprecated/indexeddb}/multi_map.ts +17 -3
- package/src/{indexeddb → deprecated/indexeddb}/set.ts +2 -2
- package/src/{indexeddb → deprecated/indexeddb}/singleton.ts +3 -3
- package/src/{indexeddb → deprecated/indexeddb}/store.ts +23 -15
- package/src/interfaces/array_test_suite.ts +33 -35
- package/src/interfaces/index.ts +1 -1
- package/src/interfaces/map_test_suite.ts +56 -30
- package/src/interfaces/multi_map_test_suite.ts +88 -58
- package/src/interfaces/set_test_suite.ts +13 -15
- package/src/interfaces/singleton_test_suite.ts +6 -8
- package/src/interfaces/utils.ts +1 -0
- package/src/lmdb/index.ts +10 -5
- package/src/lmdb/store.ts +12 -8
- package/src/lmdb-v2/factory.ts +99 -19
- package/src/lmdb-v2/read_transaction.ts +23 -23
- package/src/lmdb-v2/store.ts +7 -4
- 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 +330 -0
- package/src/sqlite-opfs/worker.ts +259 -0
- package/src/stores/l2_tips_store.ts +20 -41
- package/src/utils.ts +79 -21
- package/dest/config.d.ts +0 -17
- package/dest/config.d.ts.map +0 -1
- package/dest/config.js +0 -26
- package/dest/indexeddb/array.d.ts +0 -22
- package/dest/indexeddb/array.d.ts.map +0 -1
- package/dest/indexeddb/index.d.ts +0 -7
- package/dest/indexeddb/index.d.ts.map +0 -1
- package/dest/indexeddb/index.js +0 -19
- package/dest/indexeddb/map.d.ts +0 -32
- package/dest/indexeddb/map.d.ts.map +0 -1
- package/dest/indexeddb/multi_map.d.ts +0 -13
- package/dest/indexeddb/multi_map.d.ts.map +0 -1
- package/dest/indexeddb/set.d.ts +0 -17
- package/dest/indexeddb/set.d.ts.map +0 -1
- package/dest/indexeddb/singleton.d.ts +0 -17
- package/dest/indexeddb/singleton.d.ts.map +0 -1
- package/dest/indexeddb/store.d.ts +0 -96
- package/dest/indexeddb/store.d.ts.map +0 -1
- package/src/config.ts +0 -36
- package/src/indexeddb/index.ts +0 -29
- /package/dest/{indexeddb → deprecated/indexeddb}/set.js +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# KV Store
|
|
2
2
|
|
|
3
|
-
The Aztec KV store is an implementation of a durable key-value database with a pluggable backend.
|
|
3
|
+
The Aztec KV store is an implementation of a durable key-value database with a pluggable backend.
|
|
4
4
|
|
|
5
5
|
This package exports a number of primitive data structures that can be used to build domain-specific databases in each node component (e.g. a PXE database or an Archiver database). The data structures supported:
|
|
6
6
|
|
|
@@ -8,3 +8,12 @@ This package exports a number of primitive data structures that can be used to b
|
|
|
8
8
|
- array - works like a normal in-memory JS array. It can't contain holes and it can be used as a stack (push-pop mechanics).
|
|
9
9
|
- map - a hashmap where keys can be numbers or strings
|
|
10
10
|
- multi-map - just like a map but each key holds multiple values. Can be used for indexing into other data structures
|
|
11
|
+
|
|
12
|
+
## Backend selection
|
|
13
|
+
|
|
14
|
+
The backend is selected at import time, you import `createStore` (and friends) from the entrypoint you want:
|
|
15
|
+
|
|
16
|
+
- `@aztec/kv-store/lmdb-v2`: server / Node. The current default for node components.
|
|
17
|
+
- `@aztec/kv-store/lmdb`: the legacy LMDB backend, backed by [`lmdb-js`](https://github.com/kriszyp/lmdb-js).
|
|
18
|
+
- `@aztec/kv-store/sqlite-opfs`: the recommended browser backend, encryption-at-rest capable, backed by SQLite over the Origin Private File System (OPFS).
|
|
19
|
+
- `@aztec/kv-store/deprecated/indexeddb`: **deprecated** browser backend, backed by IndexedDB. New browser code must use `@aztec/kv-store/sqlite-opfs`, as this backend is on its way to being fully deprecated.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import type { AztecAsyncKVStore } from '../interfaces/store.js';
|
|
3
|
+
/** One benchmark measurement. */
|
|
4
|
+
export type BenchResult = {
|
|
5
|
+
/** Benchmark name (includes the backend prefix for disambiguation). */
|
|
6
|
+
name: string;
|
|
7
|
+
value: number;
|
|
8
|
+
unit: 'ms' | 'us';
|
|
9
|
+
};
|
|
10
|
+
export type BenchReporter = (results: BenchResult[]) => void | Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Runs the standard Map benchmark suite against any `AztecAsyncKVStore` backend,
|
|
13
|
+
* populates `results`, and calls `reporter` in `afterAll`.
|
|
14
|
+
*
|
|
15
|
+
* Kept free of Node-only deps (`fs`, `path`) so the same runner works under
|
|
16
|
+
* vitest-browser for IndexedDB and SQLite-OPFS.
|
|
17
|
+
*/
|
|
18
|
+
export declare function describeAztecMapBench(backendPrefix: string, getStore: () => Promise<AztecAsyncKVStore>, logger: Logger, reporter: BenchReporter): void;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkX21hcF9iZW5jaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JlbmNoL3NoYXJlZF9tYXBfYmVuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxpQ0FBaUM7QUFDakMsTUFBTSxNQUFNLFdBQVcsR0FBRztJQUN4Qix1RUFBdUU7SUFDdkUsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQztDQUNuQixDQUFDO0FBRUYsTUFBTSxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTdFOzs7Ozs7R0FNRztBQUNILHdCQUFnQixxQkFBcUIsQ0FDbkMsYUFBYSxFQUFFLE1BQU0sRUFDckIsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQzFDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFFLGFBQWEsUUFrRnhCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared_map_bench.d.ts","sourceRoot":"","sources":["../../src/bench/shared_map_bench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,iCAAiC;AACjC,MAAM,MAAM,WAAW,GAAG;IACxB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,EAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,QAkFxB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
2
|
+
/**
|
|
3
|
+
* Runs the standard Map benchmark suite against any `AztecAsyncKVStore` backend,
|
|
4
|
+
* populates `results`, and calls `reporter` in `afterAll`.
|
|
5
|
+
*
|
|
6
|
+
* Kept free of Node-only deps (`fs`, `path`) so the same runner works under
|
|
7
|
+
* vitest-browser for IndexedDB and SQLite-OPFS.
|
|
8
|
+
*/ export function describeAztecMapBench(backendPrefix, getStore, logger, reporter) {
|
|
9
|
+
describe(`${backendPrefix} Map benchmarks`, ()=>{
|
|
10
|
+
let store;
|
|
11
|
+
let map;
|
|
12
|
+
const results = [];
|
|
13
|
+
const generateKeyValuePairs = (count, offset = 0)=>{
|
|
14
|
+
const keys = Array.from({
|
|
15
|
+
length: count
|
|
16
|
+
}, (_, i)=>`key-${i + offset}`);
|
|
17
|
+
const values = Array.from({
|
|
18
|
+
length: count
|
|
19
|
+
}, (_, i)=>`value-${i + offset}`);
|
|
20
|
+
return keys.map((key, i)=>({
|
|
21
|
+
key,
|
|
22
|
+
value: values[i]
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
const record = (name, value, unit)=>{
|
|
26
|
+
results.push({
|
|
27
|
+
name: `${backendPrefix}/Map/${name}`,
|
|
28
|
+
value,
|
|
29
|
+
unit
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
beforeEach(async ()=>{
|
|
33
|
+
store = await getStore();
|
|
34
|
+
map = store.openMap('test');
|
|
35
|
+
});
|
|
36
|
+
afterEach(async ()=>{
|
|
37
|
+
await store.delete();
|
|
38
|
+
});
|
|
39
|
+
afterAll(async ()=>{
|
|
40
|
+
const pretty = results.map((r)=>`${r.name}: ${r.value.toFixed(2)} ${r.unit}`).join('\n');
|
|
41
|
+
logger.info(`\n${pretty}\n`);
|
|
42
|
+
await reporter(results);
|
|
43
|
+
});
|
|
44
|
+
it('adds individual values', async ()=>{
|
|
45
|
+
const pairs = generateKeyValuePairs(1000);
|
|
46
|
+
const timer = new Timer();
|
|
47
|
+
for (const pair of pairs){
|
|
48
|
+
await map.set(pair.key, pair.value);
|
|
49
|
+
}
|
|
50
|
+
record('Individual insertion', timer.ms() / pairs.length, 'ms');
|
|
51
|
+
});
|
|
52
|
+
it('adds batched values', async ()=>{
|
|
53
|
+
const batches = Array.from({
|
|
54
|
+
length: 100
|
|
55
|
+
}, (_, i)=>generateKeyValuePairs(1000, i * 1000));
|
|
56
|
+
const timer = new Timer();
|
|
57
|
+
for (const batch of batches){
|
|
58
|
+
await map.setMany(batch);
|
|
59
|
+
}
|
|
60
|
+
record(`Batch insertion of ${batches[0].length} items`, timer.ms() / batches.length, 'ms');
|
|
61
|
+
});
|
|
62
|
+
it('reads individual values', async ()=>{
|
|
63
|
+
const pairs = generateKeyValuePairs(10000);
|
|
64
|
+
await map.setMany(pairs);
|
|
65
|
+
const timer = new Timer();
|
|
66
|
+
for (const pair of pairs){
|
|
67
|
+
await map.getAsync(pair.key);
|
|
68
|
+
}
|
|
69
|
+
record('Individual read', timer.ms() * 1000 / pairs.length, 'us');
|
|
70
|
+
});
|
|
71
|
+
it('reads via a cursor', async ()=>{
|
|
72
|
+
const pairs = generateKeyValuePairs(10000);
|
|
73
|
+
await map.setMany(pairs);
|
|
74
|
+
const timer = new Timer();
|
|
75
|
+
for await (const _ of map.entriesAsync()){
|
|
76
|
+
// consume
|
|
77
|
+
}
|
|
78
|
+
record(`Iterator per item read of ${pairs.length} items`, timer.ms() * 1000 / pairs.length, 'us');
|
|
79
|
+
});
|
|
80
|
+
it('reads the size of the map', async ()=>{
|
|
81
|
+
const numIterations = 1000;
|
|
82
|
+
const pairs = generateKeyValuePairs(10000);
|
|
83
|
+
await map.setMany(pairs);
|
|
84
|
+
const timer = new Timer();
|
|
85
|
+
for(let i = 0; i < numIterations; i++){
|
|
86
|
+
await map.sizeAsync();
|
|
87
|
+
}
|
|
88
|
+
record(`Read size of ${pairs.length} items`, timer.ms() * 1000 / numIterations, 'us');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
|
+
import type { AztecAsyncArray } from '../../interfaces/array.js';
|
|
3
|
+
import type { Value } from '../../interfaces/common.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
|
+
/**
|
|
6
|
+
* A persistent array backed by IndexedDB.
|
|
7
|
+
*/
|
|
8
|
+
export declare class IndexedDBAztecArray<T extends Value> implements AztecAsyncArray<T> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(rootDB: IDBPDatabase<AztecIDBSchema>, name: string);
|
|
11
|
+
set db(db: IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'> | undefined);
|
|
12
|
+
get db(): IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'>;
|
|
13
|
+
lengthAsync(): Promise<number>;
|
|
14
|
+
push(...vals: T[]): Promise<number>;
|
|
15
|
+
pop(): Promise<T | undefined>;
|
|
16
|
+
atAsync(index: number): Promise<T | undefined>;
|
|
17
|
+
setAt(index: number, val: T): Promise<boolean>;
|
|
18
|
+
entriesAsync(): AsyncIterableIterator<[number, T]>;
|
|
19
|
+
valuesAsync(): AsyncIterableIterator<T>;
|
|
20
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXByZWNhdGVkL2luZGV4ZWRkYi9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBR3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRDs7R0FFRztBQUNILHFCQUFhLG1CQUFtQixDQUFDLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxlQUFlLENBQUMsQ0FBQyxDQUFDOztJQU03RSxZQUFZLE1BQU0sRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFJN0Q7SUFFRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxTQUFTLEVBRXBGO0lBRUQsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FFdkU7SUFFSyxXQUFXLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU1uQztJQUVLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBY3hDO0lBRUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBV2xDO0lBRUssT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FTbkQ7SUFFSyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FvQm5EO0lBRU0sWUFBWSxJQUFJLHFCQUFxQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBTXhEO0lBRU0sV0FBVyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUk3QztJQUVELENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUVqRDtDQUtGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;;IAM7E,YAAY,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAI7D;IAED,IAAI,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,EAEpF;IAED,IAAI,EAAE,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAEvE;IAEK,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAMnC;IAEK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAcxC;IAEK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAWlC;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CASnD;IAEK,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBnD;IAEM,YAAY,IAAI,qBAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAMxD;IAEM,WAAW,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAI7C;IAED,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAEjD;CAKF"}
|
|
@@ -22,10 +22,14 @@ _computedKey = Symbol.asyncIterator;
|
|
|
22
22
|
async lengthAsync() {
|
|
23
23
|
return await this.db.index('key').count(IDBKeyRange.bound([
|
|
24
24
|
this.#container,
|
|
25
|
-
|
|
25
|
+
[
|
|
26
|
+
this.#name
|
|
27
|
+
]
|
|
26
28
|
], [
|
|
27
29
|
this.#container,
|
|
28
|
-
|
|
30
|
+
[
|
|
31
|
+
this.#name
|
|
32
|
+
]
|
|
29
33
|
])) ?? 0;
|
|
30
34
|
}
|
|
31
35
|
async push(...vals) {
|
|
@@ -35,7 +39,9 @@ _computedKey = Symbol.asyncIterator;
|
|
|
35
39
|
value: val,
|
|
36
40
|
hash: hash(val),
|
|
37
41
|
container: this.#container,
|
|
38
|
-
key:
|
|
42
|
+
key: [
|
|
43
|
+
this.#name
|
|
44
|
+
],
|
|
39
45
|
keyCount: length + 1,
|
|
40
46
|
slot: this.#slot(length)
|
|
41
47
|
});
|
|
@@ -73,7 +79,9 @@ _computedKey = Symbol.asyncIterator;
|
|
|
73
79
|
value: val,
|
|
74
80
|
hash: hash(val),
|
|
75
81
|
container: this.#container,
|
|
76
|
-
key:
|
|
82
|
+
key: [
|
|
83
|
+
this.#name
|
|
84
|
+
],
|
|
77
85
|
keyCount: index + 1,
|
|
78
86
|
slot: this.#slot(index)
|
|
79
87
|
});
|
|
@@ -83,10 +91,14 @@ _computedKey = Symbol.asyncIterator;
|
|
|
83
91
|
const index = this.db.index('key');
|
|
84
92
|
const rangeQuery = IDBKeyRange.bound([
|
|
85
93
|
this.#container,
|
|
86
|
-
|
|
94
|
+
[
|
|
95
|
+
this.#name
|
|
96
|
+
]
|
|
87
97
|
], [
|
|
88
98
|
this.#container,
|
|
89
|
-
|
|
99
|
+
[
|
|
100
|
+
this.#name
|
|
101
|
+
]
|
|
90
102
|
]);
|
|
91
103
|
for await (const cursor of index.iterate(rangeQuery)){
|
|
92
104
|
yield [
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AztecIndexedDBStore } from './store.js';
|
|
2
|
+
export { AztecIndexedDBStore } from './store.js';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated The IndexedDB backend is being retired. Use `@aztec/kv-store/sqlite-opfs` instead.
|
|
5
|
+
*/
|
|
6
|
+
export declare function openTmpStore(ephemeral?: boolean): Promise<AztecIndexedDBStore>;
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXByZWNhdGVkL2luZGV4ZWRkYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsd0JBQWdCLFlBQVksQ0FBQyxTQUFTLEdBQUUsT0FBZSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUVyRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAErF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { AztecIndexedDBStore } from './store.js';
|
|
3
|
+
export { AztecIndexedDBStore } from './store.js';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated The IndexedDB backend is being retired. Use `@aztec/kv-store/sqlite-opfs` instead.
|
|
6
|
+
*/ export function openTmpStore(ephemeral = false) {
|
|
7
|
+
return AztecIndexedDBStore.open(createLogger('kv-store:indexeddb'), undefined, ephemeral);
|
|
8
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
|
+
import type { Key, Range, Value } from '../../interfaces/common.js';
|
|
3
|
+
import type { AztecAsyncMap } from '../../interfaces/map.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
|
+
/**
|
|
6
|
+
* A map backed by IndexedDB.
|
|
7
|
+
*/
|
|
8
|
+
export declare class IndexedDBAztecMap<K extends Key, V extends Value> implements AztecAsyncMap<K, V> {
|
|
9
|
+
#private;
|
|
10
|
+
protected name: string;
|
|
11
|
+
protected container: string;
|
|
12
|
+
constructor(rootDB: IDBPDatabase<AztecIDBSchema>, mapName: string);
|
|
13
|
+
set db(db: IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'> | undefined);
|
|
14
|
+
get db(): IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'>;
|
|
15
|
+
getAsync(key: K): Promise<V | undefined>;
|
|
16
|
+
hasAsync(key: K): Promise<boolean>;
|
|
17
|
+
sizeAsync(): Promise<number>;
|
|
18
|
+
set(key: K, val: V): Promise<void>;
|
|
19
|
+
setMany(entries: {
|
|
20
|
+
key: K;
|
|
21
|
+
value: V;
|
|
22
|
+
}[]): Promise<void>;
|
|
23
|
+
swap(_key: K, _fn: (val: V | undefined) => V): Promise<void>;
|
|
24
|
+
setIfNotExists(key: K, val: V): Promise<boolean>;
|
|
25
|
+
delete(key: K): Promise<void>;
|
|
26
|
+
entriesAsync(range?: Range<K>): AsyncIterableIterator<[K, V]>;
|
|
27
|
+
valuesAsync(range?: Range<K>): AsyncIterableIterator<V>;
|
|
28
|
+
keysAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
29
|
+
/**
|
|
30
|
+
* IndexedDB's structured clone downcasts Buffer (a Node.js subclass of Uint8Array) to plain Uint8Array.
|
|
31
|
+
* This breaks .toString() behavior: Buffer.toString() returns UTF-8, Uint8Array.toString() returns
|
|
32
|
+
* comma-separated decimal bytes. We restore Buffer identity on read so callers get consistent behavior.
|
|
33
|
+
*/
|
|
34
|
+
protected restoreBuffers(val: V): V;
|
|
35
|
+
protected normalizeKey(key: K): (string | number | Uint8Array)[];
|
|
36
|
+
protected slot(key: K, index?: number): string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVwcmVjYXRlZC9pbmRleGVkZGIvbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHekQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxxQkFBYSxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFDM0YsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7SUFDdkIsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFLNUIsWUFBWSxNQUFNLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBSWhFO0lBRUQsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsU0FBUyxFQUVwRjtJQUVELElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBRXZFO0lBRUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FHN0M7SUFFSyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBR3ZDO0lBRUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FJakM7SUFFSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTdkM7SUFFSyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7S0FBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUk1RDtJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTNEO0lBRUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBTXJEO0lBRUssTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUVsQztJQUVNLFlBQVksQ0FBQyxLQUFLLEdBQUUsS0FBSyxDQUFDLENBQUMsQ0FBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBbUJ2RTtJQUVNLFdBQVcsQ0FBQyxLQUFLLEdBQUUsS0FBSyxDQUFDLENBQUMsQ0FBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUlqRTtJQUVNLFNBQVMsQ0FBQyxLQUFLLEdBQUUsS0FBSyxDQUFDLENBQUMsQ0FBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUkvRDtJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUtsQztJQU1ELFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FFL0Q7SUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFFLE1BQVUsR0FBRyxNQUFNLENBRWhEO0NBQ0YifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;;IAC3F,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAK5B,YAAY,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAIhE;IAED,IAAI,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,EAEpF;IAED,IAAI,EAAE,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAEvE;IAEK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAG7C;IAEK,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAGvC;IAEK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAIjC;IAEK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASvC;IAEK,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5D;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAEK,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAMrD;IAEK,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAElC;IAEM,YAAY,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAmBvE;IAEM,WAAW,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAIjE;IAEM,SAAS,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAI/D;IAED;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAKlC;IAMD,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,CAE/D;IAED,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAEhD;CACF"}
|
|
@@ -19,7 +19,7 @@ import { hash } from 'ohash';
|
|
|
19
19
|
}
|
|
20
20
|
async getAsync(key) {
|
|
21
21
|
const data = await this.db.get(this.slot(key));
|
|
22
|
-
return data
|
|
22
|
+
return data ? this.restoreBuffers(data.value) : undefined;
|
|
23
23
|
}
|
|
24
24
|
async hasAsync(key) {
|
|
25
25
|
const result = await this.getAsync(key) !== undefined;
|
|
@@ -28,12 +28,10 @@ import { hash } from 'ohash';
|
|
|
28
28
|
async sizeAsync() {
|
|
29
29
|
const index = this.db.index('key');
|
|
30
30
|
const rangeQuery = IDBKeyRange.bound([
|
|
31
|
-
this.container
|
|
32
|
-
''
|
|
31
|
+
this.container
|
|
33
32
|
], [
|
|
34
|
-
this.container
|
|
35
|
-
|
|
36
|
-
]);
|
|
33
|
+
this.container + '\uffff'
|
|
34
|
+
], true, true);
|
|
37
35
|
return await index.count(rangeQuery);
|
|
38
36
|
}
|
|
39
37
|
async set(key, val) {
|
|
@@ -66,12 +64,16 @@ import { hash } from 'ohash';
|
|
|
66
64
|
}
|
|
67
65
|
async *entriesAsync(range = {}) {
|
|
68
66
|
const index = this.db.index('key');
|
|
67
|
+
const startKey = range.start ? this.normalizeKey(range.start) : [];
|
|
68
|
+
const endKey = range.end ? this.normalizeKey(range.end) : [
|
|
69
|
+
'\uffff'
|
|
70
|
+
];
|
|
69
71
|
const rangeQuery = IDBKeyRange.bound([
|
|
70
72
|
this.container,
|
|
71
|
-
|
|
73
|
+
startKey
|
|
72
74
|
], [
|
|
73
75
|
this.container,
|
|
74
|
-
|
|
76
|
+
endKey
|
|
75
77
|
], !!range.reverse, !range.reverse);
|
|
76
78
|
let count = 0;
|
|
77
79
|
for await (const cursor of index.iterate(rangeQuery, range.reverse ? 'prev' : 'next')){
|
|
@@ -80,7 +82,7 @@ import { hash } from 'ohash';
|
|
|
80
82
|
}
|
|
81
83
|
yield [
|
|
82
84
|
this.#denormalizeKey(cursor.value.key),
|
|
83
|
-
cursor.value.value
|
|
85
|
+
this.restoreBuffers(cursor.value.value)
|
|
84
86
|
];
|
|
85
87
|
count++;
|
|
86
88
|
}
|
|
@@ -95,15 +97,23 @@ import { hash } from 'ohash';
|
|
|
95
97
|
yield key;
|
|
96
98
|
}
|
|
97
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* IndexedDB's structured clone downcasts Buffer (a Node.js subclass of Uint8Array) to plain Uint8Array.
|
|
102
|
+
* This breaks .toString() behavior: Buffer.toString() returns UTF-8, Uint8Array.toString() returns
|
|
103
|
+
* comma-separated decimal bytes. We restore Buffer identity on read so callers get consistent behavior.
|
|
104
|
+
*/ restoreBuffers(val) {
|
|
105
|
+
if (val instanceof Uint8Array && !Buffer.isBuffer(val)) {
|
|
106
|
+
return Buffer.from(val);
|
|
107
|
+
}
|
|
108
|
+
return val;
|
|
109
|
+
}
|
|
98
110
|
#denormalizeKey(key) {
|
|
99
|
-
|
|
100
|
-
return denormalizedKey.length > 1 ? denormalizedKey : denormalizedKey[0];
|
|
111
|
+
return key.length > 1 ? key : key[0];
|
|
101
112
|
}
|
|
102
113
|
normalizeKey(key) {
|
|
103
|
-
|
|
114
|
+
return Array.isArray(key) ? key : [
|
|
104
115
|
key
|
|
105
116
|
];
|
|
106
|
-
return arrayKey.map((element)=>typeof element === 'number' ? `n_${element}` : element).join(',');
|
|
107
117
|
}
|
|
108
118
|
slot(key, index = 0) {
|
|
109
119
|
return `map:${this.name}:slot:${this.normalizeKey(key)}:${index}`;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Key, Value } from '../../interfaces/common.js';
|
|
2
|
+
import type { AztecAsyncMultiMap } from '../../interfaces/multi_map.js';
|
|
3
|
+
import { IndexedDBAztecMap } from './map.js';
|
|
4
|
+
/**
|
|
5
|
+
* A multi map backed by IndexedDB.
|
|
6
|
+
*/
|
|
7
|
+
export declare class IndexedDBAztecMultiMap<K extends Key, V extends Value> extends IndexedDBAztecMap<K, V> implements AztecAsyncMultiMap<K, V> {
|
|
8
|
+
set(key: K, val: V): Promise<void>;
|
|
9
|
+
getValuesAsync(key: K): AsyncIterableIterator<V>;
|
|
10
|
+
getValueCountAsync(key: K): Promise<number>;
|
|
11
|
+
deleteValue(key: K, val: V): Promise<void>;
|
|
12
|
+
delete(key: K): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfbWFwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVwcmVjYXRlZC9pbmRleGVkZGIvbXVsdGlfbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU3Qzs7R0FFRztBQUNILHFCQUFhLHNCQUFzQixDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEtBQUssQ0FDaEUsU0FBUSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUM5QixZQUFXLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFcEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0NoRDtJQUVNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQVl0RDtJQUVELGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVUxQztJQUVLLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWMvQztJQUVjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FZM0M7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi_map.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/multi_map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,qBAAa,sBAAsB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,CAChE,SAAQ,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAC9B,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChD;IAEM,cAAc,CAAC,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAYtD;IAED,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAU1C;IAEK,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/C;IAEc,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3C;CACF"}
|
|
@@ -56,7 +56,7 @@ import { IndexedDBAztecMap } from './map.js';
|
|
|
56
56
|
Number.MAX_SAFE_INTEGER
|
|
57
57
|
], false, false);
|
|
58
58
|
for await (const cursor of index.iterate(rangeQuery)){
|
|
59
|
-
yield cursor.value.value;
|
|
59
|
+
yield this.restoreBuffers(cursor.value.value);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
getValueCountAsync(key) {
|
|
@@ -89,4 +89,19 @@ import { IndexedDBAztecMap } from './map.js';
|
|
|
89
89
|
await this.db.delete(fullKey);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
+
async delete(key) {
|
|
93
|
+
const index = this.db.index('keyCount');
|
|
94
|
+
const rangeQuery = IDBKeyRange.bound([
|
|
95
|
+
this.container,
|
|
96
|
+
this.normalizeKey(key),
|
|
97
|
+
0
|
|
98
|
+
], [
|
|
99
|
+
this.container,
|
|
100
|
+
this.normalizeKey(key),
|
|
101
|
+
Number.MAX_SAFE_INTEGER
|
|
102
|
+
], false, false);
|
|
103
|
+
for await (const cursor of index.iterate(rangeQuery)){
|
|
104
|
+
await cursor.delete();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
92
107
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
|
+
import type { Key, Range } from '../../interfaces/common.js';
|
|
3
|
+
import type { AztecAsyncSet } from '../../interfaces/set.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
|
+
/**
|
|
6
|
+
* A set backed by IndexedDB.
|
|
7
|
+
*/
|
|
8
|
+
export declare class IndexedDBAztecSet<K extends Key> implements AztecAsyncSet<K> {
|
|
9
|
+
private map;
|
|
10
|
+
constructor(rootDb: IDBPDatabase<AztecIDBSchema>, mapName: string);
|
|
11
|
+
set db(db: IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'> | undefined);
|
|
12
|
+
hasAsync(key: K): Promise<boolean>;
|
|
13
|
+
add(key: K): Promise<void>;
|
|
14
|
+
delete(key: K): Promise<void>;
|
|
15
|
+
entriesAsync(range?: Range<K>): AsyncIterableIterator<K>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVwcmVjYXRlZC9pbmRleGVkZGIvc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFekQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRDs7R0FFRztBQUNILHFCQUFhLGlCQUFpQixDQUFDLENBQUMsU0FBUyxHQUFHLENBQUUsWUFBVyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQWdDO0lBRTNDLFlBQVksTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUVoRTtJQUVELElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsRUFFcEY7SUFFRCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV6QjtJQUVELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUI7SUFFTSxZQUFZLENBQUMsS0FBSyxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQU0sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FFbEU7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,GAAG,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAgC;IAE3C,YAAY,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAEhE;IAED,IAAI,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,EAEpF;IAED,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjC;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzB;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5B;IAEM,YAAY,CAAC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAElE;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
|
+
import type { Value } from '../../interfaces/common.js';
|
|
3
|
+
import type { AztecAsyncSingleton } from '../../interfaces/singleton.js';
|
|
4
|
+
import type { AztecIDBSchema } from './store.js';
|
|
5
|
+
/**
|
|
6
|
+
* Stores a single value in IndexedDB.
|
|
7
|
+
*/
|
|
8
|
+
export declare class IndexedDBAztecSingleton<T extends Value> implements AztecAsyncSingleton<T> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(rootDB: IDBPDatabase<AztecIDBSchema>, name: string);
|
|
11
|
+
set db(db: IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'> | undefined);
|
|
12
|
+
get db(): IDBPObjectStore<AztecIDBSchema, ['data'], 'data', 'readwrite'>;
|
|
13
|
+
getAsync(): Promise<T | undefined>;
|
|
14
|
+
set(val: T): Promise<boolean>;
|
|
15
|
+
delete(): Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVwcmVjYXRlZC9pbmRleGVkZGIvc2luZ2xldG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFHekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxxQkFBYSx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFFLFlBQVcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOztJQU1yRixZQUFZLE1BQU0sRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFJN0Q7SUFFRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxTQUFTLEVBRXBGO0lBRUQsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FFdkU7SUFFSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FHdkM7SUFFSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBVWxDO0lBRUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHL0I7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,uBAAuB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;;IAMrF,YAAY,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAI7D;IAED,IAAI,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,EAEpF;IAED,IAAI,EAAE,IAAI,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAEvE;IAEK,QAAQ,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAGvC;IAEK,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAUlC;IAEK,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAG/B;CACF"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { type DBSchema, type IDBPDatabase } from 'idb';
|
|
3
|
+
import type { AztecAsyncArray } from '../../interfaces/array.js';
|
|
4
|
+
import type { Key, StoreSize, Value } from '../../interfaces/common.js';
|
|
5
|
+
import type { AztecAsyncCounter } from '../../interfaces/counter.js';
|
|
6
|
+
import type { AztecAsyncMap } from '../../interfaces/map.js';
|
|
7
|
+
import type { AztecAsyncMultiMap } from '../../interfaces/multi_map.js';
|
|
8
|
+
import type { AztecAsyncSet } from '../../interfaces/set.js';
|
|
9
|
+
import type { AztecAsyncSingleton } from '../../interfaces/singleton.js';
|
|
10
|
+
import type { AztecAsyncKVStore } from '../../interfaces/store.js';
|
|
11
|
+
export type StoredData<V extends Value> = {
|
|
12
|
+
value: V;
|
|
13
|
+
container: string;
|
|
14
|
+
key: (string | number | Uint8Array)[];
|
|
15
|
+
keyCount: number;
|
|
16
|
+
slot: string;
|
|
17
|
+
hash: string;
|
|
18
|
+
};
|
|
19
|
+
export interface AztecIDBSchema extends DBSchema {
|
|
20
|
+
data: {
|
|
21
|
+
value: StoredData<any>;
|
|
22
|
+
key: string;
|
|
23
|
+
indexes: {
|
|
24
|
+
container: string;
|
|
25
|
+
key: any;
|
|
26
|
+
keyCount: number;
|
|
27
|
+
hash: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A key-value store backed by IndexedDB.
|
|
33
|
+
*
|
|
34
|
+
* @deprecated The IndexedDB backend is being retired. Use `@aztec/kv-store/sqlite-opfs` instead.
|
|
35
|
+
*/
|
|
36
|
+
export declare class AztecIndexedDBStore implements AztecAsyncKVStore {
|
|
37
|
+
#private;
|
|
38
|
+
readonly isEphemeral: boolean;
|
|
39
|
+
constructor(rootDB: IDBPDatabase<AztecIDBSchema>, isEphemeral: boolean, name: string);
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new AztecKVStore backed by IndexedDB. The path to the database is optional. If not provided,
|
|
42
|
+
* the database will be stored in a temporary location and be deleted when the process exists.
|
|
43
|
+
*
|
|
44
|
+
*
|
|
45
|
+
* @param path - A path on the disk to store the database. Optional
|
|
46
|
+
* @param ephemeral - true if the store should only exist in memory and not automatically be flushed to disk. Optional
|
|
47
|
+
* @param log - A logger to use. Optional
|
|
48
|
+
* @returns The store
|
|
49
|
+
*/
|
|
50
|
+
static open(log: Logger, name?: string, ephemeral?: boolean): Promise<AztecIndexedDBStore>;
|
|
51
|
+
/**
|
|
52
|
+
* Creates a new AztecMap in the store.
|
|
53
|
+
* @param name - Name of the map
|
|
54
|
+
* @returns A new AztecMap
|
|
55
|
+
*/
|
|
56
|
+
openMap<K extends Key, V extends Value>(name: string): AztecAsyncMap<K, V>;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a new AztecSet in the store.
|
|
59
|
+
* @param name - Name of the set
|
|
60
|
+
* @returns A new AztecSet
|
|
61
|
+
*/
|
|
62
|
+
openSet<K extends Key>(name: string): AztecAsyncSet<K>;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a new AztecMultiMap in the store. A multi-map stores multiple values for a single key automatically.
|
|
65
|
+
* @param name - Name of the map
|
|
66
|
+
* @returns A new AztecMultiMap
|
|
67
|
+
*/
|
|
68
|
+
openMultiMap<K extends Key, V extends Value>(name: string): AztecAsyncMultiMap<K, V>;
|
|
69
|
+
openCounter<K extends Key>(_name: string): AztecAsyncCounter<K>;
|
|
70
|
+
/**
|
|
71
|
+
* Creates a new AztecArray in the store.
|
|
72
|
+
* @param name - Name of the array
|
|
73
|
+
* @returns A new AztecArray
|
|
74
|
+
*/
|
|
75
|
+
openArray<T extends Value>(name: string): AztecAsyncArray<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Creates a new AztecSingleton in the store.
|
|
78
|
+
* @param name - Name of the singleton
|
|
79
|
+
* @returns A new AztecSingleton
|
|
80
|
+
*/
|
|
81
|
+
openSingleton<T extends Value>(name: string): AztecAsyncSingleton<T>;
|
|
82
|
+
/**
|
|
83
|
+
* Runs a callback in a transaction.
|
|
84
|
+
* @param callback - Function to execute in a transaction
|
|
85
|
+
* @returns A promise that resolves to the return value of the callback
|
|
86
|
+
*/
|
|
87
|
+
transactionAsync<T>(callback: () => Promise<T>): Promise<T>;
|
|
88
|
+
/**
|
|
89
|
+
* Clears all entries in the store & sub DBs.
|
|
90
|
+
*/
|
|
91
|
+
clear(): Promise<void>;
|
|
92
|
+
/** Deletes this store and removes the database */
|
|
93
|
+
delete(): Promise<void>;
|
|
94
|
+
estimateSize(): Promise<StoreSize>;
|
|
95
|
+
close(): Promise<void>;
|
|
96
|
+
backupTo(_dstPath: string, _compact?: boolean): Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXByZWNhdGVkL2luZGV4ZWRkYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxZQUFZLEVBQW9CLE1BQU0sS0FBSyxDQUFDO0FBRXpFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU9uRSxNQUFNLE1BQU0sVUFBVSxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUk7SUFDeEMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNULFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3RDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDZCxDQUFDO0FBRUYsTUFBTSxXQUFXLGNBQWUsU0FBUSxRQUFRO0lBQzlDLElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsR0FBRyxFQUFFLE1BQU0sQ0FBQztRQUNaLE9BQU8sRUFBRTtZQUNQLFNBQVMsRUFBRSxNQUFNLENBQUM7WUFDbEIsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUNULFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNkLENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRDs7OztHQUlHO0FBQ0gscUJBQWEsbUJBQW9CLFlBQVcsaUJBQWlCOzthQWV6QyxXQUFXLEVBQUUsT0FBTztJQUZ0QyxZQUNFLE1BQU0sRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQ3BCLFdBQVcsRUFBRSxPQUFPLEVBQ3BDLElBQUksRUFBRSxNQUFNLEVBTWI7SUFDRDs7Ozs7Ozs7O09BU0c7SUFDSCxPQUFhLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUUsT0FBZSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQW1CdEc7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBSXpFO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUlyRDtJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUluRjtJQUVELFdBQVcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBRTlEO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUkzRDtJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUluRTtJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FxQjFEO0lBRUQ7O09BRUc7SUFDRyxLQUFLLGtCQUVWO0lBRUQsa0RBQWtEO0lBQzVDLE1BQU0sa0JBS1g7SUFFRCxZQUFZLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUVqQztJQUVLLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBRzNCO0lBRUQsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUQ7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/deprecated/indexeddb/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAoB,MAAM,KAAK,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAOnE,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,KAAK,IAAI;IACxC,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE;QACJ,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE;YACP,SAAS,EAAE,MAAM,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC;YACT,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;;aAezC,WAAW,EAAE,OAAO;IAFtC,YACE,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EACpB,WAAW,EAAE,OAAO,EACpC,IAAI,EAAE,MAAM,EAMb;IACD;;;;;;;;;OASG;IACH,OAAa,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmBtG;IAED;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAIzE;IAED;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAIrD;IAED;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAInF;IAED,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAE9D;IAED;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAI3D;IAED;;;;OAIG;IACH,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAInE;IAED;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqB1D;IAED;;OAEG;IACG,KAAK,kBAEV;IAED,kDAAkD;IAC5C,MAAM,kBAKX;IAED,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAEjC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;CACF"}
|
|
@@ -7,6 +7,8 @@ import { IndexedDBAztecSet } from './set.js';
|
|
|
7
7
|
import { IndexedDBAztecSingleton } from './singleton.js';
|
|
8
8
|
/**
|
|
9
9
|
* A key-value store backed by IndexedDB.
|
|
10
|
+
*
|
|
11
|
+
* @deprecated The IndexedDB backend is being retired. Use `@aztec/kv-store/sqlite-opfs` instead.
|
|
10
12
|
*/ export class AztecIndexedDBStore {
|
|
11
13
|
isEphemeral;
|
|
12
14
|
#rootDB;
|
|
@@ -145,10 +147,11 @@ import { IndexedDBAztecSingleton } from './singleton.js';
|
|
|
145
147
|
*/ async clear() {
|
|
146
148
|
await this.#rootDB.transaction('data', 'readwrite').store.clear();
|
|
147
149
|
}
|
|
148
|
-
/** Deletes this store and removes the database */ delete() {
|
|
150
|
+
/** Deletes this store and removes the database */ async delete() {
|
|
149
151
|
this.#containers.clear();
|
|
152
|
+
await this.#txQueue.end();
|
|
150
153
|
this.#rootDB.close();
|
|
151
|
-
|
|
154
|
+
await deleteDB(this.#name);
|
|
152
155
|
}
|
|
153
156
|
estimateSize() {
|
|
154
157
|
return Promise.resolve({
|
|
@@ -158,8 +161,9 @@ import { IndexedDBAztecSingleton } from './singleton.js';
|
|
|
158
161
|
numItems: 0
|
|
159
162
|
});
|
|
160
163
|
}
|
|
161
|
-
close() {
|
|
162
|
-
|
|
164
|
+
async close() {
|
|
165
|
+
await this.#txQueue.end();
|
|
166
|
+
this.#rootDB.close();
|
|
163
167
|
}
|
|
164
168
|
backupTo(_dstPath, _compact) {
|
|
165
169
|
throw new Error('Method not implemented.');
|