@xyo-network/module-resolver 2.94.39 → 2.94.40

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.
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -223,7 +223,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
223
223
  __name(this, "CompositeModuleResolver");
224
224
  }
225
225
  static defaultMaxDepth = 3;
226
- static transformers = [];
227
226
  _cache;
228
227
  resolvers = [];
229
228
  _allowAddResolver = true;
@@ -260,7 +259,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
260
259
  return this.params.allowNameResolution ?? true;
261
260
  }
262
261
  get moduleIdentifierTransformers() {
263
- return this.params.moduleIdentifierTransformers;
262
+ return this.params.moduleIdentifierTransformers ?? import_module_model3.ResolveHelper.transformers;
264
263
  }
265
264
  add(module2) {
266
265
  if (Array.isArray(module2)) {
@@ -322,7 +321,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
322
321
  if (idParts.length > 1) {
323
322
  return await this.resolveMultipartIdentifier(idOrFilter);
324
323
  }
325
- const id = await this.transformModuleIdentifier(idOrFilter);
324
+ const id = await import_module_model3.ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
326
325
  if (mutatedOptions.maxDepth < 0) {
327
326
  return void 0;
328
327
  }
@@ -406,13 +405,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
406
405
  const module2 = await this.resolve(id) ?? await this.resolvePrivate(id);
407
406
  return await module2?.resolve(idParts.join(":")) ?? await module2?.resolvePrivate(idParts.join(":"));
408
407
  }
409
- async transformModuleIdentifier(identifier) {
410
- let id = identifier;
411
- for (const transformer of this.moduleIdentifierTransformers ?? _CompositeModuleResolver.transformers) {
412
- id = await transformer.transform(id);
413
- }
414
- return id;
415
- }
416
408
  };
417
409
 
418
410
  // src/NameRegistrarTransformer.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\n static defaultMaxDepth = 3\n static transformers: ModuleIdentifierTransformer[] = []\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>({ max, ttl, ...params.cache })\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\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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await this.transformModuleIdentifier(idOrFilter)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n\n private async transformModuleIdentifier(identifier: ModuleIdentifier) {\n let id = identifier\n for (const transformer of this.moduleIdentifierTransformers ?? CompositeModuleResolver.transformers) {\n id = await transformer.transform(id)\n }\n return id\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","transformers","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","identifier","transformer","transform","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\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>({ max, ttl, ...params.cache })\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(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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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"]}
@@ -52,7 +52,7 @@ var AbstractModuleResolver = class extends Base {
52
52
  // src/CompositeModuleResolver.ts
53
53
  import { assertEx as assertEx3 } from "@xylabs/assert";
54
54
  import { exists } from "@xylabs/exists";
55
- import { duplicateModules, ObjectResolverPriority as ObjectResolverPriority2 } from "@xyo-network/module-model";
55
+ import { duplicateModules, ObjectResolverPriority as ObjectResolverPriority2, ResolveHelper } from "@xyo-network/module-model";
56
56
  import { LRUCache } from "lru-cache";
57
57
 
58
58
  // src/SimpleModuleResolver.ts
@@ -195,7 +195,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
195
195
  __name(this, "CompositeModuleResolver");
196
196
  }
197
197
  static defaultMaxDepth = 3;
198
- static transformers = [];
199
198
  _cache;
200
199
  resolvers = [];
201
200
  _allowAddResolver = true;
@@ -232,7 +231,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
232
231
  return this.params.allowNameResolution ?? true;
233
232
  }
234
233
  get moduleIdentifierTransformers() {
235
- return this.params.moduleIdentifierTransformers;
234
+ return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers;
236
235
  }
237
236
  add(module) {
238
237
  if (Array.isArray(module)) {
@@ -294,7 +293,7 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
294
293
  if (idParts.length > 1) {
295
294
  return await this.resolveMultipartIdentifier(idOrFilter);
296
295
  }
297
- const id = await this.transformModuleIdentifier(idOrFilter);
296
+ const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
298
297
  if (mutatedOptions.maxDepth < 0) {
299
298
  return void 0;
300
299
  }
@@ -378,13 +377,6 @@ var CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMod
378
377
  const module = await this.resolve(id) ?? await this.resolvePrivate(id);
379
378
  return await module?.resolve(idParts.join(":")) ?? await module?.resolvePrivate(idParts.join(":"));
380
379
  }
381
- async transformModuleIdentifier(identifier) {
382
- let id = identifier;
383
- for (const transformer of this.moduleIdentifierTransformers ?? _CompositeModuleResolver.transformers) {
384
- id = await transformer.transform(id);
385
- }
386
- return id;
387
- }
388
380
  };
389
381
 
390
382
  // src/NameRegistrarTransformer.ts
@@ -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 { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\n static defaultMaxDepth = 3\n static transformers: ModuleIdentifierTransformer[] = []\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>({ max, ttl, ...params.cache })\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\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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await this.transformModuleIdentifier(idOrFilter)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n\n private async transformModuleIdentifier(identifier: ModuleIdentifier) {\n let id = identifier\n for (const transformer of this.moduleIdentifierTransformers ?? CompositeModuleResolver.transformers) {\n id = await transformer.transform(id)\n }\n return id\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","transformers","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","identifier","transformer","transform","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\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>({ max, ttl, ...params.cache })\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(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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","defaultMaxDepth","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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"]}
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -10,7 +10,6 @@ export interface CompositeModuleResolverParams extends ModuleResolverParams {
10
10
  }
11
11
  export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
12
12
  static defaultMaxDepth: number;
13
- static transformers: ModuleIdentifierTransformer[];
14
13
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
14
  protected resolvers: ModuleResolverInstance[];
16
15
  private _allowAddResolver;
@@ -31,6 +30,5 @@ export declare class CompositeModuleResolver<T extends CompositeModuleResolverPa
31
30
  private addSingleModule;
32
31
  private removeSingleModule;
33
32
  private resolveMultipartIdentifier;
34
- private transformModuleIdentifier;
35
33
  }
36
34
  //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,MAAM,CAAC,eAAe,SAAI;IAC1B,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAK;IAEvD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;YAQ1B,yBAAyB;CAOxC"}
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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;IAEnD,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;IASrB,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,MAAM,EAAE,cAAc,GAAG,IAAI;IACjC,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAUnC,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;IAKhD,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,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IAyGzB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAsB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -263,7 +263,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
263
263
  return this.params.allowNameResolution ?? true;
264
264
  }
265
265
  get moduleIdentifierTransformers() {
266
- return this.params.moduleIdentifierTransformers;
266
+ return this.params.moduleIdentifierTransformers ?? import_module_model3.ResolveHelper.transformers;
267
267
  }
268
268
  add(module2) {
269
269
  if (Array.isArray(module2)) {
@@ -325,7 +325,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
325
325
  if (idParts.length > 1) {
326
326
  return await this.resolveMultipartIdentifier(idOrFilter);
327
327
  }
328
- const id = await this.transformModuleIdentifier(idOrFilter);
328
+ const id = await import_module_model3.ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
329
329
  if (mutatedOptions.maxDepth < 0) {
330
330
  return void 0;
331
331
  }
@@ -409,17 +409,9 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
409
409
  const module2 = await this.resolve(id) ?? await this.resolvePrivate(id);
410
410
  return await (module2 == null ? void 0 : module2.resolve(idParts.join(":"))) ?? await (module2 == null ? void 0 : module2.resolvePrivate(idParts.join(":")));
411
411
  }
412
- async transformModuleIdentifier(identifier) {
413
- let id = identifier;
414
- for (const transformer of this.moduleIdentifierTransformers ?? _CompositeModuleResolver.transformers) {
415
- id = await transformer.transform(id);
416
- }
417
- return id;
418
- }
419
412
  };
420
413
  __name(_CompositeModuleResolver, "CompositeModuleResolver");
421
414
  __publicField(_CompositeModuleResolver, "defaultMaxDepth", 3);
422
- __publicField(_CompositeModuleResolver, "transformers", []);
423
415
  var CompositeModuleResolver = _CompositeModuleResolver;
424
416
 
425
417
  // src/NameRegistrarTransformer.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\n static defaultMaxDepth = 3\n static transformers: ModuleIdentifierTransformer[] = []\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>({ max, ttl, ...params.cache })\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\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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await this.transformModuleIdentifier(idOrFilter)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n\n private async transformModuleIdentifier(identifier: ModuleIdentifier) {\n let id = identifier\n for (const transformer of this.moduleIdentifierTransformers ?? CompositeModuleResolver.transformers) {\n id = await transformer.transform(id)\n }\n return id\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","identifier","transformer","transformers","transform","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["export * from './AbstractModuleResolver'\nexport * from './CompositeModuleResolver'\nexport * from './NameRegistrarTransformer'\nexport * from './ResolverEventEmitter'\nexport * from './SimpleModuleResolver'\n","import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\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>({ max, ttl, ...params.cache })\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(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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","import_assert","import_module_model","import_assert","import_module_model","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","import_object","import_lru_cache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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"]}
@@ -61,7 +61,7 @@ var AbstractModuleResolver = _AbstractModuleResolver;
61
61
  // src/CompositeModuleResolver.ts
62
62
  import { assertEx as assertEx3 } from "@xylabs/assert";
63
63
  import { exists } from "@xylabs/exists";
64
- import { duplicateModules, ObjectResolverPriority as ObjectResolverPriority2 } from "@xyo-network/module-model";
64
+ import { duplicateModules, ObjectResolverPriority as ObjectResolverPriority2, ResolveHelper } from "@xyo-network/module-model";
65
65
  import { LRUCache } from "lru-cache";
66
66
 
67
67
  // src/SimpleModuleResolver.ts
@@ -235,7 +235,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
235
235
  return this.params.allowNameResolution ?? true;
236
236
  }
237
237
  get moduleIdentifierTransformers() {
238
- return this.params.moduleIdentifierTransformers;
238
+ return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers;
239
239
  }
240
240
  add(module) {
241
241
  if (Array.isArray(module)) {
@@ -297,7 +297,7 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
297
297
  if (idParts.length > 1) {
298
298
  return await this.resolveMultipartIdentifier(idOrFilter);
299
299
  }
300
- const id = await this.transformModuleIdentifier(idOrFilter);
300
+ const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers);
301
301
  if (mutatedOptions.maxDepth < 0) {
302
302
  return void 0;
303
303
  }
@@ -381,17 +381,9 @@ var _CompositeModuleResolver = class _CompositeModuleResolver extends AbstractMo
381
381
  const module = await this.resolve(id) ?? await this.resolvePrivate(id);
382
382
  return await (module == null ? void 0 : module.resolve(idParts.join(":"))) ?? await (module == null ? void 0 : module.resolvePrivate(idParts.join(":")));
383
383
  }
384
- async transformModuleIdentifier(identifier) {
385
- let id = identifier;
386
- for (const transformer of this.moduleIdentifierTransformers ?? _CompositeModuleResolver.transformers) {
387
- id = await transformer.transform(id);
388
- }
389
- return id;
390
- }
391
384
  };
392
385
  __name(_CompositeModuleResolver, "CompositeModuleResolver");
393
386
  __publicField(_CompositeModuleResolver, "defaultMaxDepth", 3);
394
- __publicField(_CompositeModuleResolver, "transformers", []);
395
387
  var CompositeModuleResolver = _CompositeModuleResolver;
396
388
 
397
389
  // src/NameRegistrarTransformer.ts
@@ -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 { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\n static defaultMaxDepth = 3\n static transformers: ModuleIdentifierTransformer[] = []\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>({ max, ttl, ...params.cache })\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\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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await this.transformModuleIdentifier(idOrFilter)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n\n private async transformModuleIdentifier(identifier: ModuleIdentifier) {\n let id = identifier\n for (const transformer of this.moduleIdentifierTransformers ?? CompositeModuleResolver.transformers) {\n id = await transformer.transform(id)\n }\n return id\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","identifier","transformer","transformers","transform","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Address } from '@xylabs/hex'\nimport { Base, BaseParams, toJsonString } from '@xylabs/object'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asModuleInstance,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\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{\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)) 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 (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\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\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 | T[] | undefined>\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 { Address } from '@xylabs/hex'\nimport { Promisable } from '@xylabs/promise'\nimport {\n CacheConfig,\n duplicateModules,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\nimport { SimpleModuleResolver } from './SimpleModuleResolver'\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{\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>({ max, ttl, ...params.cache })\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(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: 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 async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\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 return await this.resolveMultipartIdentifier<T>(idOrFilter)\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (mutatedOptions.maxDepth < 0) {\n return undefined\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 return await this._localResolver.resolve(idOrFilter, mutatedOptions)\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 | undefined)[] = (\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).filter(duplicateModules).pop()\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n\n return resolvePriority(ObjectResolverPriority.VeryHigh)\n } else {\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 }\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 const result = await resolver.resolveIdentifier(id)\n return result\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(module?: ModuleInstance) {\n if (module) {\n this._localResolver.add(module)\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 module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Address, isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\n\nimport { AbstractModuleResolver, ModuleResolverParams } from './AbstractModuleResolver'\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(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: 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[] | T | undefined> {\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) ? unfiltered?.filter((module) => identity(module))\n : identity(unfiltered) ? unfiltered\n : undefined\n )\n } else {\n return unfiltered\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 module of Object.values(this.modules)) {\n if (module.address === id) {\n return module.address\n }\n }\n }\n\n private addSingleModule(module?: ModuleInstance) {\n if (module) {\n const name = module.config.name\n if (name && this.allowNameResolution) {\n //check for collision\n assertEx(this.nameToModule[name] === undefined, () => `Module with name ${name} already added`)\n this.nameToModule[name] = module\n }\n this.modules[module.address] = module\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const module = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const name = module.config.name\n if (name) {\n delete this.nameToModule[name]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return compact(\n address.map((address) => {\n return modules[address]\n }),\n ) as T[]\n }\n\n private resolveByName<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], name: ModuleName[]): T[] {\n return compact(\n name.map((name) => {\n return modules.find((module) => module.config.name === name)\n }),\n ) as T[]\n }\n\n private resolveByQuery<T extends ModuleInstance = ModuleInstance>(modules: ModuleInstance[], query: string[][]): T[] {\n return 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 ) as T[]\n }\n}\n","import { Address } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport { 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 = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n console.log('query:', toJsonString(query))\n const result = await this.registrarDiviner?.divine([query])\n console.log('result:', toJsonString(result))\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 console.log('address:', toJsonString(address))\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 { 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 // eslint-disable-next-line deprecation/deprecation\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":["assertEx","Base","toJsonString","asModuleInstance","ObjectResolverPriority","AbstractModuleResolver","Base","priority","params","ObjectResolverPriority","Normal","value","root","assertEx","resolve","idOrFilter","options","values","resolveHandler","Array","isArray","map","asModuleInstance","constructor","name","toJsonString","resolvePrivate","id","_options","Promise","assertEx","exists","duplicateModules","ObjectResolverPriority","ResolveHelper","LRUCache","assertEx","isAddress","compact","isAddressModuleFilter","isModuleName","isNameModuleFilter","isQueryModuleFilter","SimpleModuleResolver","AbstractModuleResolver","modules","nameToModule","constructor","params","allowNameResolution","add","module","Array","isArray","mod","addSingleModule","addResolver","_resolver","remove","address","addr","removeSingleModule","removeResolver","resolveHandler","idOrFilter","options","unfiltered","Object","values","id","name","isModuleName","undefined","isAddress","assertEx","resolveByName","pop","resolveByAddress","filter","isAddressModuleFilter","isNameModuleFilter","isQueryModuleFilter","resolveByQuery","query","identity","resolveIdentifier","_options","moduleFromName","config","compact","map","find","reduce","supported","queryList","queryable","queries","includes","moduleIdentifierParts","moduleIdentifier","split","CompositeModuleResolver","AbstractModuleResolver","_cache","resolvers","_allowAddResolver","_localResolver","constructor","params","localResolver","SimpleModuleResolver","allowNameResolution","root","addResolver","max","ttl","cache","LRUCache","allowAddResolver","value","moduleIdentifierTransformers","ResolveHelper","transformers","add","module","Array","isArray","mod","addSingleModule","resolver","push","remove","addresses","address","removeSingleModule","removeResolver","filter","item","resolveHandler","idOrFilter","options","mutatedOptions","maxDepth","defaultMaxDepth","all","resolve","childOptions","result","Promise","map","flatResult","flat","exists","duplicateModules","idParts","length","resolveMultipartIdentifier","id","transformModuleIdentifier","undefined","cachedResult","get","status","delete","resolvePriority","priority","results","pop","set","ObjectResolverPriority","VeryLow","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","toJsonString","PayloadDivinerQuerySchema","LRUCache","NameRegistrarTransformer","_cache","constructor","registrarDiviner","root","LRUCache","max","ttl","transform","identifier","parts","split","first","shift","nameParts","length","cachedResult","get","query","domain","order","schema","PayloadDivinerQuerySchema","tld","console","log","toJsonString","result","divine","resultPayload","Error","address","set","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
@@ -16,9 +16,9 @@
16
16
  "@xylabs/lodash": "^3.1.7",
17
17
  "@xylabs/object": "^3.1.7",
18
18
  "@xylabs/promise": "^3.1.7",
19
- "@xyo-network/diviner-model": "~2.94.39",
20
- "@xyo-network/diviner-payload-model": "~2.94.39",
21
- "@xyo-network/module-model": "~2.94.39",
19
+ "@xyo-network/diviner-model": "~2.94.40",
20
+ "@xyo-network/diviner-payload-model": "~2.94.40",
21
+ "@xyo-network/module-model": "~2.94.40",
22
22
  "lru-cache": "^10.2.0"
23
23
  },
24
24
  "devDependencies": {
@@ -67,6 +67,6 @@
67
67
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
68
68
  },
69
69
  "sideEffects": false,
70
- "version": "2.94.39",
70
+ "version": "2.94.40",
71
71
  "type": "module"
72
72
  }
@@ -16,6 +16,7 @@ import {
16
16
  ModuleResolverInstance,
17
17
  ObjectFilterOptions,
18
18
  ObjectResolverPriority,
19
+ ResolveHelper,
19
20
  } from '@xyo-network/module-model'
20
21
  import { LRUCache } from 'lru-cache'
21
22
 
@@ -37,7 +38,6 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
37
38
  implements ModuleRepository, ModuleResolverInstance
38
39
  {
39
40
  static defaultMaxDepth = 3
40
- static transformers: ModuleIdentifierTransformer[] = []
41
41
 
42
42
  protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>
43
43
  protected resolvers: ModuleResolverInstance[] = []
@@ -67,7 +67,7 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
67
67
  }
68
68
 
69
69
  private get moduleIdentifierTransformers() {
70
- return this.params.moduleIdentifierTransformers
70
+ return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers
71
71
  }
72
72
 
73
73
  add(module: ModuleInstance): this
@@ -145,7 +145,7 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
145
145
  if (idParts.length > 1) {
146
146
  return await this.resolveMultipartIdentifier<T>(idOrFilter)
147
147
  }
148
- const id = await this.transformModuleIdentifier(idOrFilter)
148
+ const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)
149
149
  if (mutatedOptions.maxDepth < 0) {
150
150
  return undefined
151
151
  }
@@ -252,12 +252,4 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
252
252
  const module = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))
253
253
  return (await module?.resolve<T>(idParts.join(':'))) ?? (await module?.resolvePrivate<T>(idParts.join(':')))
254
254
  }
255
-
256
- private async transformModuleIdentifier(identifier: ModuleIdentifier) {
257
- let id = identifier
258
- for (const transformer of this.moduleIdentifierTransformers ?? CompositeModuleResolver.transformers) {
259
- id = await transformer.transform(id)
260
- }
261
- return id
262
- }
263
255
  }