@xyo-network/diviner-jsonpath-aggregate-memory 2.103.9 → 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.
@@ -93,8 +93,7 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
93
93
  * Dictionary of schemas to payload transformers
94
94
  */
95
95
  get payloadTransformers() {
96
- if (!this._payloadTransformers)
97
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
96
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
98
97
  return this._payloadTransformers;
99
98
  }
100
99
  /**
@@ -107,13 +106,11 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
107
106
  * List of transformable schemas for this diviner
108
107
  */
109
108
  get transformableSchemas() {
110
- if (!this._transformableSchemas)
111
- this._transformableSchemas = Object.keys(this.schemaTransforms);
109
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
112
110
  return this._transformableSchemas;
113
111
  }
114
112
  async divineHandler(payloads) {
115
- if (!payloads)
116
- return [];
113
+ if (!payloads) return [];
117
114
  const strippedPayloads = payloads.map((payload) => {
118
115
  const p = {
119
116
  ...payload
@@ -133,16 +130,16 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
133
130
  * @param x The candidate payload
134
131
  * @returns True if the payload is one transformed by this diviner, false otherwise
135
132
  */
136
- isTransformablePayload = (x) => {
133
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
137
134
  return this.transformableSchemas.includes(x?.schema);
138
- };
135
+ }, "isTransformablePayload");
139
136
  /**
140
137
  * Identifies if a schema is one that is transformed by this diviner
141
138
  * @param schema The candidate schema
142
139
  * @returns True if this schema is one transformed by this diviner, false otherwise
143
140
  */
144
- isTransformableSchema = (schema) => {
141
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
145
142
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
146
- };
143
+ }, "isTransformableSchema");
147
144
  };
148
145
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
@@ -66,8 +66,7 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
66
66
  * Dictionary of schemas to payload transformers
67
67
  */
68
68
  get payloadTransformers() {
69
- if (!this._payloadTransformers)
70
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
69
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
71
70
  return this._payloadTransformers;
72
71
  }
73
72
  /**
@@ -80,13 +79,11 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
80
79
  * List of transformable schemas for this diviner
81
80
  */
82
81
  get transformableSchemas() {
83
- if (!this._transformableSchemas)
84
- this._transformableSchemas = Object.keys(this.schemaTransforms);
82
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
85
83
  return this._transformableSchemas;
86
84
  }
87
85
  async divineHandler(payloads) {
88
- if (!payloads)
89
- return [];
86
+ if (!payloads) return [];
90
87
  const strippedPayloads = payloads.map((payload) => {
91
88
  const p = {
92
89
  ...payload
@@ -106,17 +103,17 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
106
103
  * @param x The candidate payload
107
104
  * @returns True if the payload is one transformed by this diviner, false otherwise
108
105
  */
109
- isTransformablePayload = (x) => {
106
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
110
107
  return this.transformableSchemas.includes(x?.schema);
111
- };
108
+ }, "isTransformablePayload");
112
109
  /**
113
110
  * Identifies if a schema is one that is transformed by this diviner
114
111
  * @param schema The candidate schema
115
112
  * @returns True if this schema is one transformed by this diviner, false otherwise
116
113
  */
117
- isTransformableSchema = (schema) => {
114
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
118
115
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
119
- };
116
+ }, "isTransformableSchema");
120
117
  };
121
118
  export {
122
119
  JsonPathAggregateDiviner,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
@@ -93,8 +93,7 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
93
93
  * Dictionary of schemas to payload transformers
94
94
  */
95
95
  get payloadTransformers() {
96
- if (!this._payloadTransformers)
97
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
96
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
98
97
  return this._payloadTransformers;
99
98
  }
100
99
  /**
@@ -107,13 +106,11 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
107
106
  * List of transformable schemas for this diviner
108
107
  */
109
108
  get transformableSchemas() {
110
- if (!this._transformableSchemas)
111
- this._transformableSchemas = Object.keys(this.schemaTransforms);
109
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
112
110
  return this._transformableSchemas;
113
111
  }
114
112
  async divineHandler(payloads) {
115
- if (!payloads)
116
- return [];
113
+ if (!payloads) return [];
117
114
  const strippedPayloads = payloads.map((payload) => {
118
115
  const p = {
119
116
  ...payload
@@ -133,16 +130,16 @@ var JsonPathAggregateDiviner = class extends import_diviner_abstract.AbstractDiv
133
130
  * @param x The candidate payload
134
131
  * @returns True if the payload is one transformed by this diviner, false otherwise
135
132
  */
136
- isTransformablePayload = (x) => {
133
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
137
134
  return this.transformableSchemas.includes(x?.schema);
138
- };
135
+ }, "isTransformablePayload");
139
136
  /**
140
137
  * Identifies if a schema is one that is transformed by this diviner
141
138
  * @param schema The candidate schema
142
139
  * @returns True if this schema is one transformed by this diviner, false otherwise
143
140
  */
144
- isTransformableSchema = (schema) => {
141
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
145
142
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
146
- };
143
+ }, "isTransformableSchema");
147
144
  };
148
145
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
@@ -66,8 +66,7 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
66
66
  * Dictionary of schemas to payload transformers
67
67
  */
68
68
  get payloadTransformers() {
69
- if (!this._payloadTransformers)
70
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
69
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
71
70
  return this._payloadTransformers;
72
71
  }
73
72
  /**
@@ -80,13 +79,11 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
80
79
  * List of transformable schemas for this diviner
81
80
  */
82
81
  get transformableSchemas() {
83
- if (!this._transformableSchemas)
84
- this._transformableSchemas = Object.keys(this.schemaTransforms);
82
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
85
83
  return this._transformableSchemas;
86
84
  }
87
85
  async divineHandler(payloads) {
88
- if (!payloads)
89
- return [];
86
+ if (!payloads) return [];
90
87
  const strippedPayloads = payloads.map((payload) => {
91
88
  const p = {
92
89
  ...payload
@@ -106,17 +103,17 @@ var JsonPathAggregateDiviner = class extends AbstractDiviner {
106
103
  * @param x The candidate payload
107
104
  * @returns True if the payload is one transformed by this diviner, false otherwise
108
105
  */
109
- isTransformablePayload = (x) => {
106
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
110
107
  return this.transformableSchemas.includes(x?.schema);
111
- };
108
+ }, "isTransformablePayload");
112
109
  /**
113
110
  * Identifies if a schema is one that is transformed by this diviner
114
111
  * @param schema The candidate schema
115
112
  * @returns True if this schema is one transformed by this diviner, false otherwise
116
113
  */
117
- isTransformableSchema = (schema) => {
114
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
118
115
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
119
- };
116
+ }, "isTransformableSchema");
120
117
  };
121
118
  export {
122
119
  JsonPathAggregateDiviner,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema"]}
@@ -20,10 +20,7 @@ var __copyProps = (to, from, except, desc) => {
20
20
  return to;
21
21
  };
22
22
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
- var __publicField = (obj, key, value) => {
24
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
25
- return value;
26
- };
23
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
27
24
  var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
28
25
 
29
26
  // src/index.ts
@@ -93,8 +90,7 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends import_d
93
90
  * Dictionary of schemas to payload transformers
94
91
  */
95
92
  get payloadTransformers() {
96
- if (!this._payloadTransformers)
97
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
93
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
98
94
  return this._payloadTransformers;
99
95
  }
100
96
  /**
@@ -108,13 +104,11 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends import_d
108
104
  * List of transformable schemas for this diviner
109
105
  */
110
106
  get transformableSchemas() {
111
- if (!this._transformableSchemas)
112
- this._transformableSchemas = Object.keys(this.schemaTransforms);
107
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
113
108
  return this._transformableSchemas;
114
109
  }
115
110
  async divineHandler(payloads) {
116
- if (!payloads)
117
- return [];
111
+ if (!payloads) return [];
118
112
  const strippedPayloads = payloads.map((payload) => {
119
113
  const p = {
120
114
  ...payload
@@ -134,17 +128,17 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends import_d
134
128
  * @param x The candidate payload
135
129
  * @returns True if the payload is one transformed by this diviner, false otherwise
136
130
  */
137
- isTransformablePayload = (x) => {
131
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
138
132
  return this.transformableSchemas.includes(x == null ? void 0 : x.schema);
139
- };
133
+ }, "isTransformablePayload");
140
134
  /**
141
135
  * Identifies if a schema is one that is transformed by this diviner
142
136
  * @param schema The candidate schema
143
137
  * @returns True if this schema is one transformed by this diviner, false otherwise
144
138
  */
145
- isTransformableSchema = (schema) => {
139
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
146
140
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
147
- };
141
+ }, "isTransformableSchema");
148
142
  };
149
143
  __name(_JsonPathAggregateDiviner, "JsonPathAggregateDiviner");
150
144
  __publicField(_JsonPathAggregateDiviner, "configSchemas", [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './jsonpath'\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema"]}
@@ -3,10 +3,7 @@ var __getProtoOf = Object.getPrototypeOf;
3
3
  var __reflectGet = Reflect.get;
4
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
5
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => {
7
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
- return value;
9
- };
6
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
10
7
  var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
11
8
 
12
9
  // src/Diviner.ts
@@ -66,8 +63,7 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends Abstract
66
63
  * Dictionary of schemas to payload transformers
67
64
  */
68
65
  get payloadTransformers() {
69
- if (!this._payloadTransformers)
70
- this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
66
+ if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms);
71
67
  return this._payloadTransformers;
72
68
  }
73
69
  /**
@@ -81,13 +77,11 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends Abstract
81
77
  * List of transformable schemas for this diviner
82
78
  */
83
79
  get transformableSchemas() {
84
- if (!this._transformableSchemas)
85
- this._transformableSchemas = Object.keys(this.schemaTransforms);
80
+ if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms);
86
81
  return this._transformableSchemas;
87
82
  }
88
83
  async divineHandler(payloads) {
89
- if (!payloads)
90
- return [];
84
+ if (!payloads) return [];
91
85
  const strippedPayloads = payloads.map((payload) => {
92
86
  const p = {
93
87
  ...payload
@@ -107,17 +101,17 @@ var _JsonPathAggregateDiviner = class _JsonPathAggregateDiviner extends Abstract
107
101
  * @param x The candidate payload
108
102
  * @returns True if the payload is one transformed by this diviner, false otherwise
109
103
  */
110
- isTransformablePayload = (x) => {
104
+ isTransformablePayload = /* @__PURE__ */ __name((x) => {
111
105
  return this.transformableSchemas.includes(x == null ? void 0 : x.schema);
112
- };
106
+ }, "isTransformablePayload");
113
107
  /**
114
108
  * Identifies if a schema is one that is transformed by this diviner
115
109
  * @param schema The candidate schema
116
110
  * @returns True if this schema is one transformed by this diviner, false otherwise
117
111
  */
118
- isTransformableSchema = (schema) => {
112
+ isTransformableSchema = /* @__PURE__ */ __name((schema) => {
119
113
  return typeof schema === "string" ? this.transformableSchemas.includes(schema) : false;
120
- };
114
+ }, "isTransformableSchema");
121
115
  };
122
116
  __name(_JsonPathAggregateDiviner, "JsonPathAggregateDiviner");
123
117
  __publicField(_JsonPathAggregateDiviner, "configSchemas", [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/jsonpath/jsonPathToTransformersDictionary.ts","../../src/jsonpath/reducePayloads.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport {\n JsonPathAggregateDivinerConfigSchema,\n JsonPathAggregateDivinerParams,\n PayloadTransformer,\n SchemaToJsonPathTransformExpressionsDictionary,\n SchemaToPayloadTransformersDictionary,\n} from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { Payload, PayloadSchema, Schema, WithOptionalMeta } from '@xyo-network/payload-model'\nimport { combinationsByBoundwitness, combinationsBySchema } from '@xyo-network/payload-utils'\n\nimport { jsonPathToTransformersDictionary, reducePayloads } from './jsonpath'\n\nconst moduleName = 'JsonPathAggregateDiviner'\n\nexport class JsonPathAggregateDiviner<\n TParams extends JsonPathAggregateDivinerParams = JsonPathAggregateDivinerParams,\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 AbstractDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, JsonPathAggregateDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = JsonPathAggregateDivinerConfigSchema\n\n protected _transforms: PayloadTransformer[] | undefined\n\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n private _transformableSchemas: string[] | undefined\n\n /**\n * The schema to use for the destination payloads\n */\n protected get destinationSchema(): string {\n return this.config.destinationSchema ?? PayloadSchema\n }\n\n /**\n * Dictionary of schemas to payload transformers\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\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n /**\n * List of transformable schemas for this diviner\n */\n protected get transformableSchemas(): string[] {\n if (!this._transformableSchemas) this._transformableSchemas = Object.keys(this.schemaTransforms)\n return this._transformableSchemas\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n if (!payloads) return []\n const strippedPayloads = payloads.map((payload) => {\n const p = { ...payload } as WithOptionalMeta<TIn>\n delete p.$hash\n delete p.$meta\n return p as TIn\n })\n const combinations =\n this.transformableSchemas.includes(BoundWitnessSchema) ?\n await combinationsByBoundwitness(strippedPayloads)\n : await combinationsBySchema(strippedPayloads, this.transformableSchemas)\n const reducedPayloads = await Promise.all(\n combinations.map((combination) => {\n return reducePayloads<TOut>(combination, this.payloadTransformers, this.destinationSchema, this.config.excludeSources ?? false)\n }),\n )\n return reducedPayloads\n }\n\n /**\n * Identifies if a payload is one that is transformed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one transformed by this diviner, false otherwise\n */\n protected isTransformablePayload = (x: Payload) => {\n return this.transformableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is transformed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one transformed by this diviner, false otherwise\n */\n protected isTransformableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.transformableSchemas.includes(schema) : false\n }\n}\n","import { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { toPayloadTransformer } from '@xyo-network/diviner-jsonpath-memory'\n\n/**\n * Materializes the JSON-path expressions into memoized functions by converting a\n * dictionary of schema to JSON Path transform expressions to a dictionary\n * of schema to payload transformers\n * @param schemaTransforms The schema transforms to convert\n * @returns A dictionary of schema to payload transformers\n */\nexport const jsonPathToTransformersDictionary = (\n schemaTransforms: SchemaToJsonPathTransformExpressionsDictionary,\n): SchemaToPayloadTransformersDictionary => {\n return Object.fromEntries(\n Object.entries(schemaTransforms).map(([schema, jsonPathTransformerExpressions]) => {\n const transformers = jsonPathTransformerExpressions.map(toPayloadTransformer)\n return [schema, transformers]\n }),\n )\n}\n","import { exists } from '@xylabs/exists'\nimport { SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-model'\nimport { PayloadBuilder, WithoutSchema } from '@xyo-network/payload-builder'\nimport { Payload, WithMeta } from '@xyo-network/payload-model'\n\n/**\n * Reduces the payloads to a single payload using the supplied transformers\n * @param payloads The payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payload\n * @param destinationSchema The schema of the destination payload\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payload\n */\nexport const reducePayloads = async <T extends Payload = Payload>(\n payloads: Payload[],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<WithMeta<T>> => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const payloadFields = payloads.filter(exists).flatMap<WithoutSchema<Payload>[]>((payload) => {\n // Find the transformers for this payload\n const transformers = 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 baseObject = excludeSources ? {} : { sources: await PayloadBuilder.dataHashes(payloads) }\n // Build and return the payload\n return await new PayloadBuilder<T>({ schema: destinationSchema }).fields(Object.assign(baseObject, ...payloadFields)).build()\n}\n\n/**\n * Reduces the arrays of payload arrays to an array of payloads using the supplied transformers\n * @param payloadsArray The arrays of payloads to reduce\n * @param payloadTransformers The transformers to use to convert the payloads to the destination payloads\n * @param excludeSources Exclude the source hashes from the destination payload\n * @returns The reduced payloads\n */\nexport const reducePayloadsArray = async <T extends Payload = Payload>(\n payloadsArray: Payload[][],\n payloadTransformers: SchemaToPayloadTransformersDictionary,\n destinationSchema: string,\n excludeSources = false,\n): Promise<T[]> => {\n return await Promise.all(\n payloadsArray.map(async (payloads) => {\n return await reducePayloads<T>(payloads, payloadTransformers, destinationSchema, excludeSources)\n }),\n )\n}\n"],"mappings":"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","names":["assertEx","BoundWitnessSchema","AbstractDiviner","JsonPathAggregateDivinerConfigSchema","PayloadSchema","combinationsByBoundwitness","combinationsBySchema","toPayloadTransformer","jsonPathToTransformersDictionary","schemaTransforms","Object","fromEntries","entries","map","schema","jsonPathTransformerExpressions","transformers","toPayloadTransformer","exists","PayloadBuilder","reducePayloads","payloads","payloadTransformers","destinationSchema","excludeSources","payloadFields","filter","exists","flatMap","payload","transformers","schema","map","transform","baseObject","sources","PayloadBuilder","dataHashes","fields","Object","assign","build","reducePayloadsArray","payloadsArray","Promise","all","moduleName","JsonPathAggregateDiviner","AbstractDiviner","_transforms","_payloadTransformers","_transformableSchemas","destinationSchema","config","PayloadSchema","payloadTransformers","jsonPathToTransformersDictionary","schemaTransforms","assertEx","transformableSchemas","Object","keys","divineHandler","payloads","strippedPayloads","map","payload","p","$hash","$meta","combinations","includes","BoundWitnessSchema","combinationsByBoundwitness","combinationsBySchema","reducedPayloads","Promise","all","combination","reducePayloads","excludeSources","isTransformablePayload","x","schema","isTransformableSchema","configSchemas","JsonPathAggregateDivinerConfigSchema","defaultConfigSchema"]}
package/package.json CHANGED
@@ -10,24 +10,24 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.5.0",
14
- "@xylabs/exists": "^3.5.0",
15
- "@xyo-network/boundwitness-model": "~2.103.9",
16
- "@xyo-network/diviner-abstract": "~2.103.9",
17
- "@xyo-network/diviner-jsonpath-aggregate-model": "~2.103.9",
18
- "@xyo-network/diviner-jsonpath-memory": "~2.103.9",
19
- "@xyo-network/diviner-model": "~2.103.9",
20
- "@xyo-network/payload-builder": "~2.103.9",
21
- "@xyo-network/payload-model": "~2.103.9",
22
- "@xyo-network/payload-utils": "~2.103.9"
13
+ "@xylabs/assert": "^3.5.1",
14
+ "@xylabs/exists": "^3.5.1",
15
+ "@xyo-network/boundwitness-model": "~2.104.1",
16
+ "@xyo-network/diviner-abstract": "~2.104.1",
17
+ "@xyo-network/diviner-jsonpath-aggregate-model": "~2.104.1",
18
+ "@xyo-network/diviner-jsonpath-memory": "~2.104.1",
19
+ "@xyo-network/diviner-model": "~2.104.1",
20
+ "@xyo-network/payload-builder": "~2.104.1",
21
+ "@xyo-network/payload-model": "~2.104.1",
22
+ "@xyo-network/payload-utils": "~2.104.1"
23
23
  },
24
24
  "devDependencies": {
25
- "@xylabs/ts-scripts-yarn3": "^3.10.4",
26
- "@xylabs/tsconfig": "^3.10.4",
27
- "@xyo-network/account": "~2.103.9",
28
- "@xyo-network/account-model": "~2.103.9",
29
- "@xyo-network/boundwitness-builder": "~2.103.9",
30
- "@xyo-network/diviner-jsonpath-model": "~2.103.9",
25
+ "@xylabs/ts-scripts-yarn3": "^3.11.2",
26
+ "@xylabs/tsconfig": "^3.11.2",
27
+ "@xyo-network/account": "~2.104.1",
28
+ "@xyo-network/account-model": "~2.104.1",
29
+ "@xyo-network/boundwitness-builder": "~2.104.1",
30
+ "@xyo-network/diviner-jsonpath-model": "~2.104.1",
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.103.9",
72
+ "version": "2.104.1",
73
73
  "type": "module"
74
74
  }