@xyo-network/module-resolver 3.6.9 → 3.6.10
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/neutral/index.mjs +76 -110
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +12 -12
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/AbstractModuleResolver.ts
|
|
5
2
|
import { assertEx } from "@xylabs/assert";
|
|
6
3
|
import { Base, toJsonString } from "@xylabs/object";
|
|
7
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
asModuleInstance,
|
|
6
|
+
ObjectResolverPriority
|
|
7
|
+
} from "@xyo-network/module-model";
|
|
8
8
|
var AbstractModuleResolver = class extends Base {
|
|
9
|
-
static {
|
|
10
|
-
__name(this, "AbstractModuleResolver");
|
|
11
|
-
}
|
|
12
9
|
get priority() {
|
|
13
10
|
return this.params.priority ?? ObjectResolverPriority.Normal;
|
|
14
11
|
}
|
|
@@ -29,10 +26,13 @@ var AbstractModuleResolver = class extends Base {
|
|
|
29
26
|
switch (typeof idOrFilter) {
|
|
30
27
|
case "string": {
|
|
31
28
|
const [value] = await this.resolveHandler(idOrFilter, options);
|
|
32
|
-
return asModuleInstance(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
return asModuleInstance(
|
|
30
|
+
value,
|
|
31
|
+
() => (
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
`resolveHandler returned invalid result (string) [${value?.constructor?.name}][${toJsonString(value)}]`
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
36
|
}
|
|
37
37
|
default: {
|
|
38
38
|
const values = await this.resolveHandler(idOrFilter, options);
|
|
@@ -51,18 +51,24 @@ var AbstractModuleResolver = class extends Base {
|
|
|
51
51
|
// src/CompositeModuleResolver.ts
|
|
52
52
|
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
53
53
|
import { exists as exists2 } from "@xylabs/exists";
|
|
54
|
-
import {
|
|
54
|
+
import {
|
|
55
|
+
duplicateModules,
|
|
56
|
+
ObjectResolverPriority as ObjectResolverPriority2,
|
|
57
|
+
ResolveHelper
|
|
58
|
+
} from "@xyo-network/module-model";
|
|
55
59
|
import { LRUCache } from "lru-cache";
|
|
56
60
|
|
|
57
61
|
// src/SimpleModuleResolver.ts
|
|
58
62
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
59
63
|
import { exists } from "@xylabs/exists";
|
|
60
64
|
import { isAddress } from "@xylabs/hex";
|
|
61
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
isAddressModuleFilter,
|
|
67
|
+
isModuleName,
|
|
68
|
+
isNameModuleFilter,
|
|
69
|
+
isQueryModuleFilter
|
|
70
|
+
} from "@xyo-network/module-model";
|
|
62
71
|
var SimpleModuleResolver = class extends AbstractModuleResolver {
|
|
63
|
-
static {
|
|
64
|
-
__name(this, "SimpleModuleResolver");
|
|
65
|
-
}
|
|
66
72
|
modules = {};
|
|
67
73
|
nameToModule = {};
|
|
68
74
|
constructor(params) {
|
|
@@ -104,11 +110,7 @@ var SimpleModuleResolver = class extends AbstractModuleResolver {
|
|
|
104
110
|
const name = isModuleName(id) ? id : void 0;
|
|
105
111
|
const address = isAddress(id) ? id : void 0;
|
|
106
112
|
assertEx2(name || address, () => "module identifier must be a ModuleName or Address");
|
|
107
|
-
return (name ? this.resolveByName(Object.values(this.modules), [
|
|
108
|
-
name
|
|
109
|
-
]).pop() : void 0) ?? (address ? this.resolveByAddress(this.modules, [
|
|
110
|
-
address
|
|
111
|
-
]).pop() : void 0);
|
|
113
|
+
return (name ? this.resolveByName(Object.values(this.modules), [name]).pop() : void 0) ?? (address ? this.resolveByAddress(this.modules, [address]).pop() : void 0);
|
|
112
114
|
} else {
|
|
113
115
|
const filter = idOrFilter;
|
|
114
116
|
if (isAddressModuleFilter(filter)) {
|
|
@@ -125,13 +127,9 @@ var SimpleModuleResolver = class extends AbstractModuleResolver {
|
|
|
125
127
|
})();
|
|
126
128
|
const identity = options?.identity;
|
|
127
129
|
if (identity) {
|
|
128
|
-
return Array.isArray(unfiltered) ? unfiltered?.filter((mod) => identity(mod)) : identity(unfiltered) ? [
|
|
129
|
-
unfiltered
|
|
130
|
-
] : [];
|
|
130
|
+
return Array.isArray(unfiltered) ? unfiltered?.filter((mod) => identity(mod)) : identity(unfiltered) ? [unfiltered] : [];
|
|
131
131
|
} else {
|
|
132
|
-
return unfiltered ? Array.isArray(unfiltered) ? unfiltered : [
|
|
133
|
-
unfiltered
|
|
134
|
-
] : [];
|
|
132
|
+
return unfiltered ? Array.isArray(unfiltered) ? unfiltered : [unfiltered] : [];
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
resolveIdentifier(id, _options) {
|
|
@@ -188,13 +186,10 @@ var SimpleModuleResolver = class extends AbstractModuleResolver {
|
|
|
188
186
|
};
|
|
189
187
|
|
|
190
188
|
// src/CompositeModuleResolver.ts
|
|
191
|
-
var moduleIdentifierParts =
|
|
189
|
+
var moduleIdentifierParts = (moduleIdentifier) => {
|
|
192
190
|
return moduleIdentifier?.split(":");
|
|
193
|
-
}
|
|
191
|
+
};
|
|
194
192
|
var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractModuleResolver {
|
|
195
|
-
static {
|
|
196
|
-
__name(this, "CompositeModuleResolver");
|
|
197
|
-
}
|
|
198
193
|
static defaultMaxDepth = 3;
|
|
199
194
|
_cache;
|
|
200
195
|
resolvers = [];
|
|
@@ -202,10 +197,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
202
197
|
_localResolver;
|
|
203
198
|
constructor(params) {
|
|
204
199
|
super(params);
|
|
205
|
-
const localResolver = new SimpleModuleResolver({
|
|
206
|
-
allowNameResolution: params.allowNameResolution,
|
|
207
|
-
root: params.root
|
|
208
|
-
});
|
|
200
|
+
const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root });
|
|
209
201
|
this.addResolver(localResolver);
|
|
210
202
|
const {
|
|
211
203
|
max = 100,
|
|
@@ -223,9 +215,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
223
215
|
return this._allowAddResolver;
|
|
224
216
|
}
|
|
225
217
|
set allowAddResolver(value) {
|
|
226
|
-
this.resolvers = [
|
|
227
|
-
this._localResolver
|
|
228
|
-
];
|
|
218
|
+
this.resolvers = [this._localResolver];
|
|
229
219
|
this._allowAddResolver = value;
|
|
230
220
|
}
|
|
231
221
|
get allowNameResolution() {
|
|
@@ -262,10 +252,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
262
252
|
}
|
|
263
253
|
// eslint-disable-next-line complexity
|
|
264
254
|
async resolveHandler(idOrFilter = "*", options = {}) {
|
|
265
|
-
const mutatedOptions = {
|
|
266
|
-
...options,
|
|
267
|
-
maxDepth: options?.maxDepth ?? _CompositeModuleResolver.defaultMaxDepth
|
|
268
|
-
};
|
|
255
|
+
const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? _CompositeModuleResolver.defaultMaxDepth };
|
|
269
256
|
if (idOrFilter === "*") {
|
|
270
257
|
const all = idOrFilter;
|
|
271
258
|
if (mutatedOptions.maxDepth < 0) {
|
|
@@ -274,14 +261,13 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
274
261
|
if (mutatedOptions.maxDepth === 0) {
|
|
275
262
|
return await this._localResolver.resolve(all, mutatedOptions) ?? [];
|
|
276
263
|
}
|
|
277
|
-
const childOptions = {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}));
|
|
264
|
+
const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 };
|
|
265
|
+
const result = await Promise.all(
|
|
266
|
+
this.resolvers.map(async (resolver) => {
|
|
267
|
+
const result2 = await resolver.resolve(all, childOptions);
|
|
268
|
+
return result2;
|
|
269
|
+
})
|
|
270
|
+
);
|
|
285
271
|
const flatResult = result.flat().filter(exists2);
|
|
286
272
|
return flatResult.filter(duplicateModules);
|
|
287
273
|
}
|
|
@@ -292,9 +278,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
292
278
|
const idParts = moduleIdentifierParts(idOrFilter);
|
|
293
279
|
if (idParts.length > 1) {
|
|
294
280
|
const mod = await this.resolveMultipartIdentifier(idOrFilter);
|
|
295
|
-
return mod ? Array.isArray(mod) ? mod : [
|
|
296
|
-
mod
|
|
297
|
-
] : [];
|
|
281
|
+
return mod ? Array.isArray(mod) ? mod : [mod] : [];
|
|
298
282
|
}
|
|
299
283
|
const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
|
|
300
284
|
if (id) {
|
|
@@ -306,34 +290,30 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
306
290
|
if (cachedResult.status === "dead") {
|
|
307
291
|
this._cache.delete(id);
|
|
308
292
|
} else {
|
|
309
|
-
return [
|
|
310
|
-
cachedResult
|
|
311
|
-
];
|
|
293
|
+
return [cachedResult];
|
|
312
294
|
}
|
|
313
295
|
}
|
|
314
296
|
if (mutatedOptions.maxDepth === 0) {
|
|
315
297
|
const mod2 = await this._localResolver.resolve(idOrFilter, mutatedOptions);
|
|
316
|
-
return mod2 ? Array.isArray(mod2) ? mod2 : [
|
|
317
|
-
mod2
|
|
318
|
-
] : [];
|
|
298
|
+
return mod2 ? Array.isArray(mod2) ? mod2 : [mod2] : [];
|
|
319
299
|
}
|
|
320
|
-
const resolvePriority =
|
|
300
|
+
const resolvePriority = async (priority) => {
|
|
321
301
|
const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority);
|
|
322
|
-
const results = (await Promise.all(
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
302
|
+
const results = (await Promise.all(
|
|
303
|
+
resolvers.map(async (resolver) => {
|
|
304
|
+
const result2 = await resolver.resolve(id, mutatedOptions);
|
|
305
|
+
return result2;
|
|
306
|
+
})
|
|
307
|
+
)).filter(exists2);
|
|
326
308
|
const result = results.filter(exists2).findLast(duplicateModules);
|
|
327
309
|
if (result) {
|
|
328
310
|
this._cache.set(id, result);
|
|
329
311
|
return result;
|
|
330
312
|
}
|
|
331
313
|
return priority === ObjectResolverPriority2.VeryLow ? void 0 : await resolvePriority(priority - 1);
|
|
332
|
-
}
|
|
314
|
+
};
|
|
333
315
|
const mod = await resolvePriority(ObjectResolverPriority2.VeryHigh);
|
|
334
|
-
return mod ? Array.isArray(mod) ? mod : [
|
|
335
|
-
mod
|
|
336
|
-
] : [];
|
|
316
|
+
return mod ? Array.isArray(mod) ? mod : [mod] : [];
|
|
337
317
|
}
|
|
338
318
|
} else if (typeof idOrFilter === "object") {
|
|
339
319
|
if (mutatedOptions.maxDepth < 0) {
|
|
@@ -343,14 +323,13 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
343
323
|
if (mutatedOptions.maxDepth === 0) {
|
|
344
324
|
return await this._localResolver.resolve(filter, mutatedOptions);
|
|
345
325
|
}
|
|
346
|
-
const childOptions = {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
}));
|
|
326
|
+
const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 };
|
|
327
|
+
const result = await Promise.all(
|
|
328
|
+
this.resolvers.map(async (resolver) => {
|
|
329
|
+
const result2 = await resolver.resolve(filter, childOptions);
|
|
330
|
+
return result2;
|
|
331
|
+
})
|
|
332
|
+
);
|
|
354
333
|
const flatResult = result.flat().filter(exists2);
|
|
355
334
|
return flatResult.filter(duplicateModules);
|
|
356
335
|
}
|
|
@@ -361,9 +340,11 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
361
340
|
if (idParts.length > 1) {
|
|
362
341
|
return this.resolveComplexIdentifier(id);
|
|
363
342
|
}
|
|
364
|
-
const results = (await Promise.all(
|
|
365
|
-
|
|
366
|
-
|
|
343
|
+
const results = (await Promise.all(
|
|
344
|
+
this.resolvers.map(async (resolver) => {
|
|
345
|
+
return await resolver.resolveIdentifier(id);
|
|
346
|
+
})
|
|
347
|
+
)).filter(exists2);
|
|
367
348
|
const result = results.shift();
|
|
368
349
|
if (results.length > 0) {
|
|
369
350
|
for (const altResult of results) {
|
|
@@ -396,20 +377,11 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
|
|
|
396
377
|
import { PayloadDivinerQuerySchema } from "@xyo-network/diviner-payload-model";
|
|
397
378
|
import { LRUCache as LRUCache2 } from "lru-cache";
|
|
398
379
|
var NameRegistrarTransformer = class {
|
|
399
|
-
static {
|
|
400
|
-
__name(this, "NameRegistrarTransformer");
|
|
401
|
-
}
|
|
402
|
-
registrarDiviner;
|
|
403
|
-
root;
|
|
404
|
-
_cache;
|
|
405
380
|
constructor(registrarDiviner, root) {
|
|
406
381
|
this.registrarDiviner = registrarDiviner;
|
|
407
382
|
this.root = root;
|
|
408
|
-
this._cache = new LRUCache2({
|
|
409
|
-
max: 1e3,
|
|
410
|
-
ttl: 1e3 * 5
|
|
411
|
-
});
|
|
412
383
|
}
|
|
384
|
+
_cache = new LRUCache2({ max: 1e3, ttl: 1e3 * 5 });
|
|
413
385
|
async transform(identifier) {
|
|
414
386
|
const parts = identifier.split(":");
|
|
415
387
|
const first = parts.shift();
|
|
@@ -423,9 +395,7 @@ var NameRegistrarTransformer = class {
|
|
|
423
395
|
schema: PayloadDivinerQuerySchema,
|
|
424
396
|
tld: nameParts[1]
|
|
425
397
|
};
|
|
426
|
-
const result = await this.registrarDiviner?.divine([
|
|
427
|
-
query
|
|
428
|
-
]);
|
|
398
|
+
const result = await this.registrarDiviner?.divine([query]);
|
|
429
399
|
const resultPayload = result?.shift();
|
|
430
400
|
if (!resultPayload) {
|
|
431
401
|
throw new Error(`Unable to resolve registrar name (failed) [${first}]`);
|
|
@@ -444,40 +414,36 @@ var NameRegistrarTransformer = class {
|
|
|
444
414
|
};
|
|
445
415
|
|
|
446
416
|
// src/ResolverEventEmitter.ts
|
|
447
|
-
var getMixin =
|
|
417
|
+
var getMixin = (resolver) => {
|
|
448
418
|
const listeners = [];
|
|
449
|
-
const emit =
|
|
419
|
+
const emit = (event, args) => {
|
|
450
420
|
if (listeners.length === 0) return false;
|
|
451
421
|
for (const listener of listeners) listener(args);
|
|
452
422
|
return true;
|
|
453
|
-
}
|
|
454
|
-
const onModuleResolved =
|
|
455
|
-
const args = {
|
|
456
|
-
filter,
|
|
457
|
-
mod
|
|
458
|
-
};
|
|
423
|
+
};
|
|
424
|
+
const onModuleResolved = (mod, filter) => {
|
|
425
|
+
const args = { filter, mod };
|
|
459
426
|
emit("moduleResolved", args);
|
|
460
|
-
}
|
|
427
|
+
};
|
|
461
428
|
const { resolve } = resolver;
|
|
462
429
|
function originalResolve(filter) {
|
|
463
430
|
return resolve.bind(resolver)(filter);
|
|
464
431
|
}
|
|
465
|
-
__name(originalResolve, "originalResolve");
|
|
466
432
|
return {
|
|
467
|
-
on:
|
|
433
|
+
on: (event, listener) => {
|
|
468
434
|
listeners.push(listener);
|
|
469
|
-
},
|
|
470
|
-
resolve:
|
|
435
|
+
},
|
|
436
|
+
resolve: async (filter) => {
|
|
471
437
|
const modules = await originalResolve(filter);
|
|
472
438
|
await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)));
|
|
473
439
|
return modules;
|
|
474
|
-
}
|
|
440
|
+
}
|
|
475
441
|
};
|
|
476
|
-
}
|
|
477
|
-
var mixinResolverEventEmitter =
|
|
442
|
+
};
|
|
443
|
+
var mixinResolverEventEmitter = (resolver) => {
|
|
478
444
|
const mixin = getMixin(resolver);
|
|
479
445
|
return Object.assign(resolver, mixin);
|
|
480
|
-
}
|
|
446
|
+
};
|
|
481
447
|
export {
|
|
482
448
|
AbstractModuleResolver,
|
|
483
449
|
CompositeModuleResolver,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = await this.resolveHandler(idOrFilter, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const [value] = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({\n max, ttl, ...params.cache,\n })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(id, result)\n return result\n }\n // we know that ObjectResolverPriority.VeryLow is the minimum priority, so we can subtract 1 from the rest\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority((priority - 1) as ObjectResolverPriority)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n } else if (typeof idOrFilter === 'object') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n} from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return (\n address.map((address) => {\n return modules[address]\n })\n ).filter(exists) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return (\n name.map((name) => {\n return modules.find(mod => mod.modName === name)\n })\n ).filter(exists) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return (\n modules.filter(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false))\n ).filter(exists) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = {\n domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],\n }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type {\n Module, ModuleFilter, ModuleResolver,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {\n const args = { filter, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","exists","isAddress","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","mods","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","modName","map","exists","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","mod","Array","isArray","modItem","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","cachedResult","get","status","delete","resolvePriority","priority","results","findLast","set","ObjectResolverPriority","VeryLow","undefined","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","listener","onModuleResolved","mod","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","map","mixinResolverEventEmitter","mixin","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = await this.resolveHandler(idOrFilter, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const [value] = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({\n max, ttl, ...params.cache,\n })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(id, result)\n return result\n }\n // we know that ObjectResolverPriority.VeryLow is the minimum priority, so we can subtract 1 from the rest\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority((priority - 1) as ObjectResolverPriority)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n } else if (typeof idOrFilter === 'object') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n} from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return (\n address.map((address) => {\n return modules[address]\n })\n ).filter(exists) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return (\n name.map((name) => {\n return modules.find(mod => mod.modName === name)\n })\n ).filter(exists) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return (\n modules.filter(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false))\n ).filter(exists) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = {\n domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],\n }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type {\n Module, ModuleFilter, ModuleResolver,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {\n const args = { filter, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","exists","ObjectResolverPriority","assertEx","assertEx","address","name","supported","query","result","exists","mod","ObjectResolverPriority","assertEx","LRUCache"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/module-resolver",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.10",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,22 +29,22 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/assert": "^4.
|
|
33
|
-
"@xylabs/exists": "^4.
|
|
34
|
-
"@xylabs/hex": "^4.
|
|
35
|
-
"@xylabs/object": "^4.
|
|
36
|
-
"@xylabs/promise": "^4.
|
|
37
|
-
"@xyo-network/diviner-model": "^3.6.
|
|
38
|
-
"@xyo-network/diviner-payload-model": "^3.6.
|
|
39
|
-
"@xyo-network/module-model": "^3.6.
|
|
32
|
+
"@xylabs/assert": "^4.5.1",
|
|
33
|
+
"@xylabs/exists": "^4.5.1",
|
|
34
|
+
"@xylabs/hex": "^4.5.1",
|
|
35
|
+
"@xylabs/object": "^4.5.1",
|
|
36
|
+
"@xylabs/promise": "^4.5.1",
|
|
37
|
+
"@xyo-network/diviner-model": "^3.6.10",
|
|
38
|
+
"@xyo-network/diviner-payload-model": "^3.6.10",
|
|
39
|
+
"@xyo-network/module-model": "^3.6.10",
|
|
40
40
|
"lru-cache": "^11.0.2"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
44
44
|
"@xylabs/tsconfig": "^4.2.6",
|
|
45
|
-
"@xylabs/vitest-extended": "^4.
|
|
46
|
-
"typescript": "^5.7.
|
|
47
|
-
"vitest": "^
|
|
45
|
+
"@xylabs/vitest-extended": "^4.5.1",
|
|
46
|
+
"typescript": "^5.7.3",
|
|
47
|
+
"vitest": "^3.0.4"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|