@xyo-network/archivist-memory 2.91.0 → 2.91.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 -9
- package/dist/browser/MemoryArchivist.d.cts.map +1 -1
- package/dist/browser/MemoryArchivist.d.mts +6 -9
- package/dist/browser/MemoryArchivist.d.mts.map +1 -1
- package/dist/browser/MemoryArchivist.d.ts +6 -9
- package/dist/browser/MemoryArchivist.d.ts.map +1 -1
- package/dist/browser/index.cjs +14 -7
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +15 -8
- package/dist/browser/index.js.map +1 -1
- package/dist/node/MemoryArchivist.d.cts +6 -9
- package/dist/node/MemoryArchivist.d.cts.map +1 -1
- package/dist/node/MemoryArchivist.d.mts +6 -9
- package/dist/node/MemoryArchivist.d.mts.map +1 -1
- package/dist/node/MemoryArchivist.d.ts +6 -9
- package/dist/node/MemoryArchivist.d.ts.map +1 -1
- package/dist/node/index.cjs +14 -7
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +15 -8
- package/dist/node/index.js.map +1 -1
- package/package.json +12 -12
- package/src/MemoryArchivist.ts +21 -17
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -79,11 +79,12 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
79
79
|
import_archivist_model.ArchivistClearQuerySchema,
|
|
80
80
|
import_archivist_model.ArchivistInsertQuerySchema,
|
|
81
81
|
import_archivist_model.ArchivistCommitQuerySchema,
|
|
82
|
+
import_archivist_model.ArchivistNextQuerySchema,
|
|
82
83
|
...super.queries
|
|
83
84
|
];
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
-
const all = (0, import_lodash.compact)(
|
|
86
|
+
allHandler() {
|
|
87
|
+
const all = (0, import_lodash.compact)(this.cache.dump().map(([, item]) => item.value));
|
|
87
88
|
return (0, import_archivist_abstract.sortByStorageMeta)(all).map((payload) => (0, import_archivist_abstract.removeStorageMeta)(payload));
|
|
88
89
|
}
|
|
89
90
|
clearHandler() {
|
|
@@ -123,16 +124,22 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
123
124
|
}
|
|
124
125
|
async insertHandler(payloads) {
|
|
125
126
|
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
126
|
-
const insertedPayloads =
|
|
127
|
-
return this.insertPayloadIntoCache(payload, hash);
|
|
128
|
-
})
|
|
129
|
-
return insertedPayloads;
|
|
127
|
+
const insertedPayloads = pairs.map(([payload, hash]) => {
|
|
128
|
+
return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash);
|
|
129
|
+
});
|
|
130
|
+
return (0, import_archivist_abstract.removeStorageMeta)(insertedPayloads);
|
|
131
|
+
}
|
|
132
|
+
async nextHandler(options) {
|
|
133
|
+
const { limit, previous } = options ?? {};
|
|
134
|
+
const all = (0, import_archivist_abstract.sortByStorageMeta)((0, import_lodash.compact)(await Promise.all(this.cache.dump().map((value) => value[1].value))));
|
|
135
|
+
const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0;
|
|
136
|
+
return (0, import_archivist_abstract.removeStorageMeta)(all.slice(startIndex, limit ? startIndex + limit : void 0));
|
|
130
137
|
}
|
|
131
138
|
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
132
139
|
const withMeta = (0, import_archivist_abstract.addStorageMeta)(payload, index);
|
|
133
140
|
this.cache.set(hash, withMeta);
|
|
134
141
|
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
135
|
-
return
|
|
142
|
+
return withMeta;
|
|
136
143
|
}
|
|
137
144
|
};
|
|
138
145
|
MemoryArchivist = _ts_decorate([
|
|
@@ -1 +1 @@
|
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } 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 { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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\
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } 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 ArchivistNextOptions,\n ArchivistNextQuerySchema,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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, WithStorageMeta<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, WithStorageMeta<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 ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\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<WithMeta<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<Hash[]> {\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: Hash[]): Promisable<PayloadWithMeta[]> {\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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash]) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, previous } = options ?? {}\n const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))))\n const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0\n return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : undefined))\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.bodyHashIndex.set(withMeta.$hash, hash)\n return withMeta\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","ArchivistNextQuerySchema","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","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","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","nextHandler","options","limit","previous","startIndex","findIndex","$hash","slice","index","withMeta","addStorageMeta","set","creatableModule"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { assertEx } from "@xylabs/assert";
|
|
|
6
6
|
import { compact } from "@xylabs/lodash";
|
|
7
7
|
import { fulfilled } from "@xylabs/promise";
|
|
8
8
|
import { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } from "@xyo-network/archivist-abstract";
|
|
9
|
-
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
9
|
+
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from "@xyo-network/archivist-model";
|
|
10
10
|
import { creatableModule } from "@xyo-network/module-model";
|
|
11
11
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
12
12
|
import { LRUCache } from "lru-cache";
|
|
@@ -54,11 +54,12 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
54
54
|
ArchivistClearQuerySchema,
|
|
55
55
|
ArchivistInsertQuerySchema,
|
|
56
56
|
ArchivistCommitQuerySchema,
|
|
57
|
+
ArchivistNextQuerySchema,
|
|
57
58
|
...super.queries
|
|
58
59
|
];
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
-
const all = compact(
|
|
61
|
+
allHandler() {
|
|
62
|
+
const all = compact(this.cache.dump().map(([, item]) => item.value));
|
|
62
63
|
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
63
64
|
}
|
|
64
65
|
clearHandler() {
|
|
@@ -98,16 +99,22 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
98
99
|
}
|
|
99
100
|
async insertHandler(payloads) {
|
|
100
101
|
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
101
|
-
const insertedPayloads =
|
|
102
|
-
return this.insertPayloadIntoCache(payload, hash);
|
|
103
|
-
})
|
|
104
|
-
return insertedPayloads;
|
|
102
|
+
const insertedPayloads = pairs.map(([payload, hash]) => {
|
|
103
|
+
return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash);
|
|
104
|
+
});
|
|
105
|
+
return removeStorageMeta(insertedPayloads);
|
|
106
|
+
}
|
|
107
|
+
async nextHandler(options) {
|
|
108
|
+
const { limit, previous } = options ?? {};
|
|
109
|
+
const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))));
|
|
110
|
+
const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0;
|
|
111
|
+
return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : void 0));
|
|
105
112
|
}
|
|
106
113
|
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
107
114
|
const withMeta = addStorageMeta(payload, index);
|
|
108
115
|
this.cache.set(hash, withMeta);
|
|
109
116
|
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
110
|
-
return
|
|
117
|
+
return withMeta;
|
|
111
118
|
}
|
|
112
119
|
};
|
|
113
120
|
MemoryArchivist = _ts_decorate([
|
|
@@ -1 +1 @@
|
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } 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 { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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\
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } 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 ArchivistNextOptions,\n ArchivistNextQuerySchema,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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, WithStorageMeta<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, WithStorageMeta<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 ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\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<WithMeta<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<Hash[]> {\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: Hash[]): Promisable<PayloadWithMeta[]> {\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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash]) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, previous } = options ?? {}\n const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))))\n const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0\n return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : undefined))\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.bodyHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","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","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","nextHandler","options","limit","previous","startIndex","findIndex","$hash","slice","index","withMeta","addStorageMeta","set","creatableModule"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hash } from '@xylabs/hex';
|
|
2
2
|
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData } from '@xyo-network/archivist-model';
|
|
3
|
+
import { AbstractArchivist, WithStorageMeta } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistInstance, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
5
|
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
6
|
import { AnyConfigSchema, ModuleInstance, ModuleParams } from '@xyo-network/module-model';
|
|
7
7
|
import { Payload, PayloadWithMeta, WithMeta } from '@xyo-network/payload-model';
|
|
@@ -12,9 +12,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
12
12
|
max?: number;
|
|
13
13
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema'];
|
|
14
14
|
}>;
|
|
15
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
16
|
-
_sequence: bigint;
|
|
17
|
-
};
|
|
18
15
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
19
16
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
20
17
|
static configSchemas: string[];
|
|
@@ -24,13 +21,13 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
24
21
|
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
25
22
|
get max(): number;
|
|
26
23
|
get queries(): string[];
|
|
27
|
-
protected allHandler():
|
|
24
|
+
protected allHandler(): Promisable<PayloadWithMeta[]>;
|
|
28
25
|
protected clearHandler(): void | Promise<void>;
|
|
29
26
|
protected commitHandler(): Promise<WithMeta<BoundWitness>[]>;
|
|
30
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
31
|
-
protected getHandler(hashes:
|
|
27
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
28
|
+
protected getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]>;
|
|
32
29
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]>;
|
|
33
31
|
private insertPayloadIntoCache;
|
|
34
32
|
}
|
|
35
|
-
export {};
|
|
36
33
|
//# sourceMappingURL=MemoryArchivist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,MAAM,iCAAiC,CAAA;
|
|
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,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAwD,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAC1I,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EAErB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAmB,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE1G,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAC/E,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,CAAoD;IAEnE,IAAI,aAAa,sCAGhB;IAED,IAAI,KAAK,gEAGR;IAED,IAAI,GAAG,WAEN;IAED,IAAa,OAAO,aAUnB;cAEkB,UAAU,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;cAK3C,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;cAiBlD,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAWpD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAanD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;cAS9D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAOhG,OAAO,CAAC,sBAAsB;CAM/B"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -78,11 +78,12 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
78
78
|
import_archivist_model.ArchivistClearQuerySchema,
|
|
79
79
|
import_archivist_model.ArchivistInsertQuerySchema,
|
|
80
80
|
import_archivist_model.ArchivistCommitQuerySchema,
|
|
81
|
+
import_archivist_model.ArchivistNextQuerySchema,
|
|
81
82
|
...super.queries
|
|
82
83
|
];
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
-
const all = (0, import_lodash.compact)(
|
|
85
|
+
allHandler() {
|
|
86
|
+
const all = (0, import_lodash.compact)(this.cache.dump().map(([, item]) => item.value));
|
|
86
87
|
return (0, import_archivist_abstract.sortByStorageMeta)(all).map((payload) => (0, import_archivist_abstract.removeStorageMeta)(payload));
|
|
87
88
|
}
|
|
88
89
|
clearHandler() {
|
|
@@ -124,16 +125,22 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
124
125
|
}
|
|
125
126
|
async insertHandler(payloads) {
|
|
126
127
|
const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
|
|
127
|
-
const insertedPayloads =
|
|
128
|
-
return this.insertPayloadIntoCache(payload, hash);
|
|
129
|
-
})
|
|
130
|
-
return insertedPayloads;
|
|
128
|
+
const insertedPayloads = pairs.map(([payload, hash]) => {
|
|
129
|
+
return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash);
|
|
130
|
+
});
|
|
131
|
+
return (0, import_archivist_abstract.removeStorageMeta)(insertedPayloads);
|
|
132
|
+
}
|
|
133
|
+
async nextHandler(options) {
|
|
134
|
+
const { limit, previous } = options ?? {};
|
|
135
|
+
const all = (0, import_archivist_abstract.sortByStorageMeta)((0, import_lodash.compact)(await Promise.all(this.cache.dump().map((value) => value[1].value))));
|
|
136
|
+
const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0;
|
|
137
|
+
return (0, import_archivist_abstract.removeStorageMeta)(all.slice(startIndex, limit ? startIndex + limit : void 0));
|
|
131
138
|
}
|
|
132
139
|
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
133
140
|
const withMeta = (0, import_archivist_abstract.addStorageMeta)(payload, index);
|
|
134
141
|
this.cache.set(hash, withMeta);
|
|
135
142
|
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
136
|
-
return
|
|
143
|
+
return withMeta;
|
|
137
144
|
}
|
|
138
145
|
};
|
|
139
146
|
__name(_MemoryArchivist, "MemoryArchivist");
|
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 { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } 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 { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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\
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } 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 ArchivistNextOptions,\n ArchivistNextQuerySchema,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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, WithStorageMeta<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, WithStorageMeta<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 ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\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<WithMeta<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<Hash[]> {\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: Hash[]): Promisable<PayloadWithMeta[]> {\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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash]) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, previous } = options ?? {}\n const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))))\n const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0\n return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : undefined))\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.bodyHashIndex.set(withMeta.$hash, hash)\n return withMeta\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","ArchivistNextQuerySchema","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","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","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","nextHandler","options","limit","previous","startIndex","findIndex","$hash","slice","index","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/dist/node/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import { assertEx } from "@xylabs/assert";
|
|
|
11
11
|
import { compact } from "@xylabs/lodash";
|
|
12
12
|
import { fulfilled } from "@xylabs/promise";
|
|
13
13
|
import { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } from "@xyo-network/archivist-abstract";
|
|
14
|
-
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema } from "@xyo-network/archivist-model";
|
|
14
|
+
import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistConfigSchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ArchivistNextQuerySchema } from "@xyo-network/archivist-model";
|
|
15
15
|
import { creatableModule } from "@xyo-network/module-model";
|
|
16
16
|
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
17
17
|
import { LRUCache } from "lru-cache";
|
|
@@ -53,11 +53,12 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
53
53
|
ArchivistClearQuerySchema,
|
|
54
54
|
ArchivistInsertQuerySchema,
|
|
55
55
|
ArchivistCommitQuerySchema,
|
|
56
|
+
ArchivistNextQuerySchema,
|
|
56
57
|
...super.queries
|
|
57
58
|
];
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
const all = compact(
|
|
60
|
+
allHandler() {
|
|
61
|
+
const all = compact(this.cache.dump().map(([, item]) => item.value));
|
|
61
62
|
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
62
63
|
}
|
|
63
64
|
clearHandler() {
|
|
@@ -99,16 +100,22 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
99
100
|
}
|
|
100
101
|
async insertHandler(payloads) {
|
|
101
102
|
const pairs = await PayloadBuilder.hashPairs(payloads);
|
|
102
|
-
const insertedPayloads =
|
|
103
|
-
return this.insertPayloadIntoCache(payload, hash);
|
|
104
|
-
})
|
|
105
|
-
return insertedPayloads;
|
|
103
|
+
const insertedPayloads = pairs.map(([payload, hash]) => {
|
|
104
|
+
return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash);
|
|
105
|
+
});
|
|
106
|
+
return removeStorageMeta(insertedPayloads);
|
|
107
|
+
}
|
|
108
|
+
async nextHandler(options) {
|
|
109
|
+
const { limit, previous } = options ?? {};
|
|
110
|
+
const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))));
|
|
111
|
+
const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0;
|
|
112
|
+
return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : void 0));
|
|
106
113
|
}
|
|
107
114
|
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
108
115
|
const withMeta = addStorageMeta(payload, index);
|
|
109
116
|
this.cache.set(hash, withMeta);
|
|
110
117
|
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
111
|
-
return
|
|
118
|
+
return withMeta;
|
|
112
119
|
}
|
|
113
120
|
};
|
|
114
121
|
__name(_MemoryArchivist, "MemoryArchivist");
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } 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 { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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\ntype WithStorageMeta<T extends Payload> = T & {\n _sequence: bigint\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, WithStorageMeta<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, WithStorageMeta<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 async allHandler(): Promise<PayloadWithMeta[]> {\n const all = compact(await Promise.all(this.cache.dump().map((value) => value[1].value)))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\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<WithMeta<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<PayloadWithMeta[]> {\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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\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, index = 0): PayloadWithMeta {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.bodyHashIndex.set(withMeta.$hash, hash)\n return payload\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","all","compact","Promise","dump","map","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","allSettled","Object","values","parents","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","index","withMeta","addStorageMeta","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
|
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 } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } 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 ArchivistNextOptions,\n ArchivistNextQuerySchema,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadWithMeta, WithMeta } 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, WithStorageMeta<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, WithStorageMeta<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 ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\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<WithMeta<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<Hash[]> {\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: Hash[]): Promisable<PayloadWithMeta[]> {\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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash]) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, previous } = options ?? {}\n const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))))\n const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0\n return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : undefined))\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.bodyHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n}\n"],"mappings":"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","names":["assertEx","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","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","hash","delete","undefined","getHandler","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","insertPayloadIntoCache","nextHandler","options","limit","previous","startIndex","findIndex","$hash","slice","index","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/package.json
CHANGED
|
@@ -10,22 +10,22 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^3.0.
|
|
14
|
-
"@xylabs/hex": "^3.0.
|
|
15
|
-
"@xylabs/lodash": "^3.0.
|
|
16
|
-
"@xylabs/promise": "^3.0.
|
|
17
|
-
"@xyo-network/archivist-abstract": "~2.91.
|
|
18
|
-
"@xyo-network/archivist-model": "~2.91.
|
|
19
|
-
"@xyo-network/boundwitness-model": "~2.91.
|
|
20
|
-
"@xyo-network/module-model": "~2.91.
|
|
21
|
-
"@xyo-network/payload-builder": "~2.91.
|
|
22
|
-
"@xyo-network/payload-model": "~2.91.
|
|
13
|
+
"@xylabs/assert": "^3.0.3",
|
|
14
|
+
"@xylabs/hex": "^3.0.3",
|
|
15
|
+
"@xylabs/lodash": "^3.0.3",
|
|
16
|
+
"@xylabs/promise": "^3.0.3",
|
|
17
|
+
"@xyo-network/archivist-abstract": "~2.91.2",
|
|
18
|
+
"@xyo-network/archivist-model": "~2.91.2",
|
|
19
|
+
"@xyo-network/boundwitness-model": "~2.91.2",
|
|
20
|
+
"@xyo-network/module-model": "~2.91.2",
|
|
21
|
+
"@xyo-network/payload-builder": "~2.91.2",
|
|
22
|
+
"@xyo-network/payload-model": "~2.91.2",
|
|
23
23
|
"lru-cache": "^10.2.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@xylabs/ts-scripts-yarn3": "^3.4.1",
|
|
27
27
|
"@xylabs/tsconfig": "^3.4.1",
|
|
28
|
-
"@xyo-network/account": "~2.91.
|
|
28
|
+
"@xyo-network/account": "~2.91.2",
|
|
29
29
|
"typescript": "^5.3.3"
|
|
30
30
|
},
|
|
31
31
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
@@ -67,6 +67,6 @@
|
|
|
67
67
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
68
68
|
},
|
|
69
69
|
"sideEffects": false,
|
|
70
|
-
"version": "2.91.
|
|
70
|
+
"version": "2.91.2",
|
|
71
71
|
"type": "module"
|
|
72
72
|
}
|
package/src/MemoryArchivist.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { assertEx } from '@xylabs/assert'
|
|
|
2
2
|
import { Hash } from '@xylabs/hex'
|
|
3
3
|
import { compact } from '@xylabs/lodash'
|
|
4
4
|
import { fulfilled, Promisable } from '@xylabs/promise'
|
|
5
|
-
import { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta } from '@xyo-network/archivist-abstract'
|
|
5
|
+
import { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'
|
|
6
6
|
import {
|
|
7
7
|
ArchivistAllQuerySchema,
|
|
8
8
|
ArchivistClearQuerySchema,
|
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
ArchivistInsertQuerySchema,
|
|
15
15
|
ArchivistInstance,
|
|
16
16
|
ArchivistModuleEventData,
|
|
17
|
+
ArchivistNextOptions,
|
|
18
|
+
ArchivistNextQuerySchema,
|
|
17
19
|
} from '@xyo-network/archivist-model'
|
|
18
20
|
import { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
19
21
|
import { AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams } from '@xyo-network/module-model'
|
|
@@ -29,10 +31,6 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
29
31
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']
|
|
30
32
|
}>
|
|
31
33
|
|
|
32
|
-
type WithStorageMeta<T extends Payload> = T & {
|
|
33
|
-
_sequence: bigint
|
|
34
|
-
}
|
|
35
|
-
|
|
36
34
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =
|
|
37
35
|
ModuleParams<TConfig>
|
|
38
36
|
@creatableModule()
|
|
@@ -69,12 +67,13 @@ export class MemoryArchivist<
|
|
|
69
67
|
ArchivistClearQuerySchema,
|
|
70
68
|
ArchivistInsertQuerySchema,
|
|
71
69
|
ArchivistCommitQuerySchema,
|
|
70
|
+
ArchivistNextQuerySchema,
|
|
72
71
|
...super.queries,
|
|
73
72
|
]
|
|
74
73
|
}
|
|
75
74
|
|
|
76
|
-
protected override
|
|
77
|
-
const all = compact(
|
|
75
|
+
protected override allHandler(): Promisable<PayloadWithMeta[]> {
|
|
76
|
+
const all = compact(this.cache.dump().map(([, item]) => item.value))
|
|
78
77
|
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))
|
|
79
78
|
}
|
|
80
79
|
|
|
@@ -101,7 +100,7 @@ export class MemoryArchivist<
|
|
|
101
100
|
return compact(settled.filter(fulfilled).map((result) => result.value))
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
protected override async deleteHandler(hashes: Hash[]): Promise<
|
|
103
|
+
protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {
|
|
105
104
|
const deletedHashes = compact(
|
|
106
105
|
await Promise.all(
|
|
107
106
|
hashes.map((hash) => {
|
|
@@ -112,7 +111,7 @@ export class MemoryArchivist<
|
|
|
112
111
|
return deletedHashes
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
protected override getHandler(hashes:
|
|
114
|
+
protected override getHandler(hashes: Hash[]): Promisable<PayloadWithMeta[]> {
|
|
116
115
|
return compact(
|
|
117
116
|
hashes.map((hash) => {
|
|
118
117
|
const resolvedHash = this.bodyHashIndex.get(hash) ?? hash
|
|
@@ -127,19 +126,24 @@ export class MemoryArchivist<
|
|
|
127
126
|
|
|
128
127
|
protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {
|
|
129
128
|
const pairs = await PayloadBuilder.hashPairs(payloads)
|
|
130
|
-
const insertedPayloads =
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
)
|
|
129
|
+
const insertedPayloads = pairs.map(([payload, hash]) => {
|
|
130
|
+
return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
return removeStorageMeta(insertedPayloads)
|
|
134
|
+
}
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {
|
|
137
|
+
const { limit, previous } = options ?? {}
|
|
138
|
+
const all = sortByStorageMeta(compact(await Promise.all(this.cache.dump().map((value) => value[1].value))))
|
|
139
|
+
const startIndex = previous ? all.findIndex((value) => value.$hash === previous) + 1 : 0
|
|
140
|
+
return removeStorageMeta(all.slice(startIndex, limit ? startIndex + limit : undefined))
|
|
137
141
|
}
|
|
138
142
|
|
|
139
|
-
private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): PayloadWithMeta {
|
|
143
|
+
private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): WithStorageMeta<PayloadWithMeta> {
|
|
140
144
|
const withMeta = addStorageMeta(payload, index)
|
|
141
145
|
this.cache.set(hash, withMeta)
|
|
142
146
|
this.bodyHashIndex.set(withMeta.$hash, hash)
|
|
143
|
-
return
|
|
147
|
+
return withMeta
|
|
144
148
|
}
|
|
145
149
|
}
|