@xyo-network/archivist 2.22.4 → 2.22.7
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/dist/cjs/XyoArchivist.d.ts +9 -8
- package/dist/cjs/XyoArchivist.js +3 -3
- package/dist/cjs/XyoArchivist.js.map +1 -1
- package/dist/cjs/XyoMemoryArchivist.d.ts +9 -8
- package/dist/cjs/XyoMemoryArchivist.js +27 -11
- package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
- package/dist/cjs/XyoPayloadFindFilter.d.ts +4 -1
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/index.js +0 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/model/Archivist.d.ts +3 -3
- package/dist/esm/XyoArchivist.d.ts +9 -8
- package/dist/esm/XyoArchivist.js +1 -1
- package/dist/esm/XyoArchivist.js.map +1 -1
- package/dist/esm/XyoBoundWitnessArchivist.js +0 -1
- package/dist/esm/XyoBoundWitnessArchivist.js.map +1 -1
- package/dist/esm/XyoBoundWitnessMemoryArchivist.d.ts +1 -1
- package/dist/esm/XyoMemoryArchivist.d.ts +9 -8
- package/dist/esm/XyoMemoryArchivist.js +24 -11
- package/dist/esm/XyoMemoryArchivist.js.map +1 -1
- package/dist/esm/XyoPayloadFindFilter.d.ts +4 -1
- package/dist/esm/index.d.ts +0 -2
- package/dist/esm/index.js +0 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model/Archivist.d.ts +3 -3
- package/package.json +5 -5
- package/src/XyoArchivist.ts +11 -10
- package/src/XyoMemoryArchivist.ts +32 -18
- package/src/XyoPayloadFindFilter.ts +6 -1
- package/src/index.ts +0 -2
- package/src/model/Archivist.ts +3 -3
- package/src/XyoBoundWitnessArchivist.ts +0 -21
- package/src/XyoBoundWitnessMemoryArchivist.ts +0 -51
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { XyoAccount } from '@xyo-network/account';
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload';
|
|
3
3
|
import { Archivist } from './model';
|
|
4
|
-
import {
|
|
5
|
-
export declare
|
|
6
|
-
|
|
4
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
|
|
5
|
+
export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>;
|
|
6
|
+
export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
|
|
7
|
+
protected parent?: XyoArchivist<T>;
|
|
7
8
|
protected account?: XyoAccount;
|
|
8
|
-
constructor(parent?: XyoArchivist<
|
|
9
|
-
abstract insert(
|
|
10
|
-
abstract find(query:
|
|
11
|
-
abstract get(hash: string):
|
|
12
|
-
all():
|
|
9
|
+
constructor(parent?: XyoArchivist<T>, account?: XyoAccount);
|
|
10
|
+
abstract insert(payloads: T[]): T[] | Promise<T[]>;
|
|
11
|
+
abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
|
|
12
|
+
abstract get(hash: string): T | Promise<T | undefined> | undefined;
|
|
13
|
+
all(): T[] | Promise<T[]>;
|
|
13
14
|
delete(_hash: string): boolean | Promise<boolean>;
|
|
14
15
|
clear(): void | Promise<void>;
|
|
15
16
|
commit(): void;
|
package/dist/cjs/XyoArchivist.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.XyoArchivistBase = void 0;
|
|
4
|
+
class XyoArchivistBase {
|
|
5
5
|
constructor(parent, account) {
|
|
6
6
|
this.parent = parent;
|
|
7
7
|
this.account = account;
|
|
@@ -19,5 +19,5 @@ class XyoArchivist {
|
|
|
19
19
|
throw Error('commit not supported');
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
exports.
|
|
22
|
+
exports.XyoArchivistBase = XyoArchivistBase;
|
|
23
23
|
//# sourceMappingURL=XyoArchivist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":";;;AAQA,MAAsB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,KAAa;QACzB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF;AAvBD,4CAuBC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { XyoPayload } from '@xyo-network/payload';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export declare class XyoMemoryArchivist
|
|
2
|
+
import { XyoArchivistBase } from './XyoArchivist';
|
|
3
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
|
|
4
|
+
export declare class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
|
|
5
5
|
private cache;
|
|
6
|
-
delete(hash: string): boolean
|
|
7
|
-
clear(): void
|
|
8
|
-
get(hash: string):
|
|
9
|
-
insert(
|
|
10
|
-
find<
|
|
6
|
+
delete(hash: string): boolean | Promise<boolean>;
|
|
7
|
+
clear(): void | Promise<void>;
|
|
8
|
+
get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined;
|
|
9
|
+
insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]>;
|
|
10
|
+
find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
|
|
11
|
+
commit(): Promise<import("@xyo-network/payload").XyoPayloadBase[] | undefined>;
|
|
11
12
|
}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.XyoMemoryArchivist = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const sdk_js_1 = require("@xylabs/sdk-js");
|
|
6
|
+
const boundwitness_1 = require("@xyo-network/boundwitness");
|
|
5
7
|
const payload_1 = require("@xyo-network/payload");
|
|
6
8
|
const lru_cache_1 = tslib_1.__importDefault(require("lru-cache"));
|
|
7
9
|
const XyoArchivist_1 = require("./XyoArchivist");
|
|
8
|
-
class XyoMemoryArchivist extends XyoArchivist_1.
|
|
10
|
+
class XyoMemoryArchivist extends XyoArchivist_1.XyoArchivistBase {
|
|
9
11
|
constructor() {
|
|
10
12
|
super(...arguments);
|
|
11
13
|
this.cache = new lru_cache_1.default({ max: 10000 });
|
|
@@ -17,25 +19,39 @@ class XyoMemoryArchivist extends XyoArchivist_1.XyoArchivist {
|
|
|
17
19
|
this.cache.clear();
|
|
18
20
|
}
|
|
19
21
|
get(hash) {
|
|
20
|
-
var _a;
|
|
21
|
-
|
|
22
|
-
return localResult ? [localResult] : (_a = this.parent) === null || _a === void 0 ? void 0 : _a.get(hash);
|
|
22
|
+
var _a, _b;
|
|
23
|
+
return (_a = this.cache.get(hash)) !== null && _a !== void 0 ? _a : (_b = this.parent) === null || _b === void 0 ? void 0 : _b.get(hash);
|
|
23
24
|
}
|
|
24
|
-
insert(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
insert(payloads) {
|
|
26
|
+
return payloads.map((payload) => {
|
|
27
|
+
const wrapper = new payload_1.XyoPayloadWrapper(payload);
|
|
28
|
+
const payloadWithmeta = Object.assign(Object.assign({}, payload), { _hash: wrapper.hash, _timestamp: Date.now() });
|
|
29
|
+
this.cache.set(payloadWithmeta._hash, payloadWithmeta);
|
|
30
|
+
return payloadWithmeta;
|
|
31
|
+
});
|
|
29
32
|
}
|
|
30
|
-
find(
|
|
33
|
+
find(query) {
|
|
31
34
|
const result = [];
|
|
32
35
|
this.cache.forEach((value) => {
|
|
33
|
-
if (value.schema === filter.schema) {
|
|
36
|
+
if (value.schema === query.filter.schema) {
|
|
34
37
|
result.push(value);
|
|
35
38
|
}
|
|
36
39
|
});
|
|
37
40
|
return result;
|
|
38
41
|
}
|
|
42
|
+
commit() {
|
|
43
|
+
var _a;
|
|
44
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const parent = (0, sdk_js_1.assertEx)(this.parent, 'Parent is required for commit');
|
|
46
|
+
const account = (0, sdk_js_1.assertEx)(this.account, 'Account is required for commit');
|
|
47
|
+
const payloads = (0, sdk_js_1.assertEx)(yield this.all(), 'Nothing to commit');
|
|
48
|
+
const builder = new boundwitness_1.XyoBoundWitnessBuilder();
|
|
49
|
+
const block = builder.payloads(payloads).witness(account).build();
|
|
50
|
+
const result = yield ((_a = parent.insert) === null || _a === void 0 ? void 0 : _a.call(parent, payloads.concat([block])));
|
|
51
|
+
yield this.clear();
|
|
52
|
+
return result;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
exports.XyoMemoryArchivist = XyoMemoryArchivist;
|
|
41
57
|
//# sourceMappingURL=XyoMemoryArchivist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":";;;;AAAA,kDAAoE;AACpE,kEAAgC;AAEhC,
|
|
1
|
+
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,4DAAmF;AACnF,kDAAoE;AACpE,kEAAgC;AAEhC,iDAAiD;AAGjD,MAAa,kBAAmB,SAAQ,+BAA4B;IAApE;;QACU,UAAK,GAAG,IAAI,mBAAQ,CAAqB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IA2ClE,CAAC;IAzCQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;;QACrB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAsB;QAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,2BAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,mCAAQ,OAAO,KAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAoC,KAA0B;QACvE,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAEY,MAAM;;;YACjB,MAAM,MAAM,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAA;YACrE,MAAM,OAAO,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;YACxE,MAAM,QAAQ,GAAG,IAAA,iBAAQ,EAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAA;YAChE,MAAM,OAAO,GAAG,IAAI,qCAAsB,EAA+B,CAAA;YACzE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;YACjE,MAAM,MAAM,GAAG,MAAM,CAAA,MAAA,MAAM,CAAC,MAAM,uDAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA;YAC9D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,OAAO,MAAM,CAAA;;KACd;CACF;AA5CD,gDA4CC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { XyoQueryPayload } from '@xyo-network/payload';
|
|
1
2
|
export interface XyoPayloadFindFilter {
|
|
2
|
-
[key: string]: unknown;
|
|
3
3
|
order?: 'desc' | 'asc';
|
|
4
4
|
timestamp?: number;
|
|
5
5
|
limit?: number;
|
|
6
6
|
schema?: string;
|
|
7
7
|
}
|
|
8
|
+
export declare type XyoPayloadFindQuery = XyoQueryPayload<{
|
|
9
|
+
filter: XyoPayloadFindFilter;
|
|
10
|
+
}>;
|
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./model"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./XyoArchivist"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./XyoBoundWitnessArchivist"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./XyoBoundWitnessMemoryArchivist"), exports);
|
|
8
6
|
tslib_1.__exportStar(require("./XyoMemoryArchivist"), exports);
|
|
9
7
|
tslib_1.__exportStar(require("./XyoPayloadFindFilter"), exports);
|
|
10
8
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAuB;AACvB,yDAA8B;AAC9B
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAuB;AACvB,yDAA8B;AAC9B,+DAAoC;AACpC,iEAAsC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface Archivist<
|
|
2
|
-
get(id: TId): Promise<TReadResponse
|
|
1
|
+
export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
|
|
2
|
+
get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined;
|
|
3
3
|
find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[];
|
|
4
|
-
insert?(item: TWrite): Promise<TWriteResponse[]> | TWriteResponse[];
|
|
4
|
+
insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[];
|
|
5
5
|
delete?(id: TId): Promise<boolean> | boolean;
|
|
6
6
|
clear?(): void;
|
|
7
7
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { XyoAccount } from '@xyo-network/account';
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload';
|
|
3
3
|
import { Archivist } from './model';
|
|
4
|
-
import {
|
|
5
|
-
export declare
|
|
6
|
-
|
|
4
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
|
|
5
|
+
export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>;
|
|
6
|
+
export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
|
|
7
|
+
protected parent?: XyoArchivist<T>;
|
|
7
8
|
protected account?: XyoAccount;
|
|
8
|
-
constructor(parent?: XyoArchivist<
|
|
9
|
-
abstract insert(
|
|
10
|
-
abstract find(query:
|
|
11
|
-
abstract get(hash: string):
|
|
12
|
-
all():
|
|
9
|
+
constructor(parent?: XyoArchivist<T>, account?: XyoAccount);
|
|
10
|
+
abstract insert(payloads: T[]): T[] | Promise<T[]>;
|
|
11
|
+
abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
|
|
12
|
+
abstract get(hash: string): T | Promise<T | undefined> | undefined;
|
|
13
|
+
all(): T[] | Promise<T[]>;
|
|
13
14
|
delete(_hash: string): boolean | Promise<boolean>;
|
|
14
15
|
clear(): void | Promise<void>;
|
|
15
16
|
commit(): void;
|
package/dist/esm/XyoArchivist.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,KAAa;QACzB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/sdk-js';
|
|
2
2
|
import { XyoBoundWitnessBuilder } from '@xyo-network/boundwitness';
|
|
3
|
-
import { XyoArchivist } from './XyoArchivist';
|
|
4
3
|
export class XyoBoundWitnessArchivist extends XyoArchivist {
|
|
5
4
|
async commit() {
|
|
6
5
|
const parent = assertEx(this.parent, 'Parent is required for commit');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoBoundWitnessArchivist.js","sourceRoot":"","sources":["../../src/XyoBoundWitnessArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAA2B,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoBoundWitnessArchivist.js","sourceRoot":"","sources":["../../src/XyoBoundWitnessArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAA2B,MAAM,2BAA2B,CAAA;AAK3F,MAAM,OAAgB,wBAAkI,SAAQ,YAG/J;IACQ,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAA;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAiB,CAAA;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;QACjE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -6,7 +6,7 @@ export declare class XyoBoundWitnessMemoryArchivist<TRead extends XyoPayloadWith
|
|
|
6
6
|
private cache;
|
|
7
7
|
delete(hash: string): boolean;
|
|
8
8
|
clear(): void;
|
|
9
|
-
get(hash: string):
|
|
9
|
+
get(hash: string): any;
|
|
10
10
|
insert(boundWitness: TWrite): string[];
|
|
11
11
|
find<T extends TRead = TRead>(filter: XyoPayloadFindFilter): T[];
|
|
12
12
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { XyoPayload } from '@xyo-network/payload';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export declare class XyoMemoryArchivist
|
|
2
|
+
import { XyoArchivistBase } from './XyoArchivist';
|
|
3
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
|
|
4
|
+
export declare class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
|
|
5
5
|
private cache;
|
|
6
|
-
delete(hash: string): boolean
|
|
7
|
-
clear(): void
|
|
8
|
-
get(hash: string):
|
|
9
|
-
insert(
|
|
10
|
-
find<
|
|
6
|
+
delete(hash: string): boolean | Promise<boolean>;
|
|
7
|
+
clear(): void | Promise<void>;
|
|
8
|
+
get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined;
|
|
9
|
+
insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]>;
|
|
10
|
+
find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
|
|
11
|
+
commit(): Promise<import("@xyo-network/payload").XyoPayloadBase[] | undefined>;
|
|
11
12
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js';
|
|
2
|
+
import { XyoBoundWitnessBuilder } from '@xyo-network/boundwitness';
|
|
1
3
|
import { XyoPayloadWrapper } from '@xyo-network/payload';
|
|
2
4
|
import LruCache from 'lru-cache';
|
|
3
|
-
import {
|
|
4
|
-
export class XyoMemoryArchivist extends
|
|
5
|
+
import { XyoArchivistBase } from './XyoArchivist';
|
|
6
|
+
export class XyoMemoryArchivist extends XyoArchivistBase {
|
|
5
7
|
constructor() {
|
|
6
8
|
super(...arguments);
|
|
7
9
|
this.cache = new LruCache({ max: 10000 });
|
|
@@ -13,23 +15,34 @@ export class XyoMemoryArchivist extends XyoArchivist {
|
|
|
13
15
|
this.cache.clear();
|
|
14
16
|
}
|
|
15
17
|
get(hash) {
|
|
16
|
-
|
|
17
|
-
return localResult ? [localResult] : this.parent?.get(hash);
|
|
18
|
+
return this.cache.get(hash) ?? this.parent?.get(hash);
|
|
18
19
|
}
|
|
19
|
-
insert(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
insert(payloads) {
|
|
21
|
+
return payloads.map((payload) => {
|
|
22
|
+
const wrapper = new XyoPayloadWrapper(payload);
|
|
23
|
+
const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() };
|
|
24
|
+
this.cache.set(payloadWithmeta._hash, payloadWithmeta);
|
|
25
|
+
return payloadWithmeta;
|
|
26
|
+
});
|
|
24
27
|
}
|
|
25
|
-
find(
|
|
28
|
+
find(query) {
|
|
26
29
|
const result = [];
|
|
27
30
|
this.cache.forEach((value) => {
|
|
28
|
-
if (value.schema === filter.schema) {
|
|
31
|
+
if (value.schema === query.filter.schema) {
|
|
29
32
|
result.push(value);
|
|
30
33
|
}
|
|
31
34
|
});
|
|
32
35
|
return result;
|
|
33
36
|
}
|
|
37
|
+
async commit() {
|
|
38
|
+
const parent = assertEx(this.parent, 'Parent is required for commit');
|
|
39
|
+
const account = assertEx(this.account, 'Account is required for commit');
|
|
40
|
+
const payloads = assertEx(await this.all(), 'Nothing to commit');
|
|
41
|
+
const builder = new XyoBoundWitnessBuilder();
|
|
42
|
+
const block = builder.payloads(payloads).witness(account).build();
|
|
43
|
+
const result = await parent.insert?.(payloads.concat([block]));
|
|
44
|
+
await this.clear();
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
34
47
|
}
|
|
35
48
|
//# sourceMappingURL=XyoMemoryArchivist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAmB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,MAAM,OAAO,kBAAmB,SAAQ,gBAA4B;IAApE;;QACU,UAAK,GAAG,IAAI,QAAQ,CAAqB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IA2ClE,CAAC;IAzCQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAsB;QAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAoC,KAA0B;QACvE,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAA;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAA+B,CAAA;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;QACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { XyoQueryPayload } from '@xyo-network/payload';
|
|
1
2
|
export interface XyoPayloadFindFilter {
|
|
2
|
-
[key: string]: unknown;
|
|
3
3
|
order?: 'desc' | 'asc';
|
|
4
4
|
timestamp?: number;
|
|
5
5
|
limit?: number;
|
|
6
6
|
schema?: string;
|
|
7
7
|
}
|
|
8
|
+
export declare type XyoPayloadFindQuery = XyoQueryPayload<{
|
|
9
|
+
filter: XyoPayloadFindFilter;
|
|
10
|
+
}>;
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export * from './model';
|
|
2
2
|
export * from './XyoArchivist';
|
|
3
|
-
export * from './XyoBoundWitnessArchivist';
|
|
4
|
-
export * from './XyoBoundWitnessMemoryArchivist';
|
|
5
3
|
export * from './XyoMemoryArchivist';
|
|
6
4
|
export * from './XyoPayloadFindFilter';
|
|
7
5
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface Archivist<
|
|
2
|
-
get(id: TId): Promise<TReadResponse
|
|
1
|
+
export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
|
|
2
|
+
get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined;
|
|
3
3
|
find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[];
|
|
4
|
-
insert?(item: TWrite): Promise<TWriteResponse[]> | TWriteResponse[];
|
|
4
|
+
insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[];
|
|
5
5
|
delete?(id: TId): Promise<boolean> | boolean;
|
|
6
6
|
clear?(): void;
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@xylabs/sdk-js": "^2.6.2",
|
|
13
|
-
"@xyo-network/account": "^2.22.
|
|
14
|
-
"@xyo-network/boundwitness": "^2.22.
|
|
15
|
-
"@xyo-network/core": "^2.22.
|
|
16
|
-
"@xyo-network/payload": "^2.22.
|
|
13
|
+
"@xyo-network/account": "^2.22.7",
|
|
14
|
+
"@xyo-network/boundwitness": "^2.22.7",
|
|
15
|
+
"@xyo-network/core": "^2.22.7",
|
|
16
|
+
"@xyo-network/payload": "^2.22.7",
|
|
17
17
|
"axios": "^0.27.2",
|
|
18
18
|
"lru-cache": "^7.13.1",
|
|
19
19
|
"pako": "^2.0.4"
|
|
@@ -56,6 +56,6 @@
|
|
|
56
56
|
},
|
|
57
57
|
"sideEffects": true,
|
|
58
58
|
"types": "dist/esm/index.d.ts",
|
|
59
|
-
"version": "2.22.
|
|
59
|
+
"version": "2.22.7",
|
|
60
60
|
"packageManager": "yarn@3.1.1"
|
|
61
61
|
}
|
package/src/XyoArchivist.ts
CHANGED
|
@@ -2,21 +2,22 @@ import { XyoAccount } from '@xyo-network/account'
|
|
|
2
2
|
import { XyoPayload } from '@xyo-network/payload'
|
|
3
3
|
|
|
4
4
|
import { Archivist } from './model'
|
|
5
|
-
import {
|
|
5
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
{
|
|
10
|
-
protected parent?: XyoArchivist<
|
|
7
|
+
export type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>
|
|
8
|
+
|
|
9
|
+
export abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
|
|
10
|
+
protected parent?: XyoArchivist<T>
|
|
11
11
|
protected account?: XyoAccount
|
|
12
|
-
constructor(parent?: XyoArchivist<
|
|
12
|
+
constructor(parent?: XyoArchivist<T>, account?: XyoAccount) {
|
|
13
13
|
this.parent = parent
|
|
14
14
|
this.account = account
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
abstract
|
|
18
|
-
abstract
|
|
19
|
-
|
|
16
|
+
|
|
17
|
+
abstract insert(payloads: T[]): T[] | Promise<T[]>
|
|
18
|
+
abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>
|
|
19
|
+
abstract get(hash: string): T | Promise<T | undefined> | undefined
|
|
20
|
+
public all(): T[] | Promise<T[]> {
|
|
20
21
|
throw Error('getAll not supported')
|
|
21
22
|
}
|
|
22
23
|
public delete(_hash: string): boolean | Promise<boolean> {
|
|
@@ -1,39 +1,53 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
+
import { XyoBoundWitness, XyoBoundWitnessBuilder } from '@xyo-network/boundwitness'
|
|
1
3
|
import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
|
|
2
4
|
import LruCache from 'lru-cache'
|
|
3
5
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
+
import { XyoArchivistBase } from './XyoArchivist'
|
|
7
|
+
import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
|
|
6
8
|
|
|
7
|
-
export class XyoMemoryArchivist
|
|
8
|
-
private cache = new LruCache<string,
|
|
9
|
+
export class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
|
|
10
|
+
private cache = new LruCache<string, XyoPayload>({ max: 10000 })
|
|
9
11
|
|
|
10
|
-
public delete(hash: string) {
|
|
12
|
+
public delete(hash: string): boolean | Promise<boolean> {
|
|
11
13
|
return this.cache.delete(hash)
|
|
12
14
|
}
|
|
13
15
|
|
|
14
|
-
public clear() {
|
|
16
|
+
public clear(): void | Promise<void> {
|
|
15
17
|
this.cache.clear()
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
public get(hash: string) {
|
|
19
|
-
|
|
20
|
-
return localResult ? [localResult] : this.parent?.get(hash)
|
|
20
|
+
public get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined {
|
|
21
|
+
return this.cache.get(hash) ?? this.parent?.get(hash)
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
public insert(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
public insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]> {
|
|
25
|
+
return payloads.map((payload) => {
|
|
26
|
+
const wrapper = new XyoPayloadWrapper(payload)
|
|
27
|
+
const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
|
|
28
|
+
this.cache.set(payloadWithmeta._hash, payloadWithmeta)
|
|
29
|
+
return payloadWithmeta
|
|
30
|
+
})
|
|
28
31
|
}
|
|
29
32
|
|
|
30
|
-
public find<
|
|
31
|
-
const result:
|
|
33
|
+
public find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]> {
|
|
34
|
+
const result: R[] = []
|
|
32
35
|
this.cache.forEach((value) => {
|
|
33
|
-
if (value.schema === filter.schema) {
|
|
34
|
-
result.push(value as
|
|
36
|
+
if (value.schema === query.filter.schema) {
|
|
37
|
+
result.push(value as R)
|
|
35
38
|
}
|
|
36
39
|
})
|
|
37
40
|
return result
|
|
38
41
|
}
|
|
42
|
+
|
|
43
|
+
public async commit() {
|
|
44
|
+
const parent = assertEx(this.parent, 'Parent is required for commit')
|
|
45
|
+
const account = assertEx(this.account, 'Account is required for commit')
|
|
46
|
+
const payloads = assertEx(await this.all(), 'Nothing to commit')
|
|
47
|
+
const builder = new XyoBoundWitnessBuilder<XyoBoundWitness, XyoPayload>()
|
|
48
|
+
const block = builder.payloads(payloads).witness(account).build()
|
|
49
|
+
const result = await parent.insert?.(payloads.concat([block]))
|
|
50
|
+
await this.clear()
|
|
51
|
+
return result
|
|
52
|
+
}
|
|
39
53
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { XyoQueryPayload } from '@xyo-network/payload'
|
|
2
|
+
|
|
1
3
|
export interface XyoPayloadFindFilter {
|
|
2
|
-
[key: string]: unknown
|
|
3
4
|
order?: 'desc' | 'asc'
|
|
4
5
|
timestamp?: number
|
|
5
6
|
limit?: number
|
|
6
7
|
schema?: string
|
|
7
8
|
}
|
|
9
|
+
|
|
10
|
+
export type XyoPayloadFindQuery = XyoQueryPayload<{
|
|
11
|
+
filter: XyoPayloadFindFilter
|
|
12
|
+
}>
|
package/src/index.ts
CHANGED
package/src/model/Archivist.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface Archivist<
|
|
2
|
-
get(id: TId): Promise<TReadResponse
|
|
1
|
+
export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
|
|
2
|
+
get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined
|
|
3
3
|
find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[]
|
|
4
|
-
insert?(item: TWrite): Promise<TWriteResponse[]> | TWriteResponse[]
|
|
4
|
+
insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[]
|
|
5
5
|
delete?(id: TId): Promise<boolean> | boolean
|
|
6
6
|
clear?(): void
|
|
7
7
|
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
-
import { XyoBoundWitnessBuilder, XyoBoundWitnessWithMeta } from '@xyo-network/boundwitness'
|
|
3
|
-
import { XyoPayload } from '@xyo-network/payload'
|
|
4
|
-
|
|
5
|
-
import { XyoArchivist } from './XyoArchivist'
|
|
6
|
-
|
|
7
|
-
export abstract class XyoBoundWitnessArchivist<TRead extends XyoPayload = XyoPayload, TWrite extends XyoBoundWitnessWithMeta = XyoBoundWitnessWithMeta> extends XyoArchivist<
|
|
8
|
-
TRead,
|
|
9
|
-
TWrite
|
|
10
|
-
> {
|
|
11
|
-
public async commit() {
|
|
12
|
-
const parent = assertEx(this.parent, 'Parent is required for commit')
|
|
13
|
-
const account = assertEx(this.account, 'Account is required for commit')
|
|
14
|
-
const payloads = assertEx(await parent.all(), 'Nothing to commit')
|
|
15
|
-
const builder = new XyoBoundWitnessBuilder<TWrite, TRead>()
|
|
16
|
-
const block = builder.payloads(payloads).witness(account).build()
|
|
17
|
-
const [hash] = await parent.insert(block)
|
|
18
|
-
await this.clear()
|
|
19
|
-
return hash
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { XyoBoundWitness, XyoBoundWitnessWithMeta, XyoBoundWitnessWrapper } from '@xyo-network/boundwitness'
|
|
2
|
-
import { XyoPayloadWithMeta, XyoPayloadWrapper } from '@xyo-network/payload'
|
|
3
|
-
import LruCache from 'lru-cache'
|
|
4
|
-
|
|
5
|
-
import { XyoBoundWitnessArchivist } from './XyoBoundWitnessArchivist'
|
|
6
|
-
import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
|
|
7
|
-
|
|
8
|
-
export class XyoBoundWitnessMemoryArchivist<
|
|
9
|
-
TRead extends XyoPayloadWithMeta = XyoPayloadWithMeta,
|
|
10
|
-
TWrite extends XyoBoundWitnessWithMeta<XyoBoundWitness, TRead> & TRead = XyoBoundWitnessWithMeta<XyoBoundWitness, TRead> & TRead
|
|
11
|
-
> extends XyoBoundWitnessArchivist<TRead, TWrite> {
|
|
12
|
-
private cache = new LruCache<string, TRead>({ max: 10000 })
|
|
13
|
-
|
|
14
|
-
public delete(hash: string) {
|
|
15
|
-
return this.cache.delete(hash)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public clear() {
|
|
19
|
-
this.cache.clear()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public get(hash: string) {
|
|
23
|
-
const localResult = this.cache.get(hash)
|
|
24
|
-
return localResult ? [localResult] : this.parent?.get(hash)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
public insert(boundWitness: TWrite) {
|
|
28
|
-
const wrapper = new XyoBoundWitnessWrapper(boundWitness)
|
|
29
|
-
const boundWitnessWithMeta = { ...boundWitness, _hash: wrapper.hash, _timestamp: Date.now() }
|
|
30
|
-
const hashes: string[] = []
|
|
31
|
-
hashes.push(boundWitnessWithMeta._hash)
|
|
32
|
-
this.cache.set(boundWitnessWithMeta._hash, boundWitnessWithMeta)
|
|
33
|
-
boundWitness._payloads?.forEach((payload) => {
|
|
34
|
-
const wrapper = new XyoPayloadWrapper(payload)
|
|
35
|
-
const payloadWithMeta: TRead = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
|
|
36
|
-
hashes.push(payloadWithMeta._hash)
|
|
37
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta)
|
|
38
|
-
})
|
|
39
|
-
return hashes
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public find<T extends TRead = TRead>(filter: XyoPayloadFindFilter): T[] {
|
|
43
|
-
const result: T[] = []
|
|
44
|
-
this.cache.forEach((value) => {
|
|
45
|
-
if (value.schema === filter.schema) {
|
|
46
|
-
result.push(value as T)
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
return result
|
|
50
|
-
}
|
|
51
|
-
}
|