@xyo-network/diviner-temporal-indexing-memory 2.104.0 → 2.104.1

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.
@@ -91,8 +91,7 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends impor
91
91
  * List of indexable schemas for this diviner
92
92
  */
93
93
  get indexableSchemas() {
94
- if (!this._indexableSchemas)
95
- this._indexableSchemas = Object.keys(this.schemaTransforms);
94
+ if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms);
96
95
  return this._indexableSchemas;
97
96
  }
98
97
  /**
@@ -100,8 +99,7 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends impor
100
99
  * from the payloads within a Bound Witness
101
100
  */
102
101
  get payloadTransformers() {
103
- if (!this._payloadTransformers)
104
- this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory.jsonPathToTransformersDictionary)(this.schemaTransforms);
102
+ if (!this._payloadTransformers) this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory.jsonPathToTransformersDictionary)(this.schemaTransforms);
105
103
  return this._payloadTransformers;
106
104
  }
107
105
  /**
@@ -181,8 +179,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_d
181
179
  * List of indexable schemas for this diviner
182
180
  */
183
181
  get indexableSchemas() {
184
- if (!this._indexableSchemas)
185
- this._indexableSchemas = Object.keys(this.schemaTransforms);
182
+ if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms);
186
183
  return this._indexableSchemas;
187
184
  }
188
185
  /**
@@ -190,8 +187,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_d
190
187
  * from the payloads within a Bound Witness
191
188
  */
192
189
  get payloadTransformers() {
193
- if (!this._payloadTransformers)
194
- this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory2.jsonPathToTransformersDictionary)(this.schemaTransforms);
190
+ if (!this._payloadTransformers) this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory2.jsonPathToTransformersDictionary)(this.schemaTransforms);
195
191
  return this._payloadTransformers;
196
192
  }
197
193
  /**
@@ -205,8 +201,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_d
205
201
  const builtPayloads = await Promise.all(payloads.map((payload) => import_payload_builder2.PayloadBuilder.build(payload)));
206
202
  const indexableBoundWitnesses = builtPayloads.filter(import_boundwitness_model.isBoundWitnessWithMeta).filter((bw) => (0, import_array.containsAll)(bw.payload_schemas, this.indexableSchemas));
207
203
  const indexablePayloads = builtPayloads.filter((p) => this.isIndexablePayload(p));
208
- if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0)
209
- return [];
204
+ if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0) return [];
210
205
  const [bwDictionary, payloadDictionary] = await Promise.all([
211
206
  import_payload_builder2.PayloadBuilder.toDataHashMap(indexableBoundWitnesses),
212
207
  import_payload_builder2.PayloadBuilder.toDataHashMap(indexablePayloads)
@@ -247,17 +242,17 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_d
247
242
  * @param x The candidate payload
248
243
  * @returns True if the payload is one indexed by this diviner, false otherwise
249
244
  */
250
- isIndexablePayload = (x) => {
245
+ isIndexablePayload = /* @__PURE__ */ __name((x) => {
251
246
  return (0, import_payload_model2.isAnyPayload)(x) && this.indexableSchemas.includes(x?.schema);
252
- };
247
+ }, "isIndexablePayload");
253
248
  /**
254
249
  * Identifies if a schema is one that is indexed by this diviner
255
250
  * @param schema The candidate schema
256
251
  * @returns True if this schema is one indexed by this diviner, false otherwise
257
252
  */
258
- isIndexableSchema = (schema) => {
253
+ isIndexableSchema = /* @__PURE__ */ __name((schema) => {
259
254
  return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
260
- };
255
+ }, "isIndexableSchema");
261
256
  };
262
257
 
263
258
  // src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts
@@ -326,21 +321,19 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_d
326
321
  }
327
322
  async divineHandler(payloads = []) {
328
323
  const lastState = payloads.find(import_module_model.isModuleState);
329
- if (!lastState)
330
- return [
331
- {
332
- schema: import_module_model.ModuleStateSchema,
333
- state: {
334
- offset: 0
335
- }
324
+ if (!lastState) return [
325
+ {
326
+ schema: import_module_model.ModuleStateSchema,
327
+ state: {
328
+ offset: 0
336
329
  }
337
- ];
330
+ }
331
+ ];
338
332
  const { offset } = lastState.state;
339
333
  const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
340
- if (!boundWitnessDiviner)
341
- return [
342
- lastState
343
- ];
334
+ if (!boundWitnessDiviner) return [
335
+ lastState
336
+ ];
344
337
  const query = await new import_payload_builder3.PayloadBuilder({
345
338
  schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema
346
339
  }).fields({
@@ -352,15 +345,13 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_d
352
345
  const batch = await boundWitnessDiviner.divine([
353
346
  query
354
347
  ]);
355
- if (batch.length === 0)
356
- return [
357
- lastState
358
- ];
348
+ if (batch.length === 0) return [
349
+ lastState
350
+ ];
359
351
  const sourceArchivist = await this.getArchivistForStore();
360
- if (!sourceArchivist)
361
- return [
362
- lastState
363
- ];
352
+ if (!sourceArchivist) return [
353
+ lastState
354
+ ];
364
355
  const bws = batch.filter(import_boundwitness_model2.isBoundWitnessWithMeta);
365
356
  const indexCandidates = (await Promise.all(bws.map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(import_exists2.exists).flat();
366
357
  const nextState = {
@@ -382,8 +373,7 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_d
382
373
  async getArchivistForStore() {
383
374
  const name = (0, import_assert2.assertEx)(this.config?.payloadStore?.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
384
375
  const mod = await this.resolve(name);
385
- if (!mod)
386
- return void 0;
376
+ if (!mod) return void 0;
387
377
  return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
388
378
  }
389
379
  /**
@@ -393,14 +383,12 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_d
393
383
  async getBoundWitnessDivinerForStore() {
394
384
  const name = (0, import_assert2.assertEx)(this.config?.payloadStore?.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
395
385
  const mod = await this.resolve(name);
396
- if (!mod)
397
- return;
386
+ if (!mod) return;
398
387
  return import_diviner_wrapper.DivinerWrapper.wrap(mod, this.account);
399
388
  }
400
389
  async getPayloadsInBoundWitness(bw, archivist) {
401
390
  const combinations = (0, import_payload_utils2.intraBoundwitnessSchemaCombinations)(bw, this.payload_schemas).flat();
402
- if (combinations.length === 0)
403
- return void 0;
391
+ if (combinations.length === 0) return void 0;
404
392
  const hashes = new Set(combinations);
405
393
  const indexCandidates = await archivist.get([
406
394
  ...hashes
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerConfigSchema\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { Hash } from '@xylabs/hex'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas = [...super.configSchemas, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static override readonly defaultConfigSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: Hash[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isAnyPayload, Payload, Schema } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\ntype IndexableHashes = [Hash, ...Hash[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const builtPayloads = await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload)))\n // If the Bound Witness does not contain all the required schemas do not index it\n const indexableBoundWitnesses = builtPayloads\n .filter(isBoundWitnessWithMeta)\n .filter((bw) => containsAll(bw.payload_schemas, this.indexableSchemas))\n // If the Payload is not one of the indexable schemas do not index it\n const indexablePayloads = builtPayloads.filter((p) => this.isIndexablePayload(p))\n // If there is nothing to index, return an empty array\n if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0) return []\n // Hash all the indexable data once\n const [bwDictionary, payloadDictionary] = await Promise.all([\n PayloadBuilder.toDataHashMap(indexableBoundWitnesses),\n PayloadBuilder.toDataHashMap(indexablePayloads),\n ])\n\n // Initialize the array for validIndexableTuples outside of the loop\n const validIndexableTuples: IndexableHashes[] = []\n\n // Iterate over each entry in bwDictionary\n for (const [bwHash, bw] of Object.entries(bwDictionary) as [Hash, BoundWitness][]) {\n // Find the combinations of payloads that satisfy the required schemas\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas)\n\n // Iterate over each combination\n for (const combination of combinations) {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n\n // If we found the right amount of indexable payloads (of the correct schema as checked\n // above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) {\n validIndexableTuples.push([bwHash, ...combination])\n }\n }\n }\n\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bwHash, ...sourcePayloadHashes]) => {\n const sourcePayloads = sourcePayloadHashes.map((hash) => payloadDictionary[hash])\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources: string[] = [bwHash, ...sourcePayloadHashes]\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: unknown) => {\n return isAnyPayload(x) && this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [\n ...super.configSchemas,\n TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema,\n ]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleIdentifier, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams, Payload, ModuleState | IndexCandidate> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const bws = batch.filter(isBoundWitnessWithMeta)\n const indexCandidates: IndexCandidate[] = (await Promise.all(bws.map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist))))\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: ModuleIdentifier = assertEx(\n this.config?.payloadStore?.archivist,\n () => `${moduleName}: Config for payloadStore.archivist not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore() {\n // It should be defined, so we'll error if it's not\n const name: ModuleIdentifier = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return\n // Return the wrapped diviner\n return DivinerWrapper.wrap<\n DivinerWrapper<\n BoundWitnessDiviner<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>,\n BoundWitnessDivinerQueryPayload,\n BoundWitness\n >\n >(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","configSchemas","TemporalIndexingDivinerConfigSchema","defaultConfigSchema","startHandler","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","defaultConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","defaultConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","builtPayloads","Promise","all","map","payload","PayloadBuilder","build","indexableBoundWitnesses","filter","isBoundWitnessWithMeta","bw","containsAll","payload_schemas","indexablePayloads","p","isIndexablePayload","length","bwDictionary","payloadDictionary","toDataHashMap","validIndexableTuples","bwHash","entries","combinations","intraBoundwitnessSchemaCombinations","combination","hash","exists","push","indexes","sourcePayloadHashes","sourcePayloads","indexFields","flatMap","transformers","schema","transform","sources","TemporalIndexingDivinerResultIndexSchema","fields","assign","flat","x","isAnyPayload","includes","isIndexableSchema","import_diviner_abstract","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","defaultConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_utils","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","defaultConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","bws","isBoundWitnessWithMeta","indexCandidates","Promise","all","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerConfigSchema\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { Hash } from '@xylabs/hex'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas = [...super.configSchemas, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static override readonly defaultConfigSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: Hash[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash } from '@xylabs/hex'\nimport { BoundWitness, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isAnyPayload, Payload, Schema } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\ntype IndexableHashes = [Hash, ...Hash[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const builtPayloads = await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload)))\n // If the Bound Witness does not contain all the required schemas do not index it\n const indexableBoundWitnesses = builtPayloads\n .filter(isBoundWitnessWithMeta)\n .filter((bw) => containsAll(bw.payload_schemas, this.indexableSchemas))\n // If the Payload is not one of the indexable schemas do not index it\n const indexablePayloads = builtPayloads.filter((p) => this.isIndexablePayload(p))\n // If there is nothing to index, return an empty array\n if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0) return []\n // Hash all the indexable data once\n const [bwDictionary, payloadDictionary] = await Promise.all([\n PayloadBuilder.toDataHashMap(indexableBoundWitnesses),\n PayloadBuilder.toDataHashMap(indexablePayloads),\n ])\n\n // Initialize the array for validIndexableTuples outside of the loop\n const validIndexableTuples: IndexableHashes[] = []\n\n // Iterate over each entry in bwDictionary\n for (const [bwHash, bw] of Object.entries(bwDictionary) as [Hash, BoundWitness][]) {\n // Find the combinations of payloads that satisfy the required schemas\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas)\n\n // Iterate over each combination\n for (const combination of combinations) {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n\n // If we found the right amount of indexable payloads (of the correct schema as checked\n // above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) {\n validIndexableTuples.push([bwHash, ...combination])\n }\n }\n }\n\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bwHash, ...sourcePayloadHashes]) => {\n const sourcePayloads = sourcePayloadHashes.map((hash) => payloadDictionary[hash])\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources: string[] = [bwHash, ...sourcePayloadHashes]\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: unknown) => {\n return isAnyPayload(x) && this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchemas: Schema[] = [\n ...super.configSchemas,\n TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema,\n ]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitnessWithMeta } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { BoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-abstract'\nimport { BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleIdentifier, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams, Payload, ModuleState | IndexCandidate> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override labels: Labels = {\n ...super.labels,\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const bws = batch.filter(isBoundWitnessWithMeta)\n const indexCandidates: IndexCandidate[] = (await Promise.all(bws.map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist))))\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: ModuleIdentifier = assertEx(\n this.config?.payloadStore?.archivist,\n () => `${moduleName}: Config for payloadStore.archivist not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore() {\n // It should be defined, so we'll error if it's not\n const name: ModuleIdentifier = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return\n // Return the wrapped diviner\n return DivinerWrapper.wrap<\n DivinerWrapper<\n BoundWitnessDiviner<BoundWitnessDivinerParams, BoundWitnessDivinerQueryPayload, BoundWitness>,\n BoundWitnessDivinerQueryPayload,\n BoundWitness\n >\n >(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const combinations = intraBoundwitnessSchemaCombinations(bw, this.payload_schemas).flat()\n if (combinations.length === 0) return undefined\n const hashes = new Set(combinations)\n const indexCandidates = await archivist.get([...hashes])\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","configSchemas","TemporalIndexingDivinerConfigSchema","defaultConfigSchema","startHandler","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","defaultConfigSchema","labels","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","import_diviner_abstract","import_diviner_jsonpath_aggregate_memory","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","defaultConfigSchema","labels","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","builtPayloads","Promise","all","map","payload","PayloadBuilder","build","indexableBoundWitnesses","filter","isBoundWitnessWithMeta","bw","containsAll","payload_schemas","indexablePayloads","p","isIndexablePayload","length","bwDictionary","payloadDictionary","toDataHashMap","validIndexableTuples","bwHash","entries","combinations","intraBoundwitnessSchemaCombinations","combination","hash","exists","push","indexes","sourcePayloadHashes","sourcePayloads","indexFields","flatMap","transformers","schema","transform","sources","TemporalIndexingDivinerResultIndexSchema","fields","assign","flat","x","isAnyPayload","includes","isIndexableSchema","import_diviner_abstract","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","defaultConfigSchema","labels","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","import_assert","import_exists","import_boundwitness_model","import_diviner_abstract","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_utils","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","configSchemas","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","defaultConfigSchema","labels","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","bws","isBoundWitnessWithMeta","indexCandidates","Promise","all","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","combinations","intraBoundwitnessSchemaCombinations","hashes","Set","get"]}
@@ -63,8 +63,7 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends Abstr
63
63
  * List of indexable schemas for this diviner
64
64
  */
65
65
  get indexableSchemas() {
66
- if (!this._indexableSchemas)
67
- this._indexableSchemas = Object.keys(this.schemaTransforms);
66
+ if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms);
68
67
  return this._indexableSchemas;
69
68
  }
70
69
  /**
@@ -72,8 +71,7 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends Abstr
72
71
  * from the payloads within a Bound Witness
73
72
  */
74
73
  get payloadTransformers() {
75
- if (!this._payloadTransformers)
76
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
74
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
77
75
  return this._payloadTransformers;
78
76
  }
79
77
  /**
@@ -153,8 +151,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
153
151
  * List of indexable schemas for this diviner
154
152
  */
155
153
  get indexableSchemas() {
156
- if (!this._indexableSchemas)
157
- this._indexableSchemas = Object.keys(this.schemaTransforms);
154
+ if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms);
158
155
  return this._indexableSchemas;
159
156
  }
160
157
  /**
@@ -162,8 +159,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
162
159
  * from the payloads within a Bound Witness
163
160
  */
164
161
  get payloadTransformers() {
165
- if (!this._payloadTransformers)
166
- this._payloadTransformers = jsonPathToTransformersDictionary2(this.schemaTransforms);
162
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary2(this.schemaTransforms);
167
163
  return this._payloadTransformers;
168
164
  }
169
165
  /**
@@ -177,8 +173,7 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
177
173
  const builtPayloads = await Promise.all(payloads.map((payload) => PayloadBuilder2.build(payload)));
178
174
  const indexableBoundWitnesses = builtPayloads.filter(isBoundWitnessWithMeta).filter((bw) => containsAll(bw.payload_schemas, this.indexableSchemas));
179
175
  const indexablePayloads = builtPayloads.filter((p) => this.isIndexablePayload(p));
180
- if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0)
181
- return [];
176
+ if (indexableBoundWitnesses.length === 0 || indexablePayloads.length === 0) return [];
182
177
  const [bwDictionary, payloadDictionary] = await Promise.all([
183
178
  PayloadBuilder2.toDataHashMap(indexableBoundWitnesses),
184
179
  PayloadBuilder2.toDataHashMap(indexablePayloads)
@@ -219,17 +214,17 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends Abstract
219
214
  * @param x The candidate payload
220
215
  * @returns True if the payload is one indexed by this diviner, false otherwise
221
216
  */
222
- isIndexablePayload = (x) => {
217
+ isIndexablePayload = /* @__PURE__ */ __name((x) => {
223
218
  return isAnyPayload(x) && this.indexableSchemas.includes(x?.schema);
224
- };
219
+ }, "isIndexablePayload");
225
220
  /**
226
221
  * Identifies if a schema is one that is indexed by this diviner
227
222
  * @param schema The candidate schema
228
223
  * @returns True if this schema is one indexed by this diviner, false otherwise
229
224
  */
230
- isIndexableSchema = (schema) => {
225
+ isIndexableSchema = /* @__PURE__ */ __name((schema) => {
231
226
  return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
232
- };
227
+ }, "isIndexableSchema");
233
228
  };
234
229
 
235
230
  // src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts
@@ -298,21 +293,19 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
298
293
  }
299
294
  async divineHandler(payloads = []) {
300
295
  const lastState = payloads.find(isModuleState);
301
- if (!lastState)
302
- return [
303
- {
304
- schema: ModuleStateSchema,
305
- state: {
306
- offset: 0
307
- }
296
+ if (!lastState) return [
297
+ {
298
+ schema: ModuleStateSchema,
299
+ state: {
300
+ offset: 0
308
301
  }
309
- ];
302
+ }
303
+ ];
310
304
  const { offset } = lastState.state;
311
305
  const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
312
- if (!boundWitnessDiviner)
313
- return [
314
- lastState
315
- ];
306
+ if (!boundWitnessDiviner) return [
307
+ lastState
308
+ ];
316
309
  const query = await new PayloadBuilder3({
317
310
  schema: BoundWitnessDivinerQuerySchema
318
311
  }).fields({
@@ -324,15 +317,13 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
324
317
  const batch = await boundWitnessDiviner.divine([
325
318
  query
326
319
  ]);
327
- if (batch.length === 0)
328
- return [
329
- lastState
330
- ];
320
+ if (batch.length === 0) return [
321
+ lastState
322
+ ];
331
323
  const sourceArchivist = await this.getArchivistForStore();
332
- if (!sourceArchivist)
333
- return [
334
- lastState
335
- ];
324
+ if (!sourceArchivist) return [
325
+ lastState
326
+ ];
336
327
  const bws = batch.filter(isBoundWitnessWithMeta2);
337
328
  const indexCandidates = (await Promise.all(bws.map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(exists2).flat();
338
329
  const nextState = {
@@ -354,8 +345,7 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
354
345
  async getArchivistForStore() {
355
346
  const name = assertEx2(this.config?.payloadStore?.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
356
347
  const mod = await this.resolve(name);
357
- if (!mod)
358
- return void 0;
348
+ if (!mod) return void 0;
359
349
  return ArchivistWrapper.wrap(mod, this.account);
360
350
  }
361
351
  /**
@@ -365,14 +355,12 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends Abstract
365
355
  async getBoundWitnessDivinerForStore() {
366
356
  const name = assertEx2(this.config?.payloadStore?.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
367
357
  const mod = await this.resolve(name);
368
- if (!mod)
369
- return;
358
+ if (!mod) return;
370
359
  return DivinerWrapper.wrap(mod, this.account);
371
360
  }
372
361
  async getPayloadsInBoundWitness(bw, archivist) {
373
362
  const combinations = intraBoundwitnessSchemaCombinations2(bw, this.payload_schemas).flat();
374
- if (combinations.length === 0)
375
- return void 0;
363
+ if (combinations.length === 0) return void 0;
376
364
  const hashes = new Set(combinations);
377
365
  const indexCandidates = await archivist.get([
378
366
  ...hashes