@xyo-network/module-resolver 3.0.7 → 3.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ import type { Address } from '@xylabs/hex';
2
+ import type { BaseParams } from '@xylabs/object';
3
+ import { Base } from '@xylabs/object';
4
+ import type { Promisable } from '@xylabs/promise';
5
+ import type { ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
6
+ import { ObjectResolverPriority } from '@xyo-network/module-model';
7
+ export interface ModuleResolverParams extends BaseParams {
8
+ priority?: ObjectResolverPriority;
9
+ root: ModuleInstance;
10
+ }
11
+ export declare abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams> extends Base<TParams> implements ModuleResolverInstance {
12
+ get priority(): ObjectResolverPriority;
13
+ set priority(value: ObjectResolverPriority);
14
+ get root(): ModuleInstance<import("@xylabs/object").BaseParamsFields & {
15
+ account?: import("@xyo-network/account-model").AccountInstance | "random";
16
+ addToResolvers?: boolean;
17
+ additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
18
+ allowNameResolution?: boolean;
19
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
20
+ schema: "network.xyo.module.config";
21
+ }, "schema"> & {
22
+ schema: string;
23
+ };
24
+ ephemeralQueryAccountEnabled?: boolean;
25
+ moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
26
+ }, import("@xyo-network/module-model").ModuleEventData<object>>;
27
+ resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
+ resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
+ resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
+ resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
31
+ resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>;
32
+ resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>;
33
+ abstract addResolver(resolver: ModuleResolverInstance): this;
34
+ abstract removeResolver(resolver: ModuleResolverInstance): this;
35
+ abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T[]>;
36
+ abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>;
37
+ }
38
+ //# sourceMappingURL=AbstractModuleResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractModuleResolver.d.ts","sourceRoot":"","sources":["../../src/AbstractModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAgB,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAEL,sBAAsB,EACvB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,8BAAsB,sBAAsB,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CACtG,SAAQ,IAAI,CAAC,OAAO,CACpB,YAAW,sBAAsB;IACjC,IAAI,QAAQ,IAIQ,sBAAsB,CAFzC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAEzC;IAED,IAAI,IAAI;;;;;;;;;;;;oEAEP;IAEK,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3H,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAElI,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAoC5H,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACnH,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQ/I,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAC5D,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAE/D,QAAQ,CAAC,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC/D,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAC9C,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAElB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;CACjH"}
@@ -0,0 +1,35 @@
1
+ import type { Address } from '@xylabs/hex';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { CacheConfig, ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleIdentifierTransformer, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
4
+ import { LRUCache } from 'lru-cache';
5
+ import type { ModuleResolverParams } from './AbstractModuleResolver.ts';
6
+ import { AbstractModuleResolver } from './AbstractModuleResolver.ts';
7
+ export interface CompositeModuleResolverParams extends ModuleResolverParams {
8
+ allowNameResolution?: boolean;
9
+ cache?: CacheConfig;
10
+ moduleIdentifierTransformers?: ModuleIdentifierTransformer[];
11
+ }
12
+ export declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
13
+ static defaultMaxDepth: number;
14
+ protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
15
+ protected resolvers: ModuleResolverInstance[];
16
+ private _allowAddResolver;
17
+ private _localResolver;
18
+ constructor(params: T);
19
+ get allowAddResolver(): boolean;
20
+ set allowAddResolver(value: boolean);
21
+ get allowNameResolution(): boolean;
22
+ private get moduleIdentifierTransformers();
23
+ add(mod: ModuleInstance): this;
24
+ add(mod: ModuleInstance[]): this;
25
+ addResolver(resolver: ModuleResolverInstance): this;
26
+ remove(addresses: Address[] | Address): this;
27
+ removeResolver(resolver: ModuleResolverInstance): this;
28
+ resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
+ resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined>;
30
+ protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
31
+ private addSingleModule;
32
+ private removeSingleModule;
33
+ private resolveMultipartIdentifier;
34
+ }
35
+ //# sourceMappingURL=CompositeModuleResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompositeModuleResolver.d.ts","sourceRoot":"","sources":["../../src/CompositeModuleResolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,WAAW,6BAA8B,SAAQ,oBAAoB;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,4BAA4B,CAAC,EAAE,2BAA2B,EAAE,CAAA;CAC7D;AAMD,qBAAa,uBAAuB,CAAC,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,CAC1G,SAAQ,sBAAsB,CAAC,CAAC,CAChC,YAAW,gBAAgB,EAAE,sBAAsB;IACnD,MAAM,CAAC,eAAe,SAAI;IAE1B,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;IAC5D,SAAS,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAK;IAClD,OAAO,CAAC,iBAAiB,CAAO;IAChC,OAAO,CAAC,cAAc,CAAsB;gBAEhC,MAAM,EAAE,CAAC;IAWrB,IAAI,gBAAgB,IAIQ,OAAO,CAFlC;IAED,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAGlC;IAED,IAAI,mBAAmB,YAEtB;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAC9B,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI;IAUhC,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAOnD,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAS5C,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAMhD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC5D,UAAU,GAAE,YAAY,CAAC,CAAC,CAAC,GAAG,gBAAsB,EACpD,OAAO,GAAE,mBAAmB,CAAC,CAAC,CAAM,GACnC,OAAO,CAAC,CAAC,EAAE,CAAC;IAgIT,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAqB3G,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAI1H,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;YAIZ,0BAA0B;CAOzC"}
@@ -0,0 +1,10 @@
1
+ import type { DivinerInstance } from '@xyo-network/diviner-model';
2
+ import type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model';
3
+ export declare class NameRegistrarTransformer implements ModuleIdentifierTransformer {
4
+ private registrarDiviner;
5
+ private root;
6
+ private _cache;
7
+ constructor(registrarDiviner: DivinerInstance, root: string);
8
+ transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier>;
9
+ }
10
+ //# sourceMappingURL=NameRegistrarTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NameRegistrarTransformer.d.ts","sourceRoot":"","sources":["../../src/NameRegistrarTransformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAA;AAG9F,qBAAa,wBAAyB,YAAW,2BAA2B;IAIxE,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,IAAI;IAJd,OAAO,CAAC,MAAM,CAA+H;gBAGnI,gBAAgB,EAAE,eAAe,EACjC,IAAI,EAAE,MAAM;IAGhB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA8BzE"}
@@ -0,0 +1,22 @@
1
+ import type { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model';
2
+ export interface ModuleResolvedEventArgs {
3
+ filter?: ModuleFilter;
4
+ mod: Module;
5
+ }
6
+ export interface ResolverEventEmitter {
7
+ on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void;
8
+ }
9
+ export declare const mixinResolverEventEmitter: <T extends ModuleResolver = ModuleResolver<import("@xyo-network/module-model").ModuleInstance<import("@xylabs/object").BaseParamsFields & {
10
+ account?: import("@xyo-network/account-model").AccountInstance | "random";
11
+ addToResolvers?: boolean;
12
+ additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
13
+ allowNameResolution?: boolean;
14
+ config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
15
+ schema: "network.xyo.module.config";
16
+ }, "schema"> & {
17
+ schema: string;
18
+ };
19
+ ephemeralQueryAccountEnabled?: boolean;
20
+ moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
21
+ }, import("@xyo-network/module-model").ModuleEventData<object>>>>(resolver: T) => T & ResolverEventEmitter;
22
+ //# sourceMappingURL=ResolverEventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolverEventEmitter.d.ts","sourceRoot":"","sources":["../../src/ResolverEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAAE,YAAY,EAAE,cAAc,EACrC,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI,CAAA;CACrF;AAiCD,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,cAAc;;;;;;;;;;;;4EAA6B,CAAC,KAAG,CAAC,GAAG,oBAGtG,CAAA"}
@@ -0,0 +1,27 @@
1
+ import type { Address } from '@xylabs/hex';
2
+ import type { Promisable } from '@xylabs/promise';
3
+ import type { ModuleFilter, ModuleFilterOptions, ModuleIdentifier, ModuleInstance, ModuleRepository, ModuleResolverInstance, ObjectFilterOptions } from '@xyo-network/module-model';
4
+ import type { ModuleResolverParams } from './AbstractModuleResolver.ts';
5
+ import { AbstractModuleResolver } from './AbstractModuleResolver.ts';
6
+ export type SimpleModuleResolverParams = ModuleResolverParams & {
7
+ allowNameResolution?: boolean;
8
+ };
9
+ export declare class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {
10
+ private modules;
11
+ private nameToModule;
12
+ constructor(params: SimpleModuleResolverParams);
13
+ get allowNameResolution(): boolean;
14
+ add(mods: ModuleInstance): this;
15
+ add(mods: ModuleInstance[]): this;
16
+ addResolver(_resolver: ModuleResolverInstance): this;
17
+ remove(address: Address | Address[]): this;
18
+ removeResolver(_resolver: ModuleResolverInstance): this;
19
+ resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | string, options?: ModuleFilterOptions<T>): Promisable<T[]>;
20
+ resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
21
+ private addSingleModule;
22
+ private removeSingleModule;
23
+ private resolveByAddress;
24
+ private resolveByName;
25
+ private resolveByQuery;
26
+ }
27
+ //# sourceMappingURL=SimpleModuleResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleModuleResolver.d.ts","sourceRoot":"","sources":["../../src/SimpleModuleResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEd,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC9D,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,qBAAa,oBAAqB,SAAQ,sBAAsB,CAAC,0BAA0B,CAAE,YAAW,gBAAgB;IACtH,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,YAAY,CAAyC;gBAEjD,MAAM,EAAE,0BAA0B;IAI9C,IAAI,mBAAmB,YAEtB;IAED,GAAG,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAC/B,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI;IAUjC,WAAW,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIpD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAS1C,cAAc,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAIvD,cAAc,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EACtD,UAAU,GAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAY,EAC1C,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC/B,UAAU,CAAC,CAAC,EAAE,CAAC;IAiDlB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;IAexG,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;CAcvB"}
@@ -1,124 +1,6 @@
1
- import * as _xyo_network_module_model from '@xyo-network/module-model';
2
- import { ObjectResolverPriority, ModuleInstance, ModuleResolverInstance, ModuleFilterOptions, ModuleFilter, ModuleIdentifier, ObjectFilterOptions, CacheConfig, ModuleIdentifierTransformer, ModuleRepository, Module, ModuleResolver } from '@xyo-network/module-model';
3
- import * as _xyo_network_payload_model from '@xyo-network/payload-model';
4
- import * as _xyo_network_account_model from '@xyo-network/account-model';
5
- import * as _xylabs_object from '@xylabs/object';
6
- import { BaseParams, Base } from '@xylabs/object';
7
- import { Address } from '@xylabs/hex';
8
- import { Promisable } from '@xylabs/promise';
9
- import { LRUCache } from 'lru-cache';
10
- import { DivinerInstance } from '@xyo-network/diviner-model';
11
-
12
- interface ModuleResolverParams extends BaseParams {
13
- priority?: ObjectResolverPriority;
14
- root: ModuleInstance;
15
- }
16
- declare abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams> extends Base<TParams> implements ModuleResolverInstance {
17
- get priority(): ObjectResolverPriority;
18
- set priority(value: ObjectResolverPriority);
19
- get root(): ModuleInstance<_xylabs_object.BaseParamsFields & {
20
- account?: _xyo_network_account_model.AccountInstance | "random";
21
- addToResolvers?: boolean;
22
- additionalSigners?: _xyo_network_account_model.AccountInstance[];
23
- allowNameResolution?: boolean;
24
- config: _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & Omit<_xyo_network_module_model.ArchivingModuleConfig & _xyo_network_module_model.ModuleConfigFields & _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & {
25
- schema: "network.xyo.module.config";
26
- }, "schema"> & {
27
- schema: string;
28
- };
29
- ephemeralQueryAccountEnabled?: boolean;
30
- moduleIdentifierTransformers?: _xyo_network_module_model.ModuleIdentifierTransformer[];
31
- }, _xyo_network_module_model.ModuleEventData<object>>;
32
- resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
33
- resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
34
- resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
35
- resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>;
36
- resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>;
37
- resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>;
38
- abstract addResolver(resolver: ModuleResolverInstance): this;
39
- abstract removeResolver(resolver: ModuleResolverInstance): this;
40
- abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promisable<T[]>;
41
- abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>;
42
- }
43
-
44
- interface CompositeModuleResolverParams extends ModuleResolverParams {
45
- allowNameResolution?: boolean;
46
- cache?: CacheConfig;
47
- moduleIdentifierTransformers?: ModuleIdentifierTransformer[];
48
- }
49
- declare class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams> extends AbstractModuleResolver<T> implements ModuleRepository, ModuleResolverInstance {
50
- static defaultMaxDepth: number;
51
- protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>;
52
- protected resolvers: ModuleResolverInstance[];
53
- private _allowAddResolver;
54
- private _localResolver;
55
- constructor(params: T);
56
- get allowAddResolver(): boolean;
57
- set allowAddResolver(value: boolean);
58
- get allowNameResolution(): boolean;
59
- private get moduleIdentifierTransformers();
60
- add(mod: ModuleInstance): this;
61
- add(mod: ModuleInstance[]): this;
62
- addResolver(resolver: ModuleResolverInstance): this;
63
- remove(addresses: Address[] | Address): this;
64
- removeResolver(resolver: ModuleResolverInstance): this;
65
- resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T[]>;
66
- resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined>;
67
- protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
68
- private addSingleModule;
69
- private removeSingleModule;
70
- private resolveMultipartIdentifier;
71
- }
72
-
73
- declare class NameRegistrarTransformer implements ModuleIdentifierTransformer {
74
- private registrarDiviner;
75
- private root;
76
- private _cache;
77
- constructor(registrarDiviner: DivinerInstance, root: string);
78
- transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier>;
79
- }
80
-
81
- interface ModuleResolvedEventArgs {
82
- filter?: ModuleFilter;
83
- mod: Module;
84
- }
85
- interface ResolverEventEmitter {
86
- on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void;
87
- }
88
- declare const mixinResolverEventEmitter: <T extends ModuleResolver = ModuleResolver<_xyo_network_module_model.ModuleInstance<_xylabs_object.BaseParamsFields & {
89
- account?: _xyo_network_account_model.AccountInstance | "random";
90
- addToResolvers?: boolean;
91
- additionalSigners?: _xyo_network_account_model.AccountInstance[];
92
- allowNameResolution?: boolean;
93
- config: _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & Omit<_xyo_network_module_model.ArchivingModuleConfig & _xyo_network_module_model.ModuleConfigFields & _xyo_network_payload_model.SchemaFields & _xyo_network_payload_model.PayloadFields & {
94
- schema: "network.xyo.module.config";
95
- }, "schema"> & {
96
- schema: string;
97
- };
98
- ephemeralQueryAccountEnabled?: boolean;
99
- moduleIdentifierTransformers?: _xyo_network_module_model.ModuleIdentifierTransformer[];
100
- }, _xyo_network_module_model.ModuleEventData<object>>>>(resolver: T) => T & ResolverEventEmitter;
101
-
102
- type SimpleModuleResolverParams = ModuleResolverParams & {
103
- allowNameResolution?: boolean;
104
- };
105
- declare class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {
106
- private modules;
107
- private nameToModule;
108
- constructor(params: SimpleModuleResolverParams);
109
- get allowNameResolution(): boolean;
110
- add(mods: ModuleInstance): this;
111
- add(mods: ModuleInstance[]): this;
112
- addResolver(_resolver: ModuleResolverInstance): this;
113
- remove(address: Address | Address[]): this;
114
- removeResolver(_resolver: ModuleResolverInstance): this;
115
- resolveHandler<T extends ModuleInstance = ModuleInstance>(idOrFilter?: ModuleFilter<T> | string, options?: ModuleFilterOptions<T>): Promisable<T[]>;
116
- resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined>;
117
- private addSingleModule;
118
- private removeSingleModule;
119
- private resolveByAddress;
120
- private resolveByName;
121
- private resolveByQuery;
122
- }
123
-
124
- export { AbstractModuleResolver, CompositeModuleResolver, type CompositeModuleResolverParams, type ModuleResolvedEventArgs, type ModuleResolverParams, NameRegistrarTransformer, type ResolverEventEmitter, SimpleModuleResolver, type SimpleModuleResolverParams, mixinResolverEventEmitter };
1
+ export * from './AbstractModuleResolver.ts';
2
+ export * from './CompositeModuleResolver.ts';
3
+ export * from './NameRegistrarTransformer.ts';
4
+ export * from './ResolverEventEmitter.ts';
5
+ export * from './SimpleModuleResolver.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/AbstractModuleResolver.ts","../../src/CompositeModuleResolver.ts","../../src/SimpleModuleResolver.ts","../../src/NameRegistrarTransformer.ts","../../src/ResolverEventEmitter.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions } from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = await this.resolveHandler(idOrFilter, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }),\n )\n }\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[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions } from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ 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(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n } else if (typeof idOrFilter === 'object') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions } from '@xyo-network/module-model'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n} from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return 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(mod => mod.modName === 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(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false),\n ),\n ) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {\n const args = { filter, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","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","mods","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","modName","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","mod","Array","isArray","modItem","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","cachedResult","get","status","delete","resolvePriority","priority","results","findLast","set","ObjectResolverPriority","VeryLow","undefined","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","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","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","listener","onModuleResolved","mod","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","map","mixinResolverEventEmitter","mixin","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 type { Address } from '@xylabs/hex'\nimport type { BaseParams } from '@xylabs/object'\nimport { Base, toJsonString } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n asModuleInstance,\n ObjectResolverPriority,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolverParams extends BaseParams {\n priority?: ObjectResolverPriority\n root: ModuleInstance\n}\n\nexport abstract class AbstractModuleResolver<TParams extends ModuleResolverParams = ModuleResolverParams>\n extends Base<TParams>\n implements ModuleResolverInstance {\n get priority() {\n return this.params.priority ?? ObjectResolverPriority.Normal\n }\n\n set priority(value: ObjectResolverPriority) {\n this.params.priority = value\n }\n\n get root() {\n return assertEx(this.params.root, () => 'root is not set')\n }\n\n async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n /** @deprecated use '*' if trying to resolve all */\n async resolve<T extends ModuleInstance = ModuleInstance>(filter?: ModuleFilter<T>, options?: ModuleFilterOptions<T>): Promise<T[]>\n async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promise<T[] | T | undefined> {\n if (idOrFilter === '*') {\n const values = await this.resolveHandler(idOrFilter, options)\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const [value] = await this.resolveHandler(idOrFilter, options)\n return asModuleInstance<T>(\n value,\n () =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n `resolveHandler returned invalid result (string) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`,\n )\n }\n default: {\n const values = (await this.resolveHandler(idOrFilter, options)) as []\n assertEx(Array.isArray(values), () => 'resolveHandler returned a non-array')\n return values.map(value =>\n asModuleInstance<T>(value, () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`\n }))\n }\n }\n }\n\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ObjectFilterOptions<T>): Promise<T[]>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ObjectFilterOptions<T>): Promise<T | undefined>\n async resolvePrivate<T extends ModuleInstance = ModuleInstance>(\n id: ModuleIdentifier,\n _options?: ObjectFilterOptions<T>,\n ): Promise<T | T[] | undefined> {\n if (id === '*') return await Promise.resolve([])\n }\n\n abstract addResolver(resolver: ModuleResolverInstance): this\n abstract removeResolver(resolver: ModuleResolverInstance): this\n\n abstract resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier,\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]>\n\n abstract resolveIdentifier(id: ModuleIdentifier, options?: ObjectFilterOptions): Promisable<Address | undefined>\n}\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport type { Address } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n CacheConfig,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleIdentifierPart,\n ModuleIdentifierTransformer,\n ModuleInstance,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n duplicateModules,\n ObjectResolverPriority,\n ResolveHelper,\n} from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\nimport { SimpleModuleResolver } from './SimpleModuleResolver.ts'\n\nexport interface CompositeModuleResolverParams extends ModuleResolverParams {\n allowNameResolution?: boolean\n cache?: CacheConfig\n moduleIdentifierTransformers?: ModuleIdentifierTransformer[]\n}\n\nconst moduleIdentifierParts = (moduleIdentifier: ModuleIdentifier): ModuleIdentifierPart[] => {\n return moduleIdentifier?.split(':') as ModuleIdentifierPart[]\n}\n\nexport class CompositeModuleResolver<T extends CompositeModuleResolverParams = CompositeModuleResolverParams>\n extends AbstractModuleResolver<T>\n implements ModuleRepository, ModuleResolverInstance {\n static defaultMaxDepth = 3\n\n protected _cache: LRUCache<ModuleIdentifier, ModuleInstance>\n protected resolvers: ModuleResolverInstance[] = []\n private _allowAddResolver = true\n private _localResolver: SimpleModuleResolver\n\n constructor(params: T) {\n super(params)\n const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })\n this.addResolver(localResolver)\n const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}\n this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({\n max, ttl, ...params.cache,\n })\n this._localResolver = localResolver\n }\n\n get allowAddResolver() {\n return this._allowAddResolver\n }\n\n set allowAddResolver(value: boolean) {\n this.resolvers = [this._localResolver]\n this._allowAddResolver = value\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n private get moduleIdentifierTransformers() {\n return this.params.moduleIdentifierTransformers ?? ResolveHelper.transformers\n }\n\n add(mod: ModuleInstance): this\n add(mod: ModuleInstance[]): this\n add(mod: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mod)) {\n for (const modItem of mod) this.addSingleModule(modItem)\n } else {\n this.addSingleModule(mod)\n }\n return this\n }\n\n addResolver(resolver: ModuleResolverInstance): this {\n if (this.allowAddResolver) {\n this.resolvers.push(resolver)\n }\n return this\n }\n\n remove(addresses: Address[] | Address): this {\n if (Array.isArray(addresses)) {\n for (const address of addresses) this.removeSingleModule(address)\n } else {\n this.removeSingleModule(addresses)\n }\n return this\n }\n\n removeResolver(resolver: ModuleResolverInstance): this {\n this.resolvers = this.resolvers.filter(item => item !== resolver)\n return this\n }\n\n // eslint-disable-next-line complexity\n async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T[]> {\n const mutatedOptions = { ...options, maxDepth: options?.maxDepth ?? CompositeModuleResolver.defaultMaxDepth }\n\n // resolve all\n if (idOrFilter === '*') {\n const all = idOrFilter\n\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return (await this._localResolver.resolve(all, mutatedOptions)) ?? []\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(all, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n\n if (typeof idOrFilter === 'string') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n // resolve ModuleIdentifier\n const idParts = moduleIdentifierParts(idOrFilter)\n if (idParts.length > 1) {\n const mod = await this.resolveMultipartIdentifier<T>(idOrFilter)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n const id = await ResolveHelper.transformModuleIdentifier(idOrFilter, this.moduleIdentifierTransformers)\n if (id) {\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n const cachedResult = this._cache.get(id)\n if (cachedResult) {\n if (cachedResult.status === 'dead') {\n this._cache.delete(id)\n } else {\n return [cachedResult] as T[]\n }\n }\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n const mod = await this._localResolver.resolve(idOrFilter, mutatedOptions)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n\n // recursive function to resolve by priority\n const resolvePriority = async (priority: ObjectResolverPriority): Promise<T | undefined> => {\n const resolvers = this.resolvers.filter(resolver => resolver.priority === priority)\n const results: T[] = (\n await Promise.all(\n resolvers.map(async (resolver) => {\n const result: T | undefined = await resolver.resolve<T>(id, mutatedOptions)\n return result\n }),\n )\n ).filter(exists)\n\n const result: T | undefined = results.filter(exists).findLast(duplicateModules)\n if (result) {\n this._cache.set(id, result)\n return result\n }\n return priority === ObjectResolverPriority.VeryLow ? undefined : await resolvePriority(priority - 1)\n }\n const mod = await resolvePriority(ObjectResolverPriority.VeryHigh)\n return (\n mod\n ? Array.isArray(mod)\n ? mod\n : [mod]\n : []\n )\n }\n } else if (typeof idOrFilter === 'object') {\n // wen't too far?\n if (mutatedOptions.maxDepth < 0) {\n return []\n }\n\n const filter = idOrFilter\n\n // identity resolve?\n if (mutatedOptions.maxDepth === 0) {\n return await this._localResolver.resolve(filter, mutatedOptions)\n }\n\n const childOptions = { ...mutatedOptions, maxDepth: mutatedOptions?.maxDepth - 1 }\n\n const result = await Promise.all(\n this.resolvers.map(async (resolver) => {\n const result: T[] = await resolver.resolve<T>(filter, childOptions)\n return result\n }),\n )\n const flatResult: T[] = result.flat().filter(exists)\n return flatResult.filter(duplicateModules)\n }\n return []\n }\n\n async resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promise<Address | undefined> {\n const idParts = id.split(':')\n if (idParts.length > 1) {\n return this.resolveComplexIdentifier(id)\n }\n const results = (\n await Promise.all(\n this.resolvers.map(async (resolver) => {\n return await resolver.resolveIdentifier(id)\n }),\n )\n ).filter(exists)\n const result = results.shift()\n if (results.length > 0) {\n for (const altResult of results) {\n assertEx(altResult === result, () => `Inconsistent results for ${id} [${result}][${altResult}]`)\n }\n }\n return result\n }\n\n protected resolveComplexIdentifier(_id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n throw new Error('Method not implemented.')\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n this._localResolver.add(mod)\n }\n }\n\n private removeSingleModule(address: Address) {\n this._localResolver.remove(address)\n }\n\n private async resolveMultipartIdentifier<T extends ModuleInstance = ModuleInstance>(moduleIdentifier: ModuleIdentifier): Promise<T | undefined> {\n const idParts = moduleIdentifierParts(moduleIdentifier)\n assertEx(idParts.length >= 2, () => 'Not a valid multipart identifier')\n const id = assertEx(idParts.shift())\n const mod = (await this.resolve<T>(id)) ?? (await this.resolvePrivate<T>(id))\n return (await mod?.resolve<T>(idParts.join(':'))) ?? (await mod?.resolvePrivate<T>(idParts.join(':')))\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport { isAddress } from '@xylabs/hex'\nimport { compact } from '@xylabs/lodash'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleName,\n ModuleRepository,\n ModuleResolverInstance,\n ObjectFilterOptions,\n} from '@xyo-network/module-model'\nimport {\n isAddressModuleFilter,\n isModuleName,\n isNameModuleFilter,\n isQueryModuleFilter,\n} from '@xyo-network/module-model'\n\nimport type { ModuleResolverParams } from './AbstractModuleResolver.ts'\nimport { AbstractModuleResolver } from './AbstractModuleResolver.ts'\n\nexport type SimpleModuleResolverParams = ModuleResolverParams & {\n allowNameResolution?: boolean\n}\n\nexport class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleResolverParams> implements ModuleRepository {\n private modules: Record<Address, ModuleInstance> = {}\n private nameToModule: Record<ModuleName, ModuleInstance> = {}\n\n constructor(params: SimpleModuleResolverParams) {\n super(params)\n }\n\n get allowNameResolution() {\n return this.params.allowNameResolution ?? true\n }\n\n add(mods: ModuleInstance): this\n add(mods: ModuleInstance[]): this\n add(mods: ModuleInstance | ModuleInstance[]): this {\n if (Array.isArray(mods)) {\n for (const mod of mods) this.addSingleModule(mod)\n } else {\n this.addSingleModule(mods)\n }\n return this\n }\n\n addResolver(_resolver: ModuleResolverInstance): this {\n throw 'Adding resolvers not supported'\n }\n\n remove(address: Address | Address[]): this {\n if (Array.isArray(address)) {\n for (const addr of address) this.removeSingleModule(addr)\n } else {\n this.removeSingleModule(address)\n }\n return this\n }\n\n removeResolver(_resolver: ModuleResolverInstance): this {\n throw 'Removing resolvers not supported'\n }\n\n resolveHandler<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | string = '*',\n options?: ModuleFilterOptions<T>,\n ): Promisable<T[]> {\n const unfiltered = (() => {\n if (idOrFilter) {\n if (typeof idOrFilter === 'string') {\n if (idOrFilter === '*') {\n return Object.values(this.modules) as T[]\n }\n const id = idOrFilter as ModuleIdentifier\n const name = isModuleName(id) ? id : undefined\n const address = isAddress(id) ? id : undefined\n assertEx(name || address, () => 'module identifier must be a ModuleName or Address')\n return (\n (name ? this.resolveByName<T>(Object.values(this.modules), [name]).pop() : undefined)\n ?? (address ? this.resolveByAddress<T>(this.modules, [address]).pop() : undefined)\n )\n } else {\n const filter = idOrFilter\n if (isAddressModuleFilter(filter)) {\n return this.resolveByAddress<T>(this.modules, filter.address)\n } else if (isNameModuleFilter(filter)) {\n return this.resolveByName<T>(Object.values(this.modules), filter.name)\n } else if (isQueryModuleFilter(filter)) {\n return this.resolveByQuery<T>(Object.values(this.modules), filter.query)\n }\n }\n } else {\n return Object.values(this.modules) as T[]\n }\n })()\n const identity = options?.identity\n if (identity) {\n return (\n Array.isArray(unfiltered)\n ? unfiltered?.filter(mod => identity(mod))\n : identity(unfiltered)\n ? [unfiltered]\n : []\n )\n } else {\n return (\n unfiltered\n ? Array.isArray(unfiltered)\n ? unfiltered\n : [unfiltered]\n : []\n )\n }\n }\n\n resolveIdentifier(id: ModuleIdentifier, _options?: ObjectFilterOptions): Promisable<Address | undefined> {\n // check if id is a name of one of modules in the resolver\n const moduleFromName = this.nameToModule[id]\n if (moduleFromName) {\n return moduleFromName.address\n }\n\n // check if any of the modules have the id as an address\n for (const mod of Object.values(this.modules)) {\n if (mod.address === id) {\n return mod.address\n }\n }\n }\n\n private addSingleModule(mod?: ModuleInstance) {\n if (mod) {\n const modName = mod.modName\n if (modName && this.allowNameResolution) {\n // check for collision\n assertEx(this.nameToModule[modName] === undefined, () => `Module with name ${modName} already added`)\n this.nameToModule[modName] = mod\n }\n this.modules[mod.address] = mod\n }\n }\n\n private removeSingleModule(address: Address) {\n assertEx(isAddress(address), () => 'Invalid address')\n const mod = assertEx(this.modules[address], () => 'Address not found in modules')\n delete this.modules[address]\n const modName = mod.modName\n if (modName) {\n delete this.nameToModule[modName]\n }\n }\n\n private resolveByAddress<T extends ModuleInstance = ModuleInstance>(modules: Record<Address, ModuleInstance>, address: Address[]): T[] {\n return 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(mod => mod.modName === 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(mod =>\n query?.reduce((supported, queryList) => {\n return (\n // eslint-disable-next-line unicorn/no-array-reduce\n queryList.reduce((supported, query) => {\n const queryable = mod.queries.includes(query)\n return supported && queryable\n }, true) || supported\n )\n }, false)),\n ) as T[]\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport type { DivinerInstance } from '@xyo-network/diviner-model'\nimport { PayloadDivinerQuerySchema } from '@xyo-network/diviner-payload-model'\nimport type { ModuleIdentifier, ModuleIdentifierTransformer } from '@xyo-network/module-model'\nimport { LRUCache } from 'lru-cache'\n\nexport class NameRegistrarTransformer implements ModuleIdentifierTransformer {\n private _cache: LRUCache<ModuleIdentifier, ModuleIdentifier> = new LRUCache<ModuleIdentifier, ModuleIdentifier>({ max: 1000, ttl: 1000 * 5 })\n\n constructor(\n private registrarDiviner: DivinerInstance,\n private root: string,\n ) {}\n\n async transform(identifier: ModuleIdentifier): Promise<ModuleIdentifier> {\n const parts = identifier.split(':')\n const first = parts.shift()\n const nameParts = first?.split('.')\n if (nameParts?.length === 2 && nameParts[1] === this.root) {\n // check cache\n const cachedResult = this._cache.get(identifier)\n if (cachedResult) return cachedResult\n\n // not cached, so check registrar\n const query = {\n domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],\n }\n const result = await this.registrarDiviner?.divine([query])\n const resultPayload = result?.shift()\n if (!resultPayload) {\n throw new Error(`Unable to resolve registrar name (failed) [${first}]`)\n }\n // TODO: Use proper types for this check\n if (resultPayload) {\n const address = (resultPayload as unknown as { address: Address[] }).address?.shift()\n if (address) {\n this._cache.set(identifier, address)\n return address\n }\n }\n throw new Error(`Unable to resolve registrar name (not found) [${first}]`)\n }\n return identifier\n }\n}\n","import type {\n Module, ModuleFilter, ModuleResolver,\n} from '@xyo-network/module-model'\n\nexport interface ModuleResolvedEventArgs {\n filter?: ModuleFilter\n mod: Module\n}\n\nexport interface ResolverEventEmitter {\n on(event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void): void\n}\n\ntype ListenerFunction = (args: ModuleResolvedEventArgs) => void\n\nconst getMixin = <T extends ModuleResolver = ModuleResolver>(resolver: T) => {\n const listeners: ListenerFunction[] = []\n const emit = (event: 'moduleResolved', args: ModuleResolvedEventArgs): boolean => {\n if (listeners.length === 0) return false\n for (const listener of listeners) listener(args)\n return true\n }\n const onModuleResolved = (mod: Module, filter?: ModuleFilter) => {\n const args = { filter, mod }\n emit('moduleResolved', args)\n }\n\n const { resolve } = resolver\n function originalResolve(filter?: ModuleFilter) {\n return resolve.bind(resolver)(filter)\n }\n\n return {\n on: (event: 'moduleResolved', listener: (args: ModuleResolvedEventArgs) => void) => {\n listeners.push(listener)\n },\n resolve: async (filter?: ModuleFilter): Promise<Module[]> => {\n const modules: Module[] = await originalResolve(filter)\n await Promise.allSettled(modules.map(mod => onModuleResolved(mod, filter)))\n return modules\n },\n }\n}\n\nexport const mixinResolverEventEmitter = <T extends ModuleResolver = ModuleResolver>(resolver: T): T & ResolverEventEmitter => {\n const mixin = getMixin(resolver)\n return Object.assign(resolver, mixin)\n}\n"],"mappings":"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","names":["assertEx","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","mods","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","modName","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","mod","Array","isArray","modItem","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","cachedResult","get","status","delete","resolvePriority","priority","results","findLast","set","ObjectResolverPriority","VeryLow","undefined","VeryHigh","resolveIdentifier","_options","resolveComplexIdentifier","shift","altResult","assertEx","_id","Error","resolvePrivate","join","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","result","divine","resultPayload","Error","address","set","getMixin","resolver","listeners","emit","event","args","length","listener","onModuleResolved","mod","filter","resolve","originalResolve","bind","on","push","modules","Promise","allSettled","map","mixinResolverEventEmitter","mixin","Object","assign"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/module-resolver",
3
- "version": "3.0.7",
3
+ "version": "3.0.8",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,20 +29,20 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/assert": "^4.0.2",
33
- "@xylabs/exists": "^4.0.2",
34
- "@xylabs/hex": "^4.0.2",
35
- "@xylabs/lodash": "^4.0.2",
36
- "@xylabs/object": "^4.0.2",
37
- "@xylabs/promise": "^4.0.2",
38
- "@xyo-network/diviner-model": "^3.0.7",
39
- "@xyo-network/diviner-payload-model": "^3.0.7",
40
- "@xyo-network/module-model": "^3.0.7",
32
+ "@xylabs/assert": "^4.0.3",
33
+ "@xylabs/exists": "^4.0.3",
34
+ "@xylabs/hex": "^4.0.3",
35
+ "@xylabs/lodash": "^4.0.3",
36
+ "@xylabs/object": "^4.0.3",
37
+ "@xylabs/promise": "^4.0.3",
38
+ "@xyo-network/diviner-model": "^3.0.8",
39
+ "@xyo-network/diviner-payload-model": "^3.0.8",
40
+ "@xyo-network/module-model": "^3.0.8",
41
41
  "lru-cache": "^11.0.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@xylabs/ts-scripts-yarn3": "^4.0.0",
45
- "@xylabs/tsconfig": "^4.0.0",
44
+ "@xylabs/ts-scripts-yarn3": "^4.0.7",
45
+ "@xylabs/tsconfig": "^4.0.7",
46
46
  "jest": "^29.7.0",
47
47
  "jest-mock-extended": "^3.0.7",
48
48
  "typescript": "^5.5.4"
@@ -9,7 +9,8 @@ import type {
9
9
  ModuleIdentifier,
10
10
  ModuleInstance,
11
11
  ModuleResolverInstance,
12
- ObjectFilterOptions } from '@xyo-network/module-model'
12
+ ObjectFilterOptions,
13
+ } from '@xyo-network/module-model'
13
14
  import {
14
15
  asModuleInstance,
15
16
  ObjectResolverPriority,
@@ -51,8 +52,7 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
51
52
  asModuleInstance<T>(value, () => {
52
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
54
  return `resolveHandler returned invalid result (*) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`
54
- }),
55
- )
55
+ }))
56
56
  }
57
57
  switch (typeof idOrFilter) {
58
58
  case 'string': {
@@ -71,8 +71,7 @@ export abstract class AbstractModuleResolver<TParams extends ModuleResolverParam
71
71
  asModuleInstance<T>(value, () => {
72
72
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
73
  return `resolveHandler returned invalid result (filter) [${(value as any)?.constructor?.name}][${toJsonString(value)}]`
74
- }),
75
- )
74
+ }))
76
75
  }
77
76
  }
78
77
  }
@@ -13,7 +13,8 @@ import type {
13
13
  ModuleInstance,
14
14
  ModuleRepository,
15
15
  ModuleResolverInstance,
16
- ObjectFilterOptions } from '@xyo-network/module-model'
16
+ ObjectFilterOptions,
17
+ } from '@xyo-network/module-model'
17
18
  import {
18
19
  duplicateModules,
19
20
  ObjectResolverPriority,
@@ -50,7 +51,9 @@ export class CompositeModuleResolver<T extends CompositeModuleResolverParams = C
50
51
  const localResolver = new SimpleModuleResolver({ allowNameResolution: params.allowNameResolution, root: params.root })
51
52
  this.addResolver(localResolver)
52
53
  const { max = 100, ttl = 1000 * 5 /* five seconds */ } = params.cache ?? {}
53
- this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({ max, ttl, ...params.cache })
54
+ this._cache = new LRUCache<ModuleIdentifier, ModuleInstance>({
55
+ max, ttl, ...params.cache,
56
+ })
54
57
  this._localResolver = localResolver
55
58
  }
56
59
 
@@ -22,7 +22,9 @@ export class NameRegistrarTransformer implements ModuleIdentifierTransformer {
22
22
  if (cachedResult) return cachedResult
23
23
 
24
24
  // not cached, so check registrar
25
- const query = { domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1] }
25
+ const query = {
26
+ domain: nameParts[0], order: 'desc' as const, schema: PayloadDivinerQuerySchema, tld: nameParts[1],
27
+ }
26
28
  const result = await this.registrarDiviner?.divine([query])
27
29
  const resultPayload = result?.shift()
28
30
  if (!resultPayload) {
@@ -1,4 +1,6 @@
1
- import type { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module-model'
1
+ import type {
2
+ Module, ModuleFilter, ModuleResolver,
3
+ } from '@xyo-network/module-model'
2
4
 
3
5
  export interface ModuleResolvedEventArgs {
4
6
  filter?: ModuleFilter
@@ -11,7 +11,8 @@ import type {
11
11
  ModuleName,
12
12
  ModuleRepository,
13
13
  ModuleResolverInstance,
14
- ObjectFilterOptions } from '@xyo-network/module-model'
14
+ ObjectFilterOptions,
15
+ } from '@xyo-network/module-model'
15
16
  import {
16
17
  isAddressModuleFilter,
17
18
  isModuleName,
@@ -182,8 +183,7 @@ export class SimpleModuleResolver extends AbstractModuleResolver<SimpleModuleRes
182
183
  return supported && queryable
183
184
  }, true) || supported
184
185
  )
185
- }, false),
186
- ),
186
+ }, false)),
187
187
  ) as T[]
188
188
  }
189
189
  }
package/xy.config.ts CHANGED
@@ -2,9 +2,7 @@ import type { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
2
  const config: XyTsupConfig = {
3
3
  compile: {
4
4
  browser: {},
5
- neutral: {
6
- src: true,
7
- },
5
+ neutral: { src: true },
8
6
  node: {},
9
7
  },
10
8
  }