@xyo-network/module-resolver 2.88.1 → 2.88.3

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.
@@ -1,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -29,8 +29,8 @@ module.exports = __toCommonJS(src_exports);
29
29
 
30
30
  // src/CompositeModuleResolver.ts
31
31
  var import_exists = require("@xylabs/exists");
32
+ var import_object = require("@xylabs/object");
32
33
  var import_module_model = require("@xyo-network/module-model");
33
- var import_object = require("@xyo-network/object");
34
34
 
35
35
  // src/SimpleModuleResolver.ts
36
36
  var import_lodash = require("@xylabs/lodash");
@@ -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 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((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"]}
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 { Base, BaseParams } from '@xylabs/object'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\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((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"]}
@@ -3,8 +3,8 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
 
4
4
  // src/CompositeModuleResolver.ts
5
5
  import { exists } from "@xylabs/exists";
6
+ import { Base } from "@xylabs/object";
6
7
  import { duplicateModules } from "@xyo-network/module-model";
7
- import { Base } from "@xyo-network/object";
8
8
 
9
9
  // src/SimpleModuleResolver.ts
10
10
  import { compact, flatten } from "@xylabs/lodash";
@@ -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 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((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","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
+ {"version":3,"sources":["../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { Base, BaseParams } from '@xylabs/object'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\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((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","Base","duplicateModules","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,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -1,5 +1,5 @@
1
+ import { Base, BaseParams } from '@xylabs/object';
1
2
  import { ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model';
2
- import { Base, BaseParams } from '@xyo-network/object';
3
3
  export declare class CompositeModuleResolver extends Base implements ModuleRepository, ModuleResolver {
4
4
  static defaultMaxDepth: number;
5
5
  protected resolvers: ModuleResolver[];
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAItD,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAoB,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAIjJ,qBAAa,uBAAwB,SAAQ,IAAK,YAAW,gBAAgB,EAAE,cAAc;IAC3F,MAAM,CAAC,eAAe,SAAI;IAC1B,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,CAAK;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,MAAM,GAAE,UAAe;IAOnC,IAAI,gBAAgB,YAEnB;IAED,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAK3C,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAS9C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAKxC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAiCzI,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;CAG3B"}
@@ -34,8 +34,8 @@ module.exports = __toCommonJS(src_exports);
34
34
 
35
35
  // src/CompositeModuleResolver.ts
36
36
  var import_exists = require("@xylabs/exists");
37
+ var import_object = require("@xylabs/object");
37
38
  var import_module_model = require("@xyo-network/module-model");
38
- var import_object = require("@xyo-network/object");
39
39
 
40
40
  // src/SimpleModuleResolver.ts
41
41
  var import_lodash = require("@xylabs/lodash");
@@ -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 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((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","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"]}
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 { Base, BaseParams } from '@xylabs/object'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\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((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","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"]}
@@ -8,8 +8,8 @@ var __publicField = (obj, key, value) => {
8
8
 
9
9
  // src/CompositeModuleResolver.ts
10
10
  import { exists } from "@xylabs/exists";
11
+ import { Base } from "@xylabs/object";
11
12
  import { duplicateModules } from "@xyo-network/module-model";
12
- import { Base } from "@xyo-network/object";
13
13
 
14
14
  // src/SimpleModuleResolver.ts
15
15
  import { compact, flatten } from "@xylabs/lodash";
@@ -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 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((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"]}
1
+ {"version":3,"sources":["../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { exists } from '@xylabs/exists'\nimport { Base, BaseParams } from '@xylabs/object'\nimport { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'\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((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","Base","duplicateModules","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
@@ -10,15 +10,15 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/exists": "^2.13.25",
14
- "@xylabs/lodash": "^2.13.25",
15
- "@xylabs/promise": "^2.13.25",
16
- "@xyo-network/module-model": "~2.88.1",
17
- "@xyo-network/object": "~2.88.1"
13
+ "@xylabs/exists": "^2.13.29",
14
+ "@xylabs/lodash": "^2.13.29",
15
+ "@xylabs/object": "^2.88.5",
16
+ "@xylabs/promise": "^2.13.29",
17
+ "@xyo-network/module-model": "~2.88.3"
18
18
  },
19
19
  "devDependencies": {
20
- "@xylabs/ts-scripts-yarn3": "^3.2.41",
21
- "@xylabs/tsconfig": "^3.2.41",
20
+ "@xylabs/ts-scripts-yarn3": "^3.2.42",
21
+ "@xylabs/tsconfig": "^3.2.42",
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.88.1",
65
+ "version": "2.88.3",
66
66
  "type": "module"
67
67
  }
@@ -1,6 +1,6 @@
1
1
  import { exists } from '@xylabs/exists'
2
+ import { Base, BaseParams } from '@xylabs/object'
2
3
  import { duplicateModules, ModuleFilter, ModuleFilterOptions, ModuleInstance, ModuleRepository, ModuleResolver } from '@xyo-network/module-model'
3
- import { Base, BaseParams } from '@xyo-network/object'
4
4
 
5
5
  import { SimpleModuleResolver } from './SimpleModuleResolver'
6
6