@lodestar/db 1.37.0-dev.6d7c41db1a → 1.37.0-dev.ada2b2b0ea

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.
@@ -1,3 +1,4 @@
1
1
  export type { DatabaseController, Db, DbReqOpts, FilterOptions, KeyValue } from "./interface.js";
2
+ export { LevelDbController } from "./level.js";
2
3
  export type { LevelDbControllerMetrics } from "./metrics.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC/F,YAAY,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export { LevelDbController } from "./level.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodestar/db",
3
- "version": "1.37.0-dev.6d7c41db1a",
3
+ "version": "1.37.0-dev.ada2b2b0ea",
4
4
  "description": "DB modules of Lodestar",
5
5
  "author": "ChainSafe Systems",
6
6
  "homepage": "https://github.com/ChainSafe/lodestar#readme",
@@ -23,12 +23,6 @@
23
23
  "import": "./lib/controller/level.js"
24
24
  }
25
25
  },
26
- "imports": {
27
- "#controller/level": {
28
- "bun": "./src/controller/level.ts",
29
- "import": "./src/controller/level.js"
30
- }
31
- },
32
26
  "files": [
33
27
  "src",
34
28
  "lib",
@@ -50,14 +44,13 @@
50
44
  },
51
45
  "dependencies": {
52
46
  "@chainsafe/ssz": "^1.2.2",
53
- "@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git",
54
- "@lodestar/config": "1.37.0-dev.6d7c41db1a",
55
- "@lodestar/utils": "1.37.0-dev.6d7c41db1a",
47
+ "@lodestar/config": "1.37.0-dev.ada2b2b0ea",
48
+ "@lodestar/utils": "1.37.0-dev.ada2b2b0ea",
56
49
  "classic-level": "^1.4.1",
57
50
  "it-all": "^3.0.4"
58
51
  },
59
52
  "devDependencies": {
60
- "@lodestar/logger": "1.37.0-dev.6d7c41db1a"
53
+ "@lodestar/logger": "1.37.0-dev.ada2b2b0ea"
61
54
  },
62
- "gitHead": "7566f11d30f7861cb9404a3772aa9b0d71d15712"
55
+ "gitHead": "c6e67c5e61ac599ebb27d53bbe05e765d83c94e9"
63
56
  }
@@ -1,2 +1,3 @@
1
1
  export type {DatabaseController, Db, DbReqOpts, FilterOptions, KeyValue} from "./interface.js";
2
+ export {LevelDbController} from "./level.js";
2
3
  export type {LevelDbControllerMetrics} from "./metrics.js";
@@ -1,35 +0,0 @@
1
- import { leveldb } from "@lodestar/bun";
2
- import { Logger } from "@lodestar/utils";
3
- import { DatabaseController, DatabaseOptions, DbReqOpts, FilterOptions, KeyValue } from "./interface.js";
4
- import { LevelDbControllerMetrics } from "./metrics.js";
5
- export type LevelDbControllerModules = {
6
- logger: Logger;
7
- metrics?: LevelDbControllerMetrics | null;
8
- };
9
- export declare enum Status {
10
- started = "started",
11
- closed = "closed"
12
- }
13
- export declare class LevelDbController implements DatabaseController<Uint8Array, Uint8Array> {
14
- private readonly db;
15
- private metrics;
16
- private status;
17
- constructor(db: leveldb.DB, metrics: LevelDbControllerMetrics | null);
18
- static create(options: DatabaseOptions, { metrics }: LevelDbControllerModules): Promise<LevelDbController>;
19
- static destroy(location: string): Promise<void>;
20
- close(): Promise<void>;
21
- setMetrics(metrics: LevelDbControllerMetrics): void;
22
- get(key: Uint8Array, opts?: DbReqOpts): Promise<Uint8Array | null>;
23
- getMany(keys: Uint8Array[], opts?: DbReqOpts): Promise<(Uint8Array | undefined)[]>;
24
- put(key: Uint8Array, value: Uint8Array, opts?: DbReqOpts): Promise<void>;
25
- delete(key: Uint8Array, opts?: DbReqOpts): Promise<void>;
26
- batchPut(items: KeyValue<Uint8Array, Uint8Array>[], opts?: DbReqOpts): Promise<void>;
27
- batchDelete(keys: Uint8Array[], opts?: DbReqOpts): Promise<void>;
28
- keysStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<Uint8Array>;
29
- keys(opts?: FilterOptions<Uint8Array>): Promise<Uint8Array[]>;
30
- valuesStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<Uint8Array>;
31
- values(opts?: FilterOptions<Uint8Array>): Promise<Uint8Array[]>;
32
- entriesStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<KeyValue<Uint8Array, Uint8Array>>;
33
- entries(opts?: FilterOptions<Uint8Array>): Promise<KeyValue<Uint8Array, Uint8Array>[]>;
34
- }
35
- //# sourceMappingURL=level_bun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"level_bun.d.ts","sourceRoot":"","sources":["../../src/controller/level_bun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAuBtD,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,oBAAY,MAAM;IAChB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAID,qBAAa,iBAAkB,YAAW,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC;IAIhF,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,MAAM,CAAkB;gBAGb,EAAE,EAAE,OAAO,CAAC,EAAE,EACvB,OAAO,EAAE,wBAAwB,GAAG,IAAI;WAGrC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,EAAC,OAAO,EAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC;WAKjG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAO7C,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOlE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IAOlF,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpF,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE,UAAU,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAsBrE,IAAI,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBvE,YAAY,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAsBvE,MAAM,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBzE,aAAa,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAsB9F,OAAO,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;CAkBjG"}
@@ -1,241 +0,0 @@
1
- import { leveldb } from "@lodestar/bun";
2
- const { dbBatchDelete, dbBatchPut, dbClose, dbDelete, dbDestroy, dbGet, dbIterator, dbOpen, dbPut, iteratorDestroy, iteratorKey, iteratorNext, iteratorPrev, iteratorSeek, iteratorSeekToFirst, iteratorSeekToLast, iteratorValid, iteratorValue, } = leveldb;
3
- export var Status;
4
- (function (Status) {
5
- Status["started"] = "started";
6
- Status["closed"] = "closed";
7
- })(Status || (Status = {}));
8
- const BUCKET_ID_UNKNOWN = "unknown";
9
- export class LevelDbController {
10
- db;
11
- metrics;
12
- status = Status.started;
13
- constructor(db, metrics) {
14
- this.db = db;
15
- this.metrics = metrics;
16
- }
17
- static async create(options, { metrics }) {
18
- const db = dbOpen(options.name, { create_if_missing: true });
19
- return new LevelDbController(db, metrics ?? null);
20
- }
21
- static async destroy(location) {
22
- dbDestroy(location);
23
- }
24
- async close() {
25
- if (this.status === Status.closed) {
26
- return;
27
- }
28
- this.status = Status.closed;
29
- dbClose(this.db);
30
- }
31
- setMetrics(metrics) {
32
- if (this.metrics !== null) {
33
- throw new Error("Metrics already set");
34
- }
35
- this.metrics = metrics;
36
- }
37
- async get(key, opts) {
38
- this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
39
- this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
40
- return dbGet(this.db, key);
41
- }
42
- async getMany(keys, opts) {
43
- this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
44
- this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, keys.length);
45
- return keys.map((key) => dbGet(this.db, key) ?? undefined);
46
- }
47
- async put(key, value, opts) {
48
- this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
49
- this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
50
- dbPut(this.db, key, value);
51
- }
52
- async delete(key, opts) {
53
- this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
54
- this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
55
- dbDelete(this.db, key);
56
- }
57
- async batchPut(items, opts) {
58
- this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
59
- this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, items.length);
60
- dbBatchPut(this.db, items);
61
- }
62
- async batchDelete(keys, opts) {
63
- this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
64
- this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, keys.length);
65
- dbBatchDelete(this.db, keys);
66
- }
67
- keysStream(opts = {}) {
68
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
69
- const metrics = this.metrics;
70
- metrics?.dbReadReq.inc({ bucket }, 1);
71
- let itemsRead = 0;
72
- return (async function* () {
73
- try {
74
- while (iteratorValid(iterator) && itemsRead < limit) {
75
- const key = iteratorKey(iterator);
76
- if (outOfRange?.(key))
77
- break;
78
- itemsRead++;
79
- yield key;
80
- next(iterator);
81
- }
82
- }
83
- finally {
84
- metrics?.dbReadItems.inc({ bucket }, itemsRead);
85
- iteratorDestroy(iterator);
86
- }
87
- })();
88
- }
89
- async keys(opts = {}) {
90
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
91
- const keys = [];
92
- this.metrics?.dbReadReq.inc({ bucket }, 1);
93
- try {
94
- while (iteratorValid(iterator) && keys.length < limit) {
95
- const key = iteratorKey(iterator);
96
- if (outOfRange?.(key))
97
- break;
98
- keys.push(key);
99
- next(iterator);
100
- }
101
- return keys;
102
- }
103
- finally {
104
- this.metrics?.dbReadItems.inc({ bucket }, keys.length);
105
- iteratorDestroy(iterator);
106
- }
107
- }
108
- valuesStream(opts = {}) {
109
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
110
- const metrics = this.metrics;
111
- metrics?.dbReadReq.inc({ bucket }, 1);
112
- let itemsRead = 0;
113
- return (async function* () {
114
- try {
115
- while (iteratorValid(iterator) && itemsRead < limit) {
116
- const key = iteratorKey(iterator);
117
- if (outOfRange?.(key))
118
- break;
119
- itemsRead++;
120
- const value = iteratorValue(iterator);
121
- yield value;
122
- next(iterator);
123
- }
124
- }
125
- finally {
126
- metrics?.dbReadItems.inc({ bucket }, itemsRead);
127
- iteratorDestroy(iterator);
128
- }
129
- })();
130
- }
131
- async values(opts = {}) {
132
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
133
- const values = [];
134
- this.metrics?.dbReadReq.inc({ bucket }, 1);
135
- try {
136
- while (iteratorValid(iterator) && values.length < limit) {
137
- const key = iteratorKey(iterator);
138
- if (outOfRange?.(key))
139
- break;
140
- const value = iteratorValue(iterator);
141
- values.push(value);
142
- next(iterator);
143
- }
144
- return values;
145
- }
146
- finally {
147
- this.metrics?.dbReadItems.inc({ bucket }, values.length);
148
- iteratorDestroy(iterator);
149
- }
150
- }
151
- entriesStream(opts = {}) {
152
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
153
- const metrics = this.metrics;
154
- metrics?.dbReadReq.inc({ bucket }, 1);
155
- let itemsRead = 0;
156
- return (async function* () {
157
- try {
158
- while (iteratorValid(iterator) && itemsRead < limit) {
159
- const key = iteratorKey(iterator);
160
- if (outOfRange?.(key))
161
- break;
162
- itemsRead++;
163
- const value = iteratorValue(iterator);
164
- yield { key, value };
165
- next(iterator);
166
- }
167
- }
168
- finally {
169
- metrics?.dbReadItems.inc({ bucket }, itemsRead);
170
- iteratorDestroy(iterator);
171
- }
172
- })();
173
- }
174
- async entries(opts = {}) {
175
- const { bucket, iterator, limit, next, outOfRange } = consumeFilterOptions(this.db, opts);
176
- const entries = [];
177
- this.metrics?.dbReadReq.inc({ bucket }, 1);
178
- try {
179
- while (iteratorValid(iterator) && entries.length < limit) {
180
- const key = iteratorKey(iterator);
181
- if (outOfRange?.(key))
182
- break;
183
- const value = iteratorValue(iterator);
184
- entries.push({ key, value });
185
- next(iterator);
186
- }
187
- return entries;
188
- }
189
- finally {
190
- this.metrics?.dbReadItems.inc({ bucket }, entries.length);
191
- iteratorDestroy(iterator);
192
- }
193
- }
194
- }
195
- /**
196
- * Return initialized iterator, filter options and operations.
197
- */
198
- function consumeFilterOptions(db, opts) {
199
- const iterator = dbIterator(db);
200
- const limit = opts.limit ?? Number.POSITIVE_INFINITY;
201
- let next;
202
- let seekToFirst;
203
- let gt;
204
- let gte;
205
- let outOfRange;
206
- if (opts.reverse) {
207
- next = iteratorPrev;
208
- seekToFirst = iteratorSeekToLast;
209
- gt = opts.lt;
210
- gte = opts.lte;
211
- outOfRange = opts.gt
212
- ? (k) => Buffer.compare(k, opts.gt) <= 0
213
- : opts.gte
214
- ? (k) => Buffer.compare(k, opts.gte) < 0
215
- : undefined;
216
- }
217
- else {
218
- next = iteratorNext;
219
- seekToFirst = iteratorSeekToFirst;
220
- gt = opts.gt;
221
- gte = opts.gte;
222
- outOfRange = opts.lt
223
- ? (k) => Buffer.compare(k, opts.lt) >= 0
224
- : opts.lte
225
- ? (k) => Buffer.compare(k, opts.lte) > 0
226
- : undefined;
227
- }
228
- if (gt) {
229
- iteratorSeek(iterator, gt);
230
- next(iterator);
231
- }
232
- else if (gte) {
233
- iteratorSeek(iterator, gte);
234
- }
235
- else {
236
- seekToFirst(iterator);
237
- }
238
- const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
239
- return { bucket, iterator, limit, next, outOfRange };
240
- }
241
- //# sourceMappingURL=level_bun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"level_bun.js","sourceRoot":"","sources":["../../src/controller/level_bun.ts"],"names":[],"mappings":"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"}
@@ -1,281 +0,0 @@
1
- import {leveldb} from "@lodestar/bun";
2
- import {Logger} from "@lodestar/utils";
3
- import {DatabaseController, DatabaseOptions, DbReqOpts, FilterOptions, KeyValue} from "./interface.js";
4
- import {LevelDbControllerMetrics} from "./metrics.js";
5
-
6
- const {
7
- dbBatchDelete,
8
- dbBatchPut,
9
- dbClose,
10
- dbDelete,
11
- dbDestroy,
12
- dbGet,
13
- dbIterator,
14
- dbOpen,
15
- dbPut,
16
- iteratorDestroy,
17
- iteratorKey,
18
- iteratorNext,
19
- iteratorPrev,
20
- iteratorSeek,
21
- iteratorSeekToFirst,
22
- iteratorSeekToLast,
23
- iteratorValid,
24
- iteratorValue,
25
- } = leveldb;
26
-
27
- export type LevelDbControllerModules = {
28
- logger: Logger;
29
- metrics?: LevelDbControllerMetrics | null;
30
- };
31
-
32
- export enum Status {
33
- started = "started",
34
- closed = "closed",
35
- }
36
-
37
- const BUCKET_ID_UNKNOWN = "unknown";
38
-
39
- export class LevelDbController implements DatabaseController<Uint8Array, Uint8Array> {
40
- private status = Status.started;
41
-
42
- constructor(
43
- private readonly db: leveldb.DB,
44
- private metrics: LevelDbControllerMetrics | null
45
- ) {}
46
-
47
- static async create(options: DatabaseOptions, {metrics}: LevelDbControllerModules): Promise<LevelDbController> {
48
- const db = dbOpen(options.name, {create_if_missing: true});
49
- return new LevelDbController(db, metrics ?? null);
50
- }
51
-
52
- static async destroy(location: string): Promise<void> {
53
- dbDestroy(location);
54
- }
55
-
56
- async close(): Promise<void> {
57
- if (this.status === Status.closed) {
58
- return;
59
- }
60
- this.status = Status.closed;
61
-
62
- dbClose(this.db);
63
- }
64
-
65
- setMetrics(metrics: LevelDbControllerMetrics): void {
66
- if (this.metrics !== null) {
67
- throw new Error("Metrics already set");
68
- }
69
- this.metrics = metrics;
70
- }
71
-
72
- async get(key: Uint8Array, opts?: DbReqOpts): Promise<Uint8Array | null> {
73
- this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
74
- this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
75
-
76
- return dbGet(this.db, key);
77
- }
78
-
79
- async getMany(keys: Uint8Array[], opts?: DbReqOpts): Promise<(Uint8Array | undefined)[]> {
80
- this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
81
- this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, keys.length);
82
-
83
- return keys.map((key) => dbGet(this.db, key) ?? undefined);
84
- }
85
-
86
- async put(key: Uint8Array, value: Uint8Array, opts?: DbReqOpts): Promise<void> {
87
- this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
88
- this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
89
-
90
- dbPut(this.db, key, value);
91
- }
92
-
93
- async delete(key: Uint8Array, opts?: DbReqOpts): Promise<void> {
94
- this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
95
- this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
96
-
97
- dbDelete(this.db, key);
98
- }
99
-
100
- async batchPut(items: KeyValue<Uint8Array, Uint8Array>[], opts?: DbReqOpts): Promise<void> {
101
- this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
102
- this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, items.length);
103
-
104
- dbBatchPut(this.db, items);
105
- }
106
-
107
- async batchDelete(keys: Uint8Array[], opts?: DbReqOpts): Promise<void> {
108
- this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
109
- this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, keys.length);
110
-
111
- dbBatchDelete(this.db, keys);
112
- }
113
-
114
- keysStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<Uint8Array> {
115
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
116
-
117
- const metrics = this.metrics;
118
- metrics?.dbReadReq.inc({bucket}, 1);
119
- let itemsRead = 0;
120
- return (async function* () {
121
- try {
122
- while (iteratorValid(iterator) && itemsRead < limit) {
123
- const key = iteratorKey(iterator);
124
- if (outOfRange?.(key)) break;
125
- itemsRead++;
126
- yield key;
127
- next(iterator);
128
- }
129
- } finally {
130
- metrics?.dbReadItems.inc({bucket}, itemsRead);
131
- iteratorDestroy(iterator);
132
- }
133
- })();
134
- }
135
-
136
- async keys(opts: FilterOptions<Uint8Array> = {}): Promise<Uint8Array[]> {
137
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
138
- const keys = [];
139
- this.metrics?.dbReadReq.inc({bucket}, 1);
140
- try {
141
- while (iteratorValid(iterator) && keys.length < limit) {
142
- const key = iteratorKey(iterator);
143
- if (outOfRange?.(key)) break;
144
- keys.push(key);
145
- next(iterator);
146
- }
147
- return keys;
148
- } finally {
149
- this.metrics?.dbReadItems.inc({bucket}, keys.length);
150
- iteratorDestroy(iterator);
151
- }
152
- }
153
-
154
- valuesStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<Uint8Array> {
155
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
156
- const metrics = this.metrics;
157
- metrics?.dbReadReq.inc({bucket}, 1);
158
- let itemsRead = 0;
159
- return (async function* () {
160
- try {
161
- while (iteratorValid(iterator) && itemsRead < limit) {
162
- const key = iteratorKey(iterator);
163
- if (outOfRange?.(key)) break;
164
- itemsRead++;
165
- const value = iteratorValue(iterator);
166
- yield value;
167
- next(iterator);
168
- }
169
- } finally {
170
- metrics?.dbReadItems.inc({bucket}, itemsRead);
171
- iteratorDestroy(iterator);
172
- }
173
- })();
174
- }
175
-
176
- async values(opts: FilterOptions<Uint8Array> = {}): Promise<Uint8Array[]> {
177
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
178
- const values = [];
179
- this.metrics?.dbReadReq.inc({bucket}, 1);
180
- try {
181
- while (iteratorValid(iterator) && values.length < limit) {
182
- const key = iteratorKey(iterator);
183
- if (outOfRange?.(key)) break;
184
- const value = iteratorValue(iterator);
185
- values.push(value);
186
- next(iterator);
187
- }
188
- return values;
189
- } finally {
190
- this.metrics?.dbReadItems.inc({bucket}, values.length);
191
- iteratorDestroy(iterator);
192
- }
193
- }
194
-
195
- entriesStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<KeyValue<Uint8Array, Uint8Array>> {
196
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
197
- const metrics = this.metrics;
198
- metrics?.dbReadReq.inc({bucket}, 1);
199
- let itemsRead = 0;
200
- return (async function* () {
201
- try {
202
- while (iteratorValid(iterator) && itemsRead < limit) {
203
- const key = iteratorKey(iterator);
204
- if (outOfRange?.(key)) break;
205
- itemsRead++;
206
- const value = iteratorValue(iterator);
207
- yield {key, value};
208
- next(iterator);
209
- }
210
- } finally {
211
- metrics?.dbReadItems.inc({bucket}, itemsRead);
212
- iteratorDestroy(iterator);
213
- }
214
- })();
215
- }
216
-
217
- async entries(opts: FilterOptions<Uint8Array> = {}): Promise<KeyValue<Uint8Array, Uint8Array>[]> {
218
- const {bucket, iterator, limit, next, outOfRange} = consumeFilterOptions(this.db, opts);
219
- const entries = [];
220
- this.metrics?.dbReadReq.inc({bucket}, 1);
221
- try {
222
- while (iteratorValid(iterator) && entries.length < limit) {
223
- const key = iteratorKey(iterator);
224
- if (outOfRange?.(key)) break;
225
- const value = iteratorValue(iterator);
226
- entries.push({key, value});
227
- next(iterator);
228
- }
229
- return entries;
230
- } finally {
231
- this.metrics?.dbReadItems.inc({bucket}, entries.length);
232
- iteratorDestroy(iterator);
233
- }
234
- }
235
- }
236
-
237
- /**
238
- * Return initialized iterator, filter options and operations.
239
- */
240
- function consumeFilterOptions(db: leveldb.DB, opts: FilterOptions<Uint8Array>) {
241
- const iterator = dbIterator(db);
242
-
243
- const limit = opts.limit ?? Number.POSITIVE_INFINITY;
244
- let next: (it: leveldb.Iterator) => void;
245
- let seekToFirst: (it: leveldb.Iterator) => void;
246
- let gt: Uint8Array | undefined;
247
- let gte: Uint8Array | undefined;
248
- let outOfRange: ((k: Uint8Array) => boolean) | undefined;
249
- if (opts.reverse) {
250
- next = iteratorPrev;
251
- seekToFirst = iteratorSeekToLast;
252
- gt = opts.lt;
253
- gte = opts.lte;
254
- outOfRange = opts.gt
255
- ? (k: Uint8Array) => Buffer.compare(k, opts.gt as Uint8Array) <= 0
256
- : opts.gte
257
- ? (k: Uint8Array) => Buffer.compare(k, opts.gte as Uint8Array) < 0
258
- : undefined;
259
- } else {
260
- next = iteratorNext;
261
- seekToFirst = iteratorSeekToFirst;
262
- gt = opts.gt;
263
- gte = opts.gte;
264
- outOfRange = opts.lt
265
- ? (k: Uint8Array) => Buffer.compare(k, opts.lt as Uint8Array) >= 0
266
- : opts.lte
267
- ? (k: Uint8Array) => Buffer.compare(k, opts.lte as Uint8Array) > 0
268
- : undefined;
269
- }
270
- if (gt) {
271
- iteratorSeek(iterator, gt);
272
- next(iterator);
273
- } else if (gte) {
274
- iteratorSeek(iterator, gte);
275
- } else {
276
- seekToFirst(iterator);
277
- }
278
- const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
279
-
280
- return {bucket, iterator, limit, next, outOfRange};
281
- }