Skip to content

Commit a9d2fba

Browse files
committed
WIP
Updated dev dependencies in package.json and synchronised .eslintrc Updated typedoc generation Canary option was never used Updated jest.config.js to use ts-jest instead of ts-jest/utils Enabled keyAsBuffer and valueAsBuffer options for iterators, still defaults to Buffer WIP Typo for ErrorDBTransactionCommited to ErrorDBTransactionCommitted WIP keyAsBuffer and valueAsBuffer WIP dump V types WIP snapshot is the get of last resort for tran WIP WIP WIP WIP
1 parent 4161ab4 commit a9d2fba

28 files changed

+2534
-2841
lines changed

docs/assets/search.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/classes/DB.html

+10-9
Large diffs are not rendered by default.

docs/classes/DBTransaction.html

+16-3
Large diffs are not rendered by default.

docs/classes/errors.ErrorDB.html

+8-3
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBCreate.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBDecrypt.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBDelete.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBDestroyed.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBKey.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBNotRunning.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBParseKey.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBParseValue.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBRunning.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBTransactionCommitted.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBTransactionDestroyed.html

+7-2
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBTransactionNotCommited.html renamed to docs/classes/errors.ErrorDBTransactionNotCommitted.html

+9-4
Large diffs are not rendered by default.

docs/classes/errors.ErrorDBTransactionRollbacked.html

+7-2
Large diffs are not rendered by default.

docs/modules.html

+1-1
Large diffs are not rendered by default.

docs/modules/errors.html

+1-1
Large diffs are not rendered by default.

package-lock.json

+2,039-2,735
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
},
2323
"dependencies": {
2424
"@matrixai/async-init": "^1.7.3",
25+
"@matrixai/async-locks": "^2.2.0",
2526
"@matrixai/errors": "^1.1.1",
2627
"@matrixai/logger": "^2.1.1",
2728
"@matrixai/resources": "^1.1.3",
@@ -34,6 +35,7 @@
3435
"@types/jest": "^27.0.2",
3536
"@types/level": "^6.0.0",
3637
"@types/node": "^16.11.7",
38+
"@types/node-forge": "^0.10.4",
3739
"@typescript-eslint/eslint-plugin": "^5.23.0",
3840
"@typescript-eslint/parser": "^5.23.0",
3941
"benny": "^3.6.15",

src/DB.ts

+125-33
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ class DB {
4242
crypto?: {
4343
key: Buffer;
4444
ops: Crypto;
45-
canary?: Buffer;
4645
};
4746
fs?: FileSystem;
4847
logger?: Logger;
@@ -160,11 +159,16 @@ class DB {
160159
public transaction(): ResourceAcquire<DBTransaction> {
161160
return async () => {
162161
const transactionId = this.transactionCounter++;
163-
const tran = await DBTransaction.createTransaction({
162+
const tran = new DBTransaction({
164163
db: this,
165164
transactionId,
166165
logger: this.logger,
167166
});
167+
// const tran = await DBTransaction.createTransaction({
168+
// db: this,
169+
// transactionId,
170+
// logger: this.logger,
171+
// });
168172
return [
169173
async (e?: Error) => {
170174
try {
@@ -216,7 +220,7 @@ class DB {
216220
public async get<T>(
217221
keyPath: KeyPath | string | Buffer,
218222
raw: boolean = false,
219-
): Promise<T | undefined> {
223+
): Promise<T | Buffer | undefined> {
220224
if (!Array.isArray(keyPath)) {
221225
keyPath = [keyPath] as KeyPath;
222226
}
@@ -400,22 +404,57 @@ class DB {
400404
levelPath?: LevelPath,
401405
): DBIterator<undefined, undefined>;
402406
public iterator(
403-
options: AbstractIteratorOptions & { keys: false },
407+
options: AbstractIteratorOptions & { values: false; keyAsBuffer?: true },
404408
levelPath?: LevelPath,
405-
): DBIterator<undefined, Buffer>;
409+
): DBIterator<Buffer, undefined>;
406410
public iterator(
407-
options: AbstractIteratorOptions & { values: false },
411+
options: AbstractIteratorOptions & { values: false; keyAsBuffer: false },
408412
levelPath?: LevelPath,
409-
): DBIterator<Buffer, undefined>;
413+
): DBIterator<string, undefined>;
410414
public iterator(
411-
options?: AbstractIteratorOptions,
415+
options: AbstractIteratorOptions & { keys: false; valueAsBuffer?: true },
416+
levelPath?: LevelPath,
417+
): DBIterator<undefined, Buffer>;
418+
public iterator<V>(
419+
options: AbstractIteratorOptions & { keys: false; valueAsBuffer: false },
420+
levelPath?: LevelPath,
421+
): DBIterator<undefined, V>;
422+
public iterator(
423+
options?: AbstractIteratorOptions & {
424+
keyAsBuffer?: true;
425+
valueAsBuffer?: true;
426+
},
412427
levelPath?: LevelPath,
413428
): DBIterator<Buffer, Buffer>;
414-
@ready(new errors.ErrorDBNotRunning())
415429
public iterator(
416-
options?: AbstractIteratorOptions,
430+
options?: AbstractIteratorOptions & {
431+
keyAsBuffer: false;
432+
valueAsBuffer?: true;
433+
},
434+
levelPath?: LevelPath,
435+
): DBIterator<string, Buffer>;
436+
public iterator<V>(
437+
options?: AbstractIteratorOptions & {
438+
keyAsBuffer?: true;
439+
valueAsBuffer: false;
440+
},
441+
levelPath?: LevelPath,
442+
): DBIterator<Buffer, V>;
443+
public iterator<V>(
444+
options?: AbstractIteratorOptions & {
445+
keyAsBuffer: false;
446+
valueAsBuffer: false;
447+
},
448+
levelPath?: LevelPath,
449+
): DBIterator<string, V>;
450+
@ready(new errors.ErrorDBNotRunning())
451+
public iterator<V>(
452+
options?: AbstractIteratorOptions & {
453+
keyAsBuffer?: any;
454+
valueAsBuffer?: any;
455+
},
417456
levelPath: LevelPath = [],
418-
): DBIterator {
457+
): DBIterator<Buffer | string | undefined, Buffer | V | undefined> {
419458
levelPath = ['data', ...levelPath];
420459
return this._iterator(options, levelPath);
421460
}
@@ -432,29 +471,76 @@ class DB {
432471
* @internal
433472
*/
434473
public _iterator(
435-
options: AbstractIteratorOptions & { keys: false },
474+
options: AbstractIteratorOptions & { values: false; keyAsBuffer?: true },
436475
levelPath?: LevelPath,
437-
): DBIterator<undefined, Buffer>;
476+
): DBIterator<Buffer, undefined>;
438477
/**
439478
* @internal
440479
*/
441480
public _iterator(
442-
options: AbstractIteratorOptions & { values: false },
481+
options: AbstractIteratorOptions & { values: false; keyAsBuffer: false },
443482
levelPath?: LevelPath,
444-
): DBIterator<Buffer, undefined>;
483+
): DBIterator<string, undefined>;
445484
/**
446485
* @internal
447486
*/
448487
public _iterator(
449-
options?: AbstractIteratorOptions,
488+
options: AbstractIteratorOptions & { keys: false; valueAsBuffer?: true },
489+
levelPath?: LevelPath,
490+
): DBIterator<undefined, Buffer>;
491+
/**
492+
* @internal
493+
*/
494+
public _iterator<V>(
495+
options: AbstractIteratorOptions & { keys: false; valueAsBuffer: false },
496+
levelPath?: LevelPath,
497+
): DBIterator<undefined, V>;
498+
/**
499+
* @internal
500+
*/
501+
public _iterator(
502+
options?: AbstractIteratorOptions & {
503+
keyAsBuffer?: true;
504+
valueAsBuffer?: true;
505+
},
450506
levelPath?: LevelPath,
451507
): DBIterator<Buffer, Buffer>;
508+
/**
509+
* @internal
510+
*/
511+
public _iterator(
512+
options?: AbstractIteratorOptions & {
513+
keyAsBuffer: false;
514+
valueAsBuffer?: true;
515+
},
516+
levelPath?: LevelPath,
517+
): DBIterator<string, Buffer>;
518+
/**
519+
* @internal
520+
*/
521+
public _iterator<V>(
522+
options?: AbstractIteratorOptions & {
523+
keyAsBuffer?: true;
524+
valueAsBuffer: false;
525+
},
526+
levelPath?: LevelPath,
527+
): DBIterator<Buffer, V>;
528+
/**
529+
* @internal
530+
*/
531+
public _iterator<V>(
532+
options?: AbstractIteratorOptions & {
533+
keyAsBuffer: false;
534+
valueAsBuffer: false;
535+
},
536+
levelPath?: LevelPath,
537+
): DBIterator<string, V>;
452538
public _iterator(
453539
options?: AbstractIteratorOptions,
454540
levelPath: LevelPath = [],
455-
): DBIterator {
456-
options = options ?? {};
541+
): DBIterator<any, any> {
457542
const levelKeyStart = utils.levelPathToKey(levelPath);
543+
options = options ?? {};
458544
if (options.gt != null) {
459545
options.gt = Buffer.concat([
460546
levelKeyStart,
@@ -508,15 +594,22 @@ class DB {
508594
// Truncate level path so the returned key is relative to the level path
509595
const keyPath = utils.parseKey(kv[0]).slice(levelPath.length);
510596
kv[0] = utils.keyPathToKey(keyPath);
597+
if (options?.keyAsBuffer === false) {
598+
kv[0] = kv[0].toString('utf-8');
599+
}
511600
}
512601
// Handle values: false
513602
if (kv[1] != null) {
514-
kv[1] = await this.deserializeDecrypt(kv[1], true);
603+
if (options?.valueAsBuffer === false) {
604+
kv[1] = await this.deserializeDecrypt(kv[1], false);
605+
} else {
606+
kv[1] = await this.deserializeDecrypt(kv[1], true);
607+
}
515608
}
516609
}
517610
return kv;
518611
};
519-
return iterator as unknown as DBIterator;
612+
return iterator as unknown as DBIterator<any, any>;
520613
}
521614

522615
/**
@@ -549,13 +642,14 @@ class DB {
549642
}
550643

551644
/**
552-
* Dump from root level
645+
* Dump from root level path
646+
* This will show entries from all levels
553647
* It is intended for diagnostics
554648
*/
555-
public async dump(
649+
public async dump<V>(
556650
levelPath?: LevelPath,
557651
raw?: false,
558-
): Promise<Array<[string, any]>>;
652+
): Promise<Array<[string, V]>>;
559653
public async dump(
560654
levelPath: LevelPath | undefined,
561655
raw: true,
@@ -566,16 +660,14 @@ class DB {
566660
raw: boolean = false,
567661
): Promise<Array<[string | Buffer, any]>> {
568662
const records: Array<[string | Buffer, any]> = [];
569-
for await (const [k, v] of this._iterator(undefined, levelPath)) {
570-
let key: string | Buffer, value: any;
571-
if (raw) {
572-
key = k;
573-
value = v;
574-
} else {
575-
key = k.toString('utf-8');
576-
value = utils.deserialize(v);
577-
}
578-
records.push([key, value]);
663+
for await (const [k, v] of this._iterator(
664+
{
665+
keyAsBuffer: raw as any,
666+
valueAsBuffer: raw as any,
667+
},
668+
levelPath,
669+
)) {
670+
records.push([k, v]);
579671
}
580672
return records;
581673
}

0 commit comments

Comments
 (0)