@xyo-network/module-resolver 3.6.12 → 3.7.1

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.
@@ -2,7 +2,7 @@ import type { Address } from '@xylabs/hex';
2
2
  import type { BaseParams } from '@xylabs/object';
3
3
  import { Base } from '@xylabs/object';
4
4
  import type { Promisable } from '@xylabs/promise';
5
- import type { ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
5
+ import type { ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
6
6
  import { ObjectResolverPriority } from '@xyo-network/module-model';
7
7
  export interface ModuleResolverParams extends BaseParams {
8
8
  priority?: ObjectResolverPriority;
@@ -55,16 +55,14 @@ export declare abstract class AbstractModuleResolver<TParams extends ModuleResol
55
55
  ephemeralQueryAccountEnabled?: boolean;
56
56
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
57
57
  }, import("@xyo-network/module-model").ModuleEventData<object>>;
58
+ resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>;
58
59
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
59
- resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
60
60
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
61
- /** @deprecated use '*' if trying to resolve all */
62
- resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
63
61
  resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>;
64
62
  resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>;
65
63
  abstract addResolver(resolver: ModuleResolverInstance): this;
66
64
  abstract removeResolver(resolver: ModuleResolverInstance): this;
67
- abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T[]>;
65
+ abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T[]>;
68
66
  abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>;
69
67
  }
70
68
  //# sourceMappingURL=AbstractModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractModuleResolver.d.ts","sourceRoot":"","sources":["../../src/AbstractModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAgB,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,sBAAsB,EACvB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,8BAAsB,sBAAsB,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CACtG,SAAQ,IAAI,CAAC,OAAO,CACpB,YAAW,sBAAsB;IACjC,IAAI,QAAQ,IAIQ,sBAAsB,CAFzC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAEzC;IAED,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAEP;IAEK,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACxI,mDAAmD;IAC7C,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;IAoC5H,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACnH,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQ/I,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAC5D,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAE/D,QAAQ,CAAC,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC/D,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAC9C,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAElB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;CACjH"}
1
+ {"version":3,"file":"AbstractModuleResolver.d.ts","sourceRoot":"","sources":["../../src/AbstractModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAgB,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,sBAAsB,EACvB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,8BAAsB,sBAAsB,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CACtG,SAAQ,IAAI,CAAC,OAAO,CACpB,YAAW,sBAAsB;IACjC,IAAI,QAAQ,IAIQ,sBAAsB,CAFzC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAEzC;IAED,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAEP;IAEK,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC;IAClE,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAoClI,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACnH,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQ/I,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAC5D,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAE/D,QAAQ,CAAC,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC/D,EAAE,EAAE,gBAAgB,EACpB,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAElB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;CACjH"}
@@ -1,6 +1,6 @@
1
1
  import type { Address } from '@xylabs/hex';
2
2
  import type { Promisable } from '@xylabs/promise';
3
- import type { CacheConfig, ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleIdentifierTransformer, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
3
+ import type { CacheConfig, ModuleFilterOptions, ModuleIdentifier, ModuleIdentifierTransformer, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
4
4
  import { LRUCache } from 'lru-cache';
5
5
  import type { ModuleResolverParams } from './AbstractModuleResolver.ts';
6
6
  import { AbstractModuleResolver } from './AbstractModuleResolver.ts';
@@ -25,7 +25,7 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
25
25
  addResolver(resolver: ModuleResolverInstance): this;
26
26
  remove(addresses: Address[] | Address): this;
27
27
  removeResolver(resolver: ModuleResolverInstance): this;
28
- resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
28
+ resolveHandler<T extends ModuleInstance = ModuleInstance>(id?: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined>;
30
30
  protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
31
31
  private addSingleModule;
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,WAAW,6BAA8B,SAAQ,oBAAoB;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,4BAA4B,CAAC,EAAE,2BAA2B,EAAE,CAAA;CAC7D;AAMD,qBAAa,uBAAuB,CAAC,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,CAC1G,SAAQ,sBAAsB,CAAC,CAAC,CAChC,YAAW,gBAAgB,EAAE,sBAAsB;IACnD,MAAM,CAAC,eAAe,SAAI;IAE1B,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;IAC5D,SAAS,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAK;IAClD,OAAO,CAAC,iBAAiB,CAAO;IAChC,OAAO,CAAC,cAAc,CAAsB;gBAEhC,MAAM,EAAE,CAAC;IAWrB,IAAI,gBAAgB,IAIQ,OAAO,CAFlC;IAED,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAGlC;IAED,IAAI,mBAAmB,YAEtB;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAC9B,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI;IAUhC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAOnD,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAS5C,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAMhD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC5D,UAAU,GAAE,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAsB,EACpD,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,OAAO,CAAC,CAAC,EAAE,CAAC;IAiIT,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAqB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,WAAW,6BAA8B,SAAQ,oBAAoB;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,4BAA4B,CAAC,EAAE,2BAA2B,EAAE,CAAA;CAC7D;AAMD,qBAAa,uBAAuB,CAAC,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,CAC1G,SAAQ,sBAAsB,CAAC,CAAC,CAChC,YAAW,gBAAgB,EAAE,sBAAsB;IACnD,MAAM,CAAC,eAAe,SAAI;IAE1B,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;IAC5D,SAAS,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAK;IAClD,OAAO,CAAC,iBAAiB,CAAO;IAChC,OAAO,CAAC,cAAc,CAAsB;gBAEhC,MAAM,EAAE,CAAC;IAWrB,IAAI,gBAAgB,IAIQ,OAAO,CAFlC;IAED,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAGlC;IAED,IAAI,mBAAmB,YAEtB;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAC9B,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI;IAUhC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAOnD,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAS5C,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAMhD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC5D,EAAE,GAAE,gBAAsB,EAC1B,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,OAAO,CAAC,CAAC,EAAE,CAAC;IA0GT,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAqB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -1,6 +1,6 @@
1
- import type { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model';
1
+ import type { Module, ModuleIdentifier, ModuleResolver } from '@xyo-network/module-model';
2
2
  export interface ModuleResolvedEventArgs {
3
- filter?: ModuleFilter;
3
+ id?: ModuleIdentifier;
4
4
  mod: Module;
5
5
  }
6
6
  export interface ResolverEventEmitter {
@@ -18,7 +18,7 @@ export declare const mixinResolverEventEmitter: <T extends ModuleResolver = Modu
18
18
  readonly queries?: string[] | undefined;
19
19
  } | undefined;
20
20
  readonly allowedQueries?: string[] | undefined;
21
- readonly archivist?: import("@xyo-network/module-model").ModuleIdentifier | undefined;
21
+ readonly archivist?: ModuleIdentifier | undefined;
22
22
  readonly consoleLogger?: import("@xylabs/logger").LogLevel | undefined;
23
23
  readonly labels?: {
24
24
  [x: string]: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ResolverEventEmitter.d.ts","sourceRoot":"","sources":["../../src/ResolverEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAAE,YAAY,EAAE,cAAc,EACrC,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI,CAAA;CACrF;AAiCD,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAA6B,CAAC,KAAG,CAAC,GAAG,oBAGtG,CAAA"}
1
+ {"version":3,"file":"ResolverEventEmitter.d.ts","sourceRoot":"","sources":["../../src/ResolverEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAAE,gBAAgB,EAAE,cAAc,EACzC,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,gBAAgB,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI,CAAA;CACrF;AAkCD,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAA6B,CAAC,KAAG,CAAC,GAAG,oBAGtG,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { Address } from '@xylabs/hex';
2
2
  import type { Promisable } from '@xylabs/promise';
3
- import type { ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
3
+ import type { ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
4
4
  import type { ModuleResolverParams } from './AbstractModuleResolver.ts';
5
5
  import { AbstractModuleResolver } from './AbstractModuleResolver.ts';
6
6
  export type SimpleModuleResolverParams = ModuleResolverParams & {
@@ -16,7 +16,7 @@ export declare class SimpleModuleResolver extends AbstractModuleResolver<SimpleM
16
16
  addResolver(_resolver: ModuleResolverInstance): this;
17
17
  remove(address: Address | Address[]): this;
18
18
  removeResolver(_resolver: ModuleResolverInstance): this;
19
- resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | string, options?: ModuleFilterOptions<T>): Promisable<T[]>;
19
+ resolveHandler<T extends ModuleInstance = ModuleInstance>(id?: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T[]>;
20
20
  resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
21
21
  private addSingleModule;
22
22
  private removeSingleModule;
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC9D,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,qBAAa,oBAAqB,SAAQ,sBAAsB,CAAC,0BAA0B,CAAE,YAAW,gBAAgB;IACtH,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,YAAY,CAAyC;gBAEjD,MAAM,EAAE,0BAA0B;IAI9C,IAAI,mBAAmB,YAEtB;IAED,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAC/B,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI;IAUjC,WAAW,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIpD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAS1C,cAAc,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIvD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACtD,UAAU,GAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAY,EAC1C,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAiDlB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAexG,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;CAcvB"}
1
+ {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC9D,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,qBAAa,oBAAqB,SAAQ,sBAAsB,CAAC,0BAA0B,CAAE,YAAW,gBAAgB;IACtH,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,YAAY,CAAyC;gBAEjD,MAAM,EAAE,0BAA0B;IAI9C,IAAI,mBAAmB,YAEtB;IAED,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAC/B,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI;IAUjC,WAAW,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIpD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAS1C,cAAc,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIvD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACtD,EAAE,GAAE,gBAAsB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAuClB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAexG,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;CAcvB"}
@@ -15,17 +15,17 @@ var AbstractModuleResolver = class extends Base {
15
15
  get root() {
16
16
  return assertEx(this.params.root, () => "root is not set");
17
17
  }
18
- async resolve(idOrFilter = "*", options) {
19
- if (idOrFilter === "*") {
20
- const values = await this.resolveHandler(idOrFilter, options);
18
+ async resolve(id = "*", options) {
19
+ if (id === "*") {
20
+ const values = await this.resolveHandler(id, options);
21
21
  assertEx(Array.isArray(values), () => "resolveHandler returned a non-array");
22
22
  return values.map((value) => asModuleInstance(value, () => {
23
23
  return `resolveHandler returned invalid result (*) [${value?.constructor?.name}][${toJsonString(value)}]`;
24
24
  }));
25
25
  }
26
- switch (typeof idOrFilter) {
26
+ switch (typeof id) {
27
27
  case "string": {
28
- const [value] = await this.resolveHandler(idOrFilter, options);
28
+ const [value] = await this.resolveHandler(id, options);
29
29
  return asModuleInstance(
30
30
  value,
31
31
  () => (
@@ -35,7 +35,7 @@ var AbstractModuleResolver = class extends Base {
35
35
  );
36
36
  }
37
37
  default: {
38
- const values = await this.resolveHandler(idOrFilter, options);
38
+ const values = await this.resolveHandler(id, options);
39
39
  assertEx(Array.isArray(values), () => "resolveHandler returned a non-array");
40
40
  return values.map((value) => asModuleInstance(value, () => {
41
41
  return `resolveHandler returned invalid result (filter) [${value?.constructor?.name}][${toJsonString(value)}]`;
@@ -62,12 +62,7 @@ import { LRUCache } from "lru-cache";
62
62
  import { assertEx as assertEx2 } from "@xylabs/assert";
63
63
  import { exists } from "@xylabs/exists";
64
64
  import { isAddress } from "@xylabs/hex";
65
- import {
66
- isAddressModuleFilter,
67
- isModuleName,
68
- isNameModuleFilter,
69
- isQueryModuleFilter
70
- } from "@xyo-network/module-model";
65
+ import { isModuleName } from "@xyo-network/module-model";
71
66
  var SimpleModuleResolver = class extends AbstractModuleResolver {
72
67
  modules = {};
73
68
  nameToModule = {};
@@ -99,27 +94,17 @@ var SimpleModuleResolver = class extends AbstractModuleResolver {
99
94
  removeResolver(_resolver) {
100
95
  throw "Removing resolvers not supported";
101
96
  }
102
- resolveHandler(idOrFilter = "*", options) {
97
+ resolveHandler(id = "*", options) {
103
98
  const unfiltered = (() => {
104
- if (idOrFilter) {
105
- if (typeof idOrFilter === "string") {
106
- if (idOrFilter === "*") {
99
+ if (id) {
100
+ if (typeof id === "string") {
101
+ if (id === "*") {
107
102
  return Object.values(this.modules);
108
103
  }
109
- const id = idOrFilter;
110
104
  const name = isModuleName(id) ? id : void 0;
111
105
  const address = isAddress(id) ? id : void 0;
112
106
  assertEx2(name || address, () => "module identifier must be a ModuleName or Address");
113
107
  return (name ? this.resolveByName(Object.values(this.modules), [name]).pop() : void 0) ?? (address ? this.resolveByAddress(this.modules, [address]).pop() : void 0);
114
- } else {
115
- const filter = idOrFilter;
116
- if (isAddressModuleFilter(filter)) {
117
- return this.resolveByAddress(this.modules, filter.address);
118
- } else if (isNameModuleFilter(filter)) {
119
- return this.resolveByName(Object.values(this.modules), filter.name);
120
- } else if (isQueryModuleFilter(filter)) {
121
- return this.resolveByQuery(Object.values(this.modules), filter.query);
122
- }
123
108
  }
124
109
  } else {
125
110
  return Object.values(this.modules);
@@ -251,10 +236,10 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
251
236
  return this;
252
237
  }
253
238
  // eslint-disable-next-line complexity
254
- async resolveHandler(idOrFilter = "*", options = {}) {
239
+ async resolveHandler(id = "*", options = {}) {
255
240
  const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? _CompositeModuleResolver.defaultMaxDepth };
256
- if (idOrFilter === "*") {
257
- const all = idOrFilter;
241
+ if (id === "*") {
242
+ const all = id;
258
243
  if (mutatedOptions.maxDepth < 0) {
259
244
  return [];
260
245
  }
@@ -271,21 +256,21 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
271
256
  const flatResult = result.flat().filter(exists2);
272
257
  return flatResult.filter(duplicateModules);
273
258
  }
274
- if (typeof idOrFilter === "string") {
259
+ if (typeof id === "string") {
275
260
  if (mutatedOptions.maxDepth < 0) {
276
261
  return [];
277
262
  }
278
- const idParts = moduleIdentifierParts(idOrFilter);
263
+ const idParts = moduleIdentifierParts(id);
279
264
  if (idParts.length > 1) {
280
- const mod = await this.resolveMultipartIdentifier(idOrFilter);
265
+ const mod = await this.resolveMultipartIdentifier(id);
281
266
  return mod ? Array.isArray(mod) ? mod : [mod] : [];
282
267
  }
283
- const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
284
- if (id) {
268
+ const resolvedId = await ResolveHelper.transformModuleIdentifier(id, this.moduleIdentifierTransformers);
269
+ if (resolvedId) {
285
270
  if (mutatedOptions.maxDepth < 0) {
286
271
  return [];
287
272
  }
288
- const cachedResult = this._cache.get(id);
273
+ const cachedResult = this._cache.get(resolvedId);
289
274
  if (cachedResult) {
290
275
  if (cachedResult.status === "dead") {
291
276
  this._cache.delete(id);
@@ -294,20 +279,20 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
294
279
  }
295
280
  }
296
281
  if (mutatedOptions.maxDepth === 0) {
297
- const mod2 = await this._localResolver.resolve(idOrFilter, mutatedOptions);
282
+ const mod2 = await this._localResolver.resolve(resolvedId, mutatedOptions);
298
283
  return mod2 ? Array.isArray(mod2) ? mod2 : [mod2] : [];
299
284
  }
300
285
  const resolvePriority = async (priority) => {
301
286
  const resolvers = this.resolvers.filter((resolver) => resolver.priority === priority);
302
287
  const results = (await Promise.all(
303
288
  resolvers.map(async (resolver) => {
304
- const result2 = await resolver.resolve(id, mutatedOptions);
289
+ const result2 = await resolver.resolve(resolvedId, mutatedOptions);
305
290
  return result2;
306
291
  })
307
292
  )).filter(exists2);
308
293
  const result = results.filter(exists2).findLast(duplicateModules);
309
294
  if (result) {
310
- this._cache.set(id, result);
295
+ this._cache.set(resolvedId, result);
311
296
  return result;
312
297
  }
313
298
  return priority === ObjectResolverPriority2.VeryLow ? void 0 : await resolvePriority(priority - 1);
@@ -315,23 +300,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
315
300
  const mod = await resolvePriority(ObjectResolverPriority2.VeryHigh);
316
301
  return mod ? Array.isArray(mod) ? mod : [mod] : [];
317
302
  }
318
- } else if (typeof idOrFilter === "object") {
319
- if (mutatedOptions.maxDepth < 0) {
320
- return [];
321
- }
322
- const filter = idOrFilter;
323
- if (mutatedOptions.maxDepth === 0) {
324
- return await this._localResolver.resolve(filter, mutatedOptions);
325
- }
326
- const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 };
327
- const result = await Promise.all(
328
- this.resolvers.map(async (resolver) => {
329
- const result2 = await resolver.resolve(filter, childOptions);
330
- return result2;
331
- })
332
- );
333
- const flatResult = result.flat().filter(exists2);
334
- return flatResult.filter(duplicateModules);
335
303
  }
336
304
  return [];
337
305
  }
@@ -421,8 +389,8 @@ var getMixin = (resolver) => {
421
389
  for (const listener of listeners) listener(args);
422
390
  return true;
423
391
  };
424
- const onModuleResolved = (mod, filter) => {
425
- const args = { filter, mod };
392
+ const onModuleResolved = (mod, id) => {
393
+ const args = { id, mod };
426
394
  emit("moduleResolved", args);
427
395
  };
428
396
  const { resolve } = resolver;
@@ -433,9 +401,10 @@ var getMixin = (resolver) => {
433
401
  on: (event, listener) => {
434
402
  listeners.push(listener);
435
403
  },
436
- resolve: async (filter) => {
437
- const modules = await originalResolve(filter);
438
- await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, filter)));
404
+ resolve: async (id) => {
405
+ const modulesResult = await originalResolve(id) ?? [];
406
+ const modules = Array.isArray(modulesResult) ? modulesResult : [modulesResult];
407
+ await Promise.allSettled(modules.map((mod) => onModuleResolved(mod, id)));
439
408
  return modules;
440
409
  }
441
410
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = await this.resolveHandler(idOrFilter, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const [value] = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({\n max, ttl, ...params.cache,\n })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(id, result)\n return result\n }\n // we know that ObjectResolverPriority.VeryLow is the minimum priority, so we can subtract 1 from the rest\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority((priority - 1) as ObjectResolverPriority)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n } else if (typeof idOrFilter === 'object') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n} from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return (\n address.map((address) => {\n return modules[address]\n })\n ).filter(exists) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return (\n name.map((name) => {\n return modules.find(mod => mod.modName === name)\n })\n ).filter(exists) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return (\n modules.filter(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false))\n ).filter(exists) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = {\n domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],\n }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type {\n Module, ModuleFilter, ModuleResolver,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {\n const args = { filter, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","exists","ObjectResolverPriority","assertEx","assertEx","address","name","supported","query","result","exists","mod","ObjectResolverPriority","assertEx","LRUCache"]}
1
+ {"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (id === '*') {\n const values = await this.resolveHandler(id, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n switch (typeof id) {\n case 'string': {\n const [value] = await this.resolveHandler(id, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(id, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({\n max, ttl, ...params.cache,\n })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (id === '*') {\n const all = id\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof id === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(id)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(id)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const resolvedId = await ResolveHelper.transformModuleIdentifier(id, this.moduleIdentifierTransformers)\n if (resolvedId) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(resolvedId)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(resolvedId, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(resolvedId, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(resolvedId, result)\n return result\n }\n // we know that ObjectResolverPriority.VeryLow is the minimum priority, so we can subtract 1 from the rest\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority((priority - 1) as ObjectResolverPriority)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport { isModuleName } from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (id) {\n if (typeof id === 'string') {\n if (id === '*') {\n return Object.values(this.modules) as T[]\n }\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return (\n address.map((address) => {\n return modules[address]\n })\n ).filter(exists) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return (\n name.map((name) => {\n return modules.find(mod => mod.modName === name)\n })\n ).filter(exists) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return (\n modules.filter(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false))\n ).filter(exists) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = {\n domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],\n }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type {\n Module, ModuleIdentifier, ModuleResolver,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n id?: ModuleIdentifier\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, id?: ModuleIdentifier) => {\n const args = { id, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleIdentifier) {\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 (id?: ModuleIdentifier): Promise<Module[]> => {\n const modulesResult = await originalResolve(id) ?? []\n const modules = Array.isArray(modulesResult) ? modulesResult : [modulesResult]\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, id)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","exists","ObjectResolverPriority","assertEx","assertEx","address","name","supported","query","result","exists","mod","ObjectResolverPriority","assertEx","LRUCache"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/module-resolver",
3
- "version": "3.6.12",
3
+ "version": "3.7.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -34,9 +34,9 @@
34
34
  "@xylabs/hex": "^4.5.1",
35
35
  "@xylabs/object": "^4.5.1",
36
36
  "@xylabs/promise": "^4.5.1",
37
- "@xyo-network/diviner-model": "^3.6.12",
38
- "@xyo-network/diviner-payload-model": "^3.6.12",
39
- "@xyo-network/module-model": "^3.6.12",
37
+ "@xyo-network/diviner-model": "^3.7.1",
38
+ "@xyo-network/diviner-payload-model": "^3.7.1",
39
+ "@xyo-network/module-model": "^3.7.1",
40
40
  "lru-cache": "^11.0.2"
41
41
  },
42
42
  "devDependencies": {
@@ -4,7 +4,6 @@ import type { BaseParams } from '@xylabs/object'
4
4
  import { Base, toJsonString } from '@xylabs/object'
5
5
  import type { Promisable } from '@xylabs/promise'
6
6
  import type {
7
- ModuleFilter,
8
7
  ModuleFilterOptions,
9
8
  ModuleIdentifier,
10
9
  ModuleInstance,
@@ -36,17 +35,15 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
36
35
  return assertEx(this.params.root, () => 'root is not set')
37
36
  }
38
37
 
38
+ async resolve<T extends ModuleInstance = ModuleInstance>(): Promise<T[]>
39
39
  async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>
40
- async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>
41
40
  async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>
42
- /** @deprecated use '*' if trying to resolve all */
43
- async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>
44
41
  async resolve<T extends ModuleInstance = ModuleInstance>(
45
- idOrFilter: ModuleFilter<T> | string = '*',
42
+ id: ModuleIdentifier = '*',
46
43
  options?: ModuleFilterOptions<T>,
47
44
  ): Promise<T[] | T | undefined> {
48
- if (idOrFilter === '*') {
49
- const values = await this.resolveHandler(idOrFilter, options)
45
+ if (id === '*') {
46
+ const values = await this.resolveHandler(id, options)
50
47
  assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')
51
48
  return values.map(value =>
52
49
  asModuleInstance<T>(value, () => {
@@ -54,9 +51,9 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
54
51
  return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`
55
52
  }))
56
53
  }
57
- switch (typeof idOrFilter) {
54
+ switch (typeof id) {
58
55
  case 'string': {
59
- const [value] = await this.resolveHandler(idOrFilter, options)
56
+ const [value] = await this.resolveHandler(id, options)
60
57
  return asModuleInstance<T>(
61
58
  value,
62
59
  () =>
@@ -65,7 +62,7 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
65
62
  )
66
63
  }
67
64
  default: {
68
- const values = (await this.resolveHandler(idOrFilter, options)) as []
65
+ const values = (await this.resolveHandler(id, options)) as []
69
66
  assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')
70
67
  return values.map(value =>
71
68
  asModuleInstance<T>(value, () => {
@@ -89,7 +86,7 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
89
86
  abstract removeResolver(resolver: ModuleResolverInstance): this
90
87
 
91
88
  abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(
92
- idOrFilter: ModuleFilter<T> | ModuleIdentifier,
89
+ id: ModuleIdentifier,
93
90
  options?: ModuleFilterOptions<T>,
94
91
  ): Promisable<T[]>
95
92
 
@@ -5,7 +5,6 @@ import type { Address } from '@xylabs/hex'
5
5
  import type { Promisable } from '@xylabs/promise'
6
6
  import type {
7
7
  CacheConfig,
8
- ModuleFilter,
9
8
  ModuleFilterOptions,
10
9
  ModuleIdentifier,
11
10
  ModuleIdentifierPart,
@@ -108,14 +107,14 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
108
107
 
109
108
  // eslint-disable-next-line complexity
110
109
  async resolveHandler<T extends ModuleInstance = ModuleInstance>(
111
- idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',
110
+ id: ModuleIdentifier = '*',
112
111
  options: ModuleFilterOptions<T> = {},
113
112
  ): Promise<T[]> {
114
113
  const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }
115
114
 
116
115
  // resolve all
117
- if (idOrFilter === '*') {
118
- const all = idOrFilter
116
+ if (id === '*') {
117
+ const all = id
119
118
 
120
119
  // wen't too far?
121
120
  if (mutatedOptions.maxDepth < 0) {
@@ -139,16 +138,16 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
139
138
  return flatResult.filter(duplicateModules)
140
139
  }
141
140
 
142
- if (typeof idOrFilter === 'string') {
141
+ if (typeof id === 'string') {
143
142
  // wen't too far?
144
143
  if (mutatedOptions.maxDepth < 0) {
145
144
  return []
146
145
  }
147
146
 
148
147
  // resolve ModuleIdentifier
149
- const idParts = moduleIdentifierParts(idOrFilter)
148
+ const idParts = moduleIdentifierParts(id)
150
149
  if (idParts.length > 1) {
151
- const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)
150
+ const mod = await this.resolveMultipartIdentifier<T>(id)
152
151
  return (
153
152
  mod
154
153
  ? Array.isArray(mod)
@@ -157,12 +156,12 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
157
156
  : []
158
157
  )
159
158
  }
160
- const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)
161
- if (id) {
159
+ const resolvedId = await ResolveHelper.transformModuleIdentifier(id, this.moduleIdentifierTransformers)
160
+ if (resolvedId) {
162
161
  if (mutatedOptions.maxDepth < 0) {
163
162
  return []
164
163
  }
165
- const cachedResult = this._cache.get(id)
164
+ const cachedResult = this._cache.get(resolvedId)
166
165
  if (cachedResult) {
167
166
  if (cachedResult.status === 'dead') {
168
167
  this._cache.delete(id)
@@ -173,7 +172,7 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
173
172
 
174
173
  // identity resolve?
175
174
  if (mutatedOptions.maxDepth === 0) {
176
- const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)
175
+ const mod = await this._localResolver.resolve(resolvedId, mutatedOptions)
177
176
  return (
178
177
  mod
179
178
  ? Array.isArray(mod)
@@ -189,7 +188,7 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
189
188
  const results: T[] = (
190
189
  await Promise.all(
191
190
  resolvers.map(async (resolver) => {
192
- const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)
191
+ const result: T | undefined = await resolver.resolve<T>(resolvedId, mutatedOptions)
193
192
  return result
194
193
  }),
195
194
  )
@@ -197,7 +196,7 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
197
196
 
198
197
  const result: T | undefined = results.filter(exists).findLast(duplicateModules)
199
198
  if (result) {
200
- this._cache.set(id, result)
199
+ this._cache.set(resolvedId, result)
201
200
  return result
202
201
  }
203
202
  // we know that ObjectResolverPriority.VeryLow is the minimum priority, so we can subtract 1 from the rest
@@ -212,29 +211,6 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
212
211
  : []
213
212
  )
214
213
  }
215
- } else if (typeof idOrFilter === 'object') {
216
- // wen't too far?
217
- if (mutatedOptions.maxDepth < 0) {
218
- return []
219
- }
220
-
221
- const filter = idOrFilter
222
-
223
- // identity resolve?
224
- if (mutatedOptions.maxDepth === 0) {
225
- return await this._localResolver.resolve(filter, mutatedOptions)
226
- }
227
-
228
- const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }
229
-
230
- const result = await Promise.all(
231
- this.resolvers.map(async (resolver) => {
232
- const result: T[] = await resolver.resolve<T>(filter, childOptions)
233
- return result
234
- }),
235
- )
236
- const flatResult: T[] = result.flat().filter(exists)
237
- return flatResult.filter(duplicateModules)
238
214
  }
239
215
  return []
240
216
  }
@@ -1,9 +1,9 @@
1
1
  import type {
2
- Module, ModuleFilter, ModuleResolver,
2
+ Module, ModuleIdentifier, ModuleResolver,
3
3
  } from '@xyo-network/module-model'
4
4
 
5
5
  export interface ModuleResolvedEventArgs {
6
- filter?: ModuleFilter
6
+ id?: ModuleIdentifier
7
7
  mod: Module
8
8
  }
9
9
 
@@ -20,13 +20,13 @@ const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
20
20
  for (const listener of listeners) listener(args)
21
21
  return true
22
22
  }
23
- const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {
24
- const args = { filter, mod }
23
+ const onModuleResolved = (mod: Module, id?: ModuleIdentifier) => {
24
+ const args = { id, mod }
25
25
  emit('moduleResolved', args)
26
26
  }
27
27
 
28
28
  const { resolve } = resolver
29
- function originalResolve(filter?: ModuleFilter) {
29
+ function originalResolve(filter?: ModuleIdentifier) {
30
30
  return resolve.bind(resolver)(filter)
31
31
  }
32
32
 
@@ -34,9 +34,10 @@ const getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {
34
34
  on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {
35
35
  listeners.push(listener)
36
36
  },
37
- resolve: async (filter?: ModuleFilter): Promise<Module[]> => {
38
- const modules: Module[] = await originalResolve(filter)
39
- await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))
37
+ resolve: async (id?: ModuleIdentifier): Promise<Module[]> => {
38
+ const modulesResult = await originalResolve(id) ?? []
39
+ const modules = Array.isArray(modulesResult) ? modulesResult : [modulesResult]
40
+ await Promise.allSettled(modules.map(mod => onModuleResolved(mod, id)))
40
41
  return modules
41
42
  },
42
43
  }
@@ -4,7 +4,6 @@ import type { Address } from '@xylabs/hex'
4
4
  import { isAddress } from '@xylabs/hex'
5
5
  import type { Promisable } from '@xylabs/promise'
6
6
  import type {
7
- ModuleFilter,
8
7
  ModuleFilterOptions,
9
8
  ModuleIdentifier,
10
9
  ModuleInstance,
@@ -13,12 +12,7 @@ import type {
13
12
  ModuleResolverInstance,
14
13
  ObjectFilterOptions,
15
14
  } from '@xyo-network/module-model'
16
- import {
17
- isAddressModuleFilter,
18
- isModuleName,
19
- isNameModuleFilter,
20
- isQueryModuleFilter,
21
- } from '@xyo-network/module-model'
15
+ import { isModuleName } from '@xyo-network/module-model'
22
16
 
23
17
  import type { ModuleResolverParams } from './AbstractModuleResolver.ts'
24
18
  import { AbstractModuleResolver } from './AbstractModuleResolver.ts'
@@ -68,16 +62,15 @@ export class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleRes
68
62
  }
69
63
 
70
64
  resolveHandler<T extends ModuleInstance = ModuleInstance>(
71
- idOrFilter: ModuleFilter<T> | string = '*',
65
+ id: ModuleIdentifier = '*',
72
66
  options?: ModuleFilterOptions<T>,
73
67
  ): Promisable<T[]> {
74
68
  const unfiltered = (() => {
75
- if (idOrFilter) {
76
- if (typeof idOrFilter === 'string') {
77
- if (idOrFilter === '*') {
69
+ if (id) {
70
+ if (typeof id === 'string') {
71
+ if (id === '*') {
78
72
  return Object.values(this.modules) as T[]
79
73
  }
80
- const id = idOrFilter as ModuleIdentifier
81
74
  const name = isModuleName(id) ? id : undefined
82
75
  const address = isAddress(id) ? id : undefined
83
76
  assertEx(name || address, () => 'module identifier must be a ModuleName or Address')
@@ -85,15 +78,6 @@ export class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleRes
85
78
  (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)
86
79
  ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)
87
80
  )
88
- } else {
89
- const filter = idOrFilter
90
- if (isAddressModuleFilter(filter)) {
91
- return this.resolveByAddress<T>(this.modules, filter.address)
92
- } else if (isNameModuleFilter(filter)) {
93
- return this.resolveByName<T>(Object.values(this.modules), filter.name)
94
- } else if (isQueryModuleFilter(filter)) {
95
- return this.resolveByQuery<T>(Object.values(this.modules), filter.query)
96
- }
97
81
  }
98
82
  } else {
99
83
  return Object.values(this.modules) as T[]