@xyo-network/node-view 2.110.19 → 2.111.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\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 static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -121,4 +121,4 @@ export {
121
121
  ViewNode,
122
122
  ViewNodeConfigSchema
123
123
  };
124
- //# sourceMappingURL=index.js.map
124
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\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 static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -121,4 +121,4 @@ export {
121
121
  ViewNode,
122
122
  ViewNodeConfigSchema
123
123
  };
124
- //# sourceMappingURL=index.js.map
124
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewNode.d.ts","sourceRoot":"","sources":["../../src/ViewNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EACL,eAAe,EAGf,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EAEf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAEL,sBAAsB,EAGtB,UAAU,EAEV,mBAAmB,EACnB,UAAU,EAEX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD,eAAO,MAAM,oBAAoB,gCAA0C,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAE9D,MAAM,MAAM,cAAc,GAAG,UAAU,CACrC;IACE,GAAG,EAAE,gBAAgB,EAAE,CAAA;IACvB,MAAM,EAAE,gBAAgB,CAAA;CACzB,EACD,oBAAoB,CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAA;AAExE,qBAAa,QAAQ,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,EAAE,UAAU,SAAS,mBAAmB,GAAG,mBAAmB,CACjI,SAAQ,UAAU,CAAC,OAAO,EAAE,UAAU,CACtC,YAAW,sBAAsB;IAEjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
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;IACjC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAiD;IACjG,gBAAyB,mBAAmB,EAAE,MAAM,CAAuB;IAC3E,gBAAyB,MAAM;;MAAmC;IAElE,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAA2C;IAEnE,IAAI,GAAG,aAEN;IAED,IAAa,OAAO,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,MAAM,WAET;IAGc,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5G,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IACxH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;cA4BxH,kBAAkB,CAAC,OAAO,EAAE,OAAO;cA8BnC,qBAAqB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;cAIlD,kBAAkB,CAAC,OAAO,EAAE,OAAO;cAMnC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAM3C,KAAK;CAepB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ViewNode.ts"],"sourcesContent":["export * from './ViewNode.ts'\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 static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
@@ -125,4 +125,4 @@ export {
125
125
  ViewNode,
126
126
  ViewNodeConfigSchema
127
127
  };
128
- //# sourceMappingURL=index.js.map
128
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter(query => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter(mod => attached.includes(mod.address))\n const existingModule = mods.find(mod => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}
package/package.json CHANGED
@@ -10,20 +10,20 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.6.6",
14
- "@xylabs/exists": "^3.6.6",
15
- "@xylabs/hex": "^3.6.6",
16
- "@xyo-network/module-events": "^2.110.19",
17
- "@xyo-network/module-model": "^2.110.19",
18
- "@xyo-network/module-resolver": "^2.110.19",
19
- "@xyo-network/node-memory": "^2.110.19",
20
- "@xyo-network/node-model": "^2.110.19",
21
- "@xyo-network/payload-model": "^2.110.19",
13
+ "@xylabs/assert": "^3.6.8",
14
+ "@xylabs/exists": "^3.6.8",
15
+ "@xylabs/hex": "^3.6.8",
16
+ "@xyo-network/module-events": "^2.111.1",
17
+ "@xyo-network/module-model": "^2.111.1",
18
+ "@xyo-network/module-resolver": "^2.111.1",
19
+ "@xyo-network/node-memory": "^2.111.1",
20
+ "@xyo-network/node-model": "^2.111.1",
21
+ "@xyo-network/payload-model": "^2.111.1",
22
22
  "async-mutex": "^0.5.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@xylabs/ts-scripts-yarn3": "^3.14.1",
26
- "@xylabs/tsconfig": "^3.14.1",
25
+ "@xylabs/ts-scripts-yarn3": "^3.15.8",
26
+ "@xylabs/tsconfig": "^3.15.8",
27
27
  "typescript": "^5.5.4"
28
28
  },
29
29
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "import": {
39
39
  "types": "./dist/browser/index.d.mts",
40
- "default": "./dist/browser/index.js"
40
+ "default": "./dist/browser/index.mjs"
41
41
  }
42
42
  },
43
43
  "node": {
@@ -47,14 +47,14 @@
47
47
  },
48
48
  "import": {
49
49
  "types": "./dist/node/index.d.mts",
50
- "default": "./dist/node/index.js"
50
+ "default": "./dist/node/index.mjs"
51
51
  }
52
52
  }
53
53
  },
54
54
  "./package.json": "./package.json"
55
55
  },
56
56
  "main": "dist/node/index.cjs",
57
- "module": "dist/node/index.js",
57
+ "module": "dist/node/index.mjs",
58
58
  "homepage": "https://xyo.network",
59
59
  "license": "LGPL-3.0-only",
60
60
  "publishConfig": {
@@ -65,6 +65,6 @@
65
65
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
66
66
  },
67
67
  "sideEffects": false,
68
- "version": "2.110.19",
68
+ "version": "2.111.1",
69
69
  "type": "module"
70
70
  }
package/src/ViewNode.ts CHANGED
@@ -43,8 +43,7 @@ export type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>
43
43
 
44
44
  export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>
45
45
  extends MemoryNode<TParams, TEventData>
46
- implements AttachableNodeInstance
47
- {
46
+ implements AttachableNodeInstance {
48
47
  static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]
49
48
  static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema
50
49
  static override readonly labels = { ...ModuleLimitationViewLabel }
@@ -60,7 +59,7 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
60
59
  override get queries(): Schema[] {
61
60
  const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])
62
61
  const queries: Schema[] = [...super.queries]
63
- return queries.filter((query) => !disallowedQueries.has(query))
62
+ return queries.filter(query => !disallowedQueries.has(query))
64
63
  }
65
64
 
66
65
  get source() {
@@ -85,14 +84,14 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
85
84
  }
86
85
  switch (typeof idOrFilter) {
87
86
  case 'string': {
88
- const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)
87
+ const mod = mods.find(mod => mod.modName === idOrFilter || mod.address === idOrFilter)
89
88
  return mod as unknown as T
90
89
  }
91
90
  case 'object': {
92
91
  if (isAddressModuleFilter(idOrFilter)) {
93
- return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)
92
+ return (await Promise.all(idOrFilter.address.map(async address => await this.resolve(address, options)))).filter(exists)
94
93
  } else if (isNameModuleFilter(idOrFilter)) {
95
- return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)
94
+ return (await Promise.all(idOrFilter.name.map(async name => await this.resolve(name, options)))).filter(exists)
96
95
  }
97
96
  return []
98
97
  }
@@ -101,8 +100,8 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
101
100
 
102
101
  protected override async attachUsingAddress(address: Address) {
103
102
  const attached = await this.attached()
104
- const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))
105
- const existingModule = mods.find((mod) => mod.address === address)
103
+ const mods = this.registeredModules().filter(mod => attached.includes(mod.address))
104
+ const existingModule = mods.find(mod => mod.address === address)
106
105
  if (existingModule) {
107
106
  this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)
108
107
  }
@@ -130,7 +129,7 @@ export class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventDat
130
129
  }
131
130
 
132
131
  protected override async attachedPublicModules(): Promise<ModuleInstance[]> {
133
- return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)
132
+ return (await this._limitedResolver.resolve('*')).filter(mod => mod.address !== this.address)
134
133
  }
135
134
 
136
135
  protected override async detachUsingAddress(address: Address) {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ViewNode.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Address } from '@xylabs/hex'\nimport { EventListener } from '@xyo-network/module-events'\nimport {\n AnyConfigSchema,\n isAddressModuleFilter,\n isNameModuleFilter,\n ModuleFilter,\n ModuleFilterOptions,\n ModuleIdentifier,\n ModuleInstance,\n ModuleLimitationViewLabel,\n} from '@xyo-network/module-model'\nimport { SimpleModuleResolver } from '@xyo-network/module-resolver'\nimport { MemoryNode, MemoryNodeHelper } from '@xyo-network/node-memory'\nimport {\n asNodeInstance,\n AttachableNodeInstance,\n isNodeModule,\n NodeAttachQuerySchema,\n NodeConfig,\n NodeDetachQuerySchema,\n NodeModuleEventData,\n NodeParams,\n NodeRegisteredQuerySchema,\n} from '@xyo-network/node-model'\nimport { Schema } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport const ViewNodeConfigSchema = 'network.xyo.node.view.config' as const\nexport type ViewNodeConfigSchema = typeof ViewNodeConfigSchema\n\nexport type ViewNodeConfig = NodeConfig<\n {\n ids: ModuleIdentifier[]\n source: ModuleIdentifier\n },\n ViewNodeConfigSchema\n>\n\nexport type ViewNodeParams = NodeParams<AnyConfigSchema<ViewNodeConfig>>\n\nexport class ViewNode<TParams extends ViewNodeParams = ViewNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n extends MemoryNode<TParams, TEventData>\n implements AttachableNodeInstance\n{\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ViewNodeConfigSchema]\n static override readonly defaultConfigSchema: Schema = ViewNodeConfigSchema\n static override readonly labels = { ...ModuleLimitationViewLabel }\n\n private _buildMutex = new Mutex()\n private _built = false\n private _limitedResolver = new SimpleModuleResolver({ root: this })\n\n get ids() {\n return this.config.ids\n }\n\n override get queries(): Schema[] {\n const disallowedQueries = new Set<Schema>([NodeAttachQuerySchema, NodeDetachQuerySchema, NodeRegisteredQuerySchema])\n const queries: Schema[] = [...super.queries]\n return queries.filter((query) => !disallowedQueries.has(query))\n }\n\n get source() {\n return this.config.source\n }\n\n /** @deprecated do not pass undefined. If trying to get all, pass '*' */\n override async resolve(): Promise<ModuleInstance[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(filter: ModuleFilter, options?: ModuleFilterOptions<T>): Promise<T[]>\n override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n override async resolve<T extends ModuleInstance = ModuleInstance>(\n idOrFilter: ModuleFilter<T> | ModuleIdentifier = '*',\n options: ModuleFilterOptions<T> = {},\n ): Promise<T | T[] | undefined> {\n if (!this._built) {\n await this.build()\n }\n const mods = await this._limitedResolver.resolve('*')\n if (idOrFilter === '*') {\n return mods as unknown as T[]\n }\n switch (typeof idOrFilter) {\n case 'string': {\n const mod = mods.find((mod) => mod.modName === idOrFilter || mod.address === idOrFilter)\n return mod as unknown as T\n }\n case 'object': {\n if (isAddressModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.address.map(async (address) => await this.resolve(address, options)))).filter(exists)\n } else if (isNameModuleFilter(idOrFilter)) {\n return (await Promise.all(idOrFilter.name.map(async (name) => await this.resolve(name, options)))).filter(exists)\n }\n return []\n }\n }\n }\n\n protected override async attachUsingAddress(address: Address) {\n const attached = await this.attached()\n const mods = this.registeredModules().filter((mod) => attached.includes(mod.address))\n const existingModule = mods.find((mod) => mod.address === address)\n if (existingModule) {\n this.logger.warn(`ViewNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n }\n const mod = assertEx(this.registeredModuleMap[address], () => `Module [${address}] not found in registered mods`)\n\n mod.addParent(this)\n\n const args = { mod, name: mod.modName }\n await this.emit('moduleAttached', args)\n\n this._limitedResolver.add(mod)\n\n if (isNodeModule(mod)) {\n const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n await this.emit('moduleAttached', args)\n\n const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n await this.emit('moduleDetached', args)\n\n mod.on('moduleAttached', attachedListener)\n mod.on('moduleDetached', detachedListener)\n }\n\n return address\n }\n\n protected override async attachedPublicModules(): Promise<ModuleInstance[]> {\n return (await this._limitedResolver.resolve('*')).filter((mod) => mod.address !== this.address)\n }\n\n protected override async detachUsingAddress(address: Address) {\n const mod = assertEx(await this.downResolver.resolve(address), () => `Module [${address}] not found in down resolver`)\n this._limitedResolver.remove(mod.address)\n return address\n }\n\n protected override async startHandler(): Promise<boolean> {\n await super.startHandler()\n await this.build()\n return true\n }\n\n private async build() {\n return await this._buildMutex.runExclusive(async () => {\n if (!this._built) {\n const source = asNodeInstance(await super.resolve(this.source))\n if (source) {\n await Promise.all(\n this.ids.map(async (id) => {\n await MemoryNodeHelper.attachToExistingNode(source, id, this)\n }),\n )\n this._built = true\n }\n }\n })\n }\n}\n"],"mappings":"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","names":["assertEx","exists","isAddressModuleFilter","isNameModuleFilter","ModuleLimitationViewLabel","SimpleModuleResolver","MemoryNode","MemoryNodeHelper","asNodeInstance","isNodeModule","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","Mutex","ViewNodeConfigSchema","ViewNode","MemoryNode","_buildMutex","Mutex","_built","_limitedResolver","SimpleModuleResolver","root","ids","config","queries","disallowedQueries","Set","NodeAttachQuerySchema","NodeDetachQuerySchema","NodeRegisteredQuerySchema","filter","query","has","source","resolve","idOrFilter","options","build","mods","mod","find","modName","address","isAddressModuleFilter","Promise","all","map","exists","isNameModuleFilter","name","attachUsingAddress","attached","registeredModules","includes","existingModule","logger","warn","assertEx","registeredModuleMap","addParent","args","emit","add","isNodeModule","attachedListener","detachedListener","on","attachedPublicModules","detachUsingAddress","downResolver","remove","startHandler","runExclusive","asNodeInstance","id","MemoryNodeHelper","attachToExistingNode","configSchemas","defaultConfigSchema","labels","ModuleLimitationViewLabel"]}