@xyo-network/diviner-temporal-indexing-memory 2.84.19 → 2.85.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.
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.cts.map +1 -1
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.mts.map +1 -1
- package/dist/browser/IndexCandidateToIndexDiviner/Diviner.d.ts.map +1 -1
- package/dist/browser/index.cjs +159 -84
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +164 -95
- package/dist/browser/index.js.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.cts.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.mts.map +1 -1
- package/dist/node/IndexCandidateToIndexDiviner/Diviner.d.ts.map +1 -1
- package/dist/node/index.cjs +180 -108
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +185 -119
- package/dist/node/index.js.map +1 -1
- package/package.json +27 -26
- package/src/IndexCandidateToIndexDiviner/Diviner.ts +9 -7
package/dist/node/index.cjs
CHANGED
|
@@ -3,6 +3,8 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
8
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -16,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
18
20
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => {
|
|
22
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
23
|
+
return value;
|
|
24
|
+
};
|
|
19
25
|
|
|
20
26
|
// src/index.ts
|
|
21
27
|
var src_exports = {};
|
|
@@ -33,14 +39,20 @@ var import_diviner_indexing_memory = require("@xyo-network/diviner-indexing-memo
|
|
|
33
39
|
var import_diviner_indexing_model = require("@xyo-network/diviner-indexing-model");
|
|
34
40
|
var import_diviner_model = require("@xyo-network/diviner-model");
|
|
35
41
|
var import_diviner_temporal_indexing_model = require("@xyo-network/diviner-temporal-indexing-model");
|
|
36
|
-
var
|
|
37
|
-
static configSchema = import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema;
|
|
38
|
-
static configSchemas = [import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema, import_diviner_indexing_model.IndexingDivinerConfigSchema, import_diviner_model.DivinerConfigSchema];
|
|
42
|
+
var _TemporalIndexingDiviner = class _TemporalIndexingDiviner extends import_diviner_indexing_memory.IndexingDiviner {
|
|
39
43
|
async startHandler() {
|
|
40
44
|
await super.startHandler();
|
|
41
45
|
return true;
|
|
42
46
|
}
|
|
43
47
|
};
|
|
48
|
+
__name(_TemporalIndexingDiviner, "TemporalIndexingDiviner");
|
|
49
|
+
__publicField(_TemporalIndexingDiviner, "configSchema", import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema);
|
|
50
|
+
__publicField(_TemporalIndexingDiviner, "configSchemas", [
|
|
51
|
+
import_diviner_temporal_indexing_model.TemporalIndexingDivinerConfigSchema,
|
|
52
|
+
import_diviner_indexing_model.IndexingDivinerConfigSchema,
|
|
53
|
+
import_diviner_model.DivinerConfigSchema
|
|
54
|
+
]);
|
|
55
|
+
var TemporalIndexingDiviner = _TemporalIndexingDiviner;
|
|
44
56
|
|
|
45
57
|
// src/DivinerQueryToIndexQueryDiviner/Diviner.ts
|
|
46
58
|
var import_abstract_diviner = require("@xyo-network/abstract-diviner");
|
|
@@ -50,53 +62,48 @@ var import_diviner_payload_model = require("@xyo-network/diviner-payload-model")
|
|
|
50
62
|
var import_diviner_temporal_indexing_model2 = require("@xyo-network/diviner-temporal-indexing-model");
|
|
51
63
|
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
52
64
|
var import_payload_model = require("@xyo-network/payload-model");
|
|
53
|
-
var
|
|
54
|
-
static configSchema = import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema;
|
|
55
|
-
static configSchemas = [import_diviner_model2.DivinerConfigSchema, import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema];
|
|
56
|
-
static labels = {
|
|
57
|
-
"network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
|
|
58
|
-
};
|
|
65
|
+
var _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
59
66
|
_indexableSchemas;
|
|
60
67
|
_payloadTransformers;
|
|
61
68
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
* The schema of the diviner query payloads
|
|
70
|
+
*/
|
|
64
71
|
get divinerQuerySchema() {
|
|
65
72
|
return this.config.divinerQuerySchema ?? import_diviner_payload_model.PayloadDivinerQuerySchema;
|
|
66
73
|
}
|
|
67
74
|
/**
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
* The schema of the index query payloads
|
|
76
|
+
*/
|
|
70
77
|
get indexQuerySchema() {
|
|
71
78
|
return this.config.indexQuerySchema ?? import_diviner_payload_model.PayloadDivinerQuerySchema;
|
|
72
79
|
}
|
|
73
80
|
/**
|
|
74
|
-
|
|
75
|
-
|
|
81
|
+
* The schema of the index payloads
|
|
82
|
+
*/
|
|
76
83
|
get indexSchema() {
|
|
77
84
|
return this.config.indexSchema ?? import_diviner_temporal_indexing_model2.TemporalIndexingDivinerResultIndexSchema;
|
|
78
85
|
}
|
|
79
86
|
/**
|
|
80
|
-
|
|
81
|
-
|
|
87
|
+
* List of indexable schemas for this diviner
|
|
88
|
+
*/
|
|
82
89
|
get indexableSchemas() {
|
|
83
90
|
if (!this._indexableSchemas)
|
|
84
91
|
this._indexableSchemas = Object.keys(this.schemaTransforms);
|
|
85
92
|
return this._indexableSchemas;
|
|
86
93
|
}
|
|
87
94
|
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
95
|
+
* Dictionary of schemas to payload transformers for creating indexes
|
|
96
|
+
* from the payloads within a Bound Witness
|
|
97
|
+
*/
|
|
91
98
|
get payloadTransformers() {
|
|
92
99
|
if (!this._payloadTransformers)
|
|
93
100
|
this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory.jsonPathToTransformersDictionary)(this.schemaTransforms);
|
|
94
101
|
return this._payloadTransformers;
|
|
95
102
|
}
|
|
96
103
|
/**
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
* The dictionary of schemas to JSON Path transform expressions for creating indexes
|
|
105
|
+
* from the payloads within a Bound Witness
|
|
106
|
+
*/
|
|
100
107
|
get schemaTransforms() {
|
|
101
108
|
var _a;
|
|
102
109
|
return ((_a = this.config) == null ? void 0 : _a.schemaTransforms) ?? {
|
|
@@ -122,23 +129,33 @@ var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = class extends impor
|
|
|
122
129
|
async divineHandler(payloads = []) {
|
|
123
130
|
const queries = payloads.filter((0, import_payload_model.isPayloadOfSchemaType)(this.divinerQuerySchema));
|
|
124
131
|
if (queries.length > 0) {
|
|
125
|
-
const results = await Promise.all(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
})
|
|
136
|
-
);
|
|
132
|
+
const results = await Promise.all(queries.map(async (query) => {
|
|
133
|
+
const fields = await (0, import_diviner_jsonpath_aggregate_memory.reducePayloads)([
|
|
134
|
+
query
|
|
135
|
+
], this.payloadTransformers, this.indexQuerySchema);
|
|
136
|
+
fields.schemas = [
|
|
137
|
+
this.indexSchema
|
|
138
|
+
];
|
|
139
|
+
delete fields.sources;
|
|
140
|
+
return await new import_payload_builder.PayloadBuilder({
|
|
141
|
+
schema: this.indexQuerySchema
|
|
142
|
+
}).fields(fields).build();
|
|
143
|
+
}));
|
|
137
144
|
return results;
|
|
138
145
|
}
|
|
139
146
|
return [];
|
|
140
147
|
}
|
|
141
148
|
};
|
|
149
|
+
__name(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner");
|
|
150
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchema", import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema);
|
|
151
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "configSchemas", [
|
|
152
|
+
import_diviner_model2.DivinerConfigSchema,
|
|
153
|
+
import_diviner_temporal_indexing_model2.TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema
|
|
154
|
+
]);
|
|
155
|
+
__publicField(_TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner, "labels", {
|
|
156
|
+
"network.xyo.diviner.stage": "divinerQueryToIndexQueryDiviner"
|
|
157
|
+
});
|
|
158
|
+
var TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner = _TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner;
|
|
142
159
|
|
|
143
160
|
// src/IndexCandidateToIndexDiviner/Diviner.ts
|
|
144
161
|
var import_array = require("@xylabs/array");
|
|
@@ -151,36 +168,32 @@ var import_diviner_model3 = require("@xyo-network/diviner-model");
|
|
|
151
168
|
var import_diviner_temporal_indexing_model3 = require("@xyo-network/diviner-temporal-indexing-model");
|
|
152
169
|
var import_hash = require("@xyo-network/hash");
|
|
153
170
|
var import_payload_builder2 = require("@xyo-network/payload-builder");
|
|
171
|
+
var import_payload_utils = require("@xyo-network/payload-utils");
|
|
154
172
|
var moduleName = "TemporalIndexingDivinerIndexCandidateToIndexDiviner";
|
|
155
|
-
var
|
|
156
|
-
static configSchema = import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema;
|
|
157
|
-
static configSchemas = [import_diviner_model3.DivinerConfigSchema, import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema];
|
|
158
|
-
static labels = {
|
|
159
|
-
"network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
|
|
160
|
-
};
|
|
173
|
+
var _TemporalIndexingDivinerIndexCandidateToIndexDiviner = class _TemporalIndexingDivinerIndexCandidateToIndexDiviner extends import_abstract_diviner2.AbstractDiviner {
|
|
161
174
|
_indexableSchemas;
|
|
162
175
|
_payloadTransformers;
|
|
163
176
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
177
|
+
* List of indexable schemas for this diviner
|
|
178
|
+
*/
|
|
166
179
|
get indexableSchemas() {
|
|
167
180
|
if (!this._indexableSchemas)
|
|
168
181
|
this._indexableSchemas = Object.keys(this.schemaTransforms);
|
|
169
182
|
return this._indexableSchemas;
|
|
170
183
|
}
|
|
171
184
|
/**
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
185
|
+
* Dictionary of schemas to payload transformers for creating indexes
|
|
186
|
+
* from the payloads within a Bound Witness
|
|
187
|
+
*/
|
|
175
188
|
get payloadTransformers() {
|
|
176
189
|
if (!this._payloadTransformers)
|
|
177
190
|
this._payloadTransformers = (0, import_diviner_jsonpath_aggregate_memory2.jsonPathToTransformersDictionary)(this.schemaTransforms);
|
|
178
191
|
return this._payloadTransformers;
|
|
179
192
|
}
|
|
180
193
|
/**
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
* The dictionary of schemas to JSON Path transform expressions for creating indexes
|
|
195
|
+
* from the payloads within a Bound Witness
|
|
196
|
+
*/
|
|
184
197
|
get schemaTransforms() {
|
|
185
198
|
var _a;
|
|
186
199
|
return (0, import_assert.assertEx)((_a = this.config) == null ? void 0 : _a.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`);
|
|
@@ -193,64 +206,84 @@ var TemporalIndexingDivinerIndexCandidateToIndexDiviner = class extends import_a
|
|
|
193
206
|
const validIndexableTuples = bws.reduce((indexableTuples, bw) => {
|
|
194
207
|
if (!(0, import_array.containsAll)(bw.payload_schemas, this.indexableSchemas))
|
|
195
208
|
return indexableTuples;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
209
|
+
(0, import_payload_utils.intraBoundwitnessSchemaCombinations)(bw, this.indexableSchemas).map((combination) => {
|
|
210
|
+
const indexablePayloads2 = combination.map((hash) => payloadDictionary[hash]).filter(import_exists.exists);
|
|
211
|
+
if (indexablePayloads2.length === this.indexableSchemas.length)
|
|
212
|
+
indexableTuples.push([
|
|
213
|
+
bw,
|
|
214
|
+
...indexablePayloads2
|
|
215
|
+
]);
|
|
200
216
|
});
|
|
201
|
-
const indexablePayloads2 = indexablePayloadHashes.map((hash) => payloadDictionary[hash]).filter(import_exists.exists);
|
|
202
|
-
if (indexablePayloads2.length === this.indexableSchemas.length)
|
|
203
|
-
indexableTuples.push([bw, ...indexablePayloads2]);
|
|
204
217
|
return indexableTuples;
|
|
205
218
|
}, []);
|
|
206
|
-
const indexes = await Promise.all(
|
|
207
|
-
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
219
|
+
const indexes = await Promise.all(validIndexableTuples.map(async ([bw, ...sourcePayloads]) => {
|
|
220
|
+
const indexFields = sourcePayloads.flatMap((payload) => {
|
|
221
|
+
const transformers = this.payloadTransformers[payload.schema];
|
|
222
|
+
return transformers ? transformers.map((transform) => transform(payload)) : [];
|
|
223
|
+
});
|
|
224
|
+
const sources = Object.keys(await import_hash.PayloadHasher.toMap([
|
|
225
|
+
bw,
|
|
226
|
+
...sourcePayloads
|
|
227
|
+
]));
|
|
228
|
+
return await new import_payload_builder2.PayloadBuilder({
|
|
229
|
+
schema: import_diviner_temporal_indexing_model3.TemporalIndexingDivinerResultIndexSchema
|
|
230
|
+
}).fields(Object.assign({
|
|
231
|
+
sources
|
|
232
|
+
}, ...indexFields)).build();
|
|
233
|
+
}));
|
|
216
234
|
return indexes.flat();
|
|
217
235
|
}
|
|
218
236
|
return [];
|
|
219
237
|
}
|
|
220
238
|
/**
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
239
|
+
* Identifies if a payload is one that is indexed by this diviner
|
|
240
|
+
* @param x The candidate payload
|
|
241
|
+
* @returns True if the payload is one indexed by this diviner, false otherwise
|
|
242
|
+
*/
|
|
225
243
|
isIndexablePayload = (x) => {
|
|
226
244
|
return this.indexableSchemas.includes(x == null ? void 0 : x.schema);
|
|
227
245
|
};
|
|
228
246
|
/**
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
247
|
+
* Identifies if a schema is one that is indexed by this diviner
|
|
248
|
+
* @param schema The candidate schema
|
|
249
|
+
* @returns True if this schema is one indexed by this diviner, false otherwise
|
|
250
|
+
*/
|
|
233
251
|
isIndexableSchema = (schema) => {
|
|
234
252
|
return typeof schema === "string" ? this.indexableSchemas.includes(schema) : false;
|
|
235
253
|
};
|
|
236
254
|
};
|
|
255
|
+
__name(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "TemporalIndexingDivinerIndexCandidateToIndexDiviner");
|
|
256
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchema", import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema);
|
|
257
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "configSchemas", [
|
|
258
|
+
import_diviner_model3.DivinerConfigSchema,
|
|
259
|
+
import_diviner_temporal_indexing_model3.TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema
|
|
260
|
+
]);
|
|
261
|
+
__publicField(_TemporalIndexingDivinerIndexCandidateToIndexDiviner, "labels", {
|
|
262
|
+
"network.xyo.diviner.stage": "indexCandidateToIndexDiviner"
|
|
263
|
+
});
|
|
264
|
+
var TemporalIndexingDivinerIndexCandidateToIndexDiviner = _TemporalIndexingDivinerIndexCandidateToIndexDiviner;
|
|
237
265
|
|
|
238
266
|
// src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts
|
|
239
267
|
var import_abstract_diviner3 = require("@xyo-network/abstract-diviner");
|
|
240
268
|
var import_diviner_model4 = require("@xyo-network/diviner-model");
|
|
241
269
|
var import_diviner_payload_model2 = require("@xyo-network/diviner-payload-model");
|
|
242
270
|
var import_diviner_temporal_indexing_model4 = require("@xyo-network/diviner-temporal-indexing-model");
|
|
243
|
-
var
|
|
244
|
-
static configSchema = import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema;
|
|
245
|
-
static configSchemas = [import_diviner_model4.DivinerConfigSchema, import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema];
|
|
246
|
-
static labels = {
|
|
247
|
-
"network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
|
|
248
|
-
};
|
|
271
|
+
var _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = class _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends import_abstract_diviner3.AbstractDiviner {
|
|
249
272
|
async divineHandler(payloads = []) {
|
|
250
273
|
const responses = payloads.filter((p) => !(0, import_diviner_payload_model2.isPayloadDivinerQueryPayload)(p));
|
|
251
274
|
return await Promise.resolve(responses);
|
|
252
275
|
}
|
|
253
276
|
};
|
|
277
|
+
__name(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner");
|
|
278
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchema", import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema);
|
|
279
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "configSchemas", [
|
|
280
|
+
import_diviner_model4.DivinerConfigSchema,
|
|
281
|
+
import_diviner_temporal_indexing_model4.TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema
|
|
282
|
+
]);
|
|
283
|
+
__publicField(_TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner, "labels", {
|
|
284
|
+
"network.xyo.diviner.stage": "indexQueryResponseToDivinerQueryResponseDiviner"
|
|
285
|
+
});
|
|
286
|
+
var TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner = _TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner;
|
|
254
287
|
|
|
255
288
|
// src/StateToIndexCandidateDiviner/Diviner.ts
|
|
256
289
|
var import_assert2 = require("@xylabs/assert");
|
|
@@ -268,46 +301,75 @@ var import_payload_model2 = require("@xyo-network/payload-model");
|
|
|
268
301
|
var import_witness_timestamp = require("@xyo-network/witness-timestamp");
|
|
269
302
|
var order = "asc";
|
|
270
303
|
var moduleName2 = "TemporalIndexingDivinerStateToIndexCandidateDiviner";
|
|
271
|
-
var
|
|
272
|
-
static configSchema = import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema;
|
|
273
|
-
static configSchemas = [import_diviner_model5.DivinerConfigSchema, import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema];
|
|
274
|
-
static labels = {
|
|
275
|
-
"network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
|
|
276
|
-
};
|
|
304
|
+
var _TemporalIndexingDivinerStateToIndexCandidateDiviner = class _TemporalIndexingDivinerStateToIndexCandidateDiviner extends import_abstract_diviner4.AbstractDiviner {
|
|
277
305
|
get payloadDivinerLimit() {
|
|
278
306
|
return this.config.payloadDivinerLimit ?? 1e3;
|
|
279
307
|
}
|
|
280
308
|
/**
|
|
281
|
-
|
|
282
|
-
|
|
309
|
+
* The required payload_schemas within BoundWitnesses to identify index candidates
|
|
310
|
+
*/
|
|
283
311
|
get payload_schemas() {
|
|
284
312
|
var _a;
|
|
285
313
|
const schemas = (_a = this.config.filter) == null ? void 0 : _a.payload_schemas;
|
|
286
|
-
return [
|
|
314
|
+
return [
|
|
315
|
+
import_witness_timestamp.TimestampSchema,
|
|
316
|
+
...schemas ?? []
|
|
317
|
+
];
|
|
287
318
|
}
|
|
288
319
|
async divineHandler(payloads = []) {
|
|
289
320
|
const lastState = payloads.find(import_module_model.isModuleState);
|
|
290
321
|
if (!lastState)
|
|
291
|
-
return [
|
|
322
|
+
return [
|
|
323
|
+
{
|
|
324
|
+
schema: import_module_model.ModuleStateSchema,
|
|
325
|
+
state: {
|
|
326
|
+
offset: 0
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
];
|
|
292
330
|
const { offset } = lastState.state;
|
|
293
331
|
const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore();
|
|
294
332
|
if (!boundWitnessDiviner)
|
|
295
|
-
return [
|
|
296
|
-
|
|
297
|
-
|
|
333
|
+
return [
|
|
334
|
+
lastState
|
|
335
|
+
];
|
|
336
|
+
const query = await new import_payload_builder3.PayloadBuilder({
|
|
337
|
+
schema: import_diviner_boundwitness_model.BoundWitnessDivinerQuerySchema
|
|
338
|
+
}).fields({
|
|
339
|
+
limit: this.payloadDivinerLimit,
|
|
340
|
+
offset,
|
|
341
|
+
order,
|
|
342
|
+
payload_schemas: this.payload_schemas
|
|
343
|
+
}).build();
|
|
344
|
+
const batch = await boundWitnessDiviner.divine([
|
|
345
|
+
query
|
|
346
|
+
]);
|
|
298
347
|
if (batch.length === 0)
|
|
299
|
-
return [
|
|
348
|
+
return [
|
|
349
|
+
lastState
|
|
350
|
+
];
|
|
300
351
|
const sourceArchivist = await this.getArchivistForStore();
|
|
301
352
|
if (!sourceArchivist)
|
|
302
|
-
return [
|
|
353
|
+
return [
|
|
354
|
+
lastState
|
|
355
|
+
];
|
|
303
356
|
const indexCandidates = (await Promise.all(batch.filter(import_boundwitness_model2.isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))).filter(import_exists2.exists).flat();
|
|
304
|
-
const nextState = {
|
|
305
|
-
|
|
357
|
+
const nextState = {
|
|
358
|
+
schema: import_module_model.ModuleStateSchema,
|
|
359
|
+
state: {
|
|
360
|
+
...lastState.state,
|
|
361
|
+
offset: offset + batch.length
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
return [
|
|
365
|
+
nextState,
|
|
366
|
+
...indexCandidates
|
|
367
|
+
];
|
|
306
368
|
}
|
|
307
369
|
/**
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
370
|
+
* Retrieves the archivist for the payloadStore
|
|
371
|
+
* @returns The archivist for the payloadStore or undefined if not resolvable
|
|
372
|
+
*/
|
|
311
373
|
async getArchivistForStore() {
|
|
312
374
|
var _a, _b;
|
|
313
375
|
const name = (0, import_assert2.assertEx)((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.archivist, () => `${moduleName2}: Config for payloadStore.archivist not specified`);
|
|
@@ -317,15 +379,12 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_a
|
|
|
317
379
|
return import_archivist_wrapper.ArchivistWrapper.wrap(mod, this.account);
|
|
318
380
|
}
|
|
319
381
|
/**
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
382
|
+
* Retrieves the BoundWitness Diviner for the payloadStore
|
|
383
|
+
* @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable
|
|
384
|
+
*/
|
|
323
385
|
async getBoundWitnessDivinerForStore() {
|
|
324
386
|
var _a, _b;
|
|
325
|
-
const name = (0, import_assert2.assertEx)(
|
|
326
|
-
(_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner,
|
|
327
|
-
() => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`
|
|
328
|
-
);
|
|
387
|
+
const name = (0, import_assert2.assertEx)((_b = (_a = this.config) == null ? void 0 : _a.payloadStore) == null ? void 0 : _b.boundWitnessDiviner, () => `${moduleName2}: Config for payloadStore.boundWitnessDiviner not specified`);
|
|
329
388
|
const mod = await this.resolve(name);
|
|
330
389
|
if (!mod)
|
|
331
390
|
return void 0;
|
|
@@ -346,9 +405,22 @@ var TemporalIndexingDivinerStateToIndexCandidateDiviner = class extends import_a
|
|
|
346
405
|
if (filteredResults.includes(void 0))
|
|
347
406
|
return void 0;
|
|
348
407
|
const indexCandidates = filteredResults.filter(import_exists2.exists);
|
|
349
|
-
return [
|
|
408
|
+
return [
|
|
409
|
+
bw,
|
|
410
|
+
...indexCandidates
|
|
411
|
+
];
|
|
350
412
|
}
|
|
351
413
|
};
|
|
414
|
+
__name(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "TemporalIndexingDivinerStateToIndexCandidateDiviner");
|
|
415
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchema", import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema);
|
|
416
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "configSchemas", [
|
|
417
|
+
import_diviner_model5.DivinerConfigSchema,
|
|
418
|
+
import_diviner_temporal_indexing_model5.TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema
|
|
419
|
+
]);
|
|
420
|
+
__publicField(_TemporalIndexingDivinerStateToIndexCandidateDiviner, "labels", {
|
|
421
|
+
"network.xyo.diviner.stage": "stateToIndexCandidateDiviner"
|
|
422
|
+
});
|
|
423
|
+
var TemporalIndexingDivinerStateToIndexCandidateDiviner = _TemporalIndexingDivinerStateToIndexCandidateDiviner;
|
|
352
424
|
// Annotate the CommonJS export names for ESM import in node:
|
|
353
425
|
0 && (module.exports = {
|
|
354
426
|
TemporalIndexingDiviner,
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // Find the remaining indexable payloads\n const indexablePayloadPositions = this.indexableSchemas.map((schema) => bw.payload_schemas.indexOf(schema))\n const indexablePayloadHashes = indexablePayloadPositions.map((index) => bw.payload_hashes?.[index])\n const indexablePayloads = indexablePayloadHashes.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["import_diviner_model","import_diviner_temporal_indexing_model","import_abstract_diviner","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","indexablePayloads","import_abstract_diviner","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","import_assert","import_exists","import_abstract_diviner","import_boundwitness_model","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","moduleName"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/DivinerQueryToIndexQueryDiviner/Diviner.ts","../../src/IndexCandidateToIndexDiviner/Diviner.ts","../../src/IndexQueryResponseToDivinerQueryResponseDiviner/Diviner.ts","../../src/StateToIndexCandidateDiviner/Diviner.ts"],"sourcesContent":["export * from './Diviner'\nexport * from './DivinerQueryToIndexQueryDiviner'\nexport * from './IndexCandidateToIndexDiviner'\nexport * from './IndexQueryResponseToDivinerQueryResponseDiviner'\nexport * from './StateToIndexCandidateDiviner'\n","import { IndexingDiviner } from '@xyo-network/diviner-indexing-memory'\nimport { IndexingDivinerConfigSchema } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema, DivinerModule, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { TemporalIndexingDivinerConfigSchema, TemporalIndexingDivinerParams } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport class TemporalIndexingDiviner<\n TParams extends TemporalIndexingDivinerParams = TemporalIndexingDivinerParams,\n TIn extends Payload = Payload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut> = DivinerModuleEventData<DivinerModule<TParams>, TIn, TOut>,\n> extends IndexingDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchema = TemporalIndexingDivinerConfigSchema\n static override readonly configSchemas: string[] = [TemporalIndexingDivinerConfigSchema, IndexingDivinerConfigSchema, DivinerConfigSchema]\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n return true\n }\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { jsonPathToTransformersDictionary, reducePayloads } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport {\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema,\n TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n// TODO: Inherit from JsonPathAggregateDiviner\n/**\n * A diviner that converts diviner query to index query\n */\nexport class TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner<\n TParams extends TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'divinerQueryToIndexQueryDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * The schema of the diviner query payloads\n */\n protected get divinerQuerySchema(): string {\n return this.config.divinerQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index query payloads\n */\n protected get indexQuerySchema(): string {\n return this.config.indexQuerySchema ?? PayloadDivinerQuerySchema\n }\n\n /**\n * The schema of the index payloads\n */\n protected get indexSchema(): string {\n return this.config.indexSchema ?? TemporalIndexingDivinerResultIndexSchema\n }\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return (\n this.config?.schemaTransforms ?? {\n [this.divinerQuerySchema]: [\n {\n defaultValue: 1,\n destinationField: 'limit',\n sourcePathExpression: '$.limit',\n },\n {\n defaultValue: 0,\n destinationField: 'offset',\n sourcePathExpression: '$.offset',\n },\n {\n defaultValue: 'desc',\n destinationField: 'order',\n sourcePathExpression: '$.order',\n },\n ],\n }\n )\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const queries = payloads.filter(isPayloadOfSchemaType<PayloadDivinerQueryPayload>(this.divinerQuerySchema))\n if (queries.length > 0) {\n const results = await Promise.all(\n queries.map(async (query) => {\n const fields = await reducePayloads<PayloadDivinerQueryPayload & { sources?: string[] }>(\n [query],\n this.payloadTransformers,\n this.indexQuerySchema,\n )\n // TODO: Make index schema configurable\n fields.schemas = [this.indexSchema]\n // TODO: Make sources not need to be deleted\n delete fields.sources\n // TODO: Add support for additional filters\n return await new PayloadBuilder<Payload>({ schema: this.indexQuerySchema }).fields(fields).build()\n }),\n )\n return results\n }\n return []\n }\n}\n","import { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { jsonPathToTransformersDictionary } from '@xyo-network/diviner-jsonpath-aggregate-memory'\nimport { SchemaToJsonPathTransformExpressionsDictionary, SchemaToPayloadTransformersDictionary } from '@xyo-network/diviner-jsonpath-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema,\n TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n TemporalIndexingDivinerResultIndex,\n TemporalIndexingDivinerResultIndexSchema,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Labels } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, PayloadFields } from '@xyo-network/payload-model'\nimport { intraBoundwitnessSchemaCombinations } from '@xyo-network/payload-utils'\n\nexport type IndexablePayloads = [BoundWitness, ...Payload[]]\n\nconst moduleName = 'TemporalIndexingDivinerIndexCandidateToIndexDiviner'\n\n/**\n * Diviner which transforms index candidates to indexes using JSON Path to map\n * source properties in the supplied payloads to destination fields in the\n * resultant index\n */\nexport class TemporalIndexingDivinerIndexCandidateToIndexDiviner<\n TParams extends TemporalIndexingDivinerIndexCandidateToIndexDivinerParams = TemporalIndexingDivinerIndexCandidateToIndexDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override configSchema = TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexCandidateToIndexDiviner',\n }\n\n private _indexableSchemas: string[] | undefined\n private _payloadTransformers: SchemaToPayloadTransformersDictionary | undefined\n\n /**\n * List of indexable schemas for this diviner\n */\n protected get indexableSchemas(): string[] {\n if (!this._indexableSchemas) this._indexableSchemas = Object.keys(this.schemaTransforms)\n return this._indexableSchemas\n }\n\n /**\n * Dictionary of schemas to payload transformers for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get payloadTransformers(): SchemaToPayloadTransformersDictionary {\n if (!this._payloadTransformers) this._payloadTransformers = jsonPathToTransformersDictionary(this.schemaTransforms)\n return this._payloadTransformers\n }\n\n /**\n * The dictionary of schemas to JSON Path transform expressions for creating indexes\n * from the payloads within a Bound Witness\n */\n protected get schemaTransforms(): SchemaToJsonPathTransformExpressionsDictionary {\n return assertEx(this.config?.schemaTransforms, () => `${moduleName}: Missing config.schemaTransforms section`)\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n const bws: BoundWitness[] = payloads.filter(isBoundWitness)\n const indexablePayloads: Payload[] = payloads.filter((p) => this.isIndexablePayload(p))\n if (bws.length > 0 && indexablePayloads.length > 0) {\n const payloadDictionary = await PayloadHasher.toMap(payloads)\n // eslint-disable-next-line unicorn/no-array-reduce\n const validIndexableTuples: IndexablePayloads[] = bws.reduce<IndexablePayloads[]>((indexableTuples, bw) => {\n // If this Bound Witness doesn't contain all the required schemas don't index it\n if (!containsAll(bw.payload_schemas, this.indexableSchemas)) return indexableTuples\n // If it does contain all the required schemas, then find the combinations of payloads\n // that satisfy the required schemas\n intraBoundwitnessSchemaCombinations(bw, this.indexableSchemas).map((combination) => {\n const indexablePayloads = combination.map((hash) => payloadDictionary[hash]).filter(exists)\n // If we found a timestamp and the right amount of indexable payloads (of the\n // correct schema as checked above) in this BW, then index it\n if (indexablePayloads.length === this.indexableSchemas.length) indexableTuples.push([bw, ...indexablePayloads])\n })\n return indexableTuples\n }, [])\n // Create the indexes from the tuples\n const indexes = await Promise.all(\n validIndexableTuples.map<Promise<TemporalIndexingDivinerResultIndex>>(async ([bw, ...sourcePayloads]) => {\n // Use the payload transformers to convert the fields from the source payloads to the destination fields\n const indexFields = sourcePayloads.flatMap<PayloadFields[]>((payload) => {\n // Find the transformers for this payload\n const transformers = this.payloadTransformers[payload.schema]\n // If transformers exist, apply them to the payload otherwise return an empty array\n return transformers ? transformers.map((transform) => transform(payload)) : []\n })\n // Include all the sources for reference\n const sources = Object.keys(await PayloadHasher.toMap([bw, ...sourcePayloads]))\n // Build and return the index\n return await new PayloadBuilder<TemporalIndexingDivinerResultIndex>({ schema: TemporalIndexingDivinerResultIndexSchema })\n .fields(Object.assign({ sources }, ...indexFields))\n .build()\n }),\n )\n return indexes.flat()\n }\n return []\n }\n\n /**\n * Identifies if a payload is one that is indexed by this diviner\n * @param x The candidate payload\n * @returns True if the payload is one indexed by this diviner, false otherwise\n */\n protected isIndexablePayload = (x: Payload) => {\n return this.indexableSchemas.includes(x?.schema)\n }\n\n /**\n * Identifies if a schema is one that is indexed by this diviner\n * @param schema The candidate schema\n * @returns True if this schema is one indexed by this diviner, false otherwise\n */\n protected isIndexableSchema = (schema?: string | null) => {\n return typeof schema === 'string' ? this.indexableSchemas.includes(schema) : false\n }\n}\n","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema } from '@xyo-network/diviner-temporal-indexing-model'\nimport { Labels } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\n/**\n * Transforms an ImageThumbnailIndex response into an ImageThumbnailResponse response\n */\nexport class TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner extends AbstractDiviner {\n static override readonly configSchema = TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'indexQueryResponseToDivinerQueryResponseDiviner',\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<Payload[]> {\n // NOTE: We're not doing anything with the query payloads but some diviners\n // might want to use this to transform from the query to the response (for example\n // if we use a plaintext value in the query to generate a hash key in the index)\n // const queries = payloads.filter(isPayloadDivinerQueryPayload)\n const responses = payloads.filter((p) => !isPayloadDivinerQueryPayload(p))\n return await Promise.resolve(responses)\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistWrapper } from '@xyo-network/archivist-wrapper'\nimport { BoundWitness, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessDivinerQueryPayload, BoundWitnessDivinerQuerySchema } from '@xyo-network/diviner-boundwitness-model'\nimport { IndexingDivinerState } from '@xyo-network/diviner-indexing-model'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport {\n TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema,\n TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n} from '@xyo-network/diviner-temporal-indexing-model'\nimport { DivinerWrapper } from '@xyo-network/diviner-wrapper'\nimport { isModuleState, Labels, ModuleState, ModuleStateSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { TimeStamp, TimestampSchema } from '@xyo-network/witness-timestamp'\n\n/**\n * All Payload types involved in index candidates for indexing\n */\nexport type IndexCandidate = BoundWitness | Payload | TimeStamp\n\n/**\n * The response from the TemporalStateToIndexCandidateDiviner\n */\nexport type TemporalStateToIndexCandidateDivinerResponse = [\n /**\n * The next state of the diviner\n */\n nextState: ModuleState<IndexingDivinerState>,\n /**\n * The index candidates\n */\n ...IndexCandidate[],\n]\n\n/**\n * The default order to search Bound Witnesses to identify index candidates\n */\nconst order = 'asc'\n\n/**\n * The name of the module (for logging purposes)\n */\nconst moduleName = 'TemporalIndexingDivinerStateToIndexCandidateDiviner'\n\n/**\n * Transforms candidates for image thumbnail indexing into their indexed representation\n */\nexport class TemporalIndexingDivinerStateToIndexCandidateDiviner<\n TParams extends TemporalIndexingDivinerStateToIndexCandidateDivinerParams = TemporalIndexingDivinerStateToIndexCandidateDivinerParams,\n> extends AbstractDiviner<TParams> {\n static override readonly configSchema = TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema\n static override configSchemas = [DivinerConfigSchema, TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema]\n static labels: Labels = {\n 'network.xyo.diviner.stage': 'stateToIndexCandidateDiviner',\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 1000\n }\n\n /**\n * The required payload_schemas within BoundWitnesses to identify index candidates\n */\n protected get payload_schemas(): string[] {\n const schemas = this.config.filter?.payload_schemas\n return [TimestampSchema, ...(schemas ?? [])]\n }\n\n protected override async divineHandler(payloads: Payload[] = []): Promise<[ModuleState, ...IndexCandidate[]]> {\n // Retrieve the last state from what was passed in\n const lastState = payloads.find(isModuleState<IndexingDivinerState>)\n // If there is no last state, start from the beginning\n if (!lastState) return [{ schema: ModuleStateSchema, state: { offset: 0 } }]\n // Otherwise, get the last offset\n const { offset } = lastState.state\n // Get next batch of results starting from the offset\n const boundWitnessDiviner = await this.getBoundWitnessDivinerForStore()\n if (!boundWitnessDiviner) return [lastState]\n const query = await new PayloadBuilder<BoundWitnessDivinerQueryPayload>({ schema: BoundWitnessDivinerQuerySchema })\n .fields({ limit: this.payloadDivinerLimit, offset, order, payload_schemas: this.payload_schemas })\n .build()\n const batch = await boundWitnessDiviner.divine([query])\n if (batch.length === 0) return [lastState]\n // Get source data\n const sourceArchivist = await this.getArchivistForStore()\n if (!sourceArchivist) return [lastState]\n const indexCandidates: IndexCandidate[] = (\n await Promise.all(batch.filter(isBoundWitness).map((bw) => this.getPayloadsInBoundWitness(bw, sourceArchivist)))\n )\n .filter(exists)\n .flat()\n const nextState = { schema: ModuleStateSchema, state: { ...lastState.state, offset: offset + batch.length } }\n return [nextState, ...indexCandidates]\n }\n /**\n * Retrieves the archivist for the payloadStore\n * @returns The archivist for the payloadStore or undefined if not resolvable\n */\n protected async getArchivistForStore(): Promise<ArchivistWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(this.config?.payloadStore?.archivist, () => `${moduleName}: Config for payloadStore.archivist not specified`)\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped archivist\n return ArchivistWrapper.wrap(mod, this.account)\n }\n\n /**\n * Retrieves the BoundWitness Diviner for the payloadStore\n * @returns The BoundWitness Diviner for the payloadStore or undefined if not resolvable\n */\n protected async getBoundWitnessDivinerForStore(): Promise<DivinerWrapper | undefined> {\n // It should be defined, so we'll error if it's not\n const name: string = assertEx(\n this.config?.payloadStore?.boundWitnessDiviner,\n () => `${moduleName}: Config for payloadStore.boundWitnessDiviner not specified`,\n )\n // It might not be resolvable (yet), so we'll return undefined if it's not\n const mod = await this.resolve(name)\n if (!mod) return undefined\n // Return the wrapped diviner\n return DivinerWrapper.wrap(mod, this.account)\n }\n\n protected async getPayloadsInBoundWitness(bw: BoundWitness, archivist: ArchivistInstance): Promise<IndexCandidate[] | undefined> {\n const indexes = this.payload_schemas.map((schema) => bw.payload_schemas?.findIndex((s) => s === schema))\n const hashes = indexes.map((index) => bw.payload_hashes?.[index])\n const results = await archivist.get(hashes)\n const indexCandidateIdentityFunctions = this.payload_schemas.map(isPayloadOfSchemaType)\n const filteredResults = indexCandidateIdentityFunctions.map((is) => results.find(is))\n if (filteredResults.includes(undefined)) return undefined\n const indexCandidates: IndexCandidate[] = filteredResults.filter(exists) as IndexCandidate[]\n return [bw, ...indexCandidates]\n }\n}\n"],"mappings":"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","names":["TemporalIndexingDiviner","IndexingDiviner","startHandler","configSchema","TemporalIndexingDivinerConfigSchema","configSchemas","IndexingDivinerConfigSchema","DivinerConfigSchema","import_diviner_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerDivinerQueryToIndexQueryDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","divinerQuerySchema","config","PayloadDivinerQuerySchema","indexQuerySchema","indexSchema","TemporalIndexingDivinerResultIndexSchema","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","defaultValue","destinationField","sourcePathExpression","divineHandler","payloads","queries","filter","isPayloadOfSchemaType","length","results","Promise","all","map","query","fields","reducePayloads","schemas","sources","PayloadBuilder","schema","build","configSchema","TemporalIndexingDivinerDivinerQueryToIndexQueryDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_abstract_diviner","import_diviner_jsonpath_aggregate_memory","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","moduleName","TemporalIndexingDivinerIndexCandidateToIndexDiviner","AbstractDiviner","_indexableSchemas","_payloadTransformers","indexableSchemas","Object","keys","schemaTransforms","payloadTransformers","jsonPathToTransformersDictionary","assertEx","config","divineHandler","payloads","bws","filter","isBoundWitness","indexablePayloads","p","isIndexablePayload","length","payloadDictionary","PayloadHasher","toMap","validIndexableTuples","reduce","indexableTuples","bw","containsAll","payload_schemas","intraBoundwitnessSchemaCombinations","map","combination","hash","exists","push","indexes","Promise","all","sourcePayloads","indexFields","flatMap","payload","transformers","schema","transform","sources","PayloadBuilder","TemporalIndexingDivinerResultIndexSchema","fields","assign","build","flat","x","includes","isIndexableSchema","configSchema","TemporalIndexingDivinerIndexCandidateToIndexDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_abstract_diviner","import_diviner_model","import_diviner_payload_model","import_diviner_temporal_indexing_model","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDiviner","AbstractDiviner","divineHandler","payloads","responses","filter","p","isPayloadDivinerQueryPayload","Promise","resolve","configSchema","TemporalIndexingDivinerIndexQueryResponseToDivinerQueryResponseDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels","import_assert","import_exists","import_abstract_diviner","import_boundwitness_model","import_diviner_model","import_diviner_temporal_indexing_model","import_payload_builder","import_payload_model","order","moduleName","TemporalIndexingDivinerStateToIndexCandidateDiviner","AbstractDiviner","payloadDivinerLimit","config","payload_schemas","schemas","filter","TimestampSchema","divineHandler","payloads","lastState","find","isModuleState","schema","ModuleStateSchema","state","offset","boundWitnessDiviner","getBoundWitnessDivinerForStore","query","PayloadBuilder","BoundWitnessDivinerQuerySchema","fields","limit","build","batch","divine","length","sourceArchivist","getArchivistForStore","indexCandidates","Promise","all","isBoundWitness","map","bw","getPayloadsInBoundWitness","exists","flat","nextState","name","assertEx","payloadStore","archivist","mod","resolve","undefined","ArchivistWrapper","wrap","account","DivinerWrapper","indexes","findIndex","s","hashes","index","payload_hashes","results","get","indexCandidateIdentityFunctions","isPayloadOfSchemaType","filteredResults","is","includes","configSchema","TemporalIndexingDivinerStateToIndexCandidateDivinerConfigSchema","configSchemas","DivinerConfigSchema","labels"]}
|