@xyo-network/archivist-memory 3.6.0-rc.4 → 3.6.0-rc.5
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.
|
@@ -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;;sEAGlB;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;cAKpD,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;
|
|
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;;sEAGlB;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;cAKpD,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
|
@@ -93,7 +93,7 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
93
93
|
return key;
|
|
94
94
|
}
|
|
95
95
|
}))).filter(exists);
|
|
96
|
-
|
|
96
|
+
this.rebuildDataHashIndex();
|
|
97
97
|
return deletedHashes;
|
|
98
98
|
}
|
|
99
99
|
getHandler(hashes) {
|
|
@@ -107,23 +107,20 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
107
107
|
}).filter(exists);
|
|
108
108
|
}
|
|
109
109
|
async insertHandler(payloads) {
|
|
110
|
-
const
|
|
111
|
-
const insertedPayloads = await Promise.all(
|
|
112
|
-
return this.cache.get(
|
|
110
|
+
const payloadsWithMeta = (await PayloadBuilder.addStorageMeta(payloads)).sort(PayloadBuilder.compareStorageMeta);
|
|
111
|
+
const insertedPayloads = await Promise.all(payloadsWithMeta.map(async (payload) => {
|
|
112
|
+
return this.cache.get(payload._hash) ?? await this.insertPayloadIntoCache(payload);
|
|
113
113
|
}));
|
|
114
114
|
return insertedPayloads;
|
|
115
115
|
}
|
|
116
116
|
async nextHandler(options) {
|
|
117
|
-
this.logger.warn("nextHandler:start", options);
|
|
118
117
|
const { limit, cursor, order } = options ?? {};
|
|
119
118
|
let all = await this.allHandler();
|
|
120
119
|
if (order === "desc") {
|
|
121
120
|
all = all.reverse();
|
|
122
121
|
}
|
|
123
122
|
const startIndex = cursor ? _MemoryArchivist.findIndexFromCursor(all, cursor) + 1 : 0;
|
|
124
|
-
this.logger.warn("nextHandler:startIndex", startIndex);
|
|
125
123
|
const result = all.slice(startIndex, limit ? startIndex + limit : void 0);
|
|
126
|
-
this.logger.warn("nextHandler:result", result);
|
|
127
124
|
return result;
|
|
128
125
|
}
|
|
129
126
|
async insertPayloadIntoCache(payload) {
|
|
@@ -132,14 +129,13 @@ var MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
|
|
|
132
129
|
this.dataHashIndex.set(withMeta._dataHash, withMeta._hash);
|
|
133
130
|
return withMeta;
|
|
134
131
|
}
|
|
135
|
-
|
|
132
|
+
rebuildDataHashIndex() {
|
|
136
133
|
this._dataHashIndex = new LRUCache({
|
|
137
134
|
max: this.max
|
|
138
135
|
});
|
|
139
|
-
const
|
|
140
|
-
for (const
|
|
141
|
-
|
|
142
|
-
this.dataHashIndex.set(dataHash, hash);
|
|
136
|
+
const payloads = this.cache.dump().map(([, item]) => item.value);
|
|
137
|
+
for (const payload of payloads) {
|
|
138
|
+
this.dataHashIndex.set(payload._dataHash, payload._hash);
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
141
|
};
|
|
@@ -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 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 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","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","payloadsWithMeta","addStorageMeta","sort","compareStorageMeta","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.5",
|
|
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.14",
|
|
33
|
+
"@xylabs/exists": "^4.4.14",
|
|
34
|
+
"@xylabs/hex": "^4.4.14",
|
|
35
|
+
"@xylabs/object": "^4.4.14",
|
|
36
|
+
"@xylabs/promise": "^4.4.14",
|
|
37
|
+
"@xyo-network/archivist-abstract": "^3.6.0-rc.5",
|
|
38
|
+
"@xyo-network/archivist-model": "^3.6.0-rc.5",
|
|
39
|
+
"@xyo-network/boundwitness-model": "^3.6.0-rc.5",
|
|
40
|
+
"@xyo-network/module-model": "^3.6.0-rc.5",
|
|
41
|
+
"@xyo-network/payload-builder": "^3.6.0-rc.5",
|
|
42
|
+
"@xyo-network/payload-model": "^3.6.0-rc.5",
|
|
43
43
|
"lru-cache": "^11.0.2"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
+
"@xylabs/delay": "^4.4.14",
|
|
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.14",
|
|
50
|
+
"@xyo-network/account": "^3.6.0-rc.5",
|
|
50
51
|
"typescript": "^5.7.2",
|
|
51
52
|
"vitest": "^2.1.8"
|
|
52
53
|
},
|
package/src/MemoryArchivist.ts
CHANGED
|
@@ -124,7 +124,7 @@ export class MemoryArchivist<
|
|
|
124
124
|
}
|
|
125
125
|
})))
|
|
126
126
|
.filter(exists)
|
|
127
|
-
|
|
127
|
+
this.rebuildDataHashIndex()
|
|
128
128
|
return deletedHashes
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -140,16 +140,15 @@ export class MemoryArchivist<
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
protected override async insertHandler(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {
|
|
143
|
-
const
|
|
144
|
-
const insertedPayloads = await Promise.all(
|
|
145
|
-
return this.cache.get(
|
|
143
|
+
const payloadsWithMeta = (await PayloadBuilder.addStorageMeta(payloads)).sort(PayloadBuilder.compareStorageMeta)
|
|
144
|
+
const insertedPayloads = await Promise.all(payloadsWithMeta.map(async (payload) => {
|
|
145
|
+
return this.cache.get(payload._hash) ?? await this.insertPayloadIntoCache(payload)
|
|
146
146
|
}))
|
|
147
147
|
|
|
148
148
|
return insertedPayloads
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {
|
|
152
|
-
this.logger.warn('nextHandler:start', options)
|
|
153
152
|
const {
|
|
154
153
|
limit, cursor, order,
|
|
155
154
|
} = options ?? {}
|
|
@@ -160,9 +159,7 @@ export class MemoryArchivist<
|
|
|
160
159
|
const startIndex = cursor
|
|
161
160
|
? MemoryArchivist.findIndexFromCursor(all, cursor) + 1
|
|
162
161
|
: 0
|
|
163
|
-
this.logger.warn('nextHandler:startIndex', startIndex)
|
|
164
162
|
const result = all.slice(startIndex, limit ? startIndex + limit : undefined)
|
|
165
|
-
this.logger.warn('nextHandler:result', result)
|
|
166
163
|
return result
|
|
167
164
|
}
|
|
168
165
|
|
|
@@ -173,12 +170,11 @@ export class MemoryArchivist<
|
|
|
173
170
|
return withMeta
|
|
174
171
|
}
|
|
175
172
|
|
|
176
|
-
private
|
|
173
|
+
private rebuildDataHashIndex() {
|
|
177
174
|
this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })
|
|
178
|
-
const
|
|
179
|
-
for (const
|
|
180
|
-
|
|
181
|
-
this.dataHashIndex.set(dataHash, hash)
|
|
175
|
+
const payloads = this.cache.dump().map(([, item]) => item.value)
|
|
176
|
+
for (const payload of payloads) {
|
|
177
|
+
this.dataHashIndex.set(payload._dataHash, payload._hash)
|
|
182
178
|
}
|
|
183
179
|
}
|
|
184
180
|
}
|