@xyo-network/module-resolver 2.84.6 → 2.84.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/SimpleModuleResolver.d.cts.map +1 -1
- package/dist/browser/SimpleModuleResolver.d.mts.map +1 -1
- package/dist/browser/SimpleModuleResolver.d.ts.map +1 -1
- package/dist/browser/index.cjs +22 -17
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +22 -17
- package/dist/browser/index.js.map +1 -1
- package/dist/node/SimpleModuleResolver.d.cts.map +1 -1
- package/dist/node/SimpleModuleResolver.d.mts.map +1 -1
- package/dist/node/SimpleModuleResolver.d.ts.map +1 -1
- package/dist/node/index.cjs +23 -18
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +23 -18
- package/dist/node/index.js.map +1 -1
- package/package.json +5 -5
- package/src/CompositeModuleResolver.ts +2 -2
- package/src/ResolverEventEmitter.ts +1 -1
- package/src/SimpleModuleResolver.ts +9 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -45,7 +45,8 @@ var SimpleModuleResolver = class {
|
|
|
45
45
|
}
|
|
46
46
|
add(module2) {
|
|
47
47
|
if (Array.isArray(module2)) {
|
|
48
|
-
|
|
48
|
+
for (const mod of module2)
|
|
49
|
+
this.addSingleModule(mod);
|
|
49
50
|
} else {
|
|
50
51
|
this.addSingleModule(module2);
|
|
51
52
|
}
|
|
@@ -56,7 +57,8 @@ var SimpleModuleResolver = class {
|
|
|
56
57
|
}
|
|
57
58
|
remove(address) {
|
|
58
59
|
if (Array.isArray(address)) {
|
|
59
|
-
|
|
60
|
+
for (const addr of address)
|
|
61
|
+
this.removeSingleModule(addr);
|
|
60
62
|
} else {
|
|
61
63
|
this.removeSingleModule(address);
|
|
62
64
|
}
|
|
@@ -98,13 +100,11 @@ var SimpleModuleResolver = class {
|
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
removeSingleModule(address) {
|
|
101
|
-
if (address) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
delete this.addressToName[address];
|
|
107
|
-
}
|
|
103
|
+
if (address && this.modules[address]) {
|
|
104
|
+
delete this.modules[address];
|
|
105
|
+
const name = this.addressToName[address];
|
|
106
|
+
if (name) {
|
|
107
|
+
delete this.addressToName[address];
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -115,16 +115,19 @@ var SimpleModuleResolver = class {
|
|
|
115
115
|
}
|
|
116
116
|
resolveByName(modules, name) {
|
|
117
117
|
if (name) {
|
|
118
|
-
return (0, import_lodash.compact)(name.
|
|
118
|
+
return (0, import_lodash.compact)(name.flatMap((name2) => modules.filter((module2) => module2.config?.name === name2)));
|
|
119
119
|
}
|
|
120
120
|
return modules;
|
|
121
121
|
}
|
|
122
122
|
resolveByQuery(modules, query) {
|
|
123
123
|
return query ? (0, import_lodash.compact)(modules.filter((module2) => query?.reduce((supported, queryList) => {
|
|
124
|
-
return
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
return (
|
|
125
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
126
|
+
queryList.reduce((supported2, query2) => {
|
|
127
|
+
const queryable = module2.queries.includes(query2);
|
|
128
|
+
return supported2 && queryable;
|
|
129
|
+
}, true) || supported
|
|
130
|
+
);
|
|
128
131
|
}, false))) : modules;
|
|
129
132
|
}
|
|
130
133
|
};
|
|
@@ -148,7 +151,8 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends import_obje
|
|
|
148
151
|
}
|
|
149
152
|
add(module2) {
|
|
150
153
|
if (Array.isArray(module2)) {
|
|
151
|
-
|
|
154
|
+
for (const mod of module2)
|
|
155
|
+
this.addSingleModule(mod);
|
|
152
156
|
} else {
|
|
153
157
|
this.addSingleModule(module2);
|
|
154
158
|
}
|
|
@@ -160,7 +164,8 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends import_obje
|
|
|
160
164
|
}
|
|
161
165
|
remove(addressOrName) {
|
|
162
166
|
if (Array.isArray(addressOrName)) {
|
|
163
|
-
|
|
167
|
+
for (const address of addressOrName)
|
|
168
|
+
this.removeSingleModule(address);
|
|
164
169
|
} else {
|
|
165
170
|
this.removeSingleModule(addressOrName);
|
|
166
171
|
}
|
|
@@ -211,7 +216,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends import_obje
|
|
|
211
216
|
var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
212
217
|
const listeners = [];
|
|
213
218
|
const emit = /* @__PURE__ */ __name((event, args) => {
|
|
214
|
-
if (listeners.length
|
|
219
|
+
if (listeners.length === 0)
|
|
215
220
|
return false;
|
|
216
221
|
listeners.map((listener) => listener(args));
|
|
217
222
|
return true;
|
|
@@ -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","defaultMaxDepth","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","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/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 for (const mod of module) this.addSingleModule(mod)\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 for (const address of addressOrName) 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 for (const mod of module) this.addSingleModule(mod)\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 for (const addr of address) this.removeSingleModule(addr)\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 && 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 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.flatMap((name) => modules.filter((module) => module.config?.name === name))) 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 // eslint-disable-next-line unicorn/no-array-reduce\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 === 0) 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","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","flatMap","config","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","defaultMaxDepth","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","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/browser/index.js
CHANGED
|
@@ -19,7 +19,8 @@ var SimpleModuleResolver = class {
|
|
|
19
19
|
}
|
|
20
20
|
add(module) {
|
|
21
21
|
if (Array.isArray(module)) {
|
|
22
|
-
|
|
22
|
+
for (const mod of module)
|
|
23
|
+
this.addSingleModule(mod);
|
|
23
24
|
} else {
|
|
24
25
|
this.addSingleModule(module);
|
|
25
26
|
}
|
|
@@ -30,7 +31,8 @@ var SimpleModuleResolver = class {
|
|
|
30
31
|
}
|
|
31
32
|
remove(address) {
|
|
32
33
|
if (Array.isArray(address)) {
|
|
33
|
-
|
|
34
|
+
for (const addr of address)
|
|
35
|
+
this.removeSingleModule(addr);
|
|
34
36
|
} else {
|
|
35
37
|
this.removeSingleModule(address);
|
|
36
38
|
}
|
|
@@ -72,13 +74,11 @@ var SimpleModuleResolver = class {
|
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
removeSingleModule(address) {
|
|
75
|
-
if (address) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
delete this.addressToName[address];
|
|
81
|
-
}
|
|
77
|
+
if (address && this.modules[address]) {
|
|
78
|
+
delete this.modules[address];
|
|
79
|
+
const name = this.addressToName[address];
|
|
80
|
+
if (name) {
|
|
81
|
+
delete this.addressToName[address];
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -89,16 +89,19 @@ var SimpleModuleResolver = class {
|
|
|
89
89
|
}
|
|
90
90
|
resolveByName(modules, name) {
|
|
91
91
|
if (name) {
|
|
92
|
-
return compact(name.
|
|
92
|
+
return compact(name.flatMap((name2) => modules.filter((module) => module.config?.name === name2)));
|
|
93
93
|
}
|
|
94
94
|
return modules;
|
|
95
95
|
}
|
|
96
96
|
resolveByQuery(modules, query) {
|
|
97
97
|
return query ? compact(modules.filter((module) => query?.reduce((supported, queryList) => {
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
return (
|
|
99
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
100
|
+
queryList.reduce((supported2, query2) => {
|
|
101
|
+
const queryable = module.queries.includes(query2);
|
|
102
|
+
return supported2 && queryable;
|
|
103
|
+
}, true) || supported
|
|
104
|
+
);
|
|
102
105
|
}, false))) : modules;
|
|
103
106
|
}
|
|
104
107
|
};
|
|
@@ -122,7 +125,8 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
122
125
|
}
|
|
123
126
|
add(module) {
|
|
124
127
|
if (Array.isArray(module)) {
|
|
125
|
-
|
|
128
|
+
for (const mod of module)
|
|
129
|
+
this.addSingleModule(mod);
|
|
126
130
|
} else {
|
|
127
131
|
this.addSingleModule(module);
|
|
128
132
|
}
|
|
@@ -134,7 +138,8 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
134
138
|
}
|
|
135
139
|
remove(addressOrName) {
|
|
136
140
|
if (Array.isArray(addressOrName)) {
|
|
137
|
-
|
|
141
|
+
for (const address of addressOrName)
|
|
142
|
+
this.removeSingleModule(address);
|
|
138
143
|
} else {
|
|
139
144
|
this.removeSingleModule(addressOrName);
|
|
140
145
|
}
|
|
@@ -185,7 +190,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
185
190
|
var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
186
191
|
const listeners = [];
|
|
187
192
|
const emit = /* @__PURE__ */ __name((event, args) => {
|
|
188
|
-
if (listeners.length
|
|
193
|
+
if (listeners.length === 0)
|
|
189
194
|
return false;
|
|
190
195
|
listeners.map((listener) => listener(args));
|
|
191
196
|
return true;
|
|
@@ -1 +1 @@
|
|
|
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","defaultMaxDepth","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","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 for (const mod of module) this.addSingleModule(mod)\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 for (const address of addressOrName) 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 for (const mod of module) this.addSingleModule(mod)\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 for (const addr of address) this.removeSingleModule(addr)\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 && 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 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.flatMap((name) => modules.filter((module) => module.config?.name === name))) 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 // eslint-disable-next-line unicorn/no-array-reduce\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 === 0) 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":";;;;AAAA,SAASA,cAAc;AACvB,SAASC,wBAA6G;AACtH,SAASC,YAAwB;;;ACFjC,SAASC,SAASC,eAAe;AAc1B,IAAMC,uBAAN,MAAMA;EAdb,OAcaA;;;EACHC,gBAAwC,CAAC;EACzCC,UAA0C,CAAC;EAEnD,IAAIC,mBAAmB;AACrB,WAAO;EACT;EAIAC,IAAIC,QAAiD;AACnD,QAAIC,MAAMC,QAAQF,MAAAA,GAAS;AACzB,iBAAWG,OAAOH;AAAQ,aAAKI,gBAAgBD,GAAAA;IACjD,OAAO;AACL,WAAKC,gBAAgBJ,MAAAA;IACvB;AACA,WAAO;EACT;EAEAK,YAAYC,WAAiC;AAC3C,UAAM;EACR;EAEAC,OAAOC,SAAkC;AACvC,QAAIP,MAAMC,QAAQM,OAAAA,GAAU;AAC1B,iBAAWC,QAAQD;AAAS,aAAKE,mBAAmBD,IAAAA;IACtD,OAAO;AACL,WAAKC,mBAAmBF,OAAAA;IAC1B;AACA,WAAO;EACT;EAEAG,eAAeL,WAAiC;AAC9C,UAAM;EACR;EAIAM,QACEC,uBACAC,SACiC;AACjC,UAAMC,cAAc,MAAA;AAClB,UAAIF,uBAAuB;AACzB,YAAI,OAAOA,0BAA0B,UAAU;AAC7C,iBACE,KAAKG,cAAiBC,OAAOC,OAAO,KAAKrB,OAAO,GAAG;YAACgB;WAAsB,EAAEM,IAAG,KAC/E,KAAKC,iBAAoBH,OAAOC,OAAO,KAAKrB,OAAO,GAAG;YAACgB;WAAsB,EAAEM,IAAG;QAEtF,WAAYN,sBAA8CL,SAAS;AACjE,iBAAO,KAAKY,iBAAoBH,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA8CL,OAAO;QACrH,WAAYK,sBAA2CQ,MAAM;AAC3D,iBAAO,KAAKL,cAAiBC,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA2CQ,IAAI;QAC5G,WAAYR,sBAA4CS,OAAO;AAC7D,iBAAO,KAAKC,eAAkBN,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA4CS,KAAK;QAC/G;MACF,OAAO;AACL,eAAOL,OAAOC,OAAO,KAAKrB,OAAO;MACnC;IACF,GAAA;AACA,UAAM2B,WAAWV,SAASU;AAC1B,QAAIA,UAAU;AACZ,aAAOvB,MAAMC,QAAQa,UAAAA,IAAcA,YAAYU,OAAO,CAACzB,WAAWwB,SAASxB,MAAAA,CAAAA,IAAWwB,SAAST,UAAAA,IAAcA,aAAaW;IAC5H,OAAO;AACL,aAAOX;IACT;EACF;EAEQX,gBAAgBJ,QAAyB;AAC/C,QAAIA,QAAQ;AACV,WAAKH,QAAQG,OAAOQ,OAAO,IAAIR;IACjC;EACF;EAEQU,mBAAmBF,SAAiB;AAC1C,QAAIA,WAAW,KAAKX,QAAQW,OAAAA,GAAU;AACpC,aAAO,KAAKX,QAAQW,OAAAA;AACpB,YAAMa,OAAO,KAAKzB,cAAcY,OAAAA;AAChC,UAAIa,MAAM;AACR,eAAO,KAAKzB,cAAcY,OAAAA;MAC5B;IACF;EACF;EAEQY,iBAA4DvB,SAA2BW,SAAyB;AACtH,WACEA,UACImB,QACEC,QACEpB,SAASqB,IAAI,CAACrB,aAAAA;AACZ,aAAOX,QAAQ4B,OAAO,CAACzB,WAAWA,OAAOQ,YAAYA,QAAAA;IACvD,CAAA,CAAA,CAAA,IAGJX;EAER;EAEQmB,cAAyDnB,SAA2BwB,MAAsB;AAChH,QAAIA,MAAM;AACR,aAAOM,QAAQN,KAAKS,QAAQ,CAACT,UAASxB,QAAQ4B,OAAO,CAACzB,WAAWA,OAAO+B,QAAQV,SAASA,KAAAA,CAAAA,CAAAA;IAC3F;AACA,WAAOxB;EACT;EAEQ0B,eAA0D1B,SAA2ByB,OAAyB;AACpH,WACEA,QACIK,QACE9B,QAAQ4B,OACN,CAACzB,WACCsB,OAAOU,OAAO,CAACC,WAAWC,cAAAA;AACxB;;QAEEA,UAAUF,OAAO,CAACC,YAAWX,WAAAA;AAC3B,gBAAMa,YAAYnC,OAAOoC,QAAQC,SAASf,MAAAA;AAC1C,iBAAOW,cAAaE;QACtB,GAAG,IAAA,KAASF;;IAEhB,GAAG,KAAA,CAAA,CAAA,IAGTpC;EAER;AACF;;;ADrIO,IAAMyC,0BAAN,MAAMA,iCAAgCC,KAAAA;EAN7C,OAM6CA;;;EAC3C,OAAOC,kBAAkB;EACfC,YAA8B,CAAA;EAChCC;EAERC,YAAYC,SAAqB,CAAC,GAAG;AACnC,UAAMA,MAAAA;AACN,UAAMF,gBAAgB,IAAIG,qBAAAA;AAC1B,SAAKC,YAAYJ,aAAAA;AACjB,SAAKA,gBAAgBA;EACvB;EAEA,IAAIK,mBAAmB;AACrB,WAAO;EACT;EAIAC,IAAIC,QAAiD;AACnD,QAAIC,MAAMC,QAAQF,MAAAA,GAAS;AACzB,iBAAWG,OAAOH;AAAQ,aAAKI,gBAAgBD,GAAAA;IACjD,OAAO;AACL,WAAKC,gBAAgBJ,MAAAA;IACvB;AACA,WAAO;EACT;EAEAH,YAAYQ,UAAgC;AAC1C,SAAKb,UAAUc,KAAKD,QAAAA;AACpB,WAAO;EACT;EAEAE,OAAOC,eAAwC;AAC7C,QAAIP,MAAMC,QAAQM,aAAAA,GAAgB;AAChC,iBAAWC,WAAWD;AAAe,aAAKE,mBAAmBD,OAAAA;IAC/D,OAAO;AACL,WAAKC,mBAAmBF,aAAAA;IAC1B;AACA,WAAO;EACT;EAEAG,eAAeN,UAAgC;AAC7C,SAAKb,YAAY,KAAKA,UAAUoB,OAAO,CAACC,SAASA,SAASR,QAAAA;AAC1D,WAAO;EACT;EAIA,MAAMS,QACJC,uBACAC,SAC8B;AAC9B,UAAMC,iBAAiB;MAAE,GAAGD;MAASE,WAAWF,SAASE,YAAY7B,yBAAwBE,mBAAmB;IAAE;AAClH,QAAI,OAAOwB,0BAA0B,UAAU;AAC7C,UAAIE,eAAeC,WAAW,GAAG;AAC/B,eAAOC;MACT;AACA,YAAMC,UAAU,MAAMC,QAAQC,IAC5B,KAAK9B,UAAU+B,IAAI,OAAOlB,aAAAA;AACxB,cAAMmB,UAAwB,MAAMnB,SAASS,QAAWC,uBAAuBE,cAAAA;AAC/E,eAAOO;MACT,CAAA,CAAA;AAEF,YAAMA,SAAwBJ,QAAQR,OAAOa,MAAAA,EAAQb,OAAOc,gBAAAA,EAAkBC,IAAG;AACjF,aAAOH;IACT,OAAO;AACL,UAAIP,eAAeC,WAAW,GAAG;AAC/B,eAAO,CAAA;MACT;AACA,YAAMM,SAAS,MAAMH,QAAQC,IAC3B,KAAK9B,UAAU+B,IAAI,OAAOlB,aAAAA;AACxB,cAAMmB,UAAc,MAAMnB,SAASS,QAAWC,uBAAuBE,cAAAA;AACrE,eAAOO;MACT,CAAA,CAAA;AAEF,YAAMI,aAAkBJ,OAAOK,KAAI;AACnC,aAAOD,WAAWhB,OAAOc,gBAAAA;IAC3B;EACF;EAEQtB,gBAAgBJ,QAAyB;AAC/C,QAAIA,QAAQ;AACV,WAAKP,cAAcM,IAAIC,MAAAA;IACzB;EACF;EACQU,mBAAmBF,eAAuB;AAChD,SAAKf,cAAcc,OAAOC,aAAAA;EAC5B;AACF;;;AEjFA,IAAMsB,WAAW,wBAA4CC,aAAAA;AAC3D,QAAMC,YAAgC,CAAA;AACtC,QAAMC,OAAO,wBAACC,OAAyBC,SAAAA;AACrC,QAAIH,UAAUI,WAAW;AAAG,aAAO;AACnCJ,cAAUK,IAAI,CAACC,aAAaA,SAASH,IAAAA,CAAAA;AACrC,WAAO;EACT,GAJa;AAKb,QAAMI,mBAAmB,wBAACC,QAAgBC,WAAAA;AACxC,UAAMN,OAAO;MAAEM;MAAQD;IAAO;AAC9BP,SAAK,kBAAkBE,IAAAA;EACzB,GAHyB;AAIzB,QAAM,EAAEO,QAAO,IAAKX;AACpB,WAASY,gBAAgBF,QAAqB;AAC5C,WAAOC,QAAQE,KAAKb,QAAAA,EAAUU,MAAAA;EAChC;AAFSE;AAIT,SAAO;IACLE,IAAI,CAACX,OAAyBI,aAAAA;AAC5BN,gBAAUc,KAAKR,QAAAA;IACjB;IACAI,SAAS,OAAOD,WAAAA;AACd,YAAMM,UAAoB,MAAMJ,gBAAgBF,MAAAA;AAChD,YAAMO,QAAQC,WAAWF,QAAQV,IAAI,CAACa,QAAQX,iBAAiBW,KAAKT,MAAAA,CAAAA,CAAAA;AACpE,aAAOM;IACT;EACF;AACF,GA1BiB;AA4BV,IAAMI,4BAA4B,wBAA4CpB,aAAAA;AACnF,QAAMqB,QAAQtB,SAASC,QAAAA;AACvB,QAAMsB,MAAMC,OAAOC,OAAOxB,UAAUqB,KAAAA;AACpC,SAAOC;AACT,GAJyC;","names":["exists","duplicateModules","Base","compact","flatten","SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","flatMap","config","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","defaultMaxDepth","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addressOrName","address","removeSingleModule","removeResolver","filter","item","resolve","nameOrAddressOrFilter","options","mutatedOptions","maxDepth","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAEL,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGf,MAAM,2BAA2B,CAAA;AAGlC,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAqC;IAEpD,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI5C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IASxC,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAI/C,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA+BtI,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;CAoBvB"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -47,7 +47,8 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
47
47
|
}
|
|
48
48
|
add(module2) {
|
|
49
49
|
if (Array.isArray(module2)) {
|
|
50
|
-
|
|
50
|
+
for (const mod of module2)
|
|
51
|
+
this.addSingleModule(mod);
|
|
51
52
|
} else {
|
|
52
53
|
this.addSingleModule(module2);
|
|
53
54
|
}
|
|
@@ -58,7 +59,8 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
58
59
|
}
|
|
59
60
|
remove(address) {
|
|
60
61
|
if (Array.isArray(address)) {
|
|
61
|
-
|
|
62
|
+
for (const addr of address)
|
|
63
|
+
this.removeSingleModule(addr);
|
|
62
64
|
} else {
|
|
63
65
|
this.removeSingleModule(address);
|
|
64
66
|
}
|
|
@@ -100,13 +102,11 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
100
102
|
}
|
|
101
103
|
}
|
|
102
104
|
removeSingleModule(address) {
|
|
103
|
-
if (address) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
delete this.addressToName[address];
|
|
109
|
-
}
|
|
105
|
+
if (address && this.modules[address]) {
|
|
106
|
+
delete this.modules[address];
|
|
107
|
+
const name = this.addressToName[address];
|
|
108
|
+
if (name) {
|
|
109
|
+
delete this.addressToName[address];
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
@@ -117,19 +117,22 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
117
117
|
}
|
|
118
118
|
resolveByName(modules, name) {
|
|
119
119
|
if (name) {
|
|
120
|
-
return (0, import_lodash.compact)(name.
|
|
120
|
+
return (0, import_lodash.compact)(name.flatMap((name2) => modules.filter((module2) => {
|
|
121
121
|
var _a;
|
|
122
122
|
return ((_a = module2.config) == null ? void 0 : _a.name) === name2;
|
|
123
|
-
}))
|
|
123
|
+
})));
|
|
124
124
|
}
|
|
125
125
|
return modules;
|
|
126
126
|
}
|
|
127
127
|
resolveByQuery(modules, query) {
|
|
128
128
|
return query ? (0, import_lodash.compact)(modules.filter((module2) => query == null ? void 0 : query.reduce((supported, queryList) => {
|
|
129
|
-
return
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
return (
|
|
130
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
131
|
+
queryList.reduce((supported2, query2) => {
|
|
132
|
+
const queryable = module2.queries.includes(query2);
|
|
133
|
+
return supported2 && queryable;
|
|
134
|
+
}, true) || supported
|
|
135
|
+
);
|
|
133
136
|
}, false))) : modules;
|
|
134
137
|
}
|
|
135
138
|
};
|
|
@@ -151,7 +154,8 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends import_obj
|
|
|
151
154
|
}
|
|
152
155
|
add(module2) {
|
|
153
156
|
if (Array.isArray(module2)) {
|
|
154
|
-
|
|
157
|
+
for (const mod of module2)
|
|
158
|
+
this.addSingleModule(mod);
|
|
155
159
|
} else {
|
|
156
160
|
this.addSingleModule(module2);
|
|
157
161
|
}
|
|
@@ -163,7 +167,8 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends import_obj
|
|
|
163
167
|
}
|
|
164
168
|
remove(addressOrName) {
|
|
165
169
|
if (Array.isArray(addressOrName)) {
|
|
166
|
-
|
|
170
|
+
for (const address of addressOrName)
|
|
171
|
+
this.removeSingleModule(address);
|
|
167
172
|
} else {
|
|
168
173
|
this.removeSingleModule(addressOrName);
|
|
169
174
|
}
|
|
@@ -217,7 +222,7 @@ var CompositeModuleResolver = _CompositeModuleResolver;
|
|
|
217
222
|
var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
218
223
|
const listeners = [];
|
|
219
224
|
const emit = /* @__PURE__ */ __name((event, args) => {
|
|
220
|
-
if (listeners.length
|
|
225
|
+
if (listeners.length === 0)
|
|
221
226
|
return false;
|
|
222
227
|
listeners.map((listener) => listener(args));
|
|
223
228
|
return true;
|
package/dist/node/index.cjs.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/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 for (const mod of module) this.addSingleModule(mod)\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 for (const address of addressOrName) 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 for (const mod of module) this.addSingleModule(mod)\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 for (const addr of address) this.removeSingleModule(addr)\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 && 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 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.flatMap((name) => modules.filter((module) => module.config?.name === name))) 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 // eslint-disable-next-line unicorn/no-array-reduce\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 === 0) 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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAuB;AACvB,0BAAsH;AACtH,oBAAiC;;;ACFjC,oBAAiC;AAc1B,IAAMA,wBAAN,MAAMA,sBAAAA;EACHC,gBAAwC,CAAC;EACzCC,UAA0C,CAAC;EAEnD,IAAIC,mBAAmB;AACrB,WAAO;EACT;EAIAC,IAAIC,SAAiD;AACnD,QAAIC,MAAMC,QAAQF,OAAAA,GAAS;AACzB,iBAAWG,OAAOH;AAAQ,aAAKI,gBAAgBD,GAAAA;IACjD,OAAO;AACL,WAAKC,gBAAgBJ,OAAAA;IACvB;AACA,WAAO;EACT;EAEAK,YAAYC,WAAiC;AAC3C,UAAM;EACR;EAEAC,OAAOC,SAAkC;AACvC,QAAIP,MAAMC,QAAQM,OAAAA,GAAU;AAC1B,iBAAWC,QAAQD;AAAS,aAAKE,mBAAmBD,IAAAA;IACtD,OAAO;AACL,WAAKC,mBAAmBF,OAAAA;IAC1B;AACA,WAAO;EACT;EAEAG,eAAeL,WAAiC;AAC9C,UAAM;EACR;EAIAM,QACEC,uBACAC,SACiC;AACjC,UAAMC,cAAc,MAAA;AAClB,UAAIF,uBAAuB;AACzB,YAAI,OAAOA,0BAA0B,UAAU;AAC7C,iBACE,KAAKG,cAAiBC,OAAOC,OAAO,KAAKrB,OAAO,GAAG;YAACgB;WAAsB,EAAEM,IAAG,KAC/E,KAAKC,iBAAoBH,OAAOC,OAAO,KAAKrB,OAAO,GAAG;YAACgB;WAAsB,EAAEM,IAAG;QAEtF,WAAYN,sBAA8CL,SAAS;AACjE,iBAAO,KAAKY,iBAAoBH,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA8CL,OAAO;QACrH,WAAYK,sBAA2CQ,MAAM;AAC3D,iBAAO,KAAKL,cAAiBC,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA2CQ,IAAI;QAC5G,WAAYR,sBAA4CS,OAAO;AAC7D,iBAAO,KAAKC,eAAkBN,OAAOC,OAAO,KAAKrB,OAAO,GAAIgB,sBAA4CS,KAAK;QAC/G;MACF,OAAO;AACL,eAAOL,OAAOC,OAAO,KAAKrB,OAAO;MACnC;IACF,GAAA;AACA,UAAM2B,WAAWV,mCAASU;AAC1B,QAAIA,UAAU;AACZ,aAAOvB,MAAMC,QAAQa,UAAAA,IAAcA,yCAAYU,OAAO,CAACzB,YAAWwB,SAASxB,OAAAA,KAAWwB,SAAST,UAAAA,IAAcA,aAAaW;IAC5H,OAAO;AACL,aAAOX;IACT;EACF;EAEQX,gBAAgBJ,SAAyB;AAC/C,QAAIA,SAAQ;AACV,WAAKH,QAAQG,QAAOQ,OAAO,IAAIR;IACjC;EACF;EAEQU,mBAAmBF,SAAiB;AAC1C,QAAIA,WAAW,KAAKX,QAAQW,OAAAA,GAAU;AACpC,aAAO,KAAKX,QAAQW,OAAAA;AACpB,YAAMa,OAAO,KAAKzB,cAAcY,OAAAA;AAChC,UAAIa,MAAM;AACR,eAAO,KAAKzB,cAAcY,OAAAA;MAC5B;IACF;EACF;EAEQY,iBAA4DvB,SAA2BW,SAAyB;AACtH,WACEA,cACImB,2BACEC,uBACEpB,mCAASqB,IAAI,CAACrB,aAAAA;AACZ,aAAOX,QAAQ4B,OAAO,CAACzB,YAAWA,QAAOQ,YAAYA,QAAAA;IACvD,EAAA,CAAA,IAGJX;EAER;EAEQmB,cAAyDnB,SAA2BwB,MAAsB;AAChH,QAAIA,MAAM;AACR,iBAAOM,uBAAQN,KAAKS,QAAQ,CAACT,UAASxB,QAAQ4B,OAAO,CAACzB,YAAAA;AAlH5D;AAkHuEA,sBAAAA,QAAO+B,WAAP/B,mBAAeqB,UAASA;OAAAA,CAAAA,CAAAA;IAC3F;AACA,WAAOxB;EACT;EAEQ0B,eAA0D1B,SAA2ByB,OAAyB;AACpH,WACEA,YACIK,uBACE9B,QAAQ4B,OACN,CAACzB,YACCsB,+BAAOU,OAAO,CAACC,WAAWC,cAAAA;AACxB;;QAEEA,UAAUF,OAAO,CAACC,YAAWX,WAAAA;AAC3B,gBAAMa,YAAYnC,QAAOoC,QAAQC,SAASf,MAAAA;AAC1C,iBAAOW,cAAaE;QACtB,GAAG,IAAA,KAASF;;IAEhB,GAAG,MAAA,CAAA,IAGTpC;EAER;AACF;AA7HaF;AAAN,IAAMA,uBAAN;;;ADRA,IAAM2C,2BAAN,MAAMA,iCAAgCC,mBAAAA;EAEjCC,YAA8B,CAAA;EAChCC;EAERC,YAAYC,SAAqB,CAAC,GAAG;AACnC,UAAMA,MAAAA;AACN,UAAMF,gBAAgB,IAAIG,qBAAAA;AAC1B,SAAKC,YAAYJ,aAAAA;AACjB,SAAKA,gBAAgBA;EACvB;EAEA,IAAIK,mBAAmB;AACrB,WAAO;EACT;EAIAC,IAAIC,SAAiD;AACnD,QAAIC,MAAMC,QAAQF,OAAAA,GAAS;AACzB,iBAAWG,OAAOH;AAAQ,aAAKI,gBAAgBD,GAAAA;IACjD,OAAO;AACL,WAAKC,gBAAgBJ,OAAAA;IACvB;AACA,WAAO;EACT;EAEAH,YAAYQ,UAAgC;AAC1C,SAAKb,UAAUc,KAAKD,QAAAA;AACpB,WAAO;EACT;EAEAE,OAAOC,eAAwC;AAC7C,QAAIP,MAAMC,QAAQM,aAAAA,GAAgB;AAChC,iBAAWC,WAAWD;AAAe,aAAKE,mBAAmBD,OAAAA;IAC/D,OAAO;AACL,WAAKC,mBAAmBF,aAAAA;IAC1B;AACA,WAAO;EACT;EAEAG,eAAeN,UAAgC;AAC7C,SAAKb,YAAY,KAAKA,UAAUoB,OAAO,CAACC,SAASA,SAASR,QAAAA;AAC1D,WAAO;EACT;EAIA,MAAMS,QACJC,uBACAC,SAC8B;AAC9B,UAAMC,iBAAiB;MAAE,GAAGD;MAASE,YAAWF,mCAASE,aAAY5B,yBAAwB6B,mBAAmB;IAAE;AAClH,QAAI,OAAOJ,0BAA0B,UAAU;AAC7C,UAAIE,eAAeC,WAAW,GAAG;AAC/B,eAAOE;MACT;AACA,YAAMC,UAAU,MAAMC,QAAQC,IAC5B,KAAK/B,UAAUgC,IAAI,OAAOnB,aAAAA;AACxB,cAAMoB,UAAwB,MAAMpB,SAASS,QAAWC,uBAAuBE,cAAAA;AAC/E,eAAOQ;MACT,CAAA,CAAA;AAEF,YAAMA,SAAwBJ,QAAQT,OAAOc,oBAAAA,EAAQd,OAAOe,oCAAAA,EAAkBC,IAAG;AACjF,aAAOH;IACT,OAAO;AACL,UAAIR,eAAeC,WAAW,GAAG;AAC/B,eAAO,CAAA;MACT;AACA,YAAMO,SAAS,MAAMH,QAAQC,IAC3B,KAAK/B,UAAUgC,IAAI,OAAOnB,aAAAA;AACxB,cAAMoB,UAAc,MAAMpB,SAASS,QAAWC,uBAAuBE,cAAAA;AACrE,eAAOQ;MACT,CAAA,CAAA;AAEF,YAAMI,aAAkBJ,OAAOK,KAAI;AACnC,aAAOD,WAAWjB,OAAOe,oCAAAA;IAC3B;EACF;EAEQvB,gBAAgBJ,SAAyB;AAC/C,QAAIA,SAAQ;AACV,WAAKP,cAAcM,IAAIC,OAAAA;IACzB;EACF;EACQU,mBAAmBF,eAAuB;AAChD,SAAKf,cAAcc,OAAOC,aAAAA;EAC5B;AACF;AAxF6CjB;AAC3C,cADWD,0BACJ6B,mBAAkB;AADpB,IAAM7B,0BAAN;;;AEOP,IAAMyC,WAAW,wBAA4CC,aAAAA;AAC3D,QAAMC,YAAgC,CAAA;AACtC,QAAMC,OAAO,wBAACC,OAAyBC,SAAAA;AACrC,QAAIH,UAAUI,WAAW;AAAG,aAAO;AACnCJ,cAAUK,IAAI,CAACC,aAAaA,SAASH,IAAAA,CAAAA;AACrC,WAAO;EACT,GAJa;AAKb,QAAMI,mBAAmB,wBAACC,SAAgBC,WAAAA;AACxC,UAAMN,OAAO;MAAEM;MAAQD,QAAAA;IAAO;AAC9BP,SAAK,kBAAkBE,IAAAA;EACzB,GAHyB;AAIzB,QAAM,EAAEO,QAAO,IAAKX;AACpB,WAASY,gBAAgBF,QAAqB;AAC5C,WAAOC,QAAQE,KAAKb,QAAAA,EAAUU,MAAAA;EAChC;AAFSE;AAIT,SAAO;IACLE,IAAI,CAACX,OAAyBI,aAAAA;AAC5BN,gBAAUc,KAAKR,QAAAA;IACjB;IACAI,SAAS,OAAOD,WAAAA;AACd,YAAMM,UAAoB,MAAMJ,gBAAgBF,MAAAA;AAChD,YAAMO,QAAQC,WAAWF,QAAQV,IAAI,CAACa,QAAQX,iBAAiBW,KAAKT,MAAAA,CAAAA,CAAAA;AACpE,aAAOM;IACT;EACF;AACF,GA1BiB;AA4BV,IAAMI,4BAA4B,wBAA4CpB,aAAAA;AACnF,QAAMqB,QAAQtB,SAASC,QAAAA;AACvB,QAAMsB,MAAMC,OAAOC,OAAOxB,UAAUqB,KAAAA;AACpC,SAAOC;AACT,GAJyC;","names":["SimpleModuleResolver","addressToName","modules","isModuleResolver","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","flatMap","config","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","mod","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
|
@@ -21,7 +21,8 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
21
21
|
}
|
|
22
22
|
add(module) {
|
|
23
23
|
if (Array.isArray(module)) {
|
|
24
|
-
|
|
24
|
+
for (const mod of module)
|
|
25
|
+
this.addSingleModule(mod);
|
|
25
26
|
} else {
|
|
26
27
|
this.addSingleModule(module);
|
|
27
28
|
}
|
|
@@ -32,7 +33,8 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
32
33
|
}
|
|
33
34
|
remove(address) {
|
|
34
35
|
if (Array.isArray(address)) {
|
|
35
|
-
|
|
36
|
+
for (const addr of address)
|
|
37
|
+
this.removeSingleModule(addr);
|
|
36
38
|
} else {
|
|
37
39
|
this.removeSingleModule(address);
|
|
38
40
|
}
|
|
@@ -74,13 +76,11 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
removeSingleModule(address) {
|
|
77
|
-
if (address) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
delete this.addressToName[address];
|
|
83
|
-
}
|
|
79
|
+
if (address && this.modules[address]) {
|
|
80
|
+
delete this.modules[address];
|
|
81
|
+
const name = this.addressToName[address];
|
|
82
|
+
if (name) {
|
|
83
|
+
delete this.addressToName[address];
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -91,19 +91,22 @@ var _SimpleModuleResolver = class _SimpleModuleResolver {
|
|
|
91
91
|
}
|
|
92
92
|
resolveByName(modules, name) {
|
|
93
93
|
if (name) {
|
|
94
|
-
return compact(name.
|
|
94
|
+
return compact(name.flatMap((name2) => modules.filter((module) => {
|
|
95
95
|
var _a;
|
|
96
96
|
return ((_a = module.config) == null ? void 0 : _a.name) === name2;
|
|
97
|
-
}))
|
|
97
|
+
})));
|
|
98
98
|
}
|
|
99
99
|
return modules;
|
|
100
100
|
}
|
|
101
101
|
resolveByQuery(modules, query) {
|
|
102
102
|
return query ? compact(modules.filter((module) => query == null ? void 0 : query.reduce((supported, queryList) => {
|
|
103
|
-
return
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
return (
|
|
104
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
105
|
+
queryList.reduce((supported2, query2) => {
|
|
106
|
+
const queryable = module.queries.includes(query2);
|
|
107
|
+
return supported2 && queryable;
|
|
108
|
+
}, true) || supported
|
|
109
|
+
);
|
|
107
110
|
}, false))) : modules;
|
|
108
111
|
}
|
|
109
112
|
};
|
|
@@ -125,7 +128,8 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
125
128
|
}
|
|
126
129
|
add(module) {
|
|
127
130
|
if (Array.isArray(module)) {
|
|
128
|
-
|
|
131
|
+
for (const mod of module)
|
|
132
|
+
this.addSingleModule(mod);
|
|
129
133
|
} else {
|
|
130
134
|
this.addSingleModule(module);
|
|
131
135
|
}
|
|
@@ -137,7 +141,8 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends Base {
|
|
|
137
141
|
}
|
|
138
142
|
remove(addressOrName) {
|
|
139
143
|
if (Array.isArray(addressOrName)) {
|
|
140
|
-
|
|
144
|
+
for (const address of addressOrName)
|
|
145
|
+
this.removeSingleModule(address);
|
|
141
146
|
} else {
|
|
142
147
|
this.removeSingleModule(addressOrName);
|
|
143
148
|
}
|
|
@@ -191,7 +196,7 @@ var CompositeModuleResolver = _CompositeModuleResolver;
|
|
|
191
196
|
var getMixin = /* @__PURE__ */ __name((resolver) => {
|
|
192
197
|
const listeners = [];
|
|
193
198
|
const emit = /* @__PURE__ */ __name((event, args) => {
|
|
194
|
-
if (listeners.length
|
|
199
|
+
if (listeners.length === 0)
|
|
195
200
|
return false;
|
|
196
201
|
listeners.map((listener) => listener(args));
|
|
197
202
|
return true;
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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 for (const mod of module) this.addSingleModule(mod)\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 for (const address of addressOrName) 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 for (const mod of module) this.addSingleModule(mod)\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 for (const addr of address) this.removeSingleModule(addr)\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 && 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 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.flatMap((name) => modules.filter((module) => module.config?.name === name))) 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 // eslint-disable-next-line unicorn/no-array-reduce\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 === 0) 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","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolve","nameOrAddressOrFilter","options","unfiltered","resolveByName","Object","values","pop","resolveByAddress","name","query","resolveByQuery","identity","filter","undefined","compact","flatten","map","flatMap","config","reduce","supported","queryList","queryable","queries","includes","CompositeModuleResolver","Base","resolvers","localResolver","constructor","params","SimpleModuleResolver","addResolver","isModuleResolver","add","module","Array","isArray","mod","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,12 +13,12 @@
|
|
|
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.8",
|
|
17
|
+
"@xyo-network/object": "~2.84.8"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@xylabs/ts-scripts-yarn3": "^3.2.
|
|
21
|
-
"@xylabs/tsconfig": "^3.2.
|
|
20
|
+
"@xylabs/ts-scripts-yarn3": "^3.2.24",
|
|
21
|
+
"@xylabs/tsconfig": "^3.2.24",
|
|
22
22
|
"jest": "^29.7.0",
|
|
23
23
|
"jest-mock-extended": "^3.0.5",
|
|
24
24
|
"typescript": "^5.3.3"
|
|
@@ -62,6 +62,6 @@
|
|
|
62
62
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
63
63
|
},
|
|
64
64
|
"sideEffects": false,
|
|
65
|
-
"version": "2.84.
|
|
65
|
+
"version": "2.84.8",
|
|
66
66
|
"type": "module"
|
|
67
67
|
}
|
|
@@ -24,7 +24,7 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
|
|
|
24
24
|
add(module: ModuleInstance[]): this
|
|
25
25
|
add(module: ModuleInstance | ModuleInstance[]): this {
|
|
26
26
|
if (Array.isArray(module)) {
|
|
27
|
-
|
|
27
|
+
for (const mod of module) this.addSingleModule(mod)
|
|
28
28
|
} else {
|
|
29
29
|
this.addSingleModule(module)
|
|
30
30
|
}
|
|
@@ -38,7 +38,7 @@ export class CompositeModuleResolver extends Base implements ModuleRepository, M
|
|
|
38
38
|
|
|
39
39
|
remove(addressOrName: string | string[]): this {
|
|
40
40
|
if (Array.isArray(addressOrName)) {
|
|
41
|
-
|
|
41
|
+
for (const address of addressOrName) this.removeSingleModule(address)
|
|
42
42
|
} else {
|
|
43
43
|
this.removeSingleModule(addressOrName)
|
|
44
44
|
}
|
|
@@ -14,7 +14,7 @@ type ListenerFunction = (args: ModuleResolvedEventArgs) => void
|
|
|
14
14
|
const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
|
|
15
15
|
const listeners: ListenerFunction[] = []
|
|
16
16
|
const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {
|
|
17
|
-
if (listeners.length
|
|
17
|
+
if (listeners.length === 0) return false
|
|
18
18
|
listeners.map((listener) => listener(args))
|
|
19
19
|
return true
|
|
20
20
|
}
|
|
@@ -24,7 +24,7 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
24
24
|
add(module: ModuleInstance[]): this
|
|
25
25
|
add(module: ModuleInstance | ModuleInstance[]): this {
|
|
26
26
|
if (Array.isArray(module)) {
|
|
27
|
-
|
|
27
|
+
for (const mod of module) this.addSingleModule(mod)
|
|
28
28
|
} else {
|
|
29
29
|
this.addSingleModule(module)
|
|
30
30
|
}
|
|
@@ -37,7 +37,7 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
37
37
|
|
|
38
38
|
remove(address: string | string[]): this {
|
|
39
39
|
if (Array.isArray(address)) {
|
|
40
|
-
|
|
40
|
+
for (const addr of address) this.removeSingleModule(addr)
|
|
41
41
|
} else {
|
|
42
42
|
this.removeSingleModule(address)
|
|
43
43
|
}
|
|
@@ -87,13 +87,11 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
private removeSingleModule(address: string) {
|
|
90
|
-
if (address) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
delete this.addressToName[address]
|
|
96
|
-
}
|
|
90
|
+
if (address && this.modules[address]) {
|
|
91
|
+
delete this.modules[address]
|
|
92
|
+
const name = this.addressToName[address]
|
|
93
|
+
if (name) {
|
|
94
|
+
delete this.addressToName[address]
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
97
|
}
|
|
@@ -114,7 +112,7 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
114
112
|
|
|
115
113
|
private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name?: string[]): T[] {
|
|
116
114
|
if (name) {
|
|
117
|
-
return compact(name.
|
|
115
|
+
return compact(name.flatMap((name) => modules.filter((module) => module.config?.name === name))) as T[]
|
|
118
116
|
}
|
|
119
117
|
return modules as T[]
|
|
120
118
|
}
|
|
@@ -127,6 +125,7 @@ export class SimpleModuleResolver implements ModuleRepository {
|
|
|
127
125
|
(module) =>
|
|
128
126
|
query?.reduce((supported, queryList) => {
|
|
129
127
|
return (
|
|
128
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
130
129
|
queryList.reduce((supported, query) => {
|
|
131
130
|
const queryable = module.queries.includes(query)
|
|
132
131
|
return supported && queryable
|