@xyo-network/archivist-memory 2.95.9 → 2.96.0

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.
@@ -128,7 +128,7 @@ var MemoryArchivist = class extends import_archivist_abstract.AbstractArchivist
128
128
  }));
129
129
  }
130
130
  async insertHandler(payloads) {
131
- const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
131
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads, false);
132
132
  const insertedPayloads = pairs.map(([payload, hash], index) => {
133
133
  return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index);
134
134
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads, false)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","creatableModule"]}
@@ -103,7 +103,7 @@ var MemoryArchivist = class extends AbstractArchivist {
103
103
  }));
104
104
  }
105
105
  async insertHandler(payloads) {
106
- const pairs = await PayloadBuilder.hashPairs(payloads);
106
+ const pairs = await PayloadBuilder.hashPairs(payloads, false);
107
107
  const insertedPayloads = pairs.map(([payload, hash], index) => {
108
108
  return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index);
109
109
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","creatableModule"]}
1
+ {"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads, false)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","configSchemas","ArchivistConfigSchema","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","creatableModule"]}
@@ -129,7 +129,7 @@ var _MemoryArchivist = class _MemoryArchivist extends import_archivist_abstract.
129
129
  }));
130
130
  }
131
131
  async insertHandler(payloads) {
132
- const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads);
132
+ const pairs = await import_payload_builder.PayloadBuilder.hashPairs(payloads, false);
133
133
  const insertedPayloads = pairs.map(([payload, hash], index) => {
134
134
  return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index);
135
135
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/MemoryArchivist.ts"],"sourcesContent":["export * from './MemoryArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads, false)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
@@ -104,7 +104,7 @@ var _MemoryArchivist = class _MemoryArchivist extends AbstractArchivist {
104
104
  }));
105
105
  }
106
106
  async insertHandler(payloads) {
107
- const pairs = await PayloadBuilder.hashPairs(payloads);
107
+ const pairs = await PayloadBuilder.hashPairs(payloads, false);
108
108
  const insertedPayloads = pairs.map(([payload, hash], index) => {
109
109
  return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index);
110
110
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
1
+ {"version":3,"sources":["../../src/MemoryArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { EmptyObject, WithAdditional } from '@xylabs/object'\nimport { fulfilled, Promisable } from '@xylabs/promise'\nimport { AbstractArchivist, addStorageMeta, removeStorageMeta, sortByStorageMeta, WithStorageMeta } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistConfig,\n ArchivistConfigSchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\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, Schema, 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<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{\n static override configSchemas = [MemoryArchivistConfigSchema, ArchivistConfigSchema]\n\n private _cache?: LRUCache<Hash, WithStorageMeta<PayloadWithMeta>>\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<PayloadWithMeta>>({ 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 protected override allHandler(): Promisable<PayloadWithMeta[]> {\n const all = compact(this.cache.dump().map(([, item]) => item.value))\n return sortByStorageMeta(all).map((payload) => removeStorageMeta(payload))\n }\n\n protected override clearHandler(): void | Promise<void> {\n this.cache.clear()\n this.dataHashIndex.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.parentArchivists()).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 deleteHandler(hashes: Hash[]): Promisable<Hash[]> {\n const deletedHashes: Hash[] = this.cache\n .dump()\n .map(([key, item]) => {\n if (hashes.includes(key) || hashes.includes(item.value.$hash)) {\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<PayloadWithMeta[]> {\n return compact(\n 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 removeStorageMeta(result)\n }),\n )\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {\n const pairs = await PayloadBuilder.hashPairs(payloads, false)\n const insertedPayloads = pairs.map(([payload, hash], index) => {\n return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)\n })\n\n return removeStorageMeta(insertedPayloads)\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<PayloadWithMeta[]> {\n const { limit, offset, order } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const allPairs = await PayloadBuilder.hashPairs(all)\n const startIndex = offset ? allPairs.findIndex(([, hash]) => hash === offset) + 1 : 0\n return allPairs.slice(startIndex, limit ? startIndex + limit : undefined).map(([payload]) => payload)\n }\n\n private insertPayloadIntoCache(payload: PayloadWithMeta, hash: Hash, index = 0): WithStorageMeta<PayloadWithMeta> {\n const withMeta = addStorageMeta(payload, index)\n this.cache.set(hash, withMeta)\n this.dataHashIndex.set(withMeta.$hash, hash)\n return withMeta\n }\n\n private 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 this.dataHashIndex.set(payload.value.$hash, hash)\n }\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","fulfilled","AbstractArchivist","addStorageMeta","removeStorageMeta","sortByStorageMeta","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistCommitQuerySchema","ArchivistConfigSchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","ArchivistNextQuerySchema","creatableModule","PayloadBuilder","LRUCache","MemoryArchivistConfigSchema","MemoryArchivist","AbstractArchivist","_cache","_dataHashIndex","queries","ArchivistAllQuerySchema","ArchivistDeleteQuerySchema","ArchivistClearQuerySchema","ArchivistInsertQuerySchema","ArchivistCommitQuerySchema","ArchivistNextQuerySchema","cache","LRUCache","max","dataHashIndex","config","allHandler","all","compact","dump","map","item","value","sortByStorageMeta","payload","removeStorageMeta","clearHandler","clear","emit","module","commitHandler","payloads","assertEx","settled","Promise","allSettled","Object","values","parentArchivists","commit","parent","queryPayload","schema","query","bindQuery","_a","filter","fulfilled","result","deleteHandler","hashes","deletedHashes","key","includes","$hash","delete","exists","rebuildDataHashIndex","getHandler","hash","resolvedHash","get","Error","insertHandler","pairs","PayloadBuilder","hashPairs","insertedPayloads","index","insertPayloadIntoCache","nextHandler","options","limit","offset","order","reverse","allPairs","startIndex","findIndex","slice","undefined","withMeta","addStorageMeta","set","configSchemas","ArchivistConfigSchema","creatableModule"]}
package/package.json CHANGED
@@ -16,18 +16,18 @@
16
16
  "@xylabs/lodash": "^3.1.8",
17
17
  "@xylabs/object": "^3.1.8",
18
18
  "@xylabs/promise": "^3.1.8",
19
- "@xyo-network/archivist-abstract": "~2.95.9",
20
- "@xyo-network/archivist-model": "~2.95.9",
21
- "@xyo-network/boundwitness-model": "~2.95.9",
22
- "@xyo-network/module-model": "~2.95.9",
23
- "@xyo-network/payload-builder": "~2.95.9",
24
- "@xyo-network/payload-model": "~2.95.9",
19
+ "@xyo-network/archivist-abstract": "~2.96.0",
20
+ "@xyo-network/archivist-model": "~2.96.0",
21
+ "@xyo-network/boundwitness-model": "~2.96.0",
22
+ "@xyo-network/module-model": "~2.96.0",
23
+ "@xyo-network/payload-builder": "~2.96.0",
24
+ "@xyo-network/payload-model": "~2.96.0",
25
25
  "lru-cache": "^10.2.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@xylabs/ts-scripts-yarn3": "^3.9.1",
29
29
  "@xylabs/tsconfig": "^3.9.1",
30
- "@xyo-network/account": "~2.95.9",
30
+ "@xyo-network/account": "~2.96.0",
31
31
  "typescript": "^5.4.5"
32
32
  },
33
33
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -69,6 +69,6 @@
69
69
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
70
70
  },
71
71
  "sideEffects": false,
72
- "version": "2.95.9",
72
+ "version": "2.96.0",
73
73
  "type": "module"
74
74
  }
@@ -135,7 +135,7 @@ export class MemoryArchivist<
135
135
  }
136
136
 
137
137
  protected override async insertHandler(payloads: Payload[]): Promise<PayloadWithMeta[]> {
138
- const pairs = await PayloadBuilder.hashPairs(payloads)
138
+ const pairs = await PayloadBuilder.hashPairs(payloads, false)
139
139
  const insertedPayloads = pairs.map(([payload, hash], index) => {
140
140
  return this.cache.get(hash) ?? this.insertPayloadIntoCache(payload, hash, index)
141
141
  })