@xyo-network/node-view 2.110.5 → 2.110.6

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.
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -69,19 +69,6 @@ var ViewNode = class extends import_node_memory.MemoryNode {
69
69
  get source() {
70
70
  return this.config.source;
71
71
  }
72
- async build() {
73
- return await this._buildMutex.runExclusive(async () => {
74
- if (!this._built) {
75
- const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
76
- if (source) {
77
- await Promise.all(this.ids.map(async (id) => {
78
- await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
79
- }));
80
- this._built = true;
81
- }
82
- }
83
- });
84
- }
85
72
  async resolve(idOrFilter = "*", options = {}) {
86
73
  if (!this._built) {
87
74
  await this.build();
@@ -141,5 +128,18 @@ var ViewNode = class extends import_node_memory.MemoryNode {
141
128
  await this.build();
142
129
  return true;
143
130
  }
131
+ async build() {
132
+ return await this._buildMutex.runExclusive(async () => {
133
+ if (!this._built) {
134
+ const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
135
+ if (source) {
136
+ await Promise.all(this.ids.map(async (id) => {
137
+ await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
138
+ }));
139
+ this._built = true;
140
+ }
141
+ }
142
+ });
143
+ }
144
144
  };
145
145
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -44,19 +44,6 @@ var ViewNode = class extends MemoryNode {
44
44
  get source() {
45
45
  return this.config.source;
46
46
  }
47
- async build() {
48
- return await this._buildMutex.runExclusive(async () => {
49
- if (!this._built) {
50
- const source = asNodeInstance(await super.resolve(this.source));
51
- if (source) {
52
- await Promise.all(this.ids.map(async (id) => {
53
- await MemoryNodeHelper.attachToExistingNode(source, id, this);
54
- }));
55
- this._built = true;
56
- }
57
- }
58
- });
59
- }
60
47
  async resolve(idOrFilter = "*", options = {}) {
61
48
  if (!this._built) {
62
49
  await this.build();
@@ -116,6 +103,19 @@ var ViewNode = class extends MemoryNode {
116
103
  await this.build();
117
104
  return true;
118
105
  }
106
+ async build() {
107
+ return await this._buildMutex.runExclusive(async () => {
108
+ if (!this._built) {
109
+ const source = asNodeInstance(await super.resolve(this.source));
110
+ if (source) {
111
+ await Promise.all(this.ids.map(async (id) => {
112
+ await MemoryNodeHelper.attachToExistingNode(source, id, this);
113
+ }));
114
+ this._built = true;
115
+ }
116
+ }
117
+ });
118
+ }
119
119
  };
120
120
  export {
121
121
  ViewNode,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -69,19 +69,6 @@ var ViewNode = class extends import_node_memory.MemoryNode {
69
69
  get source() {
70
70
  return this.config.source;
71
71
  }
72
- async build() {
73
- return await this._buildMutex.runExclusive(async () => {
74
- if (!this._built) {
75
- const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
76
- if (source) {
77
- await Promise.all(this.ids.map(async (id) => {
78
- await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
79
- }));
80
- this._built = true;
81
- }
82
- }
83
- });
84
- }
85
72
  async resolve(idOrFilter = "*", options = {}) {
86
73
  if (!this._built) {
87
74
  await this.build();
@@ -141,5 +128,18 @@ var ViewNode = class extends import_node_memory.MemoryNode {
141
128
  await this.build();
142
129
  return true;
143
130
  }
131
+ async build() {
132
+ return await this._buildMutex.runExclusive(async () => {
133
+ if (!this._built) {
134
+ const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
135
+ if (source) {
136
+ await Promise.all(this.ids.map(async (id) => {
137
+ await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
138
+ }));
139
+ this._built = true;
140
+ }
141
+ }
142
+ });
143
+ }
144
144
  };
145
145
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -44,19 +44,6 @@ var ViewNode = class extends MemoryNode {
44
44
  get source() {
45
45
  return this.config.source;
46
46
  }
47
- async build() {
48
- return await this._buildMutex.runExclusive(async () => {
49
- if (!this._built) {
50
- const source = asNodeInstance(await super.resolve(this.source));
51
- if (source) {
52
- await Promise.all(this.ids.map(async (id) => {
53
- await MemoryNodeHelper.attachToExistingNode(source, id, this);
54
- }));
55
- this._built = true;
56
- }
57
- }
58
- });
59
- }
60
47
  async resolve(idOrFilter = "*", options = {}) {
61
48
  if (!this._built) {
62
49
  await this.build();
@@ -116,6 +103,19 @@ var ViewNode = class extends MemoryNode {
116
103
  await this.build();
117
104
  return true;
118
105
  }
106
+ async build() {
107
+ return await this._buildMutex.runExclusive(async () => {
108
+ if (!this._built) {
109
+ const source = asNodeInstance(await super.resolve(this.source));
110
+ if (source) {
111
+ await Promise.all(this.ids.map(async (id) => {
112
+ await MemoryNodeHelper.attachToExistingNode(source, id, this);
113
+ }));
114
+ this._built = true;
115
+ }
116
+ }
117
+ });
118
+ }
119
119
  };
120
120
  export {
121
121
  ViewNode,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -22,7 +22,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
22
22
  get ids(): string[];
23
23
  get queries(): Schema[];
24
24
  get source(): string;
25
- build(): Promise<void>;
26
25
  resolve(): Promise<ModuleInstance[]>;
27
26
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
27
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
@@ -31,5 +30,6 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
31
30
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
31
  protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
32
  protected startHandler(): Promise<boolean>;
33
+ private build;
34
34
  }
35
35
  //# sourceMappingURL=ViewNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAEK,KAAK;IAiBI,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
1
+ {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,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,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,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;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -63,19 +63,6 @@ var _ViewNode = class _ViewNode extends import_node_memory.MemoryNode {
63
63
  get source() {
64
64
  return this.config.source;
65
65
  }
66
- async build() {
67
- return await this._buildMutex.runExclusive(async () => {
68
- if (!this._built) {
69
- const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
70
- if (source) {
71
- await Promise.all(this.ids.map(async (id) => {
72
- await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
73
- }));
74
- this._built = true;
75
- }
76
- }
77
- });
78
- }
79
66
  async resolve(idOrFilter = "*", options = {}) {
80
67
  if (!this._built) {
81
68
  await this.build();
@@ -135,6 +122,19 @@ var _ViewNode = class _ViewNode extends import_node_memory.MemoryNode {
135
122
  await this.build();
136
123
  return true;
137
124
  }
125
+ async build() {
126
+ return await this._buildMutex.runExclusive(async () => {
127
+ if (!this._built) {
128
+ const source = (0, import_node_model.asNodeInstance)(await super.resolve(this.source));
129
+ if (source) {
130
+ await Promise.all(this.ids.map(async (id) => {
131
+ await import_node_memory.MemoryNodeHelper.attachToExistingNode(source, id, this);
132
+ }));
133
+ this._built = true;
134
+ }
135
+ }
136
+ });
137
+ }
138
138
  };
139
139
  __name(_ViewNode, "ViewNode");
140
140
  __publicField(_ViewNode, "configSchemas", [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.js'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
@@ -38,19 +38,6 @@ var _ViewNode = class _ViewNode extends MemoryNode {
38
38
  get source() {
39
39
  return this.config.source;
40
40
  }
41
- async build() {
42
- return await this._buildMutex.runExclusive(async () => {
43
- if (!this._built) {
44
- const source = asNodeInstance(await super.resolve(this.source));
45
- if (source) {
46
- await Promise.all(this.ids.map(async (id) => {
47
- await MemoryNodeHelper.attachToExistingNode(source, id, this);
48
- }));
49
- this._built = true;
50
- }
51
- }
52
- });
53
- }
54
41
  async resolve(idOrFilter = "*", options = {}) {
55
42
  if (!this._built) {
56
43
  await this.build();
@@ -110,6 +97,19 @@ var _ViewNode = class _ViewNode extends MemoryNode {
110
97
  await this.build();
111
98
  return true;
112
99
  }
100
+ async build() {
101
+ return await this._buildMutex.runExclusive(async () => {
102
+ if (!this._built) {
103
+ const source = asNodeInstance(await super.resolve(this.source));
104
+ if (source) {
105
+ await Promise.all(this.ids.map(async (id) => {
106
+ await MemoryNodeHelper.attachToExistingNode(source, id, this);
107
+ }));
108
+ this._built = true;
109
+ }
110
+ }
111
+ });
112
+ }
113
113
  };
114
114
  __name(_ViewNode, "ViewNode");
115
115
  __publicField(_ViewNode, "configSchemas", [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","build","runExclusive","asNodeInstance","resolve","Promise","all","map","id","MemoryNodeHelper","attachToExistingNode","idOrFilter","options","mods","mod","find","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
package/package.json CHANGED
@@ -10,20 +10,20 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.5.9",
14
- "@xylabs/exists": "^3.5.9",
15
- "@xylabs/hex": "^3.5.9",
16
- "@xyo-network/module-events": "^2.110.5",
17
- "@xyo-network/module-model": "^2.110.5",
18
- "@xyo-network/module-resolver": "^2.110.5",
19
- "@xyo-network/node-memory": "^2.110.5",
20
- "@xyo-network/node-model": "^2.110.5",
21
- "@xyo-network/payload-model": "^2.110.5",
13
+ "@xylabs/assert": "^3.6.1",
14
+ "@xylabs/exists": "^3.6.1",
15
+ "@xylabs/hex": "^3.6.1",
16
+ "@xyo-network/module-events": "^2.110.6",
17
+ "@xyo-network/module-model": "^2.110.6",
18
+ "@xyo-network/module-resolver": "^2.110.6",
19
+ "@xyo-network/node-memory": "^2.110.6",
20
+ "@xyo-network/node-model": "^2.110.6",
21
+ "@xyo-network/payload-model": "^2.110.6",
22
22
  "async-mutex": "^0.5.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@xylabs/ts-scripts-yarn3": "^3.12.1",
26
- "@xylabs/tsconfig": "^3.12.1",
25
+ "@xylabs/ts-scripts-yarn3": "^3.12.2",
26
+ "@xylabs/tsconfig": "^3.12.2",
27
27
  "typescript": "^5.5.3"
28
28
  },
29
29
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -65,6 +65,6 @@
65
65
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
66
66
  },
67
67
  "sideEffects": false,
68
- "version": "2.110.5",
68
+ "version": "2.110.6",
69
69
  "type": "module"
70
70
  }
package/src/ViewNode.ts CHANGED
@@ -67,22 +67,6 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
67
67
  return this.config.source
68
68
  }
69
69
 
70
- async build() {
71
- return await this._buildMutex.runExclusive(async () => {
72
- if (!this._built) {
73
- const source = asNodeInstance(await super.resolve(this.source))
74
- if (source) {
75
- await Promise.all(
76
- this.ids.map(async (id) => {
77
- await MemoryNodeHelper.attachToExistingNode(source, id, this)
78
- }),
79
- )
80
- this._built = true
81
- }
82
- }
83
- })
84
- }
85
-
86
70
  /** @deprecated do not pass undefined. If trying to get all, pass '*' */
87
71
  override async resolve(): Promise<ModuleInstance[]>
88
72
  override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>
@@ -160,4 +144,20 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
160
144
  await this.build()
161
145
  return true
162
146
  }
147
+
148
+ private async build() {
149
+ return await this._buildMutex.runExclusive(async () => {
150
+ if (!this._built) {
151
+ const source = asNodeInstance(await super.resolve(this.source))
152
+ if (source) {
153
+ await Promise.all(
154
+ this.ids.map(async (id) => {
155
+ await MemoryNodeHelper.attachToExistingNode(source, id, this)
156
+ }),
157
+ )
158
+ this._built = true
159
+ }
160
+ }
161
+ })
162
+ }
163
163
  }