@xyo-network/node-view 2.107.1 → 2.107.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var l=(a,e)=>c(a,"name",{value:e,configurable:!0});var _=(a,e)=>{for(var s in e)c(a,s,{get:e[s],enumerable:!0})},S=(a,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of b(e))!N.call(a,t)&&t!==s&&c(a,t,{get:()=>e[t],enumerable:!(r=x(e,t))||r.enumerable});return a};var R=a=>S(c({},"__esModule",{value:!0}),a);var A={};_(A,{ViewNode:()=>w,ViewNodeConfigSchema:()=>f});module.exports=R(A);var p=require("@xylabs/assert"),h=require("@xylabs/exists"),d=require("@xyo-network/module-model"),g=require("@xyo-network/module-resolver"),u=require("@xyo-network/node-memory"),o=require("@xyo-network/node-model"),y=require("async-mutex");var f="network.xyo.node.view.config",w=class extends u.MemoryNode{static{l(this,"ViewNode")}static configSchemas=[...super.configSchemas,f];static defaultConfigSchema=f;static labels={...d.ModuleLimitationViewLabel};_buildMutex=new y.Mutex;_built=!1;_limitedResolver=new g.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([o.NodeAttachQuerySchema,o.NodeDetachQuerySchema,o.NodeRegisteredQuerySchema]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,o.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await u.NodeHelper.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(i=>i.modName===e||i.address===e);case"object":return(0,d.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async t=>await this.resolve(t,s)))).filter(h.exists):(0,d.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async t=>await this.resolve(t,s)))).filter(h.exists):[]}}async attachUsingAddress(e){let s=await this.attached(),t=this.registeredModules().filter(n=>s.includes(n.address)).find(n=>n.address===e);(0,p.assertEx)(!t,()=>`Module [${t?.modName??t?.address}] already attached at address [${e}]`);let i=this.registeredModuleMap[e];if(!i)return;i.addParent(this);let v={module:i,name:i.modName};if(await this.emit("moduleAttached",v),this._limitedResolver.add(i),(0,o.isNodeModule)(i)){let n=l(async m=>await this.emit("moduleAttached",m),"attachedListener"),M=l(async m=>await this.emit("moduleDetached",m),"detachedListener");i.on("moduleAttached",n),i.on("moduleDetached",M)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};
1
+ "use strict";var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var c=(i,e)=>l(i,"name",{value:e,configurable:!0});var _=(i,e)=>{for(var t in e)l(i,t,{get:e[t],enumerable:!0})},S=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of b(e))!N.call(i,s)&&s!==t&&l(i,s,{get:()=>e[s],enumerable:!(r=x(e,s))||r.enumerable});return i};var R=i=>S(l({},"__esModule",{value:!0}),i);var A={};_(A,{ViewNode:()=>g,ViewNodeConfigSchema:()=>w});module.exports=R(A);var u=require("@xylabs/assert"),f=require("@xylabs/exists"),d=require("@xyo-network/module-model"),p=require("@xyo-network/module-resolver"),m=require("@xyo-network/node-memory"),o=require("@xyo-network/node-model"),y=require("async-mutex");var w="network.xyo.node.view.config",g=class extends m.MemoryNode{static{c(this,"ViewNode")}static configSchemas=[...super.configSchemas,w];static defaultConfigSchema=w;static labels={...d.ModuleLimitationViewLabel};_buildMutex=new y.Mutex;_built=!1;_limitedResolver=new p.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([o.NodeAttachQuerySchema,o.NodeDetachQuerySchema,o.NodeRegisteredQuerySchema]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,o.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await m.MemoryNodeHelper.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(a=>a.modName===e||a.address===e);case"object":return(0,d.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(f.exists):(0,d.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(f.exists):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(n=>t.includes(n.address)).find(n=>n.address===e);(0,u.assertEx)(!s,()=>`Module [${s?.modName??s?.address}] already attached at address [${e}]`);let a=(0,u.assertEx)(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);a.addParent(this);let v={module:a,name:a.modName};if(await this.emit("moduleAttached",v),this._limitedResolver.add(a),(0,o.isNodeModule)(a)){let n=c(async h=>await this.emit("moduleAttached",h),"attachedListener"),M=c(async h=>await this.emit("moduleDetached",h),"detachedListener");a.on("moduleAttached",n),a.on("moduleDetached",M)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let t=(0,u.assertEx)(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(t.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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 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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var r=(n,e)=>f(n,"name",{value:e,configurable:!0});import{assertEx as w}from"@xylabs/assert";import{exists as c}from"@xylabs/exists";import{isAddressModuleFilter as p,isNameModuleFilter as g,ModuleLimitationViewLabel as y}from"@xyo-network/module-model";import{SimpleModuleResolver as v}from"@xyo-network/module-resolver";import{MemoryNode as M,NodeHelper as x}from"@xyo-network/node-memory";import{asNodeInstance as b,isNodeModule as N,NodeAttachQuerySchema as _,NodeDetachQuerySchema as S,NodeRegisteredQuerySchema as R}from"@xyo-network/node-model";import{Mutex as A}from"async-mutex";var l="network.xyo.node.view.config",u=class extends M{static{r(this,"ViewNode")}static configSchemas=[...super.configSchemas,l];static defaultConfigSchema=l;static labels={...y};_buildMutex=new A;_built=!1;_limitedResolver=new v({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([_,S,R]);return[...super.queries].filter(a=>!e.has(a))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=b(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await x.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let a=await this._limitedResolver.resolve("*");if(e==="*")return a;switch(typeof e){case"string":return a.find(t=>t.modName===e||t.address===e);case"object":return p(e)?(await Promise.all(e.address.map(async i=>await this.resolve(i,s)))).filter(c):g(e)?(await Promise.all(e.name.map(async i=>await this.resolve(i,s)))).filter(c):[]}}async attachUsingAddress(e){let s=await this.attached(),i=this.registeredModules().filter(o=>s.includes(o.address)).find(o=>o.address===e);w(!i,()=>`Module [${i?.modName??i?.address}] already attached at address [${e}]`);let t=this.registeredModuleMap[e];if(!t)return;t.addParent(this);let m={module:t,name:t.modName};if(await this.emit("moduleAttached",m),this._limitedResolver.add(t),N(t)){let o=r(async d=>await this.emit("moduleAttached",d),"attachedListener"),h=r(async d=>await this.emit("moduleDetached",d),"detachedListener");t.on("moduleAttached",o),t.on("moduleDetached",h)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};export{u as ViewNode,l as ViewNodeConfigSchema};
1
+ var w=Object.defineProperty;var r=(l,e)=>w(l,"name",{value:e,configurable:!0});import{assertEx as n}from"@xylabs/assert";import{exists as c}from"@xylabs/exists";import{isAddressModuleFilter as g,isNameModuleFilter as p,ModuleLimitationViewLabel as y}from"@xyo-network/module-model";import{SimpleModuleResolver as v}from"@xyo-network/module-resolver";import{MemoryNode as M,MemoryNodeHelper as x}from"@xyo-network/node-memory";import{asNodeInstance as b,isNodeModule as N,NodeAttachQuerySchema as _,NodeDetachQuerySchema as S,NodeRegisteredQuerySchema as R}from"@xyo-network/node-model";import{Mutex as A}from"async-mutex";var u="network.xyo.node.view.config",m=class extends M{static{r(this,"ViewNode")}static configSchemas=[...super.configSchemas,u];static defaultConfigSchema=u;static labels={...y};_buildMutex=new A;_built=!1;_limitedResolver=new v({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([_,S,R]);return[...super.queries].filter(a=>!e.has(a))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=b(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await x.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let a=await this._limitedResolver.resolve("*");if(e==="*")return a;switch(typeof e){case"string":return a.find(t=>t.modName===e||t.address===e);case"object":return g(e)?(await Promise.all(e.address.map(async i=>await this.resolve(i,s)))).filter(c):p(e)?(await Promise.all(e.name.map(async i=>await this.resolve(i,s)))).filter(c):[]}}async attachUsingAddress(e){let s=await this.attached(),i=this.registeredModules().filter(o=>s.includes(o.address)).find(o=>o.address===e);n(!i,()=>`Module [${i?.modName??i?.address}] already attached at address [${e}]`);let t=n(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);t.addParent(this);let h={module:t,name:t.modName};if(await this.emit("moduleAttached",h),this._limitedResolver.add(t),N(t)){let o=r(async d=>await this.emit("moduleAttached",d),"attachedListener"),f=r(async d=>await this.emit("moduleDetached",d),"detachedListener");t.on("moduleAttached",o),t.on("moduleDetached",f)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let s=n(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(s.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};export{m as ViewNode,u as ViewNodeConfigSchema};
2
2
  //# sourceMappingURL=index.js.map
@@ -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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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","NodeHelper","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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","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 async build() {\n return await this._buildMutex.runExclusive(async () => {\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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var l=(a,e)=>c(a,"name",{value:e,configurable:!0});var _=(a,e)=>{for(var s in e)c(a,s,{get:e[s],enumerable:!0})},S=(a,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of b(e))!N.call(a,t)&&t!==s&&c(a,t,{get:()=>e[t],enumerable:!(r=x(e,t))||r.enumerable});return a};var R=a=>S(c({},"__esModule",{value:!0}),a);var A={};_(A,{ViewNode:()=>w,ViewNodeConfigSchema:()=>f});module.exports=R(A);var p=require("@xylabs/assert"),h=require("@xylabs/exists"),d=require("@xyo-network/module-model"),g=require("@xyo-network/module-resolver"),u=require("@xyo-network/node-memory"),o=require("@xyo-network/node-model"),y=require("async-mutex");var f="network.xyo.node.view.config",w=class extends u.MemoryNode{static{l(this,"ViewNode")}static configSchemas=[...super.configSchemas,f];static defaultConfigSchema=f;static labels={...d.ModuleLimitationViewLabel};_buildMutex=new y.Mutex;_built=!1;_limitedResolver=new g.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([o.NodeAttachQuerySchema,o.NodeDetachQuerySchema,o.NodeRegisteredQuerySchema]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,o.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await u.NodeHelper.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(i=>i.modName===e||i.address===e);case"object":return(0,d.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async t=>await this.resolve(t,s)))).filter(h.exists):(0,d.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async t=>await this.resolve(t,s)))).filter(h.exists):[]}}async attachUsingAddress(e){let s=await this.attached(),t=this.registeredModules().filter(n=>s.includes(n.address)).find(n=>n.address===e);(0,p.assertEx)(!t,()=>`Module [${t?.modName??t?.address}] already attached at address [${e}]`);let i=this.registeredModuleMap[e];if(!i)return;i.addParent(this);let v={module:i,name:i.modName};if(await this.emit("moduleAttached",v),this._limitedResolver.add(i),(0,o.isNodeModule)(i)){let n=l(async m=>await this.emit("moduleAttached",m),"attachedListener"),M=l(async m=>await this.emit("moduleDetached",m),"detachedListener");i.on("moduleAttached",n),i.on("moduleDetached",M)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};
1
+ "use strict";var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var c=(i,e)=>l(i,"name",{value:e,configurable:!0});var _=(i,e)=>{for(var t in e)l(i,t,{get:e[t],enumerable:!0})},S=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of b(e))!N.call(i,s)&&s!==t&&l(i,s,{get:()=>e[s],enumerable:!(r=x(e,s))||r.enumerable});return i};var R=i=>S(l({},"__esModule",{value:!0}),i);var A={};_(A,{ViewNode:()=>g,ViewNodeConfigSchema:()=>w});module.exports=R(A);var u=require("@xylabs/assert"),f=require("@xylabs/exists"),d=require("@xyo-network/module-model"),p=require("@xyo-network/module-resolver"),m=require("@xyo-network/node-memory"),o=require("@xyo-network/node-model"),y=require("async-mutex");var w="network.xyo.node.view.config",g=class extends m.MemoryNode{static{c(this,"ViewNode")}static configSchemas=[...super.configSchemas,w];static defaultConfigSchema=w;static labels={...d.ModuleLimitationViewLabel};_buildMutex=new y.Mutex;_built=!1;_limitedResolver=new p.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([o.NodeAttachQuerySchema,o.NodeDetachQuerySchema,o.NodeRegisteredQuerySchema]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,o.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await m.MemoryNodeHelper.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(a=>a.modName===e||a.address===e);case"object":return(0,d.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(f.exists):(0,d.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(f.exists):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(n=>t.includes(n.address)).find(n=>n.address===e);(0,u.assertEx)(!s,()=>`Module [${s?.modName??s?.address}] already attached at address [${e}]`);let a=(0,u.assertEx)(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);a.addParent(this);let v={module:a,name:a.modName};if(await this.emit("moduleAttached",v),this._limitedResolver.add(a),(0,o.isNodeModule)(a)){let n=c(async h=>await this.emit("moduleAttached",h),"attachedListener"),M=c(async h=>await this.emit("moduleDetached",h),"detachedListener");a.on("moduleAttached",n),a.on("moduleDetached",M)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let t=(0,u.assertEx)(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(t.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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 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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var r=(n,e)=>f(n,"name",{value:e,configurable:!0});import{assertEx as w}from"@xylabs/assert";import{exists as c}from"@xylabs/exists";import{isAddressModuleFilter as p,isNameModuleFilter as g,ModuleLimitationViewLabel as y}from"@xyo-network/module-model";import{SimpleModuleResolver as v}from"@xyo-network/module-resolver";import{MemoryNode as M,NodeHelper as x}from"@xyo-network/node-memory";import{asNodeInstance as b,isNodeModule as N,NodeAttachQuerySchema as _,NodeDetachQuerySchema as S,NodeRegisteredQuerySchema as R}from"@xyo-network/node-model";import{Mutex as A}from"async-mutex";var l="network.xyo.node.view.config",u=class extends M{static{r(this,"ViewNode")}static configSchemas=[...super.configSchemas,l];static defaultConfigSchema=l;static labels={...y};_buildMutex=new A;_built=!1;_limitedResolver=new v({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([_,S,R]);return[...super.queries].filter(a=>!e.has(a))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=b(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await x.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let a=await this._limitedResolver.resolve("*");if(e==="*")return a;switch(typeof e){case"string":return a.find(t=>t.modName===e||t.address===e);case"object":return p(e)?(await Promise.all(e.address.map(async i=>await this.resolve(i,s)))).filter(c):g(e)?(await Promise.all(e.name.map(async i=>await this.resolve(i,s)))).filter(c):[]}}async attachUsingAddress(e){let s=await this.attached(),i=this.registeredModules().filter(o=>s.includes(o.address)).find(o=>o.address===e);w(!i,()=>`Module [${i?.modName??i?.address}] already attached at address [${e}]`);let t=this.registeredModuleMap[e];if(!t)return;t.addParent(this);let m={module:t,name:t.modName};if(await this.emit("moduleAttached",m),this._limitedResolver.add(t),N(t)){let o=r(async d=>await this.emit("moduleAttached",d),"attachedListener"),h=r(async d=>await this.emit("moduleDetached",d),"detachedListener");t.on("moduleAttached",o),t.on("moduleDetached",h)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};export{u as ViewNode,l as ViewNodeConfigSchema};
1
+ var w=Object.defineProperty;var r=(l,e)=>w(l,"name",{value:e,configurable:!0});import{assertEx as n}from"@xylabs/assert";import{exists as c}from"@xylabs/exists";import{isAddressModuleFilter as g,isNameModuleFilter as p,ModuleLimitationViewLabel as y}from"@xyo-network/module-model";import{SimpleModuleResolver as v}from"@xyo-network/module-resolver";import{MemoryNode as M,MemoryNodeHelper as x}from"@xyo-network/node-memory";import{asNodeInstance as b,isNodeModule as N,NodeAttachQuerySchema as _,NodeDetachQuerySchema as S,NodeRegisteredQuerySchema as R}from"@xyo-network/node-model";import{Mutex as A}from"async-mutex";var u="network.xyo.node.view.config",m=class extends M{static{r(this,"ViewNode")}static configSchemas=[...super.configSchemas,u];static defaultConfigSchema=u;static labels={...y};_buildMutex=new A;_built=!1;_limitedResolver=new v({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([_,S,R]);return[...super.queries].filter(a=>!e.has(a))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=b(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async s=>{await x.attachToExistingNode(e,s,this)})),this._built=!0)})}async resolve(e="*",s={}){this._built||await this.build();let a=await this._limitedResolver.resolve("*");if(e==="*")return a;switch(typeof e){case"string":return a.find(t=>t.modName===e||t.address===e);case"object":return g(e)?(await Promise.all(e.address.map(async i=>await this.resolve(i,s)))).filter(c):p(e)?(await Promise.all(e.name.map(async i=>await this.resolve(i,s)))).filter(c):[]}}async attachUsingAddress(e){let s=await this.attached(),i=this.registeredModules().filter(o=>s.includes(o.address)).find(o=>o.address===e);n(!i,()=>`Module [${i?.modName??i?.address}] already attached at address [${e}]`);let t=n(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);t.addParent(this);let h={module:t,name:t.modName};if(await this.emit("moduleAttached",h),this._limitedResolver.add(t),N(t)){let o=r(async d=>await this.emit("moduleAttached",d),"attachedListener"),f=r(async d=>await this.emit("moduleDetached",d),"detachedListener");t.on("moduleAttached",o),t.on("moduleDetached",f)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let s=n(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(s.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};export{m as ViewNode,u as ViewNodeConfigSchema};
2
2
  //# sourceMappingURL=index.js.map
@@ -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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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","NodeHelper","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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","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 async build() {\n return await this._buildMutex.runExclusive(async () => {\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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler"]}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -27,9 +27,9 @@ export declare class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, T
27
27
  resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>;
28
28
  resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>;
29
29
  resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>;
30
- protected attachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
30
+ protected attachUsingAddress(address: Address): Promise<Lowercase<string>>;
31
31
  protected attachedPublicModules(): Promise<ModuleInstance[]>;
32
- protected detachUsingAddress(address: Address): Promise<Lowercase<string> | undefined>;
32
+ protected detachUsingAddress(address: Address): Promise<Lowercase<string>>;
33
33
  protected startHandler(): Promise<boolean>;
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,EAAc,MAAM,0BAA0B,CAAA;AACjE,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;IAeI,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;cAgCnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAQnC,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;IAEK,KAAK;IAeI,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;cA4BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAK1D"}
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var q=Reflect.get;var L=(a,e,t)=>e in a?l(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var u=(a,e)=>l(a,"name",{value:e,configurable:!0});var Q=(a,e)=>{for(var t in e)l(a,t,{get:e[t],enumerable:!0})},_=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!P.call(a,s)&&s!==t&&l(a,s,{get:()=>e[s],enumerable:!(o=R(e,s))||o.enumerable});return a};var D=a=>_(l({},"__esModule",{value:!0}),a);var m=(a,e,t)=>L(a,typeof e!="symbol"?e+"":e,t);var v=(a,e,t)=>q(N(a),t,e);var E={};Q(E,{ViewNode:()=>y,ViewNodeConfigSchema:()=>p});module.exports=D(E);var g=require("@xylabs/assert"),w=require("@xylabs/exists"),c=require("@xyo-network/module-model"),b=require("@xyo-network/module-resolver"),h=require("@xyo-network/node-memory"),r=require("@xyo-network/node-model"),M=require("async-mutex");var p="network.xyo.node.view.config",d=class d extends h.MemoryNode{_buildMutex=new M.Mutex;_built=!1;_limitedResolver=new b.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([r.NodeAttachQuerySchema,r.NodeDetachQuerySchema,r.NodeRegisteredQuerySchema]);return[...super.queries].filter(o=>!e.has(o))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,r.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await h.NodeHelper.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let o=await this._limitedResolver.resolve("*");if(e==="*")return o;switch(typeof e){case"string":return o.find(i=>i.modName===e||i.address===e);case"object":return(0,c.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(w.exists):(0,c.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(w.exists):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(n=>t.includes(n.address)).find(n=>n.address===e);(0,g.assertEx)(!s,()=>`Module [${(s==null?void 0:s.modName)??(s==null?void 0:s.address)}] already attached at address [${e}]`);let i=this.registeredModuleMap[e];if(!i)return;i.addParent(this);let x={module:i,name:i.modName};if(await this.emit("moduleAttached",x),this._limitedResolver.add(i),(0,r.isNodeModule)(i)){let n=u(async f=>await this.emit("moduleAttached",f),"attachedListener"),S=u(async f=>await this.emit("moduleDetached",f),"detachedListener");i.on("moduleAttached",n),i.on("moduleDetached",S)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};u(d,"ViewNode"),m(d,"configSchemas",[...v(d,d,"configSchemas"),p]),m(d,"defaultConfigSchema",p),m(d,"labels",{...c.ModuleLimitationViewLabel});var y=d;0&&(module.exports={ViewNode,ViewNodeConfigSchema});
1
+ "use strict";var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var q=Reflect.get;var L=(a,e,t)=>e in a?l(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var u=(a,e)=>l(a,"name",{value:e,configurable:!0});var Q=(a,e)=>{for(var t in e)l(a,t,{get:e[t],enumerable:!0})},_=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of A(e))!P.call(a,s)&&s!==t&&l(a,s,{get:()=>e[s],enumerable:!(r=R(e,s))||r.enumerable});return a};var $=a=>_(l({},"__esModule",{value:!0}),a);var m=(a,e,t)=>L(a,typeof e!="symbol"?e+"":e,t);var g=(a,e,t)=>q(N(a),t,e);var D={};Q(D,{ViewNode:()=>v,ViewNodeConfigSchema:()=>y});module.exports=$(D);var h=require("@xylabs/assert"),p=require("@xylabs/exists"),n=require("@xyo-network/module-model"),M=require("@xyo-network/module-resolver"),f=require("@xyo-network/node-memory"),o=require("@xyo-network/node-model"),b=require("async-mutex");var y="network.xyo.node.view.config",d=class d extends f.MemoryNode{_buildMutex=new b.Mutex;_built=!1;_limitedResolver=new M.SimpleModuleResolver({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([o.NodeAttachQuerySchema,o.NodeDetachQuerySchema,o.NodeRegisteredQuerySchema]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=(0,o.asNodeInstance)(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await f.MemoryNodeHelper.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(i=>i.modName===e||i.address===e);case"object":return(0,n.isAddressModuleFilter)(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(p.exists):(0,n.isNameModuleFilter)(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(p.exists):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(c=>t.includes(c.address)).find(c=>c.address===e);(0,h.assertEx)(!s,()=>`Module [${(s==null?void 0:s.modName)??(s==null?void 0:s.address)}] already attached at address [${e}]`);let i=(0,h.assertEx)(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);i.addParent(this);let x={module:i,name:i.modName};if(await this.emit("moduleAttached",x),this._limitedResolver.add(i),(0,o.isNodeModule)(i)){let c=u(async w=>await this.emit("moduleAttached",w),"attachedListener"),S=u(async w=>await this.emit("moduleDetached",w),"detachedListener");i.on("moduleAttached",c),i.on("moduleDetached",S)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let t=(0,h.assertEx)(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(t.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};u(d,"ViewNode"),m(d,"configSchemas",[...g(d,d,"configSchemas"),y]),m(d,"defaultConfigSchema",y),m(d,"labels",{...n.ModuleLimitationViewLabel});var v=d;0&&(module.exports={ViewNode,ViewNodeConfigSchema});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","__publicField","configSchemas","__superGet","_ViewNode","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode'\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 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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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":["src_exports","__export","ViewNode","ViewNodeConfigSchema","__toCommonJS","import_assert","import_exists","import_module_model","import_module_resolver","import_node_memory","import_node_model","import_async_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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","__publicField","configSchemas","__superGet","_ViewNode","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
@@ -1,2 +1,2 @@
1
- var u=Object.defineProperty;var v=Object.getPrototypeOf;var g=Reflect.get;var b=(i,e,t)=>e in i?u(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var c=(i,e)=>u(i,"name",{value:e,configurable:!0});var n=(i,e,t)=>b(i,typeof e!="symbol"?e+"":e,t);var m=(i,e,t)=>g(v(i),t,e);import{assertEx as M}from"@xylabs/assert";import{exists as h}from"@xylabs/exists";import{isAddressModuleFilter as x,isNameModuleFilter as S,ModuleLimitationViewLabel as R}from"@xyo-network/module-model";import{SimpleModuleResolver as A}from"@xyo-network/module-resolver";import{MemoryNode as N,NodeHelper as P}from"@xyo-network/node-memory";import{asNodeInstance as q,isNodeModule as L,NodeAttachQuerySchema as Q,NodeDetachQuerySchema as _,NodeRegisteredQuerySchema as D}from"@xyo-network/node-model";import{Mutex as E}from"async-mutex";var f="network.xyo.node.view.config",r=class r extends N{_buildMutex=new E;_built=!1;_limitedResolver=new A({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([Q,_,D]);return[...super.queries].filter(o=>!e.has(o))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=q(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await P.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let o=await this._limitedResolver.resolve("*");if(e==="*")return o;switch(typeof e){case"string":return o.find(a=>a.modName===e||a.address===e);case"object":return x(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(h):S(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(h):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(d=>t.includes(d.address)).find(d=>d.address===e);M(!s,()=>`Module [${(s==null?void 0:s.modName)??(s==null?void 0:s.address)}] already attached at address [${e}]`);let a=this.registeredModuleMap[e];if(!a)return;a.addParent(this);let p={module:a,name:a.modName};if(await this.emit("moduleAttached",p),this._limitedResolver.add(a),L(a)){let d=c(async l=>await this.emit("moduleAttached",l),"attachedListener"),y=c(async l=>await this.emit("moduleDetached",l),"detachedListener");a.on("moduleAttached",d),a.on("moduleDetached",y)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){if(await this.downResolver.resolve(e))return this._limitedResolver.remove(e),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};c(r,"ViewNode"),n(r,"configSchemas",[...m(r,r,"configSchemas"),f]),n(r,"defaultConfigSchema",f),n(r,"labels",{...R});var w=r;export{w as ViewNode,f as ViewNodeConfigSchema};
1
+ var m=Object.defineProperty;var g=Object.getPrototypeOf;var M=Reflect.get;var b=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e)=>m(i,"name",{value:e,configurable:!0});var c=(i,e,t)=>b(i,typeof e!="symbol"?e+"":e,t);var h=(i,e,t)=>M(g(i),t,e);import{assertEx as u}from"@xylabs/assert";import{exists as f}from"@xylabs/exists";import{isAddressModuleFilter as x,isNameModuleFilter as S,ModuleLimitationViewLabel as R}from"@xyo-network/module-model";import{SimpleModuleResolver as A}from"@xyo-network/module-resolver";import{MemoryNode as N,MemoryNodeHelper as P}from"@xyo-network/node-memory";import{asNodeInstance as q,isNodeModule as L,NodeAttachQuerySchema as Q,NodeDetachQuerySchema as _,NodeRegisteredQuerySchema as $}from"@xyo-network/node-model";import{Mutex as D}from"async-mutex";var w="network.xyo.node.view.config",o=class o extends N{_buildMutex=new D;_built=!1;_limitedResolver=new A({root:this});get ids(){return this.config.ids}get queries(){let e=new Set([Q,_,$]);return[...super.queries].filter(r=>!e.has(r))}get source(){return this.config.source}async build(){return await this._buildMutex.runExclusive(async()=>{let e=q(await super.resolve(this.source));e&&(await Promise.all(this.ids.map(async t=>{await P.attachToExistingNode(e,t,this)})),this._built=!0)})}async resolve(e="*",t={}){this._built||await this.build();let r=await this._limitedResolver.resolve("*");if(e==="*")return r;switch(typeof e){case"string":return r.find(a=>a.modName===e||a.address===e);case"object":return x(e)?(await Promise.all(e.address.map(async s=>await this.resolve(s,t)))).filter(f):S(e)?(await Promise.all(e.name.map(async s=>await this.resolve(s,t)))).filter(f):[]}}async attachUsingAddress(e){let t=await this.attached(),s=this.registeredModules().filter(d=>t.includes(d.address)).find(d=>d.address===e);u(!s,()=>`Module [${(s==null?void 0:s.modName)??(s==null?void 0:s.address)}] already attached at address [${e}]`);let a=u(this.registeredModuleMap[e],()=>`Module [${e}] not found in registered modules`);a.addParent(this);let y={module:a,name:a.modName};if(await this.emit("moduleAttached",y),this._limitedResolver.add(a),L(a)){let d=n(async l=>await this.emit("moduleAttached",l),"attachedListener"),v=n(async l=>await this.emit("moduleDetached",l),"detachedListener");a.on("moduleAttached",d),a.on("moduleDetached",v)}return e}async attachedPublicModules(){return(await this._limitedResolver.resolve("*")).filter(e=>e.address!==this.address)}async detachUsingAddress(e){let t=u(await this.downResolver.resolve(e),()=>`Module [${e}] not found in down resolver`);return this._limitedResolver.remove(t.address),e}async startHandler(){return await super.startHandler(),await this.build(),!0}};n(o,"ViewNode"),c(o,"configSchemas",[...h(o,o,"configSchemas"),w]),c(o,"defaultConfigSchema",w),c(o,"labels",{...R});var p=o;export{p as ViewNode,w as ViewNodeConfigSchema};
2
2
  //# sourceMappingURL=index.js.map
@@ -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, NodeHelper } 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 const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await NodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = this.registeredModuleMap[address]\n\n if (!module) {\n return\n }\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = await this.downResolver.resolve(address)\n if (module) {\n this._limitedResolver.remove(address)\n return address\n }\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","NodeHelper","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","NodeHelper","attachToExistingNode","idOrFilter","options","mods","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","__publicField","configSchemas","__superGet","_ViewNode","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 async build() {\n return await this._buildMutex.runExclusive(async () => {\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 /** @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 assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)\n\n module.addParent(this)\n\n const args = { module, name: module.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(module)\n\n if (isNodeModule(module)) {\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 module.on('moduleAttached', attachedListener)\n module.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((module) => module.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(module.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","find","mod","modName","address","isAddressModuleFilter","exists","isNameModuleFilter","name","attachUsingAddress","attached","existingModule","registeredModules","includes","assertEx","module","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","__name","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","__publicField","configSchemas","__superGet","_ViewNode","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
package/package.json CHANGED
@@ -13,12 +13,12 @@
13
13
  "@xylabs/assert": "^3.5.1",
14
14
  "@xylabs/exists": "^3.5.1",
15
15
  "@xylabs/hex": "^3.5.1",
16
- "@xyo-network/module-events": "~2.107.1",
17
- "@xyo-network/module-model": "~2.107.1",
18
- "@xyo-network/module-resolver": "~2.107.1",
19
- "@xyo-network/node-memory": "~2.107.1",
20
- "@xyo-network/node-model": "~2.107.1",
21
- "@xyo-network/payload-model": "~2.107.1",
16
+ "@xyo-network/module-events": "~2.107.3",
17
+ "@xyo-network/module-model": "~2.107.3",
18
+ "@xyo-network/module-resolver": "~2.107.3",
19
+ "@xyo-network/node-memory": "~2.107.3",
20
+ "@xyo-network/node-model": "~2.107.3",
21
+ "@xyo-network/payload-model": "~2.107.3",
22
22
  "async-mutex": "^0.5.0"
23
23
  },
24
24
  "devDependencies": {
@@ -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.107.1",
68
+ "version": "2.107.3",
69
69
  "type": "module"
70
70
  }
package/src/ViewNode.ts CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  ModuleLimitationViewLabel,
14
14
  } from '@xyo-network/module-model'
15
15
  import { SimpleModuleResolver } from '@xyo-network/module-resolver'
16
- import { MemoryNode, NodeHelper } from '@xyo-network/node-memory'
16
+ import { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'
17
17
  import {
18
18
  asNodeInstance,
19
19
  AttachableNodeInstance,
@@ -73,7 +73,7 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
73
73
  if (source) {
74
74
  await Promise.all(
75
75
  this.ids.map(async (id) => {
76
- await NodeHelper.attachToExistingNode(source, id, this)
76
+ await MemoryNodeHelper.attachToExistingNode(source, id, this)
77
77
  }),
78
78
  )
79
79
  this._built = true
@@ -118,11 +118,7 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
118
118
  const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))
119
119
  const existingModule = mods.find((mod) => mod.address === address)
120
120
  assertEx(!existingModule, () => `Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)
121
- const module = this.registeredModuleMap[address]
122
-
123
- if (!module) {
124
- return
125
- }
121
+ const module = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered modules`)
126
122
 
127
123
  module.addParent(this)
128
124
 
@@ -150,11 +146,9 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
150
146
  }
151
147
 
152
148
  protected override async detachUsingAddress(address: Address) {
153
- const module = await this.downResolver.resolve(address)
154
- if (module) {
155
- this._limitedResolver.remove(address)
156
- return address
157
- }
149
+ const module = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)
150
+ this._limitedResolver.remove(module.address)
151
+ return address
158
152
  }
159
153
 
160
154
  protected override async startHandler(): Promise<boolean> {