@xyo-network/image-thumbnail-plugin 2.75.0 → 2.75.2
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/docs.json +50260 -0
- package/dist/node/Diviner/Config.d.cts +11 -0
- package/dist/node/Diviner/Config.d.cts.map +1 -0
- package/dist/node/Diviner/Config.js +3 -1
- package/dist/node/Diviner/Config.js.map +1 -1
- package/dist/node/Diviner/Config.mjs +2 -1
- package/dist/node/Diviner/Config.mjs.map +1 -1
- package/dist/node/Diviner/Diviner.d.cts +30 -0
- package/dist/node/Diviner/Diviner.d.cts.map +1 -0
- package/dist/node/Diviner/Diviner.js +19 -11
- package/dist/node/Diviner/Diviner.js.map +1 -1
- package/dist/node/Diviner/Diviner.mjs +17 -10
- package/dist/node/Diviner/Diviner.mjs.map +1 -1
- package/dist/node/Diviner/Params.d.cts +5 -0
- package/dist/node/Diviner/Params.d.cts.map +1 -0
- package/dist/node/Diviner/Params.js +2 -0
- package/dist/node/Diviner/Params.js.map +1 -1
- package/dist/node/Diviner/index.d.cts +4 -0
- package/dist/node/Diviner/index.d.cts.map +1 -0
- package/dist/node/Diviner/index.js +189 -7
- package/dist/node/Diviner/index.js.map +1 -1
- package/dist/node/Diviner/index.mjs +180 -3
- package/dist/node/Diviner/index.mjs.map +1 -1
- package/dist/node/Plugin.d.cts +116 -0
- package/dist/node/Plugin.d.cts.map +1 -0
- package/dist/node/Plugin.js +517 -7
- package/dist/node/Plugin.js.map +1 -1
- package/dist/node/Plugin.mjs +504 -5
- package/dist/node/Plugin.mjs.map +1 -1
- package/dist/node/Witness/Config.d.cts +16 -0
- package/dist/node/Witness/Config.d.cts.map +1 -0
- package/dist/node/Witness/Config.js +3 -1
- package/dist/node/Witness/Config.js.map +1 -1
- package/dist/node/Witness/Config.mjs +2 -1
- package/dist/node/Witness/Config.mjs.map +1 -1
- package/dist/node/Witness/Params.d.cts +7 -0
- package/dist/node/Witness/Params.d.cts.map +1 -0
- package/dist/node/Witness/Params.js +2 -0
- package/dist/node/Witness/Params.js.map +1 -1
- package/dist/node/Witness/Witness.d.cts +66 -0
- package/dist/node/Witness/Witness.d.cts.map +1 -0
- package/dist/node/Witness/Witness.js +78 -29
- package/dist/node/Witness/Witness.js.map +1 -1
- package/dist/node/Witness/Witness.mjs +70 -22
- package/dist/node/Witness/Witness.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts +8 -0
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js +5 -3
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.js.map +1 -1
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.mjs +4 -3
- package/dist/node/Witness/ffmpeg/fluent/getVideoFrameAsImageFluent.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/fluent/index.d.cts +2 -0
- package/dist/node/Witness/ffmpeg/fluent/index.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/fluent/index.js +59 -3
- package/dist/node/Witness/ffmpeg/fluent/index.js.map +1 -1
- package/dist/node/Witness/ffmpeg/fluent/index.mjs +41 -1
- package/dist/node/Witness/ffmpeg/fluent/index.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/index.d.cts +3 -0
- package/dist/node/Witness/ffmpeg/index.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/index.js +89 -5
- package/dist/node/Witness/ffmpeg/index.js.map +1 -1
- package/dist/node/Witness/ffmpeg/index.mjs +69 -2
- package/dist/node/Witness/ffmpeg/index.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.cts +9 -0
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.js +3 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.js.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.mjs +2 -1
- package/dist/node/Witness/ffmpeg/spawn/executeFfmpeg.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts +8 -0
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.js +26 -3
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.js.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.mjs +22 -2
- package/dist/node/Witness/ffmpeg/spawn/getVideoFrameAsImage.mjs.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/index.d.cts +3 -0
- package/dist/node/Witness/ffmpeg/spawn/index.d.cts.map +1 -0
- package/dist/node/Witness/ffmpeg/spawn/index.js +38 -5
- package/dist/node/Witness/ffmpeg/spawn/index.js.map +1 -1
- package/dist/node/Witness/ffmpeg/spawn/index.mjs +29 -2
- package/dist/node/Witness/ffmpeg/spawn/index.mjs.map +1 -1
- package/dist/node/Witness/index.d.cts +4 -0
- package/dist/node/Witness/index.d.cts.map +1 -0
- package/dist/node/Witness/index.js +343 -7
- package/dist/node/Witness/index.js.map +1 -1
- package/dist/node/Witness/index.mjs +324 -3
- package/dist/node/Witness/index.mjs.map +1 -1
- package/dist/node/index.d.cts +6 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.js +542 -8
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +523 -3
- package/dist/node/index.mjs.map +1 -1
- package/package.json +19 -19
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DivinerConfig } from '@xyo-network/diviner-model';
|
|
2
|
+
export declare const ImageThumbnailDivinerConfigSchema: "network.xyo.image.thumbnail.diviner.config";
|
|
3
|
+
export type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema;
|
|
4
|
+
export type ImageThumbnailDivinerConfig = DivinerConfig<{
|
|
5
|
+
archivist?: string;
|
|
6
|
+
payloadDiviner?: string;
|
|
7
|
+
payloadDivinerLimit?: number;
|
|
8
|
+
pollFrequency?: number;
|
|
9
|
+
schema: ImageThumbnailDivinerConfigSchema;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/Diviner/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAG1D,eAAO,MAAM,iCAAiC,8CAAoD,CAAA;AAClG,MAAM,MAAM,iCAAiC,GAAG,OAAO,iCAAiC,CAAA;AAExF,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,iCAAiC,CAAA;CAC1C,CAAC,CAAA"}
|
|
@@ -16,13 +16,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Diviner/Config.ts
|
|
19
21
|
var Config_exports = {};
|
|
20
22
|
__export(Config_exports, {
|
|
21
23
|
ImageThumbnailDivinerConfigSchema: () => ImageThumbnailDivinerConfigSchema
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(Config_exports);
|
|
24
26
|
var import_image_thumbnail_payload_plugin = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
25
|
-
|
|
27
|
+
var ImageThumbnailDivinerConfigSchema = `${import_image_thumbnail_payload_plugin.ImageThumbnailSchema}.diviner.config`;
|
|
26
28
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
29
|
0 && (module.exports = {
|
|
28
30
|
ImageThumbnailDivinerConfigSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Diviner/Config.ts"],"sourcesContent":["import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/Diviner/Config.ts"],"sourcesContent":["import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4CAAqC;AAE9B,IAAM,oCAAoC,GAAG,0DAAoB;","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
// src/Diviner/Config.ts
|
|
1
2
|
import { ImageThumbnailSchema } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
2
|
-
|
|
3
|
+
var ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config`;
|
|
3
4
|
export {
|
|
4
5
|
ImageThumbnailDivinerConfigSchema
|
|
5
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Diviner/Config.ts"],"sourcesContent":["import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":"AACA,SAAS,4BAA4B;AAE9B,
|
|
1
|
+
{"version":3,"sources":["../../../src/Diviner/Config.ts"],"sourcesContent":["import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":";AACA,SAAS,4BAA4B;AAE9B,IAAM,oCAAoC,GAAG,oBAAoB;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AbstractDiviner } from '@xyo-network/abstract-diviner';
|
|
2
|
+
import { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
3
|
+
import { DivinerInstance } from '@xyo-network/diviner-model';
|
|
4
|
+
import { ImageThumbnail } from '@xyo-network/image-thumbnail-payload-plugin';
|
|
5
|
+
import { UrlPayload } from '@xyo-network/url-payload-plugin';
|
|
6
|
+
import { ImageThumbnailDivinerParams } from './Params';
|
|
7
|
+
export declare class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {
|
|
8
|
+
static configSchemas: ("network.xyo.image.thumbnail.diviner.config" | "network.xyo.diviner.config")[];
|
|
9
|
+
private _archivistInstance;
|
|
10
|
+
private _initializeArchivistConnectionIfNeededPromise;
|
|
11
|
+
private _map;
|
|
12
|
+
private _payloadDivinerInstance;
|
|
13
|
+
private _pollId?;
|
|
14
|
+
get archivist(): (import("@xyo-network/module-model").ArchivistModuleConfig & (import("@xyo-network/module-model").ArchivistModuleConfig & string)) | undefined;
|
|
15
|
+
get payloadDiviner(): string | undefined;
|
|
16
|
+
get payloadDivinerLimit(): number;
|
|
17
|
+
get pollFrequency(): number | undefined;
|
|
18
|
+
getArchivistInstance(): Promise<ArchivistInstance>;
|
|
19
|
+
getPayloadDivinerInstance(): Promise<DivinerInstance | undefined>;
|
|
20
|
+
protected divineHandler(payloads?: UrlPayload[]): Promise<ImageThumbnail[]>;
|
|
21
|
+
protected initializeArchivistConnectionIfNeeded(): Promise<void>;
|
|
22
|
+
protected loadMap(): Promise<void>;
|
|
23
|
+
protected loadMapWithAll(): Promise<void>;
|
|
24
|
+
protected loadMapWithPayloadDiviner(): Promise<void>;
|
|
25
|
+
protected stopHandler(_timeout?: number | undefined): Promise<boolean>;
|
|
26
|
+
private attachArchivistEvents;
|
|
27
|
+
private getSafeMap;
|
|
28
|
+
private poll;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=Diviner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../../src/Diviner/Diviner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAuB,MAAM,8BAA8B,CAAA;AAErF,OAAO,EAA0C,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEpG,OAAO,EAAE,cAAc,EAAwB,MAAM,6CAA6C,CAAA;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAG5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAEtD,qBAAa,qBAAqB,CAAC,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,SAAQ,eAAe,CAAC,OAAO,CAAC;IAC5I,OAAgB,aAAa,kFAA2D;IAExF,OAAO,CAAC,kBAAkB,CAAwC;IAClE,OAAO,CAAC,6CAA6C,CAA2B;IAChF,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,uBAAuB,CAAsC;IACrE,OAAO,CAAC,OAAO,CAAC,CAAkC;IAMlD,IAAI,SAAS,mJAEZ;IAED,IAAI,cAAc,uBAEjB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,aAAa,uBAEhB;IAGK,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAelD,yBAAyB,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;cAkB9C,aAAa,CAAC,QAAQ,GAAE,UAAU,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAU9F,SAAS,CAAC,qCAAqC;cAc/B,OAAO;cAQP,cAAc;cAiBd,yBAAyB;cAgChB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAQvE,qBAAqB;YAUrB,UAAU;YAcV,IAAI;CAcnB"}
|
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Diviner/Diviner.ts
|
|
19
21
|
var Diviner_exports = {};
|
|
20
22
|
__export(Diviner_exports, {
|
|
21
23
|
ImageThumbnailDiviner: () => ImageThumbnailDiviner
|
|
@@ -29,10 +31,15 @@ var import_archivist_model = require("@xyo-network/archivist-model");
|
|
|
29
31
|
var import_core = require("@xyo-network/core");
|
|
30
32
|
var import_diviner_model = require("@xyo-network/diviner-model");
|
|
31
33
|
var import_diviner_payload_model = require("@xyo-network/diviner-payload-model");
|
|
34
|
+
var import_image_thumbnail_payload_plugin2 = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
35
|
+
|
|
36
|
+
// src/Diviner/Config.ts
|
|
32
37
|
var import_image_thumbnail_payload_plugin = require("@xyo-network/image-thumbnail-payload-plugin");
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
var ImageThumbnailDivinerConfigSchema = `${import_image_thumbnail_payload_plugin.ImageThumbnailSchema}.diviner.config`;
|
|
39
|
+
|
|
40
|
+
// src/Diviner/Diviner.ts
|
|
41
|
+
var ImageThumbnailDiviner = class extends import_abstract_diviner.AbstractDiviner {
|
|
42
|
+
static configSchemas = [ImageThumbnailDivinerConfigSchema, import_diviner_model.DivinerConfigSchema];
|
|
36
43
|
_archivistInstance;
|
|
37
44
|
_initializeArchivistConnectionIfNeededPromise;
|
|
38
45
|
_map;
|
|
@@ -83,8 +90,8 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
83
90
|
const urls = payloads.map((urlPayload) => urlPayload.url);
|
|
84
91
|
const map = await this.getSafeMap();
|
|
85
92
|
const archivist = await this.getArchivistInstance();
|
|
86
|
-
const hashes = (0, import_lodash.compact)(urls.map((url) => map
|
|
87
|
-
return (await archivist.get(hashes)).filter((payload) => payload.schema ===
|
|
93
|
+
const hashes = (0, import_lodash.compact)(urls.map((url) => map == null ? void 0 : map[url]));
|
|
94
|
+
return (await archivist.get(hashes)).filter((payload) => payload.schema === import_image_thumbnail_payload_plugin2.ImageThumbnailSchema);
|
|
88
95
|
}
|
|
89
96
|
//using promise as mutex
|
|
90
97
|
initializeArchivistConnectionIfNeeded() {
|
|
@@ -106,12 +113,13 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
115
|
async loadMapWithAll() {
|
|
116
|
+
var _a;
|
|
109
117
|
if (await this.started()) {
|
|
110
118
|
const archivist = await this.getArchivistInstance();
|
|
111
119
|
(0, import_assert.assertEx)(archivist.all, "Archivist does not support 'all'");
|
|
112
|
-
const allPayloads = await archivist.all
|
|
120
|
+
const allPayloads = await ((_a = archivist.all) == null ? void 0 : _a.call(archivist)) ?? [];
|
|
113
121
|
const imagePayloadPairs = await Promise.all(
|
|
114
|
-
allPayloads.filter((payload) => payload.schema ===
|
|
122
|
+
allPayloads.filter((payload) => payload.schema === import_image_thumbnail_payload_plugin2.ImageThumbnailSchema).map(async (payload) => [await import_core.PayloadHasher.hashAsync(payload), payload])
|
|
115
123
|
);
|
|
116
124
|
this._map = imagePayloadPairs.reduce((prev, [hash, payload]) => {
|
|
117
125
|
prev[payload.sourceUrl] = hash;
|
|
@@ -132,7 +140,7 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
132
140
|
limit: this.payloadDivinerLimit,
|
|
133
141
|
offset,
|
|
134
142
|
schema: import_diviner_payload_model.PayloadDivinerQuerySchema,
|
|
135
|
-
schemas: [
|
|
143
|
+
schemas: [import_image_thumbnail_payload_plugin2.ImageThumbnailSchema]
|
|
136
144
|
};
|
|
137
145
|
const payloads = await diviner.divine([payloadDivinerQuery]);
|
|
138
146
|
offset = (offset ?? 0) + payloads.length;
|
|
@@ -140,7 +148,7 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
140
148
|
console.log(`loadMapWithPayloadDiviner.offset: ${offset}`);
|
|
141
149
|
console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`);
|
|
142
150
|
const imagePayloadPairs = await Promise.all(
|
|
143
|
-
payloads.filter((payload) => payload.schema ===
|
|
151
|
+
payloads.filter((payload) => payload.schema === import_image_thumbnail_payload_plugin2.ImageThumbnailSchema).map(async (payload) => [await import_core.PayloadHasher.hashAsync(payload), payload])
|
|
144
152
|
);
|
|
145
153
|
imagePayloadPairs.forEach(([hash, payload]) => newMap[payload.sourceUrl] = hash);
|
|
146
154
|
}
|
|
@@ -160,7 +168,7 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
160
168
|
const mapPromise = this.getSafeMap();
|
|
161
169
|
archivist.on("inserted", async ({ payloads }) => {
|
|
162
170
|
const map = await mapPromise;
|
|
163
|
-
const thumbnails = (0, import_lodash.compact)(payloads.filter((payload) => payload.schema ===
|
|
171
|
+
const thumbnails = (0, import_lodash.compact)(payloads.filter((payload) => payload.schema === import_image_thumbnail_payload_plugin2.ImageThumbnailSchema));
|
|
164
172
|
await Promise.all(thumbnails.map(async (payload) => map[payload.sourceUrl] = await import_core.PayloadHasher.hashAsync(payload)));
|
|
165
173
|
});
|
|
166
174
|
}
|
|
@@ -191,7 +199,7 @@ class ImageThumbnailDiviner extends import_abstract_diviner.AbstractDiviner {
|
|
|
191
199
|
}
|
|
192
200
|
}
|
|
193
201
|
}
|
|
194
|
-
}
|
|
202
|
+
};
|
|
195
203
|
// Annotate the CommonJS export names for ESM import in node:
|
|
196
204
|
0 && (module.exports = {
|
|
197
205
|
ImageThumbnailDiviner
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Diviner/Diviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { compact } from '@xylabs/lodash'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { asDivinerInstance, DivinerConfigSchema, DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnail, ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { UrlPayload } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerConfigSchema } from './Config'\nimport { ImageThumbnailDivinerParams } from './Params'\n\nexport class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema]\n\n private _archivistInstance: Promise<ArchivistInstance> | undefined\n private _initializeArchivistConnectionIfNeededPromise: Promise<void> | undefined\n private _map: Record<string, string> | undefined\n private _payloadDivinerInstance: Promise<DivinerInstance> | undefined\n private _pollId?: string | number | NodeJS.Timeout\n\n // static override get configSchema() {\n // return ImageThumbnailDivinerConfigSchema\n // }\n\n get archivist() {\n return this.config.archivist\n }\n\n get payloadDiviner() {\n return this.config.payloadDiviner\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 10000\n }\n\n get pollFrequency() {\n return this.config.pollFrequency\n }\n\n //using promise as mutex\n async getArchivistInstance(): Promise<ArchivistInstance> {\n //if previously checked, but not found, clear promise\n if (this._archivistInstance && !(await this._archivistInstance)) {\n this._archivistInstance = undefined\n }\n this._archivistInstance =\n this._archivistInstance ??\n (async () => {\n const module = this.archivist ? await this.resolve(this.archivist) : undefined\n return asArchivistInstance(module, 'Provided archivist address did not resolve to an Archivist')\n })()\n return this._archivistInstance\n }\n\n //using promise as mutex\n async getPayloadDivinerInstance(): Promise<DivinerInstance | undefined> {\n const payloadDivinerAddress = this.payloadDiviner\n if (payloadDivinerAddress) {\n //if previously checked, but not found, clear promise\n if (this._payloadDivinerInstance && !(await this._payloadDivinerInstance)) {\n this._payloadDivinerInstance = undefined\n }\n this._payloadDivinerInstance =\n this._payloadDivinerInstance ??\n (async () => {\n const module = await this.resolve(payloadDivinerAddress)\n return asDivinerInstance(module, 'Provided payload diviner address did not resolve to a Diviner')\n })()\n\n return this._payloadDivinerInstance\n }\n }\n\n protected override async divineHandler(payloads: UrlPayload[] = []): Promise<ImageThumbnail[]> {\n await this.initializeArchivistConnectionIfNeeded()\n const urls = payloads.map((urlPayload) => urlPayload.url)\n const map = await this.getSafeMap()\n const archivist = await this.getArchivistInstance()\n const hashes = compact(urls.map((url) => map?.[url]))\n return (await archivist.get(hashes)).filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n }\n\n //using promise as mutex\n protected initializeArchivistConnectionIfNeeded() {\n this._initializeArchivistConnectionIfNeededPromise =\n this._initializeArchivistConnectionIfNeededPromise ??\n (async () => {\n if (!this._map) {\n await this.attachArchivistEvents()\n console.log('initializeArchivistConnectionIfNeeded: attachArchivistEvents done')\n await this.poll()\n console.log('initializeArchivistConnectionIfNeeded: poll done')\n }\n })()\n return this._initializeArchivistConnectionIfNeededPromise\n }\n\n protected async loadMap() {\n if (this.payloadDiviner) {\n return await this.loadMapWithPayloadDiviner()\n } else {\n return await this.loadMapWithAll()\n }\n }\n\n protected async loadMapWithAll() {\n if (await this.started()) {\n const archivist = await this.getArchivistInstance()\n assertEx(archivist.all, \"Archivist does not support 'all'\")\n const allPayloads = (await archivist.all?.()) ?? []\n const imagePayloadPairs = await Promise.all(\n allPayloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n this._map = imagePayloadPairs.reduce<Record<string, string>>((prev, [hash, payload]) => {\n prev[payload.sourceUrl] = hash\n return prev\n }, {})\n }\n }\n\n protected async loadMapWithPayloadDiviner() {\n console.log('loadMapWithPayloadDiviner: started')\n if (await this.started()) {\n const diviner = await this.getPayloadDivinerInstance()\n let offset: number | undefined = undefined\n let moreAvailable = true\n if (diviner) {\n const newMap: Record<string, string> = {}\n while (moreAvailable) {\n const payloadDivinerQuery: PayloadDivinerQueryPayload = {\n limit: this.payloadDivinerLimit,\n offset,\n schema: PayloadDivinerQuerySchema,\n schemas: [ImageThumbnailSchema],\n }\n const payloads = await diviner.divine([payloadDivinerQuery])\n offset = (offset ?? 0) + payloads.length\n moreAvailable = payloads.length > 0\n console.log(`loadMapWithPayloadDiviner.offset: ${offset}`)\n console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`)\n const imagePayloadPairs = await Promise.all(\n payloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n imagePayloadPairs.forEach(([hash, payload]) => (newMap[payload.sourceUrl] = hash))\n }\n this._map = newMap\n }\n }\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n if (this._pollId) {\n clearTimeout(this._pollId)\n this._pollId = undefined\n }\n return await super.stopHandler()\n }\n\n private async attachArchivistEvents() {\n const archivist = await this.getArchivistInstance()\n const mapPromise = this.getSafeMap()\n archivist.on('inserted', async ({ payloads }) => {\n const map = await mapPromise\n const thumbnails = compact(payloads.filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema))\n await Promise.all(thumbnails.map(async (payload) => (map[payload.sourceUrl] = await PayloadHasher.hashAsync(payload))))\n })\n }\n\n private async getSafeMap() {\n let mapRetry = 100 //10 seconds max\n let map = this._map\n while (!map) {\n await delay(100)\n mapRetry = mapRetry - 1\n if (mapRetry === 0) {\n throw Error('Map Not Loaded')\n }\n map = this._map\n }\n return map\n }\n\n private async poll() {\n if (await this.started()) {\n const pollFrequency = this.pollFrequency\n if (pollFrequency) {\n this._pollId = setTimeout(async () => {\n this._pollId = undefined\n await this.loadMap()\n await this.poll()\n }, pollFrequency)\n } else {\n await this.loadMap()\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;AACzB,mBAAsB;AACtB,oBAAwB;AACxB,8BAAgC;AAChC,6BAAuD;AACvD,kBAA8B;AAC9B,2BAAwE;AACxE,mCAAsE;AACtE,4CAAqD;AAGrD,oBAAkD;AAG3C,MAAM,8BAAyG,wCAAyB;AAAA,EAC7I,OAAgB,gBAAgB,CAAC,iDAAmC,wCAAmB;AAAA,EAE/E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAMR,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,sBAAsB;AACxB,WAAO,KAAK,OAAO,uBAAuB;AAAA,EAC5C;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,uBAAmD;AAEvD,QAAI,KAAK,sBAAsB,CAAE,MAAM,KAAK,oBAAqB;AAC/D,WAAK,qBAAqB;AAAA,IAC5B;AACA,SAAK,qBACH,KAAK,uBACJ,YAAY;AACX,YAAMA,UAAS,KAAK,YAAY,MAAM,KAAK,QAAQ,KAAK,SAAS,IAAI;AACrE,iBAAO,4CAAoBA,SAAQ,4DAA4D;AAAA,IACjG,GAAG;AACL,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,MAAM,4BAAkE;AACtE,UAAM,wBAAwB,KAAK;AACnC,QAAI,uBAAuB;AAEzB,UAAI,KAAK,2BAA2B,CAAE,MAAM,KAAK,yBAA0B;AACzE,aAAK,0BAA0B;AAAA,MACjC;AACA,WAAK,0BACH,KAAK,4BACJ,YAAY;AACX,cAAMA,UAAS,MAAM,KAAK,QAAQ,qBAAqB;AACvD,mBAAO,wCAAkBA,SAAQ,+DAA+D;AAAA,MAClG,GAAG;AAEL,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAyB,cAAc,WAAyB,CAAC,GAA8B;AAC7F,UAAM,KAAK,sCAAsC;AACjD,UAAM,OAAO,SAAS,IAAI,CAAC,eAAe,WAAW,GAAG;AACxD,UAAM,MAAM,MAAM,KAAK,WAAW;AAClC,UAAM,YAAY,MAAM,KAAK,qBAAqB;AAClD,UAAM,aAAS,uBAAQ,KAAK,IAAI,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC;AACpD,YAAQ,MAAM,UAAU,IAAI,MAAM,GAAG,OAAO,CAAC,YAAuC,QAAQ,WAAW,0DAAoB;AAAA,EAC7H;AAAA;AAAA,EAGU,wCAAwC;AAChD,SAAK,gDACH,KAAK,kDACJ,YAAY;AACX,UAAI,CAAC,KAAK,MAAM;AACd,cAAM,KAAK,sBAAsB;AACjC,gBAAQ,IAAI,mEAAmE;AAC/E,cAAM,KAAK,KAAK;AAChB,gBAAQ,IAAI,kDAAkD;AAAA,MAChE;AAAA,IACF,GAAG;AACL,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAgB,UAAU;AACxB,QAAI,KAAK,gBAAgB;AACvB,aAAO,MAAM,KAAK,0BAA0B;AAAA,IAC9C,OAAO;AACL,aAAO,MAAM,KAAK,eAAe;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,MAAgB,iBAAiB;AAC/B,QAAI,MAAM,KAAK,QAAQ,GAAG;AACxB,YAAM,YAAY,MAAM,KAAK,qBAAqB;AAClD,kCAAS,UAAU,KAAK,kCAAkC;AAC1D,YAAM,cAAe,MAAM,UAAU,MAAM,KAAM,CAAC;AAClD,YAAM,oBAAoB,MAAM,QAAQ;AAAA,QACtC,YACG,OAAO,CAAC,YAAuC,QAAQ,WAAW,0DAAoB,EACtF,IAAuC,OAAO,YAAY,CAAC,MAAM,0BAAc,UAAU,OAAO,GAAG,OAAO,CAAC;AAAA,MAChH;AACA,WAAK,OAAO,kBAAkB,OAA+B,CAAC,MAAM,CAAC,MAAM,OAAO,MAAM;AACtF,aAAK,QAAQ,SAAS,IAAI;AAC1B,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAgB,4BAA4B;AAC1C,YAAQ,IAAI,oCAAoC;AAChD,QAAI,MAAM,KAAK,QAAQ,GAAG;AACxB,YAAM,UAAU,MAAM,KAAK,0BAA0B;AACrD,UAAI,SAA6B;AACjC,UAAI,gBAAgB;AACpB,UAAI,SAAS;AACX,cAAM,SAAiC,CAAC;AACxC,eAAO,eAAe;AACpB,gBAAM,sBAAkD;AAAA,YACtD,OAAO,KAAK;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,YACR,SAAS,CAAC,0DAAoB;AAAA,UAChC;AACA,gBAAM,WAAW,MAAM,QAAQ,OAAO,CAAC,mBAAmB,CAAC;AAC3D,oBAAU,UAAU,KAAK,SAAS;AAClC,0BAAgB,SAAS,SAAS;AAClC,kBAAQ,IAAI,qCAAqC,MAAM,EAAE;AACzD,kBAAQ,IAAI,4CAA4C,aAAa,EAAE;AACvE,gBAAM,oBAAoB,MAAM,QAAQ;AAAA,YACtC,SACG,OAAO,CAAC,YAAuC,QAAQ,WAAW,0DAAoB,EACtF,IAAuC,OAAO,YAAY,CAAC,MAAM,0BAAc,UAAU,OAAO,GAAG,OAAO,CAAC;AAAA,UAChH;AACA,4BAAkB,QAAQ,CAAC,CAAC,MAAM,OAAO,MAAO,OAAO,QAAQ,SAAS,IAAI,IAAK;AAAA,QACnF;AACA,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAyB,YAAY,UAAiD;AACpF,QAAI,KAAK,SAAS;AAChB,mBAAa,KAAK,OAAO;AACzB,WAAK,UAAU;AAAA,IACjB;AACA,WAAO,MAAM,MAAM,YAAY;AAAA,EACjC;AAAA,EAEA,MAAc,wBAAwB;AACpC,UAAM,YAAY,MAAM,KAAK,qBAAqB;AAClD,UAAM,aAAa,KAAK,WAAW;AACnC,cAAU,GAAG,YAAY,OAAO,EAAE,SAAS,MAAM;AAC/C,YAAM,MAAM,MAAM;AAClB,YAAM,iBAAa,uBAAQ,SAAS,OAAO,CAAC,YAAuC,QAAQ,WAAW,0DAAoB,CAAC;AAC3H,YAAM,QAAQ,IAAI,WAAW,IAAI,OAAO,YAAa,IAAI,QAAQ,SAAS,IAAI,MAAM,0BAAc,UAAU,OAAO,CAAE,CAAC;AAAA,IACxH,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,aAAa;AACzB,QAAI,WAAW;AACf,QAAI,MAAM,KAAK;AACf,WAAO,CAAC,KAAK;AACX,gBAAM,oBAAM,GAAG;AACf,iBAAW,WAAW;AACtB,UAAI,aAAa,GAAG;AAClB,cAAM,MAAM,gBAAgB;AAAA,MAC9B;AACA,YAAM,KAAK;AAAA,IACb;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,OAAO;AACnB,QAAI,MAAM,KAAK,QAAQ,GAAG;AACxB,YAAM,gBAAgB,KAAK;AAC3B,UAAI,eAAe;AACjB,aAAK,UAAU,WAAW,YAAY;AACpC,eAAK,UAAU;AACf,gBAAM,KAAK,QAAQ;AACnB,gBAAM,KAAK,KAAK;AAAA,QAClB,GAAG,aAAa;AAAA,MAClB,OAAO;AACL,cAAM,KAAK,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;","names":["module"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/Diviner/Diviner.ts","../../../src/Diviner/Config.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { compact } from '@xylabs/lodash'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { asDivinerInstance, DivinerConfigSchema, DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnail, ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { UrlPayload } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerConfigSchema } from './Config'\nimport { ImageThumbnailDivinerParams } from './Params'\n\nexport class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema]\n\n private _archivistInstance: Promise<ArchivistInstance> | undefined\n private _initializeArchivistConnectionIfNeededPromise: Promise<void> | undefined\n private _map: Record<string, string> | undefined\n private _payloadDivinerInstance: Promise<DivinerInstance> | undefined\n private _pollId?: string | number | NodeJS.Timeout\n\n // static override get configSchema() {\n // return ImageThumbnailDivinerConfigSchema\n // }\n\n get archivist() {\n return this.config.archivist\n }\n\n get payloadDiviner() {\n return this.config.payloadDiviner\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 10000\n }\n\n get pollFrequency() {\n return this.config.pollFrequency\n }\n\n //using promise as mutex\n async getArchivistInstance(): Promise<ArchivistInstance> {\n //if previously checked, but not found, clear promise\n if (this._archivistInstance && !(await this._archivistInstance)) {\n this._archivistInstance = undefined\n }\n this._archivistInstance =\n this._archivistInstance ??\n (async () => {\n const module = this.archivist ? await this.resolve(this.archivist) : undefined\n return asArchivistInstance(module, 'Provided archivist address did not resolve to an Archivist')\n })()\n return this._archivistInstance\n }\n\n //using promise as mutex\n async getPayloadDivinerInstance(): Promise<DivinerInstance | undefined> {\n const payloadDivinerAddress = this.payloadDiviner\n if (payloadDivinerAddress) {\n //if previously checked, but not found, clear promise\n if (this._payloadDivinerInstance && !(await this._payloadDivinerInstance)) {\n this._payloadDivinerInstance = undefined\n }\n this._payloadDivinerInstance =\n this._payloadDivinerInstance ??\n (async () => {\n const module = await this.resolve(payloadDivinerAddress)\n return asDivinerInstance(module, 'Provided payload diviner address did not resolve to a Diviner')\n })()\n\n return this._payloadDivinerInstance\n }\n }\n\n protected override async divineHandler(payloads: UrlPayload[] = []): Promise<ImageThumbnail[]> {\n await this.initializeArchivistConnectionIfNeeded()\n const urls = payloads.map((urlPayload) => urlPayload.url)\n const map = await this.getSafeMap()\n const archivist = await this.getArchivistInstance()\n const hashes = compact(urls.map((url) => map?.[url]))\n return (await archivist.get(hashes)).filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n }\n\n //using promise as mutex\n protected initializeArchivistConnectionIfNeeded() {\n this._initializeArchivistConnectionIfNeededPromise =\n this._initializeArchivistConnectionIfNeededPromise ??\n (async () => {\n if (!this._map) {\n await this.attachArchivistEvents()\n console.log('initializeArchivistConnectionIfNeeded: attachArchivistEvents done')\n await this.poll()\n console.log('initializeArchivistConnectionIfNeeded: poll done')\n }\n })()\n return this._initializeArchivistConnectionIfNeededPromise\n }\n\n protected async loadMap() {\n if (this.payloadDiviner) {\n return await this.loadMapWithPayloadDiviner()\n } else {\n return await this.loadMapWithAll()\n }\n }\n\n protected async loadMapWithAll() {\n if (await this.started()) {\n const archivist = await this.getArchivistInstance()\n assertEx(archivist.all, \"Archivist does not support 'all'\")\n const allPayloads = (await archivist.all?.()) ?? []\n const imagePayloadPairs = await Promise.all(\n allPayloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n this._map = imagePayloadPairs.reduce<Record<string, string>>((prev, [hash, payload]) => {\n prev[payload.sourceUrl] = hash\n return prev\n }, {})\n }\n }\n\n protected async loadMapWithPayloadDiviner() {\n console.log('loadMapWithPayloadDiviner: started')\n if (await this.started()) {\n const diviner = await this.getPayloadDivinerInstance()\n let offset: number | undefined = undefined\n let moreAvailable = true\n if (diviner) {\n const newMap: Record<string, string> = {}\n while (moreAvailable) {\n const payloadDivinerQuery: PayloadDivinerQueryPayload = {\n limit: this.payloadDivinerLimit,\n offset,\n schema: PayloadDivinerQuerySchema,\n schemas: [ImageThumbnailSchema],\n }\n const payloads = await diviner.divine([payloadDivinerQuery])\n offset = (offset ?? 0) + payloads.length\n moreAvailable = payloads.length > 0\n console.log(`loadMapWithPayloadDiviner.offset: ${offset}`)\n console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`)\n const imagePayloadPairs = await Promise.all(\n payloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n imagePayloadPairs.forEach(([hash, payload]) => (newMap[payload.sourceUrl] = hash))\n }\n this._map = newMap\n }\n }\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n if (this._pollId) {\n clearTimeout(this._pollId)\n this._pollId = undefined\n }\n return await super.stopHandler()\n }\n\n private async attachArchivistEvents() {\n const archivist = await this.getArchivistInstance()\n const mapPromise = this.getSafeMap()\n archivist.on('inserted', async ({ payloads }) => {\n const map = await mapPromise\n const thumbnails = compact(payloads.filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema))\n await Promise.all(thumbnails.map(async (payload) => (map[payload.sourceUrl] = await PayloadHasher.hashAsync(payload))))\n })\n }\n\n private async getSafeMap() {\n let mapRetry = 100 //10 seconds max\n let map = this._map\n while (!map) {\n await delay(100)\n mapRetry = mapRetry - 1\n if (mapRetry === 0) {\n throw Error('Map Not Loaded')\n }\n map = this._map\n }\n return map\n }\n\n private async poll() {\n if (await this.started()) {\n const pollFrequency = this.pollFrequency\n if (pollFrequency) {\n this._pollId = setTimeout(async () => {\n this._pollId = undefined\n await this.loadMap()\n await this.poll()\n }, pollFrequency)\n } else {\n await this.loadMap()\n }\n }\n }\n}\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":"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","names":["import_image_thumbnail_payload_plugin","module"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// src/Diviner/Diviner.ts
|
|
1
2
|
import { assertEx } from "@xylabs/assert";
|
|
2
3
|
import { delay } from "@xylabs/delay";
|
|
3
4
|
import { compact } from "@xylabs/lodash";
|
|
@@ -6,9 +7,14 @@ import { asArchivistInstance } from "@xyo-network/archivist-model";
|
|
|
6
7
|
import { PayloadHasher } from "@xyo-network/core";
|
|
7
8
|
import { asDivinerInstance, DivinerConfigSchema } from "@xyo-network/diviner-model";
|
|
8
9
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
10
|
+
import { ImageThumbnailSchema as ImageThumbnailSchema2 } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
11
|
+
|
|
12
|
+
// src/Diviner/Config.ts
|
|
9
13
|
import { ImageThumbnailSchema } from "@xyo-network/image-thumbnail-payload-plugin";
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
var ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config`;
|
|
15
|
+
|
|
16
|
+
// src/Diviner/Diviner.ts
|
|
17
|
+
var ImageThumbnailDiviner = class extends AbstractDiviner {
|
|
12
18
|
static configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema];
|
|
13
19
|
_archivistInstance;
|
|
14
20
|
_initializeArchivistConnectionIfNeededPromise;
|
|
@@ -60,8 +66,8 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
60
66
|
const urls = payloads.map((urlPayload) => urlPayload.url);
|
|
61
67
|
const map = await this.getSafeMap();
|
|
62
68
|
const archivist = await this.getArchivistInstance();
|
|
63
|
-
const hashes = compact(urls.map((url) => map
|
|
64
|
-
return (await archivist.get(hashes)).filter((payload) => payload.schema ===
|
|
69
|
+
const hashes = compact(urls.map((url) => map == null ? void 0 : map[url]));
|
|
70
|
+
return (await archivist.get(hashes)).filter((payload) => payload.schema === ImageThumbnailSchema2);
|
|
65
71
|
}
|
|
66
72
|
//using promise as mutex
|
|
67
73
|
initializeArchivistConnectionIfNeeded() {
|
|
@@ -83,12 +89,13 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
83
89
|
}
|
|
84
90
|
}
|
|
85
91
|
async loadMapWithAll() {
|
|
92
|
+
var _a;
|
|
86
93
|
if (await this.started()) {
|
|
87
94
|
const archivist = await this.getArchivistInstance();
|
|
88
95
|
assertEx(archivist.all, "Archivist does not support 'all'");
|
|
89
|
-
const allPayloads = await archivist.all
|
|
96
|
+
const allPayloads = await ((_a = archivist.all) == null ? void 0 : _a.call(archivist)) ?? [];
|
|
90
97
|
const imagePayloadPairs = await Promise.all(
|
|
91
|
-
allPayloads.filter((payload) => payload.schema ===
|
|
98
|
+
allPayloads.filter((payload) => payload.schema === ImageThumbnailSchema2).map(async (payload) => [await PayloadHasher.hashAsync(payload), payload])
|
|
92
99
|
);
|
|
93
100
|
this._map = imagePayloadPairs.reduce((prev, [hash, payload]) => {
|
|
94
101
|
prev[payload.sourceUrl] = hash;
|
|
@@ -109,7 +116,7 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
109
116
|
limit: this.payloadDivinerLimit,
|
|
110
117
|
offset,
|
|
111
118
|
schema: PayloadDivinerQuerySchema,
|
|
112
|
-
schemas: [
|
|
119
|
+
schemas: [ImageThumbnailSchema2]
|
|
113
120
|
};
|
|
114
121
|
const payloads = await diviner.divine([payloadDivinerQuery]);
|
|
115
122
|
offset = (offset ?? 0) + payloads.length;
|
|
@@ -117,7 +124,7 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
117
124
|
console.log(`loadMapWithPayloadDiviner.offset: ${offset}`);
|
|
118
125
|
console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`);
|
|
119
126
|
const imagePayloadPairs = await Promise.all(
|
|
120
|
-
payloads.filter((payload) => payload.schema ===
|
|
127
|
+
payloads.filter((payload) => payload.schema === ImageThumbnailSchema2).map(async (payload) => [await PayloadHasher.hashAsync(payload), payload])
|
|
121
128
|
);
|
|
122
129
|
imagePayloadPairs.forEach(([hash, payload]) => newMap[payload.sourceUrl] = hash);
|
|
123
130
|
}
|
|
@@ -137,7 +144,7 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
137
144
|
const mapPromise = this.getSafeMap();
|
|
138
145
|
archivist.on("inserted", async ({ payloads }) => {
|
|
139
146
|
const map = await mapPromise;
|
|
140
|
-
const thumbnails = compact(payloads.filter((payload) => payload.schema ===
|
|
147
|
+
const thumbnails = compact(payloads.filter((payload) => payload.schema === ImageThumbnailSchema2));
|
|
141
148
|
await Promise.all(thumbnails.map(async (payload) => map[payload.sourceUrl] = await PayloadHasher.hashAsync(payload)));
|
|
142
149
|
});
|
|
143
150
|
}
|
|
@@ -168,7 +175,7 @@ class ImageThumbnailDiviner extends AbstractDiviner {
|
|
|
168
175
|
}
|
|
169
176
|
}
|
|
170
177
|
}
|
|
171
|
-
}
|
|
178
|
+
};
|
|
172
179
|
export {
|
|
173
180
|
ImageThumbnailDiviner
|
|
174
181
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Diviner/Diviner.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { compact } from '@xylabs/lodash'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { asDivinerInstance, DivinerConfigSchema, DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnail, ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { UrlPayload } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerConfigSchema } from './Config'\nimport { ImageThumbnailDivinerParams } from './Params'\n\nexport class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema]\n\n private _archivistInstance: Promise<ArchivistInstance> | undefined\n private _initializeArchivistConnectionIfNeededPromise: Promise<void> | undefined\n private _map: Record<string, string> | undefined\n private _payloadDivinerInstance: Promise<DivinerInstance> | undefined\n private _pollId?: string | number | NodeJS.Timeout\n\n // static override get configSchema() {\n // return ImageThumbnailDivinerConfigSchema\n // }\n\n get archivist() {\n return this.config.archivist\n }\n\n get payloadDiviner() {\n return this.config.payloadDiviner\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 10000\n }\n\n get pollFrequency() {\n return this.config.pollFrequency\n }\n\n //using promise as mutex\n async getArchivistInstance(): Promise<ArchivistInstance> {\n //if previously checked, but not found, clear promise\n if (this._archivistInstance && !(await this._archivistInstance)) {\n this._archivistInstance = undefined\n }\n this._archivistInstance =\n this._archivistInstance ??\n (async () => {\n const module = this.archivist ? await this.resolve(this.archivist) : undefined\n return asArchivistInstance(module, 'Provided archivist address did not resolve to an Archivist')\n })()\n return this._archivistInstance\n }\n\n //using promise as mutex\n async getPayloadDivinerInstance(): Promise<DivinerInstance | undefined> {\n const payloadDivinerAddress = this.payloadDiviner\n if (payloadDivinerAddress) {\n //if previously checked, but not found, clear promise\n if (this._payloadDivinerInstance && !(await this._payloadDivinerInstance)) {\n this._payloadDivinerInstance = undefined\n }\n this._payloadDivinerInstance =\n this._payloadDivinerInstance ??\n (async () => {\n const module = await this.resolve(payloadDivinerAddress)\n return asDivinerInstance(module, 'Provided payload diviner address did not resolve to a Diviner')\n })()\n\n return this._payloadDivinerInstance\n }\n }\n\n protected override async divineHandler(payloads: UrlPayload[] = []): Promise<ImageThumbnail[]> {\n await this.initializeArchivistConnectionIfNeeded()\n const urls = payloads.map((urlPayload) => urlPayload.url)\n const map = await this.getSafeMap()\n const archivist = await this.getArchivistInstance()\n const hashes = compact(urls.map((url) => map?.[url]))\n return (await archivist.get(hashes)).filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n }\n\n //using promise as mutex\n protected initializeArchivistConnectionIfNeeded() {\n this._initializeArchivistConnectionIfNeededPromise =\n this._initializeArchivistConnectionIfNeededPromise ??\n (async () => {\n if (!this._map) {\n await this.attachArchivistEvents()\n console.log('initializeArchivistConnectionIfNeeded: attachArchivistEvents done')\n await this.poll()\n console.log('initializeArchivistConnectionIfNeeded: poll done')\n }\n })()\n return this._initializeArchivistConnectionIfNeededPromise\n }\n\n protected async loadMap() {\n if (this.payloadDiviner) {\n return await this.loadMapWithPayloadDiviner()\n } else {\n return await this.loadMapWithAll()\n }\n }\n\n protected async loadMapWithAll() {\n if (await this.started()) {\n const archivist = await this.getArchivistInstance()\n assertEx(archivist.all, \"Archivist does not support 'all'\")\n const allPayloads = (await archivist.all?.()) ?? []\n const imagePayloadPairs = await Promise.all(\n allPayloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n this._map = imagePayloadPairs.reduce<Record<string, string>>((prev, [hash, payload]) => {\n prev[payload.sourceUrl] = hash\n return prev\n }, {})\n }\n }\n\n protected async loadMapWithPayloadDiviner() {\n console.log('loadMapWithPayloadDiviner: started')\n if (await this.started()) {\n const diviner = await this.getPayloadDivinerInstance()\n let offset: number | undefined = undefined\n let moreAvailable = true\n if (diviner) {\n const newMap: Record<string, string> = {}\n while (moreAvailable) {\n const payloadDivinerQuery: PayloadDivinerQueryPayload = {\n limit: this.payloadDivinerLimit,\n offset,\n schema: PayloadDivinerQuerySchema,\n schemas: [ImageThumbnailSchema],\n }\n const payloads = await diviner.divine([payloadDivinerQuery])\n offset = (offset ?? 0) + payloads.length\n moreAvailable = payloads.length > 0\n console.log(`loadMapWithPayloadDiviner.offset: ${offset}`)\n console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`)\n const imagePayloadPairs = await Promise.all(\n payloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n imagePayloadPairs.forEach(([hash, payload]) => (newMap[payload.sourceUrl] = hash))\n }\n this._map = newMap\n }\n }\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n if (this._pollId) {\n clearTimeout(this._pollId)\n this._pollId = undefined\n }\n return await super.stopHandler()\n }\n\n private async attachArchivistEvents() {\n const archivist = await this.getArchivistInstance()\n const mapPromise = this.getSafeMap()\n archivist.on('inserted', async ({ payloads }) => {\n const map = await mapPromise\n const thumbnails = compact(payloads.filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema))\n await Promise.all(thumbnails.map(async (payload) => (map[payload.sourceUrl] = await PayloadHasher.hashAsync(payload))))\n })\n }\n\n private async getSafeMap() {\n let mapRetry = 100 //10 seconds max\n let map = this._map\n while (!map) {\n await delay(100)\n mapRetry = mapRetry - 1\n if (mapRetry === 0) {\n throw Error('Map Not Loaded')\n }\n map = this._map\n }\n return map\n }\n\n private async poll() {\n if (await this.started()) {\n const pollFrequency = this.pollFrequency\n if (pollFrequency) {\n this._pollId = setTimeout(async () => {\n this._pollId = undefined\n await this.loadMap()\n await this.poll()\n }, pollFrequency)\n } else {\n await this.loadMap()\n }\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/Diviner/Diviner.ts","../../../src/Diviner/Config.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { compact } from '@xylabs/lodash'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { ArchivistInstance, asArchivistInstance } from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { asDivinerInstance, DivinerConfigSchema, DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQueryPayload, PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { ImageThumbnail, ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\nimport { UrlPayload } from '@xyo-network/url-payload-plugin'\n\nimport { ImageThumbnailDivinerConfigSchema } from './Config'\nimport { ImageThumbnailDivinerParams } from './Params'\n\nexport class ImageThumbnailDiviner<TParams extends ImageThumbnailDivinerParams = ImageThumbnailDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [ImageThumbnailDivinerConfigSchema, DivinerConfigSchema]\n\n private _archivistInstance: Promise<ArchivistInstance> | undefined\n private _initializeArchivistConnectionIfNeededPromise: Promise<void> | undefined\n private _map: Record<string, string> | undefined\n private _payloadDivinerInstance: Promise<DivinerInstance> | undefined\n private _pollId?: string | number | NodeJS.Timeout\n\n // static override get configSchema() {\n // return ImageThumbnailDivinerConfigSchema\n // }\n\n get archivist() {\n return this.config.archivist\n }\n\n get payloadDiviner() {\n return this.config.payloadDiviner\n }\n\n get payloadDivinerLimit() {\n return this.config.payloadDivinerLimit ?? 10000\n }\n\n get pollFrequency() {\n return this.config.pollFrequency\n }\n\n //using promise as mutex\n async getArchivistInstance(): Promise<ArchivistInstance> {\n //if previously checked, but not found, clear promise\n if (this._archivistInstance && !(await this._archivistInstance)) {\n this._archivistInstance = undefined\n }\n this._archivistInstance =\n this._archivistInstance ??\n (async () => {\n const module = this.archivist ? await this.resolve(this.archivist) : undefined\n return asArchivistInstance(module, 'Provided archivist address did not resolve to an Archivist')\n })()\n return this._archivistInstance\n }\n\n //using promise as mutex\n async getPayloadDivinerInstance(): Promise<DivinerInstance | undefined> {\n const payloadDivinerAddress = this.payloadDiviner\n if (payloadDivinerAddress) {\n //if previously checked, but not found, clear promise\n if (this._payloadDivinerInstance && !(await this._payloadDivinerInstance)) {\n this._payloadDivinerInstance = undefined\n }\n this._payloadDivinerInstance =\n this._payloadDivinerInstance ??\n (async () => {\n const module = await this.resolve(payloadDivinerAddress)\n return asDivinerInstance(module, 'Provided payload diviner address did not resolve to a Diviner')\n })()\n\n return this._payloadDivinerInstance\n }\n }\n\n protected override async divineHandler(payloads: UrlPayload[] = []): Promise<ImageThumbnail[]> {\n await this.initializeArchivistConnectionIfNeeded()\n const urls = payloads.map((urlPayload) => urlPayload.url)\n const map = await this.getSafeMap()\n const archivist = await this.getArchivistInstance()\n const hashes = compact(urls.map((url) => map?.[url]))\n return (await archivist.get(hashes)).filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n }\n\n //using promise as mutex\n protected initializeArchivistConnectionIfNeeded() {\n this._initializeArchivistConnectionIfNeededPromise =\n this._initializeArchivistConnectionIfNeededPromise ??\n (async () => {\n if (!this._map) {\n await this.attachArchivistEvents()\n console.log('initializeArchivistConnectionIfNeeded: attachArchivistEvents done')\n await this.poll()\n console.log('initializeArchivistConnectionIfNeeded: poll done')\n }\n })()\n return this._initializeArchivistConnectionIfNeededPromise\n }\n\n protected async loadMap() {\n if (this.payloadDiviner) {\n return await this.loadMapWithPayloadDiviner()\n } else {\n return await this.loadMapWithAll()\n }\n }\n\n protected async loadMapWithAll() {\n if (await this.started()) {\n const archivist = await this.getArchivistInstance()\n assertEx(archivist.all, \"Archivist does not support 'all'\")\n const allPayloads = (await archivist.all?.()) ?? []\n const imagePayloadPairs = await Promise.all(\n allPayloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n this._map = imagePayloadPairs.reduce<Record<string, string>>((prev, [hash, payload]) => {\n prev[payload.sourceUrl] = hash\n return prev\n }, {})\n }\n }\n\n protected async loadMapWithPayloadDiviner() {\n console.log('loadMapWithPayloadDiviner: started')\n if (await this.started()) {\n const diviner = await this.getPayloadDivinerInstance()\n let offset: number | undefined = undefined\n let moreAvailable = true\n if (diviner) {\n const newMap: Record<string, string> = {}\n while (moreAvailable) {\n const payloadDivinerQuery: PayloadDivinerQueryPayload = {\n limit: this.payloadDivinerLimit,\n offset,\n schema: PayloadDivinerQuerySchema,\n schemas: [ImageThumbnailSchema],\n }\n const payloads = await diviner.divine([payloadDivinerQuery])\n offset = (offset ?? 0) + payloads.length\n moreAvailable = payloads.length > 0\n console.log(`loadMapWithPayloadDiviner.offset: ${offset}`)\n console.log(`loadMapWithPayloadDiviner.moreAvailable: ${moreAvailable}`)\n const imagePayloadPairs = await Promise.all(\n payloads\n .filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema)\n .map<Promise<[string, ImageThumbnail]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n imagePayloadPairs.forEach(([hash, payload]) => (newMap[payload.sourceUrl] = hash))\n }\n this._map = newMap\n }\n }\n }\n\n protected override async stopHandler(_timeout?: number | undefined): Promise<boolean> {\n if (this._pollId) {\n clearTimeout(this._pollId)\n this._pollId = undefined\n }\n return await super.stopHandler()\n }\n\n private async attachArchivistEvents() {\n const archivist = await this.getArchivistInstance()\n const mapPromise = this.getSafeMap()\n archivist.on('inserted', async ({ payloads }) => {\n const map = await mapPromise\n const thumbnails = compact(payloads.filter((payload): payload is ImageThumbnail => payload.schema === ImageThumbnailSchema))\n await Promise.all(thumbnails.map(async (payload) => (map[payload.sourceUrl] = await PayloadHasher.hashAsync(payload))))\n })\n }\n\n private async getSafeMap() {\n let mapRetry = 100 //10 seconds max\n let map = this._map\n while (!map) {\n await delay(100)\n mapRetry = mapRetry - 1\n if (mapRetry === 0) {\n throw Error('Map Not Loaded')\n }\n map = this._map\n }\n return map\n }\n\n private async poll() {\n if (await this.started()) {\n const pollFrequency = this.pollFrequency\n if (pollFrequency) {\n this._pollId = setTimeout(async () => {\n this._pollId = undefined\n await this.loadMap()\n await this.poll()\n }, pollFrequency)\n } else {\n await this.loadMap()\n }\n }\n }\n}\n","import { DivinerConfig } from '@xyo-network/diviner-model'\nimport { ImageThumbnailSchema } from '@xyo-network/image-thumbnail-payload-plugin'\n\nexport const ImageThumbnailDivinerConfigSchema = `${ImageThumbnailSchema}.diviner.config` as const\nexport type ImageThumbnailDivinerConfigSchema = typeof ImageThumbnailDivinerConfigSchema\n\nexport type ImageThumbnailDivinerConfig = DivinerConfig<{\n archivist?: string\n payloadDiviner?: string\n payloadDivinerLimit?: number\n pollFrequency?: number\n schema: ImageThumbnailDivinerConfigSchema\n}>\n"],"mappings":"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","names":["ImageThumbnailSchema","ImageThumbnailSchema"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DivinerParams } from '@xyo-network/diviner-model';
|
|
2
|
+
import { AnyConfigSchema } from '@xyo-network/module';
|
|
3
|
+
import { ImageThumbnailDivinerConfig } from './Config';
|
|
4
|
+
export type ImageThumbnailDivinerParams = DivinerParams<AnyConfigSchema<ImageThumbnailDivinerConfig>>;
|
|
5
|
+
//# sourceMappingURL=Params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Params.d.ts","sourceRoot":"","sources":["../../../src/Diviner/Params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAA;AAEtD,MAAM,MAAM,2BAA2B,GAAG,aAAa,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAA"}
|
|
@@ -12,6 +12,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
12
12
|
return to;
|
|
13
13
|
};
|
|
14
14
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/Diviner/Params.ts
|
|
15
17
|
var Params_exports = {};
|
|
16
18
|
module.exports = __toCommonJS(Params_exports);
|
|
17
19
|
//# sourceMappingURL=Params.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Diviner/Params.ts"],"sourcesContent":["import { DivinerParams } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema } from '@xyo-network/module'\n\nimport { ImageThumbnailDivinerConfig } from './Config'\n\nexport type ImageThumbnailDivinerParams = DivinerParams<AnyConfigSchema<ImageThumbnailDivinerConfig>>\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/Diviner/Params.ts"],"sourcesContent":["import { DivinerParams } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema } from '@xyo-network/module'\n\nimport { ImageThumbnailDivinerConfig } from './Config'\n\nexport type ImageThumbnailDivinerParams = DivinerParams<AnyConfigSchema<ImageThumbnailDivinerConfig>>\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Diviner/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA"}
|