@xyo-network/module-resolver 2.84.2 → 2.84.4
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/node/{index.mjs → index.cjs} +60 -33
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +32 -59
- package/dist/node/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/node/index.mjs.map +0 -1
|
@@ -1,29 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
2
6
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
7
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
4
21
|
var __publicField = (obj, key, value) => {
|
|
5
22
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
23
|
return value;
|
|
7
24
|
};
|
|
8
25
|
|
|
26
|
+
// src/index.ts
|
|
27
|
+
var src_exports = {};
|
|
28
|
+
__export(src_exports, {
|
|
29
|
+
CompositeModuleResolver: () => CompositeModuleResolver,
|
|
30
|
+
SimpleModuleResolver: () => SimpleModuleResolver,
|
|
31
|
+
mixinResolverEventEmitter: () => mixinResolverEventEmitter
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(src_exports);
|
|
34
|
+
|
|
9
35
|
// src/CompositeModuleResolver.ts
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
36
|
+
var import_exists = require("@xylabs/exists");
|
|
37
|
+
var import_module_model = require("@xyo-network/module-model");
|
|
38
|
+
var import_object = require("@xyo-network/object");
|
|
13
39
|
|
|
14
40
|
// src/SimpleModuleResolver.ts
|
|
15
|
-
|
|
41
|
+
var import_lodash = require("@xylabs/lodash");
|
|
16
42
|
var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
17
43
|
addressToName = {};
|
|
18
44
|
modules = {};
|
|
19
45
|
get isModuleResolver() {
|
|
20
46
|
return true;
|
|
21
47
|
}
|
|
22
|
-
add(
|
|
23
|
-
if (Array.isArray(
|
|
24
|
-
|
|
48
|
+
add(module2) {
|
|
49
|
+
if (Array.isArray(module2)) {
|
|
50
|
+
module2.forEach((module3) => this.addSingleModule(module3));
|
|
25
51
|
} else {
|
|
26
|
-
this.addSingleModule(
|
|
52
|
+
this.addSingleModule(module2);
|
|
27
53
|
}
|
|
28
54
|
return this;
|
|
29
55
|
}
|
|
@@ -63,14 +89,14 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
63
89
|
})();
|
|
64
90
|
const identity = options == null ? void 0 : options.identity;
|
|
65
91
|
if (identity) {
|
|
66
|
-
return Array.isArray(unfiltered) ? unfiltered == null ? void 0 : unfiltered.filter((
|
|
92
|
+
return Array.isArray(unfiltered) ? unfiltered == null ? void 0 : unfiltered.filter((module2) => identity(module2)) : identity(unfiltered) ? unfiltered : void 0;
|
|
67
93
|
} else {
|
|
68
94
|
return unfiltered;
|
|
69
95
|
}
|
|
70
96
|
}
|
|
71
|
-
addSingleModule(
|
|
72
|
-
if (
|
|
73
|
-
this.modules[
|
|
97
|
+
addSingleModule(module2) {
|
|
98
|
+
if (module2) {
|
|
99
|
+
this.modules[module2.address] = module2;
|
|
74
100
|
}
|
|
75
101
|
}
|
|
76
102
|
removeSingleModule(address) {
|
|
@@ -85,23 +111,23 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
85
111
|
}
|
|
86
112
|
}
|
|
87
113
|
resolveByAddress(modules, address) {
|
|
88
|
-
return address ? compact(flatten(address == null ? void 0 : address.map((address2) => {
|
|
89
|
-
return modules.filter((
|
|
114
|
+
return address ? (0, import_lodash.compact)((0, import_lodash.flatten)(address == null ? void 0 : address.map((address2) => {
|
|
115
|
+
return modules.filter((module2) => module2.address === address2);
|
|
90
116
|
}))) : modules;
|
|
91
117
|
}
|
|
92
118
|
resolveByName(modules, name) {
|
|
93
119
|
if (name) {
|
|
94
|
-
return compact(name.map((name2) => modules.filter((
|
|
120
|
+
return (0, import_lodash.compact)(name.map((name2) => modules.filter((module2) => {
|
|
95
121
|
var _a;
|
|
96
|
-
return ((_a =
|
|
122
|
+
return ((_a = module2.config) == null ? void 0 : _a.name) === name2;
|
|
97
123
|
})).flat());
|
|
98
124
|
}
|
|
99
125
|
return modules;
|
|
100
126
|
}
|
|
101
127
|
resolveByQuery(modules, query) {
|
|
102
|
-
return query ? compact(modules.filter((
|
|
128
|
+
return query ? (0, import_lodash.compact)(modules.filter((module2) => query == null ? void 0 : query.reduce((supported, queryList) => {
|
|
103
129
|
return queryList.reduce((supported2, query2) => {
|
|
104
|
-
const queryable =
|
|
130
|
+
const queryable = module2.queries.includes(query2);
|
|
105
131
|
return supported2 && queryable;
|
|
106
132
|
}, true) || supported;
|
|
107
133
|
}, false))) : modules;
|
|
@@ -111,7 +137,7 @@ __name(_SimpleModuleResolver, "SimpleModuleResolver");
|
|
|
111
137
|
var SimpleModuleResolver = _SimpleModuleResolver;
|
|
112
138
|
|
|
113
139
|
// src/CompositeModuleResolver.ts
|
|
114
|
-
var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
140
|
+
var _CompositeModuleResolver = class _CompositeModuleResolver extends import_object.Base {
|
|
115
141
|
resolvers = [];
|
|
116
142
|
localResolver;
|
|
117
143
|
constructor(params = {}) {
|
|
@@ -123,11 +149,11 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
123
149
|
get isModuleResolver() {
|
|
124
150
|
return true;
|
|
125
151
|
}
|
|
126
|
-
add(
|
|
127
|
-
if (Array.isArray(
|
|
128
|
-
|
|
152
|
+
add(module2) {
|
|
153
|
+
if (Array.isArray(module2)) {
|
|
154
|
+
module2.forEach((module3) => this.addSingleModule(module3));
|
|
129
155
|
} else {
|
|
130
|
-
this.addSingleModule(
|
|
156
|
+
this.addSingleModule(module2);
|
|
131
157
|
}
|
|
132
158
|
return this;
|
|
133
159
|
}
|
|
@@ -160,7 +186,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
160
186
|
const result2 = await resolver.resolve(nameOrAddressOrFilter, mutatedOptions);
|
|
161
187
|
return result2;
|
|
162
188
|
}));
|
|
163
|
-
const result = results.filter(exists).filter(duplicateModules).pop();
|
|
189
|
+
const result = results.filter(import_exists.exists).filter(import_module_model.duplicateModules).pop();
|
|
164
190
|
return result;
|
|
165
191
|
} else {
|
|
166
192
|
if (mutatedOptions.maxDepth < 0) {
|
|
@@ -171,12 +197,12 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
171
197
|
return result2;
|
|
172
198
|
}));
|
|
173
199
|
const flatResult = result.flat();
|
|
174
|
-
return flatResult.filter(duplicateModules);
|
|
200
|
+
return flatResult.filter(import_module_model.duplicateModules);
|
|
175
201
|
}
|
|
176
202
|
}
|
|
177
|
-
addSingleModule(
|
|
178
|
-
if (
|
|
179
|
-
this.localResolver.add(
|
|
203
|
+
addSingleModule(module2) {
|
|
204
|
+
if (module2) {
|
|
205
|
+
this.localResolver.add(module2);
|
|
180
206
|
}
|
|
181
207
|
}
|
|
182
208
|
removeSingleModule(addressOrName) {
|
|
@@ -196,10 +222,10 @@ var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
|
196
222
|
listeners.map((listener) => listener(args));
|
|
197
223
|
return true;
|
|
198
224
|
}, "emit");
|
|
199
|
-
const onModuleResolved = /* @__PURE__ */ __name((
|
|
225
|
+
const onModuleResolved = /* @__PURE__ */ __name((module2, filter) => {
|
|
200
226
|
const args = {
|
|
201
227
|
filter,
|
|
202
|
-
module
|
|
228
|
+
module: module2
|
|
203
229
|
};
|
|
204
230
|
emit("moduleResolved", args);
|
|
205
231
|
}, "onModuleResolved");
|
|
@@ -224,9 +250,10 @@ var mixinResolverEventEmitter = /* @__PURE__ */ __name((resolver) => {
|
|
|
224
250
|
const ret = Object.assign(resolver, mixin);
|
|
225
251
|
return ret;
|
|
226
252
|
}, "mixinResolverEventEmitter");
|
|
227
|
-
export
|
|
253
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
254
|
+
0 && (module.exports = {
|
|
228
255
|
CompositeModuleResolver,
|
|
229
256
|
SimpleModuleResolver,
|
|
230
257
|
mixinResolverEventEmitter
|
|
231
|
-
};
|
|
232
|
-
//# sourceMappingURL=index.
|
|
258
|
+
});
|
|
259
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './CompositeModuleResolver'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { exists } from '@xylabs/exists'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\nimport { Base, BaseParams } from '@xyo-network/object'\n\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {\n static defaultMaxDepth = 5\n protected resolvers: ModuleResolver[] = []\n private localResolver: SimpleModuleResolver\n\n constructor(params: BaseParams = {}) {\n super(params)\n const localResolver = new SimpleModuleResolver()\n this.addResolver(localResolver)\n this.localResolver = localResolver\n }\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolver): this {\n this.resolvers.push(resolver)\n return this\n }\n\n remove(addressOrName: string | string[]): this {\n if (Array.isArray(addressOrName)) {\n addressOrName.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(addressOrName)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolver): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth) - 1 }\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const results = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat()\n return flatResult.filter(duplicateModules)\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.localResolver.add(module)\n }\n }\n private removeSingleModule(addressOrName: string) {\n this.localResolver.remove(addressOrName)\n }\n}\n","import { compact, flatten } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n AddressModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleRepository,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\n\n//This class is now package private (not exported from index.ts)\nexport class SimpleModuleResolver implements ModuleRepository {\n private addressToName: Record<string, string> = {}\n private modules: Record<string, ModuleInstance> = {}\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolver): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: string | string[]): this {\n if (Array.isArray(address)) {\n address.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolver): this {\n throw 'Removing resolvers not supported'\n }\n\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (nameOrAddressOrFilter) {\n if (typeof nameOrAddressOrFilter === 'string') {\n return (\n this.resolveByName<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??\n this.resolveByAddress<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop()\n )\n } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {\n return this.resolveByAddress<T>(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)\n } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {\n return this.resolveByName<T>(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)\n } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {\n return this.resolveByQuery<T>(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: string) {\n if (address) {\n if (this.modules[address]) {\n delete this.modules[address]\n const name = this.addressToName[address]\n if (name) {\n delete this.addressToName[address]\n }\n }\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], address?: string[]): T[] {\n return (\n address\n ? compact(\n flatten(\n address?.map((address) => {\n return modules.filter((module) => module.address === address)\n }),\n ),\n )\n : modules\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name?: string[]): T[] {\n if (name) {\n return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat()) as T[]\n }\n return modules as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query?: string[][]): T[] {\n return (\n query\n ? compact(\n modules.filter(\n (module) =>\n query?.reduce((supported, queryList) => {\n return (\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n )\n : modules\n ) as T[]\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: 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 < 1) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\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 const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","addResolver","_resolver","remove","address","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","config","flat","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","undefined","results","Promise","all","map","result","exists","duplicateModules","pop","flatResult","flat","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
package/dist/node/index.js
CHANGED
|
@@ -1,55 +1,29 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
3
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
4
|
var __publicField = (obj, key, value) => {
|
|
22
5
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
23
6
|
return value;
|
|
24
7
|
};
|
|
25
8
|
|
|
26
|
-
// src/index.ts
|
|
27
|
-
var src_exports = {};
|
|
28
|
-
__export(src_exports, {
|
|
29
|
-
CompositeModuleResolver: () => CompositeModuleResolver,
|
|
30
|
-
SimpleModuleResolver: () => SimpleModuleResolver,
|
|
31
|
-
mixinResolverEventEmitter: () => mixinResolverEventEmitter
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(src_exports);
|
|
34
|
-
|
|
35
9
|
// src/CompositeModuleResolver.ts
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
10
|
+
import { exists } from "@xylabs/exists";
|
|
11
|
+
import { duplicateModules } from "@xyo-network/module-model";
|
|
12
|
+
import { Base } from "@xyo-network/object";
|
|
39
13
|
|
|
40
14
|
// src/SimpleModuleResolver.ts
|
|
41
|
-
|
|
15
|
+
import { compact, flatten } from "@xylabs/lodash";
|
|
42
16
|
var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
43
17
|
addressToName = {};
|
|
44
18
|
modules = {};
|
|
45
19
|
get isModuleResolver() {
|
|
46
20
|
return true;
|
|
47
21
|
}
|
|
48
|
-
add(
|
|
49
|
-
if (Array.isArray(
|
|
50
|
-
|
|
22
|
+
add(module) {
|
|
23
|
+
if (Array.isArray(module)) {
|
|
24
|
+
module.forEach((module2) => this.addSingleModule(module2));
|
|
51
25
|
} else {
|
|
52
|
-
this.addSingleModule(
|
|
26
|
+
this.addSingleModule(module);
|
|
53
27
|
}
|
|
54
28
|
return this;
|
|
55
29
|
}
|
|
@@ -89,14 +63,14 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
89
63
|
})();
|
|
90
64
|
const identity = options == null ? void 0 : options.identity;
|
|
91
65
|
if (identity) {
|
|
92
|
-
return Array.isArray(unfiltered) ? unfiltered == null ? void 0 : unfiltered.filter((
|
|
66
|
+
return Array.isArray(unfiltered) ? unfiltered == null ? void 0 : unfiltered.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : void 0;
|
|
93
67
|
} else {
|
|
94
68
|
return unfiltered;
|
|
95
69
|
}
|
|
96
70
|
}
|
|
97
|
-
addSingleModule(
|
|
98
|
-
if (
|
|
99
|
-
this.modules[
|
|
71
|
+
addSingleModule(module) {
|
|
72
|
+
if (module) {
|
|
73
|
+
this.modules[module.address] = module;
|
|
100
74
|
}
|
|
101
75
|
}
|
|
102
76
|
removeSingleModule(address) {
|
|
@@ -111,23 +85,23 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
111
85
|
}
|
|
112
86
|
}
|
|
113
87
|
resolveByAddress(modules, address) {
|
|
114
|
-
return address ?
|
|
115
|
-
return modules.filter((
|
|
88
|
+
return address ? compact(flatten(address == null ? void 0 : address.map((address2) => {
|
|
89
|
+
return modules.filter((module) => module.address === address2);
|
|
116
90
|
}))) : modules;
|
|
117
91
|
}
|
|
118
92
|
resolveByName(modules, name) {
|
|
119
93
|
if (name) {
|
|
120
|
-
return
|
|
94
|
+
return compact(name.map((name2) => modules.filter((module) => {
|
|
121
95
|
var _a;
|
|
122
|
-
return ((_a =
|
|
96
|
+
return ((_a = module.config) == null ? void 0 : _a.name) === name2;
|
|
123
97
|
})).flat());
|
|
124
98
|
}
|
|
125
99
|
return modules;
|
|
126
100
|
}
|
|
127
101
|
resolveByQuery(modules, query) {
|
|
128
|
-
return query ?
|
|
102
|
+
return query ? compact(modules.filter((module) => query == null ? void 0 : query.reduce((supported, queryList) => {
|
|
129
103
|
return queryList.reduce((supported2, query2) => {
|
|
130
|
-
const queryable =
|
|
104
|
+
const queryable = module.queries.includes(query2);
|
|
131
105
|
return supported2 && queryable;
|
|
132
106
|
}, true) || supported;
|
|
133
107
|
}, false))) : modules;
|
|
@@ -137,7 +111,7 @@ __name(_SimpleModuleResolver, "SimpleModuleResolver");
|
|
|
137
111
|
var SimpleModuleResolver = _SimpleModuleResolver;
|
|
138
112
|
|
|
139
113
|
// src/CompositeModuleResolver.ts
|
|
140
|
-
var _CompositeModuleResolver = class _CompositeModuleResolver extends
|
|
114
|
+
var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
141
115
|
resolvers = [];
|
|
142
116
|
localResolver;
|
|
143
117
|
constructor(params = {}) {
|
|
@@ -149,11 +123,11 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends import_obj
|
|
|
149
123
|
get isModuleResolver() {
|
|
150
124
|
return true;
|
|
151
125
|
}
|
|
152
|
-
add(
|
|
153
|
-
if (Array.isArray(
|
|
154
|
-
|
|
126
|
+
add(module) {
|
|
127
|
+
if (Array.isArray(module)) {
|
|
128
|
+
module.forEach((module2) => this.addSingleModule(module2));
|
|
155
129
|
} else {
|
|
156
|
-
this.addSingleModule(
|
|
130
|
+
this.addSingleModule(module);
|
|
157
131
|
}
|
|
158
132
|
return this;
|
|
159
133
|
}
|
|
@@ -186,7 +160,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends import_obj
|
|
|
186
160
|
const result2 = await resolver.resolve(nameOrAddressOrFilter, mutatedOptions);
|
|
187
161
|
return result2;
|
|
188
162
|
}));
|
|
189
|
-
const result = results.filter(
|
|
163
|
+
const result = results.filter(exists).filter(duplicateModules).pop();
|
|
190
164
|
return result;
|
|
191
165
|
} else {
|
|
192
166
|
if (mutatedOptions.maxDepth < 0) {
|
|
@@ -197,12 +171,12 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends import_obj
|
|
|
197
171
|
return result2;
|
|
198
172
|
}));
|
|
199
173
|
const flatResult = result.flat();
|
|
200
|
-
return flatResult.filter(
|
|
174
|
+
return flatResult.filter(duplicateModules);
|
|
201
175
|
}
|
|
202
176
|
}
|
|
203
|
-
addSingleModule(
|
|
204
|
-
if (
|
|
205
|
-
this.localResolver.add(
|
|
177
|
+
addSingleModule(module) {
|
|
178
|
+
if (module) {
|
|
179
|
+
this.localResolver.add(module);
|
|
206
180
|
}
|
|
207
181
|
}
|
|
208
182
|
removeSingleModule(addressOrName) {
|
|
@@ -222,10 +196,10 @@ var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
|
222
196
|
listeners.map((listener) => listener(args));
|
|
223
197
|
return true;
|
|
224
198
|
}, "emit");
|
|
225
|
-
const onModuleResolved = /* @__PURE__ */ __name((
|
|
199
|
+
const onModuleResolved = /* @__PURE__ */ __name((module, filter) => {
|
|
226
200
|
const args = {
|
|
227
201
|
filter,
|
|
228
|
-
module
|
|
202
|
+
module
|
|
229
203
|
};
|
|
230
204
|
emit("moduleResolved", args);
|
|
231
205
|
}, "onModuleResolved");
|
|
@@ -250,10 +224,9 @@ var mixinResolverEventEmitter = /* @__PURE__ */ __name((resolver) => {
|
|
|
250
224
|
const ret = Object.assign(resolver, mixin);
|
|
251
225
|
return ret;
|
|
252
226
|
}, "mixinResolverEventEmitter");
|
|
253
|
-
|
|
254
|
-
0 && (module.exports = {
|
|
227
|
+
export {
|
|
255
228
|
CompositeModuleResolver,
|
|
256
229
|
SimpleModuleResolver,
|
|
257
230
|
mixinResolverEventEmitter
|
|
258
|
-
}
|
|
231
|
+
};
|
|
259
232
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './CompositeModuleResolver'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { exists } from '@xylabs/exists'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\nimport { Base, BaseParams } from '@xyo-network/object'\n\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {\n static defaultMaxDepth = 5\n protected resolvers: ModuleResolver[] = []\n private localResolver: SimpleModuleResolver\n\n constructor(params: BaseParams = {}) {\n super(params)\n const localResolver = new SimpleModuleResolver()\n this.addResolver(localResolver)\n this.localResolver = localResolver\n }\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolver): this {\n this.resolvers.push(resolver)\n return this\n }\n\n remove(addressOrName: string | string[]): this {\n if (Array.isArray(addressOrName)) {\n addressOrName.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(addressOrName)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolver): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth) - 1 }\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const results = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat()\n return flatResult.filter(duplicateModules)\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.localResolver.add(module)\n }\n }\n private removeSingleModule(addressOrName: string) {\n this.localResolver.remove(addressOrName)\n }\n}\n","import { compact, flatten } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n AddressModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleRepository,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\n\n//This class is now package private (not exported from index.ts)\nexport class SimpleModuleResolver implements ModuleRepository {\n private addressToName: Record<string, string> = {}\n private modules: Record<string, ModuleInstance> = {}\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolver): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: string | string[]): this {\n if (Array.isArray(address)) {\n address.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolver): this {\n throw 'Removing resolvers not supported'\n }\n\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (nameOrAddressOrFilter) {\n if (typeof nameOrAddressOrFilter === 'string') {\n return (\n this.resolveByName<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??\n this.resolveByAddress<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop()\n )\n } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {\n return this.resolveByAddress<T>(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)\n } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {\n return this.resolveByName<T>(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)\n } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {\n return this.resolveByQuery<T>(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: string) {\n if (address) {\n if (this.modules[address]) {\n delete this.modules[address]\n const name = this.addressToName[address]\n if (name) {\n delete this.addressToName[address]\n }\n }\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], address?: string[]): T[] {\n return (\n address\n ? compact(\n flatten(\n address?.map((address) => {\n return modules.filter((module) => module.address === address)\n }),\n ),\n )\n : modules\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name?: string[]): T[] {\n if (name) {\n return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat()) as T[]\n }\n return modules as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query?: string[][]): T[] {\n return (\n query\n ? compact(\n modules.filter(\n (module) =>\n query?.reduce((supported, queryList) => {\n return (\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n )\n : modules\n ) as T[]\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: 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 < 1) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\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 const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","addResolver","_resolver","remove","address","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","config","flat","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","undefined","results","Promise","all","map","result","exists","duplicateModules","pop","flatResult","flat","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
|
1
|
+
{"version":3,"sources":["../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\nimport { Base, BaseParams } from '@xyo-network/object'\n\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {\n static defaultMaxDepth = 5\n protected resolvers: ModuleResolver[] = []\n private localResolver: SimpleModuleResolver\n\n constructor(params: BaseParams = {}) {\n super(params)\n const localResolver = new SimpleModuleResolver()\n this.addResolver(localResolver)\n this.localResolver = localResolver\n }\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolver): this {\n this.resolvers.push(resolver)\n return this\n }\n\n remove(addressOrName: string | string[]): this {\n if (Array.isArray(addressOrName)) {\n addressOrName.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(addressOrName)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolver): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth) - 1 }\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const results = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat()\n return flatResult.filter(duplicateModules)\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.localResolver.add(module)\n }\n }\n private removeSingleModule(addressOrName: string) {\n this.localResolver.remove(addressOrName)\n }\n}\n","import { compact, flatten } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n AddressModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleRepository,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\n\n//This class is now package private (not exported from index.ts)\nexport class SimpleModuleResolver implements ModuleRepository {\n private addressToName: Record<string, string> = {}\n private modules: Record<string, ModuleInstance> = {}\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolver): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: string | string[]): this {\n if (Array.isArray(address)) {\n address.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolver): this {\n throw 'Removing resolvers not supported'\n }\n\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (nameOrAddressOrFilter) {\n if (typeof nameOrAddressOrFilter === 'string') {\n return (\n this.resolveByName<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??\n this.resolveByAddress<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop()\n )\n } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {\n return this.resolveByAddress<T>(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)\n } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {\n return this.resolveByName<T>(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)\n } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {\n return this.resolveByQuery<T>(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: string) {\n if (address) {\n if (this.modules[address]) {\n delete this.modules[address]\n const name = this.addressToName[address]\n if (name) {\n delete this.addressToName[address]\n }\n }\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], address?: string[]): T[] {\n return (\n address\n ? compact(\n flatten(\n address?.map((address) => {\n return modules.filter((module) => module.address === address)\n }),\n ),\n )\n : modules\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name?: string[]): T[] {\n if (name) {\n return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat()) as T[]\n }\n return modules as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query?: string[][]): T[] {\n return (\n query\n ? compact(\n modules.filter(\n (module) =>\n query?.reduce((supported, queryList) => {\n return (\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n )\n : modules\n ) as T[]\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: 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 < 1) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\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 const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["exists","duplicateModules","Base","compact","flatten","SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","addResolver","_resolver","remove","address","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","config","flat","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","undefined","results","Promise","all","map","result","exists","duplicateModules","pop","flatResult","flat","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|
package/package.json
CHANGED
|
@@ -13,18 +13,17 @@
|
|
|
13
13
|
"@xylabs/exists": "^2.13.20",
|
|
14
14
|
"@xylabs/lodash": "^2.13.20",
|
|
15
15
|
"@xylabs/promise": "^2.13.20",
|
|
16
|
-
"@xyo-network/module-model": "~2.84.
|
|
17
|
-
"@xyo-network/object": "~2.84.
|
|
16
|
+
"@xyo-network/module-model": "~2.84.4",
|
|
17
|
+
"@xyo-network/object": "~2.84.4"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@xylabs/ts-scripts-yarn3": "^3.2.
|
|
21
|
-
"@xylabs/tsconfig": "^3.2.
|
|
20
|
+
"@xylabs/ts-scripts-yarn3": "^3.2.19",
|
|
21
|
+
"@xylabs/tsconfig": "^3.2.19",
|
|
22
22
|
"jest": "^29.7.0",
|
|
23
23
|
"jest-mock-extended": "^3.0.5",
|
|
24
24
|
"typescript": "^5.3.3"
|
|
25
25
|
},
|
|
26
26
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
27
|
-
"docs": "dist/docs.json",
|
|
28
27
|
"types": "dist/node/index.d.ts",
|
|
29
28
|
"exports": {
|
|
30
29
|
".": {
|
|
@@ -40,19 +39,19 @@
|
|
|
40
39
|
},
|
|
41
40
|
"node": {
|
|
42
41
|
"require": {
|
|
43
|
-
"types": "./dist/node/index.d.
|
|
44
|
-
"default": "./dist/node/index.
|
|
42
|
+
"types": "./dist/node/index.d.cts",
|
|
43
|
+
"default": "./dist/node/index.cjs"
|
|
45
44
|
},
|
|
46
45
|
"import": {
|
|
47
46
|
"types": "./dist/node/index.d.mts",
|
|
48
|
-
"default": "./dist/node/index.
|
|
47
|
+
"default": "./dist/node/index.js"
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
},
|
|
52
51
|
"./package.json": "./package.json"
|
|
53
52
|
},
|
|
54
|
-
"main": "dist/node/index.
|
|
55
|
-
"module": "dist/node/index.
|
|
53
|
+
"main": "dist/node/index.cjs",
|
|
54
|
+
"module": "dist/node/index.js",
|
|
56
55
|
"homepage": "https://xyo.network",
|
|
57
56
|
"license": "LGPL-3.0-only",
|
|
58
57
|
"publishConfig": {
|
|
@@ -63,5 +62,6 @@
|
|
|
63
62
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
64
63
|
},
|
|
65
64
|
"sideEffects": false,
|
|
66
|
-
"version": "2.84.
|
|
65
|
+
"version": "2.84.4",
|
|
66
|
+
"type": "module"
|
|
67
67
|
}
|
package/dist/node/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\nimport { Base, BaseParams } from '@xyo-network/object'\n\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\n\nexport class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {\n static defaultMaxDepth = 5\n protected resolvers: ModuleResolver[] = []\n private localResolver: SimpleModuleResolver\n\n constructor(params: BaseParams = {}) {\n super(params)\n const localResolver = new SimpleModuleResolver()\n this.addResolver(localResolver)\n this.localResolver = localResolver\n }\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolver): this {\n this.resolvers.push(resolver)\n return this\n }\n\n remove(addressOrName: string | string[]): this {\n if (Array.isArray(addressOrName)) {\n addressOrName.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(addressOrName)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolver): this {\n this.resolvers = this.resolvers.filter((item) => item !== resolver)\n return this\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n const mutatedOptions = { ...options, maxDepth: (options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth) - 1 }\n if (typeof nameOrAddressOrFilter === 'string') {\n if (mutatedOptions.maxDepth < 0) {\n return undefined\n }\n const results = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const result: T | undefined = results.filter(exists).filter(duplicateModules).pop()\n return result\n } else {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(nameOrAddressOrFilter, mutatedOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat()\n return flatResult.filter(duplicateModules)\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.localResolver.add(module)\n }\n }\n private removeSingleModule(addressOrName: string) {\n this.localResolver.remove(addressOrName)\n }\n}\n","import { compact, flatten } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n AddressModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleInstance,\n ModuleRepository,\n ModuleResolver,\n NameModuleFilter,\n QueryModuleFilter,\n} from '@xyo-network/module-model'\n\n//This class is now package private (not exported from index.ts)\nexport class SimpleModuleResolver implements ModuleRepository {\n private addressToName: Record<string, string> = {}\n private modules: Record<string, ModuleInstance> = {}\n\n get isModuleResolver() {\n return true\n }\n\n add(module: ModuleInstance): this\n add(module: ModuleInstance[]): this\n add(module: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(module)) {\n module.forEach((module) => this.addSingleModule(module))\n } else {\n this.addSingleModule(module)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolver): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: string | string[]): this {\n if (Array.isArray(address)) {\n address.forEach((address) => this.removeSingleModule(address))\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolver): this {\n throw 'Removing resolvers not supported'\n }\n\n resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promisable<T[]>\n resolve<T extends ModuleInstance = ModuleInstance>(nameOrAddress: string, options?: ModuleFilterOptions<T>): Promisable<T | undefined>\n resolve<T extends ModuleInstance = ModuleInstance>(\n nameOrAddressOrFilter?: ModuleFilter<T> | string,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[] | T | undefined> {\n const unfiltered = (() => {\n if (nameOrAddressOrFilter) {\n if (typeof nameOrAddressOrFilter === 'string') {\n return (\n this.resolveByName<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop() ??\n this.resolveByAddress<T>(Object.values(this.modules), [nameOrAddressOrFilter]).pop()\n )\n } else if ((nameOrAddressOrFilter as AddressModuleFilter).address) {\n return this.resolveByAddress<T>(Object.values(this.modules), (nameOrAddressOrFilter as AddressModuleFilter).address)\n } else if ((nameOrAddressOrFilter as NameModuleFilter).name) {\n return this.resolveByName<T>(Object.values(this.modules), (nameOrAddressOrFilter as NameModuleFilter).name)\n } else if ((nameOrAddressOrFilter as QueryModuleFilter).query) {\n return this.resolveByQuery<T>(Object.values(this.modules), (nameOrAddressOrFilter as QueryModuleFilter).query)\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return Array.isArray(unfiltered) ? unfiltered?.filter((module) => identity(module)) : identity(unfiltered) ? unfiltered : undefined\n } else {\n return unfiltered\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: string) {\n if (address) {\n if (this.modules[address]) {\n delete this.modules[address]\n const name = this.addressToName[address]\n if (name) {\n delete this.addressToName[address]\n }\n }\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], address?: string[]): T[] {\n return (\n address\n ? compact(\n flatten(\n address?.map((address) => {\n return modules.filter((module) => module.address === address)\n }),\n ),\n )\n : modules\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name?: string[]): T[] {\n if (name) {\n return compact(name.map((name) => modules.filter((module) => module.config?.name === name)).flat()) as T[]\n }\n return modules as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query?: string[][]): T[] {\n return (\n query\n ? compact(\n modules.filter(\n (module) =>\n query?.reduce((supported, queryList) => {\n return (\n queryList.reduce((supported, query) => {\n const queryable = module.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n )\n : modules\n ) as T[]\n }\n}\n","import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n module: 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 < 1) return false\n listeners.map((listener) => listener(args))\n return true\n }\n const onModuleResolved = (module: Module, filter?: ModuleFilter) => {\n const args = { filter, module }\n emit('moduleResolved', args)\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 const ret = Object.assign(resolver, mixin)\n return ret\n}\n"],"mappings":"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","names":["exists","duplicateModules","Base","compact","flatten","SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","addResolver","_resolver","remove","address","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","config","flat","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","forEach","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","undefined","results","Promise","all","map","result","exists","duplicateModules","pop","flatResult","flat","getMixin","resolver","listeners","emit","event","args","length","map","listener","onModuleResolved","module","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","mod","mixinResolverEventEmitter","mixin","ret","Object","assign"]}
|