@xyo-network/archivist-memory 2.90.14 → 2.90.16
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 +5 -1
- package/dist/browser/MemoryArchivist.d.cts.map +1 -1
- package/dist/browser/MemoryArchivist.d.mts +5 -1
- package/dist/browser/MemoryArchivist.d.mts.map +1 -1
- package/dist/browser/MemoryArchivist.d.ts +5 -1
- package/dist/browser/MemoryArchivist.d.ts.map +1 -1
- package/dist/browser/index.cjs +28 -5
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +28 -5
- package/dist/browser/index.js.map +1 -1
- package/dist/node/MemoryArchivist.d.cts +5 -1
- package/dist/node/MemoryArchivist.d.cts.map +1 -1
- package/dist/node/MemoryArchivist.d.mts +5 -1
- package/dist/node/MemoryArchivist.d.mts.map +1 -1
- package/dist/node/MemoryArchivist.d.ts +5 -1
- package/dist/node/MemoryArchivist.d.ts.map +1 -1
- package/dist/node/index.cjs +28 -5
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +28 -5
- package/dist/node/index.js.map +1 -1
- package/package.json +8 -8
- package/src/MemoryArchivist.ts +37 -7
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -47,6 +47,27 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
47
47
|
}
|
|
48
48
|
__name(_ts_decorate, "_ts_decorate");
|
|
49
49
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
50
|
+
var maxSequenceIndex = 10000000000n;
|
|
51
|
+
var sequenceNumber = /* @__PURE__ */ __name((index) => {
|
|
52
|
+
(0, import_assert.assertEx)(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
|
|
53
|
+
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
|
|
54
|
+
}, "sequenceNumber");
|
|
55
|
+
var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
|
|
56
|
+
return {
|
|
57
|
+
...payload,
|
|
58
|
+
_sequence: sequenceNumber(index)
|
|
59
|
+
};
|
|
60
|
+
}, "addStorageMeta");
|
|
61
|
+
var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
|
|
62
|
+
return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
|
|
63
|
+
}, "sortByStorageMeta");
|
|
64
|
+
function removeStorageMeta(payload) {
|
|
65
|
+
if (!payload)
|
|
66
|
+
return;
|
|
67
|
+
const { _sequence, ...noMeta } = payload;
|
|
68
|
+
return noMeta;
|
|
69
|
+
}
|
|
70
|
+
__name(removeStorageMeta, "removeStorageMeta");
|
|
50
71
|
var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist {
|
|
51
72
|
static {
|
|
52
73
|
__name(this, "MemoryArchivist");
|
|
@@ -83,7 +104,8 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
83
104
|
];
|
|
84
105
|
}
|
|
85
106
|
async allHandler() {
|
|
86
|
-
|
|
107
|
+
const all = (0, import_lodash.compact)(await Promise.all(this.cache.dump().map((value) => value[1].value)));
|
|
108
|
+
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
87
109
|
}
|
|
88
110
|
clearHandler() {
|
|
89
111
|
this.cache.clear();
|
|
@@ -117,7 +139,7 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
117
139
|
if (resolvedHash !== hash && !result) {
|
|
118
140
|
throw new Error("Missing referenced payload");
|
|
119
141
|
}
|
|
120
|
-
return result;
|
|
142
|
+
return removeStorageMeta(result);
|
|
121
143
|
}));
|
|
122
144
|
}
|
|
123
145
|
async insertHandler(payloads) {
|
|
@@ -127,9 +149,10 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
|
|
|
127
149
|
}));
|
|
128
150
|
return insertedPayloads;
|
|
129
151
|
}
|
|
130
|
-
insertPayloadIntoCache(payload, hash) {
|
|
131
|
-
|
|
132
|
-
this.
|
|
152
|
+
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
153
|
+
const withMeta = addStorageMeta(payload, index);
|
|
154
|
+
this.cache.set(hash, withMeta);
|
|
155
|
+
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
133
156
|
return payload;
|
|
134
157
|
}
|
|
135
158
|
};
|
|
@@ -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 } 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\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 async allHandler(): Promise<PayloadWithMeta[]> {\n return compact(await Promise.all(this.cache.dump().map((value) => PayloadBuilder.build(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<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 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): 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","Promise","all","dump","map","value","PayloadBuilder","build","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","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","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","creatableModule"]}
|
|
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 } 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\nconst maxSequenceIndex = 10_000_000_000n\n\nconst sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nconst addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nconst sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) => (a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0))\n}\n\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\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":["MemoryArchivistConfigSchema","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","all","compact","Promise","dump","map","value","clearHandler","clear","emit","module","commitHandler","settled","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","withMeta","set","$hash","creatableModule"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -22,6 +22,27 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
22
22
|
}
|
|
23
23
|
__name(_ts_decorate, "_ts_decorate");
|
|
24
24
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
25
|
+
var maxSequenceIndex = 10000000000n;
|
|
26
|
+
var sequenceNumber = /* @__PURE__ */ __name((index) => {
|
|
27
|
+
assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
|
|
28
|
+
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
|
|
29
|
+
}, "sequenceNumber");
|
|
30
|
+
var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
|
|
31
|
+
return {
|
|
32
|
+
...payload,
|
|
33
|
+
_sequence: sequenceNumber(index)
|
|
34
|
+
};
|
|
35
|
+
}, "addStorageMeta");
|
|
36
|
+
var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
|
|
37
|
+
return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
|
|
38
|
+
}, "sortByStorageMeta");
|
|
39
|
+
function removeStorageMeta(payload) {
|
|
40
|
+
if (!payload)
|
|
41
|
+
return;
|
|
42
|
+
const { _sequence, ...noMeta } = payload;
|
|
43
|
+
return noMeta;
|
|
44
|
+
}
|
|
45
|
+
__name(removeStorageMeta, "removeStorageMeta");
|
|
25
46
|
var MemoryArchivist = class extends AbstractArchivist {
|
|
26
47
|
static {
|
|
27
48
|
__name(this, "MemoryArchivist");
|
|
@@ -58,7 +79,8 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
58
79
|
];
|
|
59
80
|
}
|
|
60
81
|
async allHandler() {
|
|
61
|
-
|
|
82
|
+
const all = compact(await Promise.all(this.cache.dump().map((value) => value[1].value)));
|
|
83
|
+
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
62
84
|
}
|
|
63
85
|
clearHandler() {
|
|
64
86
|
this.cache.clear();
|
|
@@ -92,7 +114,7 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
92
114
|
if (resolvedHash !== hash && !result) {
|
|
93
115
|
throw new Error("Missing referenced payload");
|
|
94
116
|
}
|
|
95
|
-
return result;
|
|
117
|
+
return removeStorageMeta(result);
|
|
96
118
|
}));
|
|
97
119
|
}
|
|
98
120
|
async insertHandler(payloads) {
|
|
@@ -102,9 +124,10 @@ var MemoryArchivist = class extends AbstractArchivist {
|
|
|
102
124
|
}));
|
|
103
125
|
return insertedPayloads;
|
|
104
126
|
}
|
|
105
|
-
insertPayloadIntoCache(payload, hash) {
|
|
106
|
-
|
|
107
|
-
this.
|
|
127
|
+
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
128
|
+
const withMeta = addStorageMeta(payload, index);
|
|
129
|
+
this.cache.set(hash, withMeta);
|
|
130
|
+
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
108
131
|
return payload;
|
|
109
132
|
}
|
|
110
133
|
};
|
|
@@ -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 } 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\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 async allHandler(): Promise<PayloadWithMeta[]> {\n return compact(await Promise.all(this.cache.dump().map((value) => PayloadBuilder.build(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<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 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): 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","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","Promise","all","dump","map","value","PayloadBuilder","build","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","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","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","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 } 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\nconst maxSequenceIndex = 10_000_000_000n\n\nconst sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nconst addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nconst sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) => (a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0))\n}\n\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\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","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","all","compact","Promise","dump","map","value","clearHandler","clear","emit","module","commitHandler","settled","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","withMeta","set","$hash","creatableModule"]}
|
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -12,13 +12,16 @@ 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
|
+
};
|
|
15
18
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> = ModuleParams<TConfig>;
|
|
16
19
|
export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> implements ArchivistInstance, ModuleInstance {
|
|
17
20
|
static configSchemas: string[];
|
|
18
21
|
private _bodyHashIndex?;
|
|
19
22
|
private _cache?;
|
|
20
23
|
get bodyHashIndex(): LRUCache<string, string, unknown>;
|
|
21
|
-
get cache(): LRUCache<string, PayloadWithMeta
|
|
24
|
+
get cache(): LRUCache<string, WithStorageMeta<PayloadWithMeta>, unknown>;
|
|
22
25
|
get max(): number;
|
|
23
26
|
get queries(): string[];
|
|
24
27
|
protected allHandler(): Promise<PayloadWithMeta[]>;
|
|
@@ -29,4 +32,5 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
29
32
|
protected insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]>;
|
|
30
33
|
private insertPayloadIntoCache;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# 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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,
|
|
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,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAKf,iBAAiB,EACjB,wBAAwB,EACzB,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,KAAK,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC5C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AA0BD,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,aASnB;cAEwB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;cAK9C,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,MAAM,EAAE,CAAC;cAWtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;cAarD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWvF,OAAO,CAAC,sBAAsB;CAM/B"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -52,6 +52,27 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
52
52
|
}
|
|
53
53
|
__name(_ts_decorate, "_ts_decorate");
|
|
54
54
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
55
|
+
var maxSequenceIndex = 10000000000n;
|
|
56
|
+
var sequenceNumber = /* @__PURE__ */ __name((index) => {
|
|
57
|
+
(0, import_assert.assertEx)(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
|
|
58
|
+
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
|
|
59
|
+
}, "sequenceNumber");
|
|
60
|
+
var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
|
|
61
|
+
return {
|
|
62
|
+
...payload,
|
|
63
|
+
_sequence: sequenceNumber(index)
|
|
64
|
+
};
|
|
65
|
+
}, "addStorageMeta");
|
|
66
|
+
var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
|
|
67
|
+
return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
|
|
68
|
+
}, "sortByStorageMeta");
|
|
69
|
+
function removeStorageMeta(payload) {
|
|
70
|
+
if (!payload)
|
|
71
|
+
return;
|
|
72
|
+
const { _sequence, ...noMeta } = payload;
|
|
73
|
+
return noMeta;
|
|
74
|
+
}
|
|
75
|
+
__name(removeStorageMeta, "removeStorageMeta");
|
|
55
76
|
var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.AbstractArchivist {
|
|
56
77
|
_bodyHashIndex;
|
|
57
78
|
_cache;
|
|
@@ -82,7 +103,8 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
82
103
|
];
|
|
83
104
|
}
|
|
84
105
|
async allHandler() {
|
|
85
|
-
|
|
106
|
+
const all = (0, import_lodash.compact)(await Promise.all(this.cache.dump().map((value) => value[1].value)));
|
|
107
|
+
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
86
108
|
}
|
|
87
109
|
clearHandler() {
|
|
88
110
|
this.cache.clear();
|
|
@@ -118,7 +140,7 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
118
140
|
if (resolvedHash !== hash && !result) {
|
|
119
141
|
throw new Error("Missing referenced payload");
|
|
120
142
|
}
|
|
121
|
-
return result;
|
|
143
|
+
return removeStorageMeta(result);
|
|
122
144
|
}));
|
|
123
145
|
}
|
|
124
146
|
async insertHandler(payloads) {
|
|
@@ -128,9 +150,10 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
|
|
|
128
150
|
}));
|
|
129
151
|
return insertedPayloads;
|
|
130
152
|
}
|
|
131
|
-
insertPayloadIntoCache(payload, hash) {
|
|
132
|
-
|
|
133
|
-
this.
|
|
153
|
+
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
154
|
+
const withMeta = addStorageMeta(payload, index);
|
|
155
|
+
this.cache.set(hash, withMeta);
|
|
156
|
+
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
134
157
|
return payload;
|
|
135
158
|
}
|
|
136
159
|
};
|
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 } 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\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 async allHandler(): Promise<PayloadWithMeta[]> {\n return compact(await Promise.all(this.cache.dump().map((value) => PayloadBuilder.build(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<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 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): 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","Promise","all","dump","map","value","PayloadBuilder","build","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","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
|
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 } 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\nconst maxSequenceIndex = 10_000_000_000n\n\nconst sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nconst addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nconst sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) => (a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0))\n}\n\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\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":["MemoryArchivistConfigSchema","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","all","compact","Promise","dump","map","value","clearHandler","clear","emit","module","commitHandler","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","withMeta","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/dist/node/index.js
CHANGED
|
@@ -27,6 +27,27 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
27
27
|
}
|
|
28
28
|
__name(_ts_decorate, "_ts_decorate");
|
|
29
29
|
var MemoryArchivistConfigSchema = "network.xyo.archivist.memory.config";
|
|
30
|
+
var maxSequenceIndex = 10000000000n;
|
|
31
|
+
var sequenceNumber = /* @__PURE__ */ __name((index) => {
|
|
32
|
+
assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`);
|
|
33
|
+
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index);
|
|
34
|
+
}, "sequenceNumber");
|
|
35
|
+
var addStorageMeta = /* @__PURE__ */ __name((payload, index = 0) => {
|
|
36
|
+
return {
|
|
37
|
+
...payload,
|
|
38
|
+
_sequence: sequenceNumber(index)
|
|
39
|
+
};
|
|
40
|
+
}, "addStorageMeta");
|
|
41
|
+
var sortByStorageMeta = /* @__PURE__ */ __name((payloads) => {
|
|
42
|
+
return payloads.sort((a, b) => a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0);
|
|
43
|
+
}, "sortByStorageMeta");
|
|
44
|
+
function removeStorageMeta(payload) {
|
|
45
|
+
if (!payload)
|
|
46
|
+
return;
|
|
47
|
+
const { _sequence, ...noMeta } = payload;
|
|
48
|
+
return noMeta;
|
|
49
|
+
}
|
|
50
|
+
__name(removeStorageMeta, "removeStorageMeta");
|
|
30
51
|
var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
31
52
|
_bodyHashIndex;
|
|
32
53
|
_cache;
|
|
@@ -57,7 +78,8 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
57
78
|
];
|
|
58
79
|
}
|
|
59
80
|
async allHandler() {
|
|
60
|
-
|
|
81
|
+
const all = compact(await Promise.all(this.cache.dump().map((value) => value[1].value)));
|
|
82
|
+
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload));
|
|
61
83
|
}
|
|
62
84
|
clearHandler() {
|
|
63
85
|
this.cache.clear();
|
|
@@ -93,7 +115,7 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
93
115
|
if (resolvedHash !== hash && !result) {
|
|
94
116
|
throw new Error("Missing referenced payload");
|
|
95
117
|
}
|
|
96
|
-
return result;
|
|
118
|
+
return removeStorageMeta(result);
|
|
97
119
|
}));
|
|
98
120
|
}
|
|
99
121
|
async insertHandler(payloads) {
|
|
@@ -103,9 +125,10 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
103
125
|
}));
|
|
104
126
|
return insertedPayloads;
|
|
105
127
|
}
|
|
106
|
-
insertPayloadIntoCache(payload, hash) {
|
|
107
|
-
|
|
108
|
-
this.
|
|
128
|
+
insertPayloadIntoCache(payload, hash, index = 0) {
|
|
129
|
+
const withMeta = addStorageMeta(payload, index);
|
|
130
|
+
this.cache.set(hash, withMeta);
|
|
131
|
+
this.bodyHashIndex.set(withMeta.$hash, hash);
|
|
109
132
|
return payload;
|
|
110
133
|
}
|
|
111
134
|
};
|
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 } 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\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 async allHandler(): Promise<PayloadWithMeta[]> {\n return compact(await Promise.all(this.cache.dump().map((value) => PayloadBuilder.build(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<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 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): 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","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","compact","Promise","all","dump","map","value","PayloadBuilder","build","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","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","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 } 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\nconst maxSequenceIndex = 10_000_000_000n\n\nconst sequenceNumber = (index: number) => {\n assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)\n return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)\n}\n\nconst addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {\n return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>\n}\n\nconst sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {\n return payloads.sort((a, b) => (a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0))\n}\n\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined\nfunction removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {\n if (!payload) return\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { _sequence, ...noMeta } = payload as WithStorageMeta<T>\n return noMeta as T\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","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","maxSequenceIndex","sequenceNumber","index","assertEx","BigInt","Date","now","addStorageMeta","payload","_sequence","sortByStorageMeta","payloads","sort","a","b","removeStorageMeta","noMeta","MemoryArchivist","AbstractArchivist","_bodyHashIndex","_cache","bodyHashIndex","LRUCache","max","cache","config","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","allHandler","all","compact","Promise","dump","map","value","clearHandler","clear","emit","module","commitHandler","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","withMeta","set","$hash","configSchemas","ArchivistConfigSchema","creatableModule"]}
|
package/package.json
CHANGED
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
"@xylabs/hex": "^2.14.2",
|
|
15
15
|
"@xylabs/lodash": "^2.14.2",
|
|
16
16
|
"@xylabs/promise": "^2.14.2",
|
|
17
|
-
"@xyo-network/archivist-abstract": "~2.90.
|
|
18
|
-
"@xyo-network/archivist-model": "~2.90.
|
|
19
|
-
"@xyo-network/boundwitness-model": "~2.90.
|
|
20
|
-
"@xyo-network/module-model": "~2.90.
|
|
21
|
-
"@xyo-network/payload-builder": "~2.90.
|
|
22
|
-
"@xyo-network/payload-model": "~2.90.
|
|
17
|
+
"@xyo-network/archivist-abstract": "~2.90.16",
|
|
18
|
+
"@xyo-network/archivist-model": "~2.90.16",
|
|
19
|
+
"@xyo-network/boundwitness-model": "~2.90.16",
|
|
20
|
+
"@xyo-network/module-model": "~2.90.16",
|
|
21
|
+
"@xyo-network/payload-builder": "~2.90.16",
|
|
22
|
+
"@xyo-network/payload-model": "~2.90.16",
|
|
23
23
|
"lru-cache": "^10.2.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@xylabs/ts-scripts-yarn3": "^3.2.42",
|
|
27
27
|
"@xylabs/tsconfig": "^3.2.42",
|
|
28
|
-
"@xyo-network/account": "~2.90.
|
|
28
|
+
"@xyo-network/account": "~2.90.16",
|
|
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.90.
|
|
70
|
+
"version": "2.90.16",
|
|
71
71
|
"type": "module"
|
|
72
72
|
}
|
package/src/MemoryArchivist.ts
CHANGED
|
@@ -29,6 +29,34 @@ export type MemoryArchivistConfig = ArchivistConfig<{
|
|
|
29
29
|
schema: MemoryArchivistConfigSchema | ArchivistConfig['schema']
|
|
30
30
|
}>
|
|
31
31
|
|
|
32
|
+
type WithStorageMeta<T extends Payload> = T & {
|
|
33
|
+
_sequence: bigint
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const maxSequenceIndex = 10_000_000_000n
|
|
37
|
+
|
|
38
|
+
const sequenceNumber = (index: number) => {
|
|
39
|
+
assertEx(index < maxSequenceIndex, () => `index may not be larger than ${maxSequenceIndex}`)
|
|
40
|
+
return BigInt(Date.now()) * maxSequenceIndex + BigInt(index)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const addStorageMeta = <T extends PayloadWithMeta>(payload: T, index = 0) => {
|
|
44
|
+
return { ...payload, _sequence: sequenceNumber(index) } as WithStorageMeta<T>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const sortByStorageMeta = <T extends PayloadWithMeta>(payloads: WithStorageMeta<T>[]) => {
|
|
48
|
+
return payloads.sort((a, b) => (a._sequence < b._sequence ? -1 : a._sequence > b._sequence ? 1 : 0))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function removeStorageMeta<T extends PayloadWithMeta>(payload: WithStorageMeta<T>): T
|
|
52
|
+
function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>): T | undefined
|
|
53
|
+
function removeStorageMeta<T extends PayloadWithMeta>(payload?: WithStorageMeta<T>) {
|
|
54
|
+
if (!payload) return
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
56
|
+
const { _sequence, ...noMeta } = payload as WithStorageMeta<T>
|
|
57
|
+
return noMeta as T
|
|
58
|
+
}
|
|
59
|
+
|
|
32
60
|
export type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>> =
|
|
33
61
|
ModuleParams<TConfig>
|
|
34
62
|
@creatableModule()
|
|
@@ -42,7 +70,7 @@ export class MemoryArchivist<
|
|
|
42
70
|
static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]
|
|
43
71
|
|
|
44
72
|
private _bodyHashIndex?: LRUCache<string, string>
|
|
45
|
-
private _cache?: LRUCache<string, PayloadWithMeta
|
|
73
|
+
private _cache?: LRUCache<string, WithStorageMeta<PayloadWithMeta>>
|
|
46
74
|
|
|
47
75
|
get bodyHashIndex() {
|
|
48
76
|
this._bodyHashIndex = this._bodyHashIndex ?? new LRUCache<string, string>({ max: this.max })
|
|
@@ -50,7 +78,7 @@ export class MemoryArchivist<
|
|
|
50
78
|
}
|
|
51
79
|
|
|
52
80
|
get cache() {
|
|
53
|
-
this._cache = this._cache ?? new LRUCache<string, PayloadWithMeta
|
|
81
|
+
this._cache = this._cache ?? new LRUCache<string, WithStorageMeta<PayloadWithMeta>>({ max: this.max })
|
|
54
82
|
return this._cache
|
|
55
83
|
}
|
|
56
84
|
|
|
@@ -70,7 +98,8 @@ export class MemoryArchivist<
|
|
|
70
98
|
}
|
|
71
99
|
|
|
72
100
|
protected override async allHandler(): Promise<PayloadWithMeta[]> {
|
|
73
|
-
|
|
101
|
+
const all = compact(await Promise.all(this.cache.dump().map((value) => value[1].value)))
|
|
102
|
+
return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))
|
|
74
103
|
}
|
|
75
104
|
|
|
76
105
|
protected override clearHandler(): void | Promise<void> {
|
|
@@ -115,7 +144,7 @@ export class MemoryArchivist<
|
|
|
115
144
|
if (resolvedHash !== hash && !result) {
|
|
116
145
|
throw new Error('Missing referenced payload')
|
|
117
146
|
}
|
|
118
|
-
return result
|
|
147
|
+
return removeStorageMeta(result)
|
|
119
148
|
}),
|
|
120
149
|
)
|
|
121
150
|
}
|
|
@@ -131,9 +160,10 @@ export class MemoryArchivist<
|
|
|
131
160
|
return insertedPayloads
|
|
132
161
|
}
|
|
133
162
|
|
|
134
|
-
private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string): PayloadWithMeta {
|
|
135
|
-
|
|
136
|
-
this.
|
|
163
|
+
private insertPayloadIntoCache(payload: PayloadWithMeta, hash: string, index = 0): PayloadWithMeta {
|
|
164
|
+
const withMeta = addStorageMeta(payload, index)
|
|
165
|
+
this.cache.set(hash, withMeta)
|
|
166
|
+
this.bodyHashIndex.set(withMeta.$hash, hash)
|
|
137
167
|
return payload
|
|
138
168
|
}
|
|
139
169
|
}
|