@xyo-network/archivist-memory 2.88.3 → 2.89.0-rc.2
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/browser/MemoryArchivist.d.cts +6 -5
- package/dist/browser/MemoryArchivist.d.cts.map +1 -1
- package/dist/browser/MemoryArchivist.d.mts +6 -5
- package/dist/browser/MemoryArchivist.d.mts.map +1 -1
- package/dist/browser/MemoryArchivist.d.ts +6 -5
- package/dist/browser/MemoryArchivist.d.ts.map +1 -1
- package/dist/browser/index.cjs +26 -22
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +26 -22
- package/dist/browser/index.js.map +1 -1
- package/dist/node/MemoryArchivist.d.cts +6 -5
- package/dist/node/MemoryArchivist.d.cts.map +1 -1
- package/dist/node/MemoryArchivist.d.mts +6 -5
- package/dist/node/MemoryArchivist.d.mts.map +1 -1
- package/dist/node/MemoryArchivist.d.ts +6 -5
- package/dist/node/MemoryArchivist.d.ts.map +1 -1
- package/dist/node/index.cjs +26 -22
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +26 -22
- package/dist/node/index.js.map +1 -1
- package/package.json +12 -10
- package/src/MemoryArchivist.ts +33 -19
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -34,7 +34,7 @@ var import_archivist_abstract = require("@xyo-network/archivist-abstract");
|
|
|
34
34
|
var import_archivist_model = require("@xyo-network/archivist-model");
|
|
35
35
|
var import_hash = require("@xyo-network/hash");
|
|
36
36
|
var import_module_model = require("@xyo-network/module-model");
|
|
37
|
-
var
|
|
37
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
38
38
|
var import_lru_cache = require("lru-cache");
|
|
39
39
|
function _ts_decorate(decorators, target, key, desc) {
|
|
40
40
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -56,7 +56,14 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
56
56
|
MemoryArchivistConfigSchema,
|
|
57
57
|
import_archivist_model.ArchivistConfigSchema
|
|
58
58
|
];
|
|
59
|
+
_bodyHashIndex;
|
|
59
60
|
_cache;
|
|
61
|
+
get bodyHashIndex() {
|
|
62
|
+
this._bodyHashIndex = this._bodyHashIndex ?? new import_lru_cache.LRUCache({
|
|
63
|
+
max: this.max
|
|
64
|
+
});
|
|
65
|
+
return this._bodyHashIndex;
|
|
66
|
+
}
|
|
60
67
|
get cache() {
|
|
61
68
|
this._cache = this._cache ?? new import_lru_cache.LRUCache({
|
|
62
69
|
max: this.max
|
|
@@ -81,6 +88,7 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
81
88
|
}
|
|
82
89
|
clearHandler() {
|
|
83
90
|
this.cache.clear();
|
|
91
|
+
this.bodyHashIndex.clear();
|
|
84
92
|
return this.emit("cleared", {
|
|
85
93
|
module: this
|
|
86
94
|
});
|
|
@@ -98,35 +106,31 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
98
106
|
return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
|
|
99
107
|
}
|
|
100
108
|
async deleteHandler(hashes) {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
payload
|
|
104
|
-
]));
|
|
105
|
-
const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
106
|
-
return this.cache.delete(hash) ? [
|
|
107
|
-
hash,
|
|
108
|
-
payload
|
|
109
|
-
] : void 0;
|
|
109
|
+
const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
|
|
110
|
+
return this.cache.delete(hash) ? hash : void 0;
|
|
110
111
|
})));
|
|
111
|
-
return
|
|
112
|
+
return deletedHashes;
|
|
112
113
|
}
|
|
113
114
|
getHandler(hashes) {
|
|
114
|
-
return (0, import_lodash.compact)(hashes.map((hash) =>
|
|
115
|
+
return (0, import_lodash.compact)(hashes.map((hash) => {
|
|
116
|
+
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
|
|
117
|
+
const result = this.cache.get(resolvedHash);
|
|
118
|
+
if (resolvedHash !== hash && !result) {
|
|
119
|
+
throw new Error("Missing referenced payload");
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}));
|
|
115
123
|
}
|
|
116
124
|
async insertHandler(payloads) {
|
|
117
|
-
const
|
|
118
|
-
|
|
125
|
+
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
126
|
+
const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
|
|
127
|
+
return this.insertPayloadIntoCache(payload, hash);
|
|
119
128
|
}));
|
|
120
129
|
return insertedPayloads;
|
|
121
130
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
...import_hash.PayloadHasher.hashFields(payload),
|
|
126
|
-
_hash: await wrapper.hashAsync(),
|
|
127
|
-
_timestamp: Date.now()
|
|
128
|
-
};
|
|
129
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta);
|
|
131
|
+
insertPayloadIntoCache(payload, hash) {
|
|
132
|
+
this.cache.set(hash, payload);
|
|
133
|
+
this.bodyHashIndex.set(payload.$hash, hash);
|
|
130
134
|
return payload;
|
|
131
135
|
}
|
|
132
136
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n await this.clearHandler()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<string[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n return this.cache.delete(hash) ? hash : undefined\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","all","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","creatableModule"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { AbstractArchivist } from "@xyo-network/archivist-abstract";
|
|
|
9
9
|
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
10
10
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
11
11
|
import { creatableModule } from "@xyo-network/module-model";
|
|
12
|
-
import {
|
|
12
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
13
13
|
import { LRUCache } from "lru-cache";
|
|
14
14
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
15
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -31,7 +31,14 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
31
31
|
MemoryArchivistConfigSchema,
|
|
32
32
|
ArchivistConfigSchema
|
|
33
33
|
];
|
|
34
|
+
_bodyHashIndex;
|
|
34
35
|
_cache;
|
|
36
|
+
get bodyHashIndex() {
|
|
37
|
+
this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache({
|
|
38
|
+
max: this.max
|
|
39
|
+
});
|
|
40
|
+
return this._bodyHashIndex;
|
|
41
|
+
}
|
|
35
42
|
get cache() {
|
|
36
43
|
this._cache = this._cache ?? new LRUCache({
|
|
37
44
|
max: this.max
|
|
@@ -56,6 +63,7 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
56
63
|
}
|
|
57
64
|
clearHandler() {
|
|
58
65
|
this.cache.clear();
|
|
66
|
+
this.bodyHashIndex.clear();
|
|
59
67
|
return this.emit("cleared", {
|
|
60
68
|
module: this
|
|
61
69
|
});
|
|
@@ -73,35 +81,31 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
73
81
|
return compact(settled.filter(fulfilled).map((result) => result.value));
|
|
74
82
|
}
|
|
75
83
|
async deleteHandler(hashes) {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
payload
|
|
79
|
-
]));
|
|
80
|
-
const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
81
|
-
return this.cache.delete(hash) ? [
|
|
82
|
-
hash,
|
|
83
|
-
payload
|
|
84
|
-
] : void 0;
|
|
84
|
+
const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
|
|
85
|
+
return this.cache.delete(hash) ? hash : void 0;
|
|
85
86
|
})));
|
|
86
|
-
return
|
|
87
|
+
return deletedHashes;
|
|
87
88
|
}
|
|
88
89
|
getHandler(hashes) {
|
|
89
|
-
return compact(hashes.map((hash) =>
|
|
90
|
+
return compact(hashes.map((hash) => {
|
|
91
|
+
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
|
|
92
|
+
const result = this.cache.get(resolvedHash);
|
|
93
|
+
if (resolvedHash !== hash && !result) {
|
|
94
|
+
throw new Error("Missing referenced payload");
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}));
|
|
90
98
|
}
|
|
91
99
|
async insertHandler(payloads) {
|
|
92
|
-
const
|
|
93
|
-
|
|
100
|
+
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
101
|
+
const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
|
|
102
|
+
return this.insertPayloadIntoCache(payload, hash);
|
|
94
103
|
}));
|
|
95
104
|
return insertedPayloads;
|
|
96
105
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
...PayloadHasher.hashFields(payload),
|
|
101
|
-
_hash: await wrapper.hashAsync(),
|
|
102
|
-
_timestamp: Date.now()
|
|
103
|
-
};
|
|
104
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta);
|
|
106
|
+
insertPayloadIntoCache(payload, hash) {
|
|
107
|
+
this.cache.set(hash, payload);
|
|
108
|
+
this.bodyHashIndex.set(payload.$hash, hash);
|
|
105
109
|
return payload;
|
|
106
110
|
}
|
|
107
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n await this.clearHandler()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<string[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n return this.cache.delete(hash) ? hash : undefined\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","all","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","creatableModule"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { Hash } from '@xylabs/hex';
|
|
1
2
|
import { Promisable, PromisableArray } from '@xylabs/promise';
|
|
2
3
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
4
|
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
4
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
6
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
7
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model';
|
|
7
8
|
import { LRUCache } from 'lru-cache';
|
|
8
9
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config';
|
|
9
10
|
export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
|
|
@@ -14,16 +15,16 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
14
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
15
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
16
17
|
static configSchemas: string[];
|
|
18
|
+
private _bodyHashIndex?;
|
|
17
19
|
private _cache?;
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
} & object, unknown>;
|
|
20
|
+
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
+
get cache(): LRUCache<string, PayloadWithMeta, unknown>;
|
|
21
22
|
get max(): number;
|
|
22
23
|
get queries(): string[];
|
|
23
24
|
protected allHandler(): PromisableArray<Payload>;
|
|
24
25
|
protected clearHandler(): void | Promise<void>;
|
|
25
26
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
-
protected deleteHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<string[]>;
|
|
27
28
|
protected getHandler(hashes: string[]): Promisable<Payload[]>;
|
|
28
29
|
protected insertHandler(payloads: Payload[]): Promise<Payload[]>;
|
|
29
30
|
private insertPayloadIntoCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAa,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,MAAM,2BAA2B,GAAG,qCAAqC,CAAA;AAC/E,eAAO,MAAM,2BAA2B,EAAE,2BAAmE,CAAA;AAE7G,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;CAChE,CAAC,CAAA;AAEF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,eAAe,CAAC,qBAAqB,CAAC,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAC/H,YAAY,CAAC,OAAO,CAAC,CAAA;AACvB,qBACa,eAAe,CACxB,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAExE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,iBAAiB,EAAE,cAAc;IAE5C,OAAgB,aAAa,WAAuD;IAEpF,OAAO,CAAC,cAAc,CAAC,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,CAAmC;IAElD,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,+CAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aASnB;cAEkB,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC;cAItC,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;cAa7C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW/E,OAAO,CAAC,sBAAsB;CAK/B"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@ var import_archivist_abstract = require("@xyo-network/archivist-abstract");
|
|
|
39
39
|
var import_archivist_model = require("@xyo-network/archivist-model");
|
|
40
40
|
var import_hash = require("@xyo-network/hash");
|
|
41
41
|
var import_module_model = require("@xyo-network/module-model");
|
|
42
|
-
var
|
|
42
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
43
43
|
var import_lru_cache = require("lru-cache");
|
|
44
44
|
function _ts_decorate(decorators, target, key, desc) {
|
|
45
45
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -54,7 +54,14 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
54
54
|
__name(_ts_decorate, "_ts_decorate");
|
|
55
55
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
56
56
|
var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.AbstractArchivist {
|
|
57
|
+
_bodyHashIndex;
|
|
57
58
|
_cache;
|
|
59
|
+
get bodyHashIndex() {
|
|
60
|
+
this._bodyHashIndex = this._bodyHashIndex ?? new import_lru_cache.LRUCache({
|
|
61
|
+
max: this.max
|
|
62
|
+
});
|
|
63
|
+
return this._bodyHashIndex;
|
|
64
|
+
}
|
|
58
65
|
get cache() {
|
|
59
66
|
this._cache = this._cache ?? new import_lru_cache.LRUCache({
|
|
60
67
|
max: this.max
|
|
@@ -80,6 +87,7 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
80
87
|
}
|
|
81
88
|
clearHandler() {
|
|
82
89
|
this.cache.clear();
|
|
90
|
+
this.bodyHashIndex.clear();
|
|
83
91
|
return this.emit("cleared", {
|
|
84
92
|
module: this
|
|
85
93
|
});
|
|
@@ -99,35 +107,31 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
99
107
|
return (0, import_lodash.compact)(settled.filter(import_promise.fulfilled).map((result) => result.value));
|
|
100
108
|
}
|
|
101
109
|
async deleteHandler(hashes) {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
payload
|
|
105
|
-
]));
|
|
106
|
-
const deletedPairs = (0, import_lodash.compact)(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
107
|
-
return this.cache.delete(hash) ? [
|
|
108
|
-
hash,
|
|
109
|
-
payload
|
|
110
|
-
] : void 0;
|
|
110
|
+
const deletedHashes = (0, import_lodash.compact)(await Promise.all(hashes.map((hash) => {
|
|
111
|
+
return this.cache.delete(hash) ? hash : void 0;
|
|
111
112
|
})));
|
|
112
|
-
return
|
|
113
|
+
return deletedHashes;
|
|
113
114
|
}
|
|
114
115
|
getHandler(hashes) {
|
|
115
|
-
return (0, import_lodash.compact)(hashes.map((hash) =>
|
|
116
|
+
return (0, import_lodash.compact)(hashes.map((hash) => {
|
|
117
|
+
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
|
|
118
|
+
const result = this.cache.get(resolvedHash);
|
|
119
|
+
if (resolvedHash !== hash && !result) {
|
|
120
|
+
throw new Error("Missing referenced payload");
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}));
|
|
116
124
|
}
|
|
117
125
|
async insertHandler(payloads) {
|
|
118
|
-
const
|
|
119
|
-
|
|
126
|
+
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
127
|
+
const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
|
|
128
|
+
return this.insertPayloadIntoCache(payload, hash);
|
|
120
129
|
}));
|
|
121
130
|
return insertedPayloads;
|
|
122
131
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
...import_hash.PayloadHasher.hashFields(payload),
|
|
127
|
-
_hash: await wrapper.hashAsync(),
|
|
128
|
-
_timestamp: Date.now()
|
|
129
|
-
};
|
|
130
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta);
|
|
132
|
+
insertPayloadIntoCache(payload, hash) {
|
|
133
|
+
this.cache.set(hash, payload);
|
|
134
|
+
this.bodyHashIndex.set(payload.$hash, hash);
|
|
131
135
|
return payload;
|
|
132
136
|
}
|
|
133
137
|
};
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n await this.clearHandler()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<string[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n return this.cache.delete(hash) ? hash : undefined\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","all","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/dist/node/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { AbstractArchivist } from "@xyo-network/archivist-abstract";
|
|
|
14
14
|
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
15
15
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
16
16
|
import { creatableModule } from "@xyo-network/module-model";
|
|
17
|
-
import {
|
|
17
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
18
18
|
import { LRUCache } from "lru-cache";
|
|
19
19
|
function _ts_decorate(decorators, target, key, desc) {
|
|
20
20
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -29,7 +29,14 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
29
29
|
__name(_ts_decorate, "_ts_decorate");
|
|
30
30
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
31
31
|
var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
32
|
+
_bodyHashIndex;
|
|
32
33
|
_cache;
|
|
34
|
+
get bodyHashIndex() {
|
|
35
|
+
this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache({
|
|
36
|
+
max: this.max
|
|
37
|
+
});
|
|
38
|
+
return this._bodyHashIndex;
|
|
39
|
+
}
|
|
33
40
|
get cache() {
|
|
34
41
|
this._cache = this._cache ?? new LRUCache({
|
|
35
42
|
max: this.max
|
|
@@ -55,6 +62,7 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
55
62
|
}
|
|
56
63
|
clearHandler() {
|
|
57
64
|
this.cache.clear();
|
|
65
|
+
this.bodyHashIndex.clear();
|
|
58
66
|
return this.emit("cleared", {
|
|
59
67
|
module: this
|
|
60
68
|
});
|
|
@@ -74,35 +82,31 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
74
82
|
return compact(settled.filter(fulfilled).map((result) => result.value));
|
|
75
83
|
}
|
|
76
84
|
async deleteHandler(hashes) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
payload
|
|
80
|
-
]));
|
|
81
|
-
const deletedPairs = compact(await Promise.all(payloadPairs.map(([hash, payload]) => {
|
|
82
|
-
return this.cache.delete(hash) ? [
|
|
83
|
-
hash,
|
|
84
|
-
payload
|
|
85
|
-
] : void 0;
|
|
85
|
+
const deletedHashes = compact(await Promise.all(hashes.map((hash) => {
|
|
86
|
+
return this.cache.delete(hash) ? hash : void 0;
|
|
86
87
|
})));
|
|
87
|
-
return
|
|
88
|
+
return deletedHashes;
|
|
88
89
|
}
|
|
89
90
|
getHandler(hashes) {
|
|
90
|
-
return compact(hashes.map((hash) =>
|
|
91
|
+
return compact(hashes.map((hash) => {
|
|
92
|
+
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash;
|
|
93
|
+
const result = this.cache.get(resolvedHash);
|
|
94
|
+
if (resolvedHash !== hash && !result) {
|
|
95
|
+
throw new Error("Missing referenced payload");
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}));
|
|
91
99
|
}
|
|
92
100
|
async insertHandler(payloads) {
|
|
93
|
-
const
|
|
94
|
-
|
|
101
|
+
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
102
|
+
const insertedPayloads = await Promise.all(pairs.map(([payload, hash]) => {
|
|
103
|
+
return this.insertPayloadIntoCache(payload, hash);
|
|
95
104
|
}));
|
|
96
105
|
return insertedPayloads;
|
|
97
106
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
...PayloadHasher.hashFields(payload),
|
|
102
|
-
_hash: await wrapper.hashAsync(),
|
|
103
|
-
_timestamp: Date.now()
|
|
104
|
-
};
|
|
105
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta);
|
|
107
|
+
insertPayloadIntoCache(payload, hash) {
|
|
108
|
+
this.cache.set(hash, payload);
|
|
109
|
+
this.bodyHashIndex.set(payload.$hash, hash);
|
|
106
110
|
return payload;
|
|
107
111
|
}
|
|
108
112
|
};
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistInstance,\n ArchivistModuleEventData,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\nexport const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'\n\nexport type MemoryArchivistConfig = ArchivistConfig<{\n max?: number\n schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']\n}>\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =\n ModuleParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n >\n extends AbstractArchivist<TParams, TEventData>\n implements ArchivistInstance, ModuleInstance\n{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _bodyHashIndex?: LRUCache<string, string>\n private _cache?: LRUCache<string, PayloadWithMeta>\n\n get bodyHashIndex() {\n this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })\n return this._bodyHashIndex\n }\n\n get cache() {\n this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })\n return this._cache\n }\n\n get max() {\n return this.config?.max ?? 10_000\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): PromisableArray<Payload> {\n return compact(this.cache.dump().map((value) => PayloadHasher.hashFields(value[1].value)))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.bodyHashIndex.clear()\n return this.emit('cleared', { module: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), 'Nothing to commit')\n const settled = await Promise.allSettled(\n compact(\n Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = {\n schema: ArchivistInsertQuerySchema,\n }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }),\n ),\n )\n await this.clearHandler()\n return compact(settled.filter(fulfilled).map((result) => result.value))\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<string[]> {\n const deletedHashes = compact(\n await Promise.all(\n hashes.map((hash) => {\n return this.cache.delete(hash) ? hash : undefined\n }),\n ),\n )\n return deletedHashes\n }\n\n protected override getHandler(hashes: string[]): Promisable<Payload[]> {\n return compact(\n hashes.map((hash) => {\n const resolvedHash = this.bodyHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(\n pairs.map(([payload, hash]) => {\n return this.insertPayloadIntoCache(payload, hash)\n }),\n )\n\n return insertedPayloads\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {\n this.cache.set(hash, payload)\n this.bodyHashIndex.set(payload.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","dump","map","value","PayloadHasher","hashFields","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","all","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/package.json
CHANGED
|
@@ -11,21 +11,22 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/assert": "^2.13.29",
|
|
14
|
+
"@xylabs/hex": "^2.13.29",
|
|
14
15
|
"@xylabs/lodash": "^2.13.29",
|
|
15
16
|
"@xylabs/promise": "^2.13.29",
|
|
16
|
-
"@xyo-network/archivist-abstract": "~2.
|
|
17
|
-
"@xyo-network/archivist-model": "~2.
|
|
18
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
19
|
-
"@xyo-network/hash": "~2.
|
|
20
|
-
"@xyo-network/module-model": "~2.
|
|
21
|
-
"@xyo-network/payload-
|
|
22
|
-
"@xyo-network/payload-
|
|
17
|
+
"@xyo-network/archivist-abstract": "~2.89.0-rc.2",
|
|
18
|
+
"@xyo-network/archivist-model": "~2.89.0-rc.2",
|
|
19
|
+
"@xyo-network/boundwitness-model": "~2.89.0-rc.2",
|
|
20
|
+
"@xyo-network/hash": "~2.89.0-rc.2",
|
|
21
|
+
"@xyo-network/module-model": "~2.89.0-rc.2",
|
|
22
|
+
"@xyo-network/payload-builder": "~2.89.0-rc.2",
|
|
23
|
+
"@xyo-network/payload-model": "~2.89.0-rc.2",
|
|
23
24
|
"lru-cache": "^10.1.0"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@xylabs/ts-scripts-yarn3": "^3.2.42",
|
|
27
28
|
"@xylabs/tsconfig": "^3.2.42",
|
|
28
|
-
"@xyo-network/account": "~2.
|
|
29
|
+
"@xyo-network/account": "~2.89.0-rc.2",
|
|
29
30
|
"typescript": "^5.3.3"
|
|
30
31
|
},
|
|
31
32
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
@@ -67,6 +68,7 @@
|
|
|
67
68
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
68
69
|
},
|
|
69
70
|
"sideEffects": false,
|
|
70
|
-
"version": "2.
|
|
71
|
-
"type": "module"
|
|
71
|
+
"version": "2.89.0-rc.2",
|
|
72
|
+
"type": "module",
|
|
73
|
+
"stableVersion": "2.88.3"
|
|
72
74
|
}
|
package/src/MemoryArchivist.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Hash } from '@xylabs/hex'
|
|
2
3
|
import { compact } from '@xylabs/lodash'
|
|
3
4
|
import { fulfilled, Promisable, PromisableArray } from '@xylabs/promise'
|
|
4
5
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract'
|
|
@@ -17,8 +18,8 @@ import {
|
|
|
17
18
|
import { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
18
19
|
import { PayloadHasher } from '@xyo-network/hash'
|
|
19
20
|
import { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
21
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
22
|
+
import { Payload, PayloadWithMeta } from '@xyo-network/payload-model'
|
|
22
23
|
import { LRUCache } from 'lru-cache'
|
|
23
24
|
|
|
24
25
|
export type MemoryArchivistConfigSchema = 'network.xyo.archivist.memory.config'
|
|
@@ -41,10 +42,16 @@ export class MemoryArchivist<
|
|
|
41
42
|
{
|
|
42
43
|
static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]
|
|
43
44
|
|
|
44
|
-
private
|
|
45
|
+
private _bodyHashIndex?: LRUCache<string, string>
|
|
46
|
+
private _cache?: LRUCache<string, PayloadWithMeta>
|
|
47
|
+
|
|
48
|
+
get bodyHashIndex() {
|
|
49
|
+
this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })
|
|
50
|
+
return this._bodyHashIndex
|
|
51
|
+
}
|
|
45
52
|
|
|
46
53
|
get cache() {
|
|
47
|
-
this._cache = this._cache ?? new LRUCache<string,
|
|
54
|
+
this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta>({ max: this.max })
|
|
48
55
|
return this._cache
|
|
49
56
|
}
|
|
50
57
|
|
|
@@ -69,6 +76,7 @@ export class MemoryArchivist<
|
|
|
69
76
|
|
|
70
77
|
protected override clearHandler(): void | Promise<void> {
|
|
71
78
|
this.cache.clear()
|
|
79
|
+
this.bodyHashIndex.clear()
|
|
72
80
|
return this.emit('cleared', { module: this })
|
|
73
81
|
}
|
|
74
82
|
|
|
@@ -89,38 +97,44 @@ export class MemoryArchivist<
|
|
|
89
97
|
return compact(settled.filter(fulfilled).map((result) => result.value))
|
|
90
98
|
}
|
|
91
99
|
|
|
92
|
-
protected override async deleteHandler(hashes:
|
|
93
|
-
const
|
|
94
|
-
(await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),
|
|
95
|
-
)
|
|
96
|
-
const deletedPairs: [string, Payload][] = compact(
|
|
100
|
+
protected override async deleteHandler(hashes: Hash[]): Promise<string[]> {
|
|
101
|
+
const deletedHashes = compact(
|
|
97
102
|
await Promise.all(
|
|
98
|
-
|
|
99
|
-
return this.cache.delete(hash) ?
|
|
103
|
+
hashes.map((hash) => {
|
|
104
|
+
return this.cache.delete(hash) ? hash : undefined
|
|
100
105
|
}),
|
|
101
106
|
),
|
|
102
107
|
)
|
|
103
|
-
return
|
|
108
|
+
return deletedHashes
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
protected override getHandler(hashes: string[]): Promisable<Payload[]> {
|
|
107
|
-
return compact(
|
|
112
|
+
return compact(
|
|
113
|
+
hashes.map((hash) => {
|
|
114
|
+
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash
|
|
115
|
+
const result = this.cache.get(resolvedHash)
|
|
116
|
+
if (resolvedHash !== hash && !result) {
|
|
117
|
+
throw new Error('Missing referenced payload')
|
|
118
|
+
}
|
|
119
|
+
return result
|
|
120
|
+
}),
|
|
121
|
+
)
|
|
108
122
|
}
|
|
109
123
|
|
|
110
124
|
protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {
|
|
125
|
+
const pairs = await PayloadBuilder.hashPairs(payloads)
|
|
111
126
|
const insertedPayloads = await Promise.all(
|
|
112
|
-
|
|
113
|
-
return this.insertPayloadIntoCache(payload)
|
|
127
|
+
pairs.map(([payload, hash]) => {
|
|
128
|
+
return this.insertPayloadIntoCache(payload, hash)
|
|
114
129
|
}),
|
|
115
130
|
)
|
|
116
131
|
|
|
117
132
|
return insertedPayloads
|
|
118
133
|
}
|
|
119
134
|
|
|
120
|
-
private
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.cache.set(payloadWithMeta._hash, payloadWithMeta)
|
|
135
|
+
private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {
|
|
136
|
+
this.cache.set(hash, payload)
|
|
137
|
+
this.bodyHashIndex.set(payload.$hash, hash)
|
|
124
138
|
return payload
|
|
125
139
|
}
|
|
126
140
|
}
|