@resolveio/server-lib 20.11.6 → 20.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAgD;AAChD,mCAAoC;AA0BpC,IAAM,iBAAiB,GAAG,IAAI,+BAAiB,EAAqB,CAAC;AAErE,SAAsB,sBAAsB,CAAI,EAAoB;;;;;;;oBAC7D,OAAO,GAAsB;wBAClC,YAAY,EAAE,IAAI,GAAG,EAAE;wBACvB,OAAO,EAAE,IAAI,GAAG,EAAE;wBAClB,mBAAmB,EAAE,IAAI,GAAG,EAAE;wBAC9B,aAAa,EAAE,IAAI,GAAG,EAAE;qBACxB,CAAC;oBAIF,qBAAM,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE;;;4CAC3B,qBAAM,EAAE,EAAE,EAAA;;wCAAnB,MAAM,GAAG,SAAU,CAAC;;;;6BACpB,CAAC,EAAA;;oBAFF,SAEE,CAAC;oBAEH,sBAAO;4BACN,MAAM,QAAA;4BACN,QAAQ,EAAE;gCACT,YAAY,EAAE,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC;gCACtD,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;gCACxC,mBAAmB,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC;gCACzD,aAAa,EAAE,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC;6BACvD;yBACD,EAAC;;;;CACF;AAvBD,wDAuBC;AAED,SAAgB,sBAAsB,CAAC,UAAkB,EAAE,MAAe,EAAE,OAA4C;;IACvH,IAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;QACpB,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE;YAChB,UAAU,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SAC5C;QAED,UAAU,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC/C;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE;QAClB,IAAI,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,EAAE;YACd,QAAQ,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAChD;QAED,QAAQ,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;KACtC;IAED,IAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QACjC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC1C;IAED,IAAI,GAAG,CAAC,IAAI,EAAE;QACb,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,EAAE;YACd,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAC/C;;YAED,KAAiB,IAAA,QAAA,SAAA,GAAG,CAAA,wBAAA,yCAAE;gBAAjB,IAAM,EAAE,gBAAA;gBACZ,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACjB;;;;;;;;;KACD;SACI,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;QAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAC5C;AACF,CAAC;AArDD,wDAqDC;AAED,SAAgB,2BAA2B,CAAC,UAAkB,EAAE,QAAe,EAAE,MAAe;;IAC/F,IAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IAED,IAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE;QAC1C,MAAM,EAAE,WAAW;QACnB,IAAI,MAAA;KACJ,CAAC,CAAC;IAEH,IAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC1B,OAAO;KACP;;QAED,KAAqB,IAAA,kBAAA,SAAA,aAAa,CAAA,4CAAA,uEAAE;YAA/B,IAAM,MAAM,0BAAA;YAChB,IAAM,YAAY,GAAc,EAAE,CAAC;YACnC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACrD,IAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAM,eAAe,GAAU,EAAE,CAAC;YAClC,IAAI,kBAAkB,GAAG,KAAK,CAAC;;gBAE/B,KAAsB,IAAA,4BAAA,SAAA,QAAQ,CAAA,CAAA,kCAAA,wDAAE;oBAA3B,IAAM,OAAO,qBAAA;oBACX,IAAA,KAA+C,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,EAA/E,mBAAmB,aAAA,EAAE,UAAU,gBAAgD,CAAC;oBACjG,IAAI,UAAU,EAAE;wBACf,kBAAkB,GAAG,IAAI,CAAC;qBAC1B;oBACD,IAAI,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,EAAE;wBAChC,eAAe,CAAC,IAAI,OAApB,eAAe,2BAAS,mBAAmB,WAAE;qBAC7C;iBACD;;;;;;;;;YAED,IAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAEjF,IAAM,qBAAqB,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;YAE7D,IAAI,YAAY,CAAC,MAAM,EAAE;gBACxB,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACnF;YAED,IAAI,qBAAqB,CAAC,MAAM,EAAE;gBACjC,IAAM,YAAY,GAAG,kCAAkC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;oBACzE,KAA6B,IAAA,yCAAA,SAAA,qBAAqB,CAAA,CAAA,4DAAA,+FAAE;wBAA/C,IAAM,cAAc,kCAAA;wBACxB,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;qBACxF;;;;;;;;;gBACD,SAAS;aACT;YAED,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,EAAE;gBACnC,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;gBACpD,SAAS;aACT;YAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBACzB,IAAI,kBAAkB,EAAE;oBACvB,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBAC7C;qBACI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACrD,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBAC7C;aACD;SACD;;;;;;;;;AACF,CAAC;AAnED,kEAmEC;AAED,SAAS,oBAAoB,CAAC,QAAe;;IAC7C,IAAM,OAAO,GAAmB,EAAE,CAAC;IAElC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,OAAO,CAAC;KACf;;QAED,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAChE,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC7B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;oBACrE,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;wBACjF,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;wBACvF,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;wBAC1E,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;qBACtE,CAAC,CAAC;iBACH;aACD;SACD;;;;;;;;;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAe;;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACZ;IAED,IAAM,OAAO,GAAU,EAAE,CAAC;;QAE1B,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9D,OAAO,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aACrC;SACD;;;;;;;;;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpB,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAe;;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,IAAI,GAAG,SAAS,CAAC;IACrB,IAAI,IAAI,GAAG,IAAI,CAAC;;QAEhB,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACpE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;aACrB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACvE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;aACnB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,KAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACzD,IAAI,GAAG,IAAA,iBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC7B;SACD;;;;;;;;;IAED,IAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,IAAI,KAAK,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACnB;IAED,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,IAAI,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,kCAAkC,CAAC,QAAe;;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,IAAI,GAAG,SAAS,CAAC;IACrB,IAAI,IAAI,GAAG,IAAI,CAAC;;QAEhB,KAAoB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAAzB,IAAM,KAAK,qBAAA;YACf,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACpE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;aACrB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,MAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACvE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;aACnB;iBACI,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,KAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACzD,IAAI,GAAG,IAAA,iBAAQ,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC7B;SACD;;;;;;;;;IAED,IAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,IAAI,KAAK,KAAK,SAAS,EAAE;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACnB;IAED,IAAI,IAAI,KAAK,SAAS,EAAE;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,IAAI,IAAI,EAAE;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACjB;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe,EAAE,IAAY,EAAE,MAAiB;;IAC5E,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;aACxC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAiC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA8B,EAAE,IAAc,EAAE,KAAa,EAAE,MAAiB;;IAChH,IAAI,CAAC,KAAK,EAAE;QACX,OAAO;KACP;IAED,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,IAAI,OAAO,KAAK,SAAS,EAAE;QAC1B,OAAO;KACP;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAC3B,KAAmB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;gBAAvB,IAAM,IAAI,oBAAA;gBACd,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACrC,uBAAuB,CAAC,IAA+B,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;iBAClF;aACD;;;;;;;;;KACD;SACI,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAChD,uBAAuB,CAAC,OAAkC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KACrF;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,UAAmB,EAAE,YAAqB;;IACrF,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE;QACjC,OAAO,IAAI,CAAC;KACZ;IAED,IAAM,MAAM,GAAU,EAAE,CAAC;IACzB,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzB,OAAO,IAAI,CAAC;KACZ;IAED;QACC,GAAC,YAAY,IAAG;YACf,GAAG,EAAE,YAAY;SACjB;WACA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe,EAAE,IAAc,EAAE,KAAa,EAAE,MAAa;;IACxF,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aAC9C;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,OAAO,KAAK,SAAS,EAAE;QAC1B,OAAO;KACP;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YAC3B,KAAmB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;gBAAvB,IAAM,IAAI,oBAAA;gBACd,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;aAClD;;;;;;;;;KACD;SACI;QACJ,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;KACrD;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAa,EAAE,KAAU;;IACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;QAC1C,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACzB,KAAmB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACd,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aAChC;;;;;;;;;QACD,OAAO;KACP;IAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAa;;IACxC,IAAM,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;;QAEtC,KAAoB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;YAAvB,IAAM,KAAK,mBAAA;YACf,IAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aACvB;SACD;;;;;;;;;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAU;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,MAAM,CAAC;KACd;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,UAAU,EAAE;YAC5C,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,KAAK,YAAY,IAAI,EAAE;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzF,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;SACxB;QAED,IAAI;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC7B;QACD,WAAM;YACL,OAAO,UAAU,CAAC;SAClB;KACD;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,GAAgB,EAAE,OAA+B;;IAA/B,wBAAA,EAAA,cAAc,OAAO,EAAU;IAC/F,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aACzC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,MAAiC,CAAC;IAEvD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;QAC9B,OAAO;KACP;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE1B,IAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAEnD,IAAI,YAAY,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACtB;;QAED,KAAoB,IAAA,KAAA,SAAA,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA,gBAAA,4BAAE;YAA5C,IAAM,KAAK,WAAA;YACf,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjE,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aAC1C;SACD;;;;;;;;;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,GAAgB;;IAC9D,IAAI,CAAC,MAAM,EAAE;QACZ,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;YAC1B,KAAmB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAtB,IAAM,IAAI,mBAAA;gBACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAChC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC/B,OAAO;KACP;IAED,IAAM,YAAY,GAAG,MAAiC,CAAC;IAEvD,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE;QACnC,yBAAyB,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACjD;;QAED,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA,gBAAA,4BAAE;YAA9C,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YACrB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;gBACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;wBACzB,KAAmB,IAAA,0BAAA,SAAA,KAAK,CAAA,CAAA,4BAAA,+CAAE;4BAArB,IAAM,IAAI,kBAAA;4BACd,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;yBAChC;;;;;;;;;iBACD;aACD;iBACI,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7D,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACjC;SACD;;;;;;;;;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc,EAAE,GAAgB;;IAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO;KACP;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;YACzB,KAAmB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACd,yBAAyB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACrC;;;;;;;;;QACD,OAAO;KACP;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;YAC9B,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA,gBAAA,4BAAE;gBAAlE,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;gBACrB,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;oBACtD,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,EAAE;oBACxC,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;oBAC3D,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;qBACI;oBACJ,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iBACtC;aACD;;;;;;;;;QACD,OAAO;KACP;IAED,IAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,UAAU,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACpB;AACF,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KACxB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAM,QAAQ,GAAG,KAAgE,CAAC;QAElF,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE;YAC/C,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;SAC9B;QAED,IAAI,KAAK,YAAY,IAAI,EAAE;YAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,EAAE;YAC5C,IAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,GAAG,KAAK,iBAAiB,EAAE;gBACrC,OAAO,GAAG,CAAC;aACX;SACD;KACD;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkC;;IAC7D,IAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;;QAE9C,KAAgC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAAzC,IAAA,KAAA,mBAAiB,EAAhB,UAAU,QAAA,EAAE,GAAG,QAAA;YAC1B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACrC;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,QAA4B;;IACnD,IAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;;QAExC,KAAoC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAA7C,IAAA,KAAA,mBAAqB,EAApB,UAAU,QAAA,EAAE,OAAO,QAAA;YAC9B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,IAAA,iBAAQ,EAAC,MAAM,CAAC,EAAhB,CAAgB,CAAC,CAAC,CAAC;SAChE;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkC;;IAC5D,IAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;;QAE9C,KAAqC,IAAA,KAAA,SAAA,QAAQ,CAAC,OAAO,EAAE,CAAA,gBAAA,4BAAE;YAA9C,IAAA,KAAA,mBAAsB,EAArB,UAAU,QAAA,EAAE,QAAQ,QAAA;YAC/B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAd,CAAc,CAAC,CAAC,CAAC;SAC7D;;;;;;;;;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAGD,SAAS,0BAA0B,CAAC,OAAY,EAAE,MAAoB;;IACrE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAChD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAC1C;IAEF,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,EAAE,KAAK,OAAA,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAA/B,CAA+B,CAAC,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,CAAC;IAE7G,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QACxB,OAAO,4BAA4B,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9E;IAED,IAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;QAC9B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;KACzC;IAED,IAAM,eAAe,GAAG,EAAE,CAAC;;QAE3B,KAAuB,IAAA,gBAAA,SAAA,WAAW,CAAA,wCAAA,iEAAE;YAAvB,IAAA,IAAI,6BAAA;YAChB,IAAM,iBAAiB,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAChD,IAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAErG,IAAI,iBAAiB,CAAC,UAAU,IAAI,8BAA8B,CAAC,WAAW,CAAC,EAAE;gBAChF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;aACzC;YAED,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAClC;;;;;;;;;IAED,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;QAC5B,OAAO,4BAA4B,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9E;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,OAAO,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAC5D;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAe,EAAE,cAAqB,EAAE,OAAY,EAAE,MAA2B;IACtH,IAAI,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;IAC5C,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAApC,CAAoC,CAAC,CAAC;IAE5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;YAC3C,IAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC9B,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACN;YAED,IAAM,iBAAiB,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAChD,IAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAE7G,IAAI,iBAAiB,CAAC,UAAU,IAAI,8BAA8B,CAAC,WAAW,CAAC,EAAE;gBAChF,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACN;YAED,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACjC;aACI,IAAI,SAAS,KAAK,QAAQ,EAAE;YAChC,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM;SACN;aACI,IAAI,SAAS,KAAK,QAAQ,EAAE;YAChC,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM;SACN;KACD;IAED,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QAC3B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,YAAA,EAAE,CAAC;KACnC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,YAAA,EAAE,CAAC;KAC/C;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,UAAU,YAAA,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAY,EAAE,MAA2B;;IACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;KACtC;IAED,IAAM,MAAM,GAAG,EAAE,CAAC;;QAElB,KAAgC,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,gBAAA,4BAAE;YAA7C,IAAA,KAAA,mBAAiB,EAAhB,GAAG,QAAA,EAAE,UAAU,QAAA;YAC1B,IAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAE9D,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACzC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;SAC/B;;;;;;;;;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAA,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAY,EAAE,UAAe;IAC3D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QACnC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YACrC,IAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;SAChE;aACI,IAAI,UAAU,KAAK,QAAQ,EAAE;YACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;SAC1C;aACI,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACxC;aACI,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACpC,IAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;SAChE;aACI;YACJ,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SAC7C;KACD;SACI,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACnC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxC;SACI,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAS,EAAE,SAA8B,EAAE,OAAY,EAAE,KAA8B;;IACtH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAvD,CAAuD,CAAC,CAAC;KACjF;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACrC,IAAM,MAAM,GAAG,EAAE,CAAC;;YAElB,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,gBAAA,4BAAE;gBAAtC,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aACvE;;;;;;;;;QAED,OAAO,MAAM,CAAC;KACd;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC/B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACrC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE;YACtB,OAAO,OAAO,CAAC;SACf;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;gBAC7D,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;aAC1B;YAED,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;SACZ;KACD;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAS;IAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3B;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,8BAA8B,CAAC,IAAI,CAAC,EAApC,CAAoC,CAAC,CAAC;KAC/D;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,8BAA8B,CAAC,KAAK,CAAC,EAArC,CAAqC,CAAC,CAAC;KAChF;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,MAAW,EAAE,IAAY;;IAChD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE;QACrB,OAAO,SAAS,CAAC;KACjB;IAED,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,MAAM,CAAC;;QAErB,KAAsB,IAAA,aAAA,SAAA,QAAQ,CAAA,kCAAA,wDAAE;YAA3B,IAAM,OAAO,qBAAA;YACjB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;gBAC9C,OAAO,SAAS,CAAC;aACjB;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAEpC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;oBACzD,OAAO,SAAS,CAAC;iBACjB;gBAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACzB;iBACI;gBACJ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;aAC3B;SACD;;;;;;;;;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAW;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAU;;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,QAAQ,CAAC,IAAI,CAAC,EAAd,CAAc,CAAC,CAAC;KACzC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACvC,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;;YAEvC,KAAkB,IAAA,SAAA,SAAA,IAAI,CAAA,0BAAA,4CAAE;gBAAnB,IAAM,GAAG,iBAAA;gBACb,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACnC;;;;;;;;;QAED,OAAO,MAAM,CAAC;KACd;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAAc;;IACpC,IAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAC;;QAEnC,KAAqB,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;YAAzB,IAAM,MAAM,oBAAA;YAChB,IAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAEvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;aACrB;SACD;;;;;;;;;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AACjC,CAAC","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst matchFilter = extractMatchFilter(pipeline);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter,\n\t\tmeta\n\t});\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\nconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}
1
+ {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\tconst lookupAliases = new Set<string>(lookupTargets.map(target => target.as).filter(Boolean));\n\tconst matchFilter = sanitizeMatchFilter(extractMatchFilter(pipeline), lookupAliases);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter || undefined,\n\t\tmeta\n\t});\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\nconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction sanitizeMatchFilter(filter: any, lookupAliases: Set<string>) {\n\tif (!filter || !lookupAliases?.size) {\n\t\treturn filter;\n\t}\n\n\treturn sanitizeFilterNode(filter, lookupAliases);\n}\n\nfunction sanitizeFilterNode(node: any, lookupAliases: Set<string>): any {\n\tif (!node) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst sanitizedArray = node\n\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\treturn sanitizedArray.length ? sanitizedArray : null;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn node;\n\t}\n\n\tconst result = {};\n\n\tfor (const [key, value] of Object.entries(node)) {\n\t\tif (key === '$and' || key === '$or' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst sanitizedChildren = value\n\t\t\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\t\t\tif (sanitizedChildren.length) {\n\t\t\t\t\tresult[key] = sanitizedChildren;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rootKey = key.split('.')[0];\n\n\t\tif (lookupAliases.has(rootKey)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn Object.keys(result).length ? result : null;\n}\n\nfunction isMeaningfulFilterNode(node: any) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.length > 0;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn true;\n\t}\n\n\treturn Object.keys(node).length > 0;\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}