@xyo-network/archivist-memory 3.6.0-rc.4 → 3.6.0-rc.6
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.
|
@@ -19,9 +19,9 @@ export declare class MemoryArchivist<TParams extends MemoryArchivistParams<AnyCo
|
|
|
19
19
|
private _cache?;
|
|
20
20
|
private _dataHashIndex?;
|
|
21
21
|
get queries(): string[];
|
|
22
|
-
protected get cache(): LRUCache<Lowercase<string>, WithStorageMeta<{
|
|
23
|
-
schema:
|
|
24
|
-
}
|
|
22
|
+
protected get cache(): LRUCache<Lowercase<string>, WithStorageMeta<import("@xyo-network/payload-model").DeepRestrictToStringKeys<{
|
|
23
|
+
schema: Schema;
|
|
24
|
+
}>>, unknown>;
|
|
25
25
|
protected get dataHashIndex(): LRUCache<Lowercase<string>, Lowercase<string>, unknown>;
|
|
26
26
|
protected get max(): number;
|
|
27
27
|
private static findIndexFromCursor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAO,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAa,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,wBAAwB,EACxB,oBAAoB,EAEpB,2BAA2B,EAC5B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EACL,eAAe,EAAmB,cAAc,EAAE,YAAY,EAC/D,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,OAAO,EAAE,MAAM,EAAE,eAAe,EACjC,MAAM,4BAA4B,CAAA;AACnC,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,CAAC,OAAO,SAAS,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,eAAe,CAC5I,cAAc,CACZ;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,EACD,OAAO,CACR,EACD,OAAO,SAAS,MAAM,GAAG,OAAO,GAAG,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAC3F,CAAA;AAED,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,CAC1B,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAEtE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,2BAA2B,EAAE,cAAc;IACtD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAwD;IACxG,gBAAyB,mBAAmB,EAAE,MAAM,CAA8B;IAElF,OAAO,CAAC,MAAM,CAAC,CAA0C;IACzD,OAAO,CAAC,cAAc,CAAC,CAAsB;IAE7C,IAAa,OAAO,aAUnB;IAED,SAAS,KAAK,KAAK;;
|
|
1
|
+
{"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAO,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAa,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAIL,eAAe,EAIf,wBAAwB,EACxB,oBAAoB,EAEpB,2BAA2B,EAC5B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EACL,eAAe,EAAmB,cAAc,EAAE,YAAY,EAC/D,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,OAAO,EAAE,MAAM,EAAE,eAAe,EACjC,MAAM,4BAA4B,CAAA;AACnC,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,CAAC,OAAO,SAAS,OAAO,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,SAAS,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI,eAAe,CAC5I,cAAc,CACZ;IACE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,EACD,OAAO,CACR,EACD,OAAO,SAAS,MAAM,GAAG,OAAO,GAAG,2BAA2B,GAAG,eAAe,CAAC,QAAQ,CAAC,CAC3F,CAAA;AAED,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,CAC1B,OAAO,SAAS,qBAAqB,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,EACrG,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CAEtE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAC7C,YAAW,2BAA2B,EAAE,cAAc;IACtD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAwD;IACxG,gBAAyB,mBAAmB,EAAE,MAAM,CAA8B;IAElF,OAAO,CAAC,MAAM,CAAC,CAA0C;IACzD,OAAO,CAAC,cAAc,CAAC,CAAsB;IAE7C,IAAa,OAAO,aAUnB;IAED,SAAS,KAAK,KAAK;;kBAGlB;IAED,SAAS,KAAK,aAAa,4DAG1B;IAED,SAAS,KAAK,GAAG,WAEhB;IAED,OAAO,CAAC,MAAM,CAAC,mBAAmB;cAQf,UAAU,IAAI,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAIpD,YAAY,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAM9B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAaxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;cAepD,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAW5D,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cASvE,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YAe3F,sBAAsB;IAOpC,OAAO,CAAC,oBAAoB;CAO7B"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -63,8 +63,9 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
63
63
|
return index;
|
|
64
64
|
}
|
|
65
65
|
allHandler() {
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
return [
|
|
67
|
+
...this.cache.values()
|
|
68
|
+
].filter(exists).sort(PayloadBuilder.compareStorageMeta);
|
|
68
69
|
}
|
|
69
70
|
clearHandler() {
|
|
70
71
|
this.cache.clear();
|
|
@@ -93,7 +94,7 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
93
94
|
return key;
|
|
94
95
|
}
|
|
95
96
|
}))).filter(exists);
|
|
96
|
-
|
|
97
|
+
this.rebuildDataHashIndex();
|
|
97
98
|
return deletedHashes;
|
|
98
99
|
}
|
|
99
100
|
getHandler(hashes) {
|
|
@@ -107,23 +108,20 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
107
108
|
}).filter(exists);
|
|
108
109
|
}
|
|
109
110
|
async insertHandler(payloads) {
|
|
110
|
-
const
|
|
111
|
-
const insertedPayloads = await Promise.all(
|
|
112
|
-
return this.cache.get(
|
|
111
|
+
const payloadsWithMeta = (await PayloadBuilder.addStorageMeta(payloads)).sort(PayloadBuilder.compareStorageMeta);
|
|
112
|
+
const insertedPayloads = await Promise.all(payloadsWithMeta.map(async (payload) => {
|
|
113
|
+
return this.cache.get(payload._hash) ?? await this.insertPayloadIntoCache(payload);
|
|
113
114
|
}));
|
|
114
115
|
return insertedPayloads;
|
|
115
116
|
}
|
|
116
117
|
async nextHandler(options) {
|
|
117
|
-
this.logger.warn("nextHandler:start", options);
|
|
118
118
|
const { limit, cursor, order } = options ?? {};
|
|
119
119
|
let all = await this.allHandler();
|
|
120
120
|
if (order === "desc") {
|
|
121
121
|
all = all.reverse();
|
|
122
122
|
}
|
|
123
123
|
const startIndex = cursor ? _MemoryArchivist.findIndexFromCursor(all, cursor) + 1 : 0;
|
|
124
|
-
this.logger.warn("nextHandler:startIndex", startIndex);
|
|
125
124
|
const result = all.slice(startIndex, limit ? startIndex + limit : void 0);
|
|
126
|
-
this.logger.warn("nextHandler:result", result);
|
|
127
125
|
return result;
|
|
128
126
|
}
|
|
129
127
|
async insertPayloadIntoCache(payload) {
|
|
@@ -132,14 +130,13 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
132
130
|
this.dataHashIndex.set(withMeta._dataHash, withMeta._hash);
|
|
133
131
|
return withMeta;
|
|
134
132
|
}
|
|
135
|
-
|
|
133
|
+
rebuildDataHashIndex() {
|
|
136
134
|
this._dataHashIndex = new LRUCache({
|
|
137
135
|
max: this.max
|
|
138
136
|
});
|
|
139
|
-
const
|
|
140
|
-
for (const
|
|
141
|
-
|
|
142
|
-
this.dataHashIndex.set(dataHash, hash);
|
|
137
|
+
const payloads = this.cache.dump().map(([, item]) => item.value);
|
|
138
|
+
for (const payload of payloads) {
|
|
139
|
+
this.dataHashIndex.set(payload._dataHash, payload._hash);
|
|
143
140
|
}
|
|
144
141
|
}
|
|
145
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash, Hex } from '@xylabs/hex'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, WithStorageMeta,\n} 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<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : 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 AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MemoryArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MemoryArchivistConfigSchema\n\n private _cache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _dataHashIndex?: LRUCache<Hash, Hash>\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected get cache() {\n this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({ max: this.max })\n return this._cache\n }\n\n protected get dataHashIndex() {\n this._dataHashIndex = this._dataHashIndex ?? new LRUCache<Hash, Hash>({ max: this.max })\n return this._dataHashIndex\n }\n\n protected get max() {\n return this.config?.max ?? 10_000\n }\n\n private static findIndexFromCursor(payloads: WithStorageMeta[], cursor: Hex) {\n const index = payloads.findIndex(({ _sequence }) => _sequence === cursor)\n if (index === -1) {\n return Infinity // move to the end\n }\n return index\n }\n\n protected override allHandler(): Promisable<WithStorageMeta<Payload>[]> {\n const all = this.cache.dump().map(([, item]) => item.value).filter(exists)\n return PayloadBuilder.sortByStorageMeta(all)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.clear()\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes: Hash[] = (await Promise.all(this.cache\n .dump()\n .map(async ([key, item]) => {\n const itemValueDataHash = await PayloadBuilder.dataHash(item.value)\n if (hashes.includes(key) || hashes.includes(itemValueDataHash)) {\n this.cache.delete(key)\n return key\n }\n })))\n .filter(exists)\n await this.rebuildDataHashIndex()\n return deletedHashes\n }\n\n protected override getHandler(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return hashes.map((hash) => {\n const resolvedHash = this.dataHashIndex.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 }).filter(exists)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = await Promise.all(pairs.map(async ([payload, hash]) => {\n return this.cache.get(hash) ?? await this.insertPayloadIntoCache(payload)\n }))\n\n return insertedPayloads\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n this.logger.warn('nextHandler:start', options)\n const {\n limit, cursor, order,\n } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const startIndex = cursor\n ? MemoryArchivist.findIndexFromCursor(all, cursor) + 1\n : 0\n this.logger.warn('nextHandler:startIndex', startIndex)\n const result = all.slice(startIndex, limit ? startIndex + limit : undefined)\n this.logger.warn('nextHandler:result', result)\n return result\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<WithStorageMeta<Payload>> {\n const withMeta = await PayloadBuilder.addStorageMeta(payload)\n this.cache.set(withMeta._hash, withMeta)\n this.dataHashIndex.set(withMeta._dataHash, withMeta._hash)\n return withMeta\n }\n\n private async rebuildDataHashIndex() {\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n const pairs = this.cache.dump()\n for (const [hash, payload] of pairs) {\n const dataHash = await PayloadBuilder.dataHash(payload.value)\n this.dataHashIndex.set(dataHash, hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","defaultConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","findIndexFromCursor","payloads","cursor","index","findIndex","_sequence","Infinity","allHandler","all","dump","map","item","value","filter","exists","PayloadBuilder","sortByStorageMeta","clearHandler","clear","emit","mod","commitHandler","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","fulfilled","result","deleteHandler","hashes","deletedHashes","key","itemValueDataHash","dataHash","includes","delete","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","hashPairs","insertedPayloads","payload","insertPayloadIntoCache","nextHandler","options","logger","warn","limit","order","reverse","startIndex","slice","undefined","withMeta","addStorageMeta","set","_hash","_dataHash"]}
|
|
1
|
+
{"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash, Hex } from '@xylabs/hex'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport {\n AnyConfigSchema, creatableModule, ModuleInstance, ModuleParams,\n} from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, WithStorageMeta,\n} 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<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : 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 AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MemoryArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MemoryArchivistConfigSchema\n\n private _cache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _dataHashIndex?: LRUCache<Hash, Hash>\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n protected get cache() {\n this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({ max: this.max })\n return this._cache\n }\n\n protected get dataHashIndex() {\n this._dataHashIndex = this._dataHashIndex ?? new LRUCache<Hash, Hash>({ max: this.max })\n return this._dataHashIndex\n }\n\n protected get max() {\n return this.config?.max ?? 10_000\n }\n\n private static findIndexFromCursor(payloads: WithStorageMeta[], cursor: Hex) {\n const index = payloads.findIndex(({ _sequence }) => _sequence === cursor)\n if (index === -1) {\n return Infinity // move to the end\n }\n return index\n }\n\n protected override allHandler(): Promisable<WithStorageMeta<Payload>[]> {\n return [...this.cache.values()].filter(exists).sort(PayloadBuilder.compareStorageMeta)\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.clear()\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? [])?.map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n const deletedHashes: Hash[] = (await Promise.all(this.cache\n .dump()\n .map(async ([key, item]) => {\n const itemValueDataHash = await PayloadBuilder.dataHash(item.value)\n if (hashes.includes(key) || hashes.includes(itemValueDataHash)) {\n this.cache.delete(key)\n return key\n }\n })))\n .filter(exists)\n this.rebuildDataHashIndex()\n return deletedHashes\n }\n\n protected override getHandler(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return hashes.map((hash) => {\n const resolvedHash = this.dataHashIndex.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 }).filter(exists)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {\n const payloadsWithMeta = (await PayloadBuilder.addStorageMeta(payloads)).sort(PayloadBuilder.compareStorageMeta)\n const insertedPayloads = await Promise.all(payloadsWithMeta.map(async (payload) => {\n return this.cache.get(payload._hash) ?? await this.insertPayloadIntoCache(payload)\n }))\n\n return insertedPayloads\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n const {\n limit, cursor, order,\n } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const startIndex = cursor\n ? MemoryArchivist.findIndexFromCursor(all, cursor) + 1\n : 0\n const result = all.slice(startIndex, limit ? startIndex + limit : undefined)\n return result\n }\n\n private async insertPayloadIntoCache(payload: Payload): Promise<WithStorageMeta<Payload>> {\n const withMeta = await PayloadBuilder.addStorageMeta(payload)\n this.cache.set(withMeta._hash, withMeta)\n this.dataHashIndex.set(withMeta._dataHash, withMeta._hash)\n return withMeta\n }\n\n private rebuildDataHashIndex() {\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n const payloads = this.cache.dump().map(([, item]) => item.value)\n for (const payload of payloads) {\n this.dataHashIndex.set(payload._dataHash, payload._hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","fulfilled","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","defaultConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","findIndexFromCursor","payloads","cursor","index","findIndex","_sequence","Infinity","allHandler","values","filter","exists","sort","PayloadBuilder","compareStorageMeta","clearHandler","clear","emit","mod","commitHandler","assertEx","settled","Promise","allSettled","Object","parentArchivists","commit","map","parent","queryPayload","schema","query","bindQuery","fulfilled","result","value","deleteHandler","hashes","deletedHashes","all","dump","key","item","itemValueDataHash","dataHash","includes","delete","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","payloadsWithMeta","addStorageMeta","insertedPayloads","payload","_hash","insertPayloadIntoCache","nextHandler","options","limit","order","reverse","startIndex","slice","undefined","withMeta","set","_dataHash"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-memory",
|
|
3
|
-
"version": "3.6.0-rc.
|
|
3
|
+
"version": "3.6.0-rc.6",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,24 +29,25 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/assert": "^4.4.
|
|
33
|
-
"@xylabs/exists": "^4.4.
|
|
34
|
-
"@xylabs/hex": "^4.4.
|
|
35
|
-
"@xylabs/object": "^4.4.
|
|
36
|
-
"@xylabs/promise": "^4.4.
|
|
37
|
-
"@xyo-network/archivist-abstract": "^3.6.0-rc.
|
|
38
|
-
"@xyo-network/archivist-model": "^3.6.0-rc.
|
|
39
|
-
"@xyo-network/boundwitness-model": "^3.6.0-rc.
|
|
40
|
-
"@xyo-network/module-model": "^3.6.0-rc.
|
|
41
|
-
"@xyo-network/payload-builder": "^3.6.0-rc.
|
|
42
|
-
"@xyo-network/payload-model": "^3.6.0-rc.
|
|
32
|
+
"@xylabs/assert": "^4.4.15",
|
|
33
|
+
"@xylabs/exists": "^4.4.15",
|
|
34
|
+
"@xylabs/hex": "^4.4.15",
|
|
35
|
+
"@xylabs/object": "^4.4.15",
|
|
36
|
+
"@xylabs/promise": "^4.4.15",
|
|
37
|
+
"@xyo-network/archivist-abstract": "^3.6.0-rc.6",
|
|
38
|
+
"@xyo-network/archivist-model": "^3.6.0-rc.6",
|
|
39
|
+
"@xyo-network/boundwitness-model": "^3.6.0-rc.6",
|
|
40
|
+
"@xyo-network/module-model": "^3.6.0-rc.6",
|
|
41
|
+
"@xyo-network/payload-builder": "^3.6.0-rc.6",
|
|
42
|
+
"@xyo-network/payload-model": "^3.6.0-rc.6",
|
|
43
43
|
"lru-cache": "^11.0.2"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
+
"@xylabs/delay": "^4.4.15",
|
|
46
47
|
"@xylabs/ts-scripts-yarn3": "^4.2.4",
|
|
47
48
|
"@xylabs/tsconfig": "^4.2.4",
|
|
48
|
-
"@xylabs/vitest-extended": "^4.4.
|
|
49
|
-
"@xyo-network/account": "^3.6.0-rc.
|
|
49
|
+
"@xylabs/vitest-extended": "^4.4.15",
|
|
50
|
+
"@xyo-network/account": "^3.6.0-rc.6",
|
|
50
51
|
"typescript": "^5.7.2",
|
|
51
52
|
"vitest": "^2.1.8"
|
|
52
53
|
},
|
package/src/MemoryArchivist.ts
CHANGED
|
@@ -90,8 +90,7 @@ export class MemoryArchivist<
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
protected override allHandler(): Promisable<WithStorageMeta<Payload>[]> {
|
|
93
|
-
|
|
94
|
-
return PayloadBuilder.sortByStorageMeta(all)
|
|
93
|
+
return [...this.cache.values()].filter(exists).sort(PayloadBuilder.compareStorageMeta)
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
protected override clearHandler(): void | Promise<void> {
|
|
@@ -124,7 +123,7 @@ export class MemoryArchivist<
|
|
|
124
123
|
}
|
|
125
124
|
})))
|
|
126
125
|
.filter(exists)
|
|
127
|
-
|
|
126
|
+
this.rebuildDataHashIndex()
|
|
128
127
|
return deletedHashes
|
|
129
128
|
}
|
|
130
129
|
|
|
@@ -140,16 +139,15 @@ export class MemoryArchivist<
|
|
|
140
139
|
}
|
|
141
140
|
|
|
142
141
|
protected override async insertHandler(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {
|
|
143
|
-
const
|
|
144
|
-
const insertedPayloads = await Promise.all(
|
|
145
|
-
return this.cache.get(
|
|
142
|
+
const payloadsWithMeta = (await PayloadBuilder.addStorageMeta(payloads)).sort(PayloadBuilder.compareStorageMeta)
|
|
143
|
+
const insertedPayloads = await Promise.all(payloadsWithMeta.map(async (payload) => {
|
|
144
|
+
return this.cache.get(payload._hash) ?? await this.insertPayloadIntoCache(payload)
|
|
146
145
|
}))
|
|
147
146
|
|
|
148
147
|
return insertedPayloads
|
|
149
148
|
}
|
|
150
149
|
|
|
151
150
|
protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {
|
|
152
|
-
this.logger.warn('nextHandler:start', options)
|
|
153
151
|
const {
|
|
154
152
|
limit, cursor, order,
|
|
155
153
|
} = options ?? {}
|
|
@@ -160,9 +158,7 @@ export class MemoryArchivist<
|
|
|
160
158
|
const startIndex = cursor
|
|
161
159
|
? MemoryArchivist.findIndexFromCursor(all, cursor) + 1
|
|
162
160
|
: 0
|
|
163
|
-
this.logger.warn('nextHandler:startIndex', startIndex)
|
|
164
161
|
const result = all.slice(startIndex, limit ? startIndex + limit : undefined)
|
|
165
|
-
this.logger.warn('nextHandler:result', result)
|
|
166
162
|
return result
|
|
167
163
|
}
|
|
168
164
|
|
|
@@ -173,12 +169,11 @@ export class MemoryArchivist<
|
|
|
173
169
|
return withMeta
|
|
174
170
|
}
|
|
175
171
|
|
|
176
|
-
private
|
|
172
|
+
private rebuildDataHashIndex() {
|
|
177
173
|
this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })
|
|
178
|
-
const
|
|
179
|
-
for (const
|
|
180
|
-
|
|
181
|
-
this.dataHashIndex.set(dataHash, hash)
|
|
174
|
+
const payloads = this.cache.dump().map(([, item]) => item.value)
|
|
175
|
+
for (const payload of payloads) {
|
|
176
|
+
this.dataHashIndex.set(payload._dataHash, payload._hash)
|
|
182
177
|
}
|
|
183
178
|
}
|
|
184
179
|
}
|