{"version":3,"file":"WorkQueue.js","sourceRoot":"","sources":["../../../src/execution/incremental/WorkQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oCAAmC;AAIvD,OAAO,EAAE,KAAK,EAAE,oBAAmB;AA4MnC,MAAM,UAAU,eAAe,CAK7B,WAAyC;IACzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAK,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAK,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0C,CAAC;IACpE,IAAI,cAAoE,CAAC;IACzE,IAAI,eAAyD,CAAC;IAE9D,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE,GACpE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAGtE,KAAK,MAAM,KAAK,IAAI,yBAAyB,EAAE,CAAC;QAC9C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,KAAK,CACtB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,cAAc,GAAG,KAAK,CAAC;QACvB,eAAe,GAAG,KAAK,CAAC;QAExB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YACD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBAEjC,WAAW,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,CACF,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE7D,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,cAAc,EAAE,kBAAkB;QAClC,MAAM;KACP,CAAC;IAEF,SAAS,MAAM,CAAC,MAAgB;QAC9B,MAAM,cAAc,GAA4B,EAAE,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,SAAS,WAAW,CAClB,KAAQ,EACR,MAAe,EACf,cAAuC;QAEvC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC/C,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CACjB,IAAsB,EACtB,MAAe,EACf,cAAuC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAChD,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,YAAY,CACnB,MAAS,EACT,MAAe,EACf,cAAuC;QAEvC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,SAAS,kBAAkB,CACzB,IAAkC,EAClC,UAA6B;QAE7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,SAAS,SAAS,CAChB,cAAgC,EAChC,UAA6B;QAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAK,CAAC;QAC7B,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,SAAS,QAAQ,CACf,KAAQ,EACR,QAAwB,EACxB,aAAuB,EACvB,OAAe,EACf,UAA6B;QAE7B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,SAAS,GAA0B;YACvC,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,OAAO,EAAE,CAAC;SACX,CAAC;QACF,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEjC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,SAAS,OAAO,CAAC,IAAsB;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1B,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CACjB,OAAyB,EACzB,UAA6B;QAE7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,SAAS,gBAAgB,CACvB,SAA2B,EAC3B,oBAA8B,EAAE;QAEhC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;oBAChC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC5B,gBAAgB,CAAC,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,SAAS,YAAY,CACnB,SAA2B,EAC3B,UAA4B;QAE5B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAExB,WAAW,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,KAAQ;QAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAAC,IAAsB;QACvC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CACT,CAAC,QAAQ,EAAE,EAAE;oBAEX,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACnE,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;oBAEjB,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBAEN,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,MAAS;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAG,cAAc,CAAC;oBAC5B,IAAI,EAAE,cAAc;oBACpB,MAAM;oBACN,KAAK;iBACN,CAAC,CAAC;gBACH,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,CAAC;gBACf,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,cAAc,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,SAAS,iBAAiB,CACxB,WAA8C;QAE9C,MAAM,eAAe,GAAsC,EAAE,CAAC;QAC9D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;gBACxB,KAAK,cAAc;oBACjB,eAAe,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,cAAc;oBACjB,eAAe,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,cAAc;oBACjB,eAAe,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjD,MAAM;gBACR,KAAK,gBAAgB;oBAEnB,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBACtC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACnC,CAAC;oBACD,MAAM;gBACR,KAAK,gBAAgB;oBACnB,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACtC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACjC,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAEpD,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED,SAAS,WAAW,CAClB,UAA6C;QAI7C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QACpC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/B,MAAM,WAAW,GAEb,EAAE,CAAC;QACP,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;oBACrD,MAAM,EACJ,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,eAAe,GAC5B,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBACzC,IAAI,gBAAgB,EAAE,CAAC;wBACrB,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACrC,CAAC;oBACD,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACpC,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;oBAClC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,SAAS,WAAW,CAClB,UAA6C;QAE7C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QACnC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,kBAAkB,GAAgC,EAAE,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,SAAS,WAAW,CAClB,UAAwC;QAIxC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YACpC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,GAC5D,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC1D,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,iBAAiB,GAAkC;YACvD,IAAI,EAAE,eAAe;YACrB,MAAM;YACN,MAAM;YACN,SAAS;YACT,UAAU;SACX,CAAC;QAGF,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YAC7B,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,kBAAkB,CACzB,KAAQ,EACR,SAAgC;QAOhC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;gBACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;gBACD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;oBACvC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC1D,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;YACL,gBAAgB,EAAE,MAAM,CAAC,MAAM;gBAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE;gBACzC,CAAC,CAAC,SAAS;YACb,iBAAiB,EAAE;gBACjB,IAAI,EAAE,eAAe;gBACrB,KAAK;gBACL,SAAS;gBACT,UAAU;aACX;YACD,SAAS;YACT,UAAU;SACX,CAAC;IACJ,CAAC;IAED,SAAS,kBAAkB,CACzB,KAAQ,EACR,SAAgC,EAChC,KAAc;QAEd,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9B,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,SAAS,WAAW,CAAC,KAAQ,EAAE,SAAgC;QAC7D,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACjE,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,eAAe,EAAE,CAAC;gBACpB,WAAW,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,IAAsB;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACH,CAAC","sourcesContent":["import { isPromise } from '../../jsutils/isPromise.ts';\nimport type { PromiseOrValue } from '../../jsutils/PromiseOrValue.ts';\n\nimport type { Computation } from './Computation.ts';\nimport { Queue } from './Queue.ts';\n\n/** @internal */\nexport interface Group<TSelf extends Group<TSelf>> {\n  parent?: TSelf | undefined;\n}\n\ninterface WorkResult<\n  TValue,\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  value: TValue;\n  work?: Work<T, I, G, S> | undefined;\n}\n\n/** @internal */\nexport interface Stream<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  queue: Queue<StreamItem<T, I, G, S>>;\n}\n\n/** @internal */\nexport interface Work<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n  groups?: ReadonlyArray<G>;\n  tasks?: ReadonlyArray<Task<T, I, G, S>>;\n  streams?: ReadonlyArray<S>;\n}\n\ninterface NewWork<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n  newGroups: ReadonlyArray<G>;\n  newStreams: ReadonlyArray<S>;\n}\n\n/** @internal */\nexport interface WorkQueue<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  initialGroups: ReadonlyArray<G>;\n  initialStreams: ReadonlyArray<S>;\n  events: AsyncGenerator<ReadonlyArray<WorkQueueEvent<T, I, G, S>>, void, void>;\n}\n\n/** @internal */\nexport type StreamItem<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> = WorkResult<I, T, I, G, S>;\n\n/** @internal */\nexport type TaskResult<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> = WorkResult<T, T, I, G, S>;\n\n/** @internal */\nexport interface Task<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n  groups: ReadonlyArray<G>;\n  computation: Computation<TaskResult<T, I, G, S>>;\n}\n\ninterface TaskSuccessGraphEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'TASK_SUCCESS';\n  task: Task<T, I, G, S>;\n  result: TaskResult<T, I, G, S>;\n}\n\ninterface TaskFailureGraphEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'TASK_FAILURE';\n  task: Task<T, I, G, S>;\n  error: unknown;\n}\n\ninterface StreamItemsEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'STREAM_ITEMS';\n  stream: S;\n  items: Generator<StreamItem<T, I, G, S>>;\n}\n\ninterface StreamSuccessEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'STREAM_SUCCESS';\n  stream: S;\n}\n\ninterface StreamFailureEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'STREAM_FAILURE';\n  stream: S;\n  error: unknown;\n}\n\ntype GraphEvent<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> =\n  | TaskSuccessGraphEvent<T, I, G, S>\n  | TaskFailureGraphEvent<T, I, G, S>\n  | StreamItemsEvent<T, I, G, S>\n  | StreamSuccessEvent<T, I, G, S>\n  | StreamFailureEvent<T, I, G, S>;\n\ninterface GroupValuesEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> {\n  kind: 'GROUP_VALUES';\n  group: G;\n  values: ReadonlyArray<T>;\n}\n\ninterface GroupSuccessEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> extends NewWork<T, I, G, S> {\n  kind: 'GROUP_SUCCESS';\n  group: G;\n}\n\ninterface GroupFailureEvent<G extends Group<G>> {\n  kind: 'GROUP_FAILURE';\n  group: G;\n  error: unknown;\n}\n\ninterface StreamValuesEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> extends NewWork<T, I, G, S> {\n  kind: 'STREAM_VALUES';\n  stream: S;\n  values: ReadonlyArray<I>;\n}\n\ninterface WorkQueueTerminationEvent {\n  kind: 'WORK_QUEUE_TERMINATION';\n}\n\n/** @internal */\nexport type WorkQueueEvent<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n> =\n  | GroupValuesEvent<T, I, G, S>\n  | GroupSuccessEvent<T, I, G, S>\n  | GroupFailureEvent<G>\n  | StreamValuesEvent<T, I, G, S>\n  | StreamSuccessEvent<T, I, G, S>\n  | StreamFailureEvent<T, I, G, S>\n  | WorkQueueTerminationEvent;\n\ninterface GroupNode<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n  childGroups: Array<G>;\n  tasks: Set<Task<T, I, G, S>>;\n  pending: number;\n}\n\ninterface TaskNode<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n  value: T | undefined;\n  childStreams: Array<S>;\n}\n\n/** @internal */\nexport function createWorkQueue<\n  T,\n  I,\n  G extends Group<G>,\n  S extends Stream<T, I, G, S>,\n>(initialWork: Work<T, I, G, S> | undefined): WorkQueue<T, I, G, S> {\n  const rootGroups = new Set<G>();\n  const rootStreams = new Set<S>();\n  const groupNodes = new Map<G, GroupNode<T, I, G, S>>();\n  const taskNodes = new Map<Task<T, I, G, S>, TaskNode<T, I, G, S>>();\n  let pushGraphEvent!: (e: GraphEvent<T, I, G, S>) => PromiseOrValue<void>;\n  let stopGraphEvents!: (err?: unknown) => PromiseOrValue<void>;\n\n  const { newGroups: initialRootGroups, newStreams: initialRootStreams } =\n    maybeIntegrateWork(initialWork);\n  const nonEmptyInitialRootGroups = pruneEmptyGroups(initialRootGroups);\n  // Initialize root groups and streams at startup to prepare for cancellation\n  // prior to starting the work queue\n  for (const group of nonEmptyInitialRootGroups) {\n    rootGroups.add(group);\n  }\n  for (const stream of initialRootStreams) {\n    rootStreams.add(stream);\n  }\n\n  const events = new Queue<GraphEvent<T, I, G, S>>(\n    ({ push: _push, stop: _stop, onStop, started }) => {\n      pushGraphEvent = _push;\n      stopGraphEvents = _stop;\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      started.then(() => {\n        for (const group of rootGroups) {\n          startGroup(group);\n        }\n        for (const stream of rootStreams) {\n          // eslint-disable-next-line @typescript-eslint/no-floating-promises\n          startStream(stream);\n        }\n      });\n      onStop((reason) => cancel(reason));\n    },\n    1,\n  ).subscribe((graphEvents) => handleGraphEvents(graphEvents));\n\n  return {\n    initialGroups: nonEmptyInitialRootGroups,\n    initialStreams: initialRootStreams,\n    events,\n  };\n\n  function cancel(reason?: unknown): PromiseOrValue<void> {\n    const cancelPromises: Array<Promise<unknown>> = [];\n    for (const group of rootGroups) {\n      cancelGroup(group, reason, cancelPromises);\n    }\n    for (const stream of rootStreams) {\n      cancelStream(stream, reason, cancelPromises);\n    }\n    if (cancelPromises.length > 0) {\n      return Promise.allSettled(cancelPromises).then(() => undefined);\n    }\n  }\n\n  function cancelGroup(\n    group: G,\n    reason: unknown,\n    cancelPromises: Array<Promise<unknown>>,\n  ): void {\n    const groupNode = groupNodes.get(group);\n    if (groupNode) {\n      for (const task of groupNode.tasks) {\n        cancelTask(task, reason, cancelPromises);\n      }\n      for (const childGroup of groupNode.childGroups) {\n        cancelGroup(childGroup, reason, cancelPromises);\n      }\n    }\n  }\n\n  function cancelTask(\n    task: Task<T, I, G, S>,\n    reason: unknown,\n    cancelPromises: Array<Promise<unknown>>,\n  ): void {\n    const abortResult = task.computation.abort(reason);\n    if (isPromise(abortResult)) {\n      cancelPromises.push(abortResult);\n    }\n    const taskNode = taskNodes.get(task);\n    if (taskNode) {\n      for (const childStream of taskNode.childStreams) {\n        cancelStream(childStream, reason, cancelPromises);\n      }\n    }\n  }\n\n  function cancelStream(\n    stream: S,\n    reason: unknown,\n    cancelPromises: Array<Promise<unknown>>,\n  ): void {\n    const abortResult = stream.queue.abort(reason);\n    if (isPromise(abortResult)) {\n      cancelPromises.push(abortResult);\n    }\n  }\n\n  function maybeIntegrateWork(\n    work: Work<T, I, G, S> | undefined,\n    parentTask?: Task<T, I, G, S>,\n  ): NewWork<T, I, G, S> {\n    if (!work) {\n      return { newGroups: [], newStreams: [] };\n    }\n    const { groups, tasks, streams } = work;\n    const newGroups = groups ? addGroups(groups, parentTask) : [];\n    if (tasks) {\n      for (const task of tasks) {\n        addTask(task);\n      }\n    }\n    const newStreams = streams ? addStreams(streams, parentTask) : [];\n    return { newGroups, newStreams };\n  }\n\n  function addGroups(\n    originalGroups: ReadonlyArray<G>,\n    parentTask?: Task<T, I, G, S>,\n  ): Array<G> {\n    const groupSet = new Set(originalGroups);\n    const visited = new Set<G>();\n    const newRootGroups: Array<G> = [];\n    for (const group of originalGroups) {\n      addGroup(group, groupSet, newRootGroups, visited, parentTask);\n    }\n    return newRootGroups;\n  }\n\n  function addGroup(\n    group: G,\n    groupSet: ReadonlySet<G>,\n    newRootGroups: Array<G>,\n    visited: Set<G>,\n    parentTask?: Task<T, I, G, S>,\n  ): void {\n    if (visited.has(group)) {\n      return;\n    }\n    visited.add(group);\n    const parent = group.parent;\n    if (parent !== undefined && groupSet.has(parent)) {\n      addGroup(parent, groupSet, newRootGroups, visited, parentTask);\n    }\n\n    const groupNode: GroupNode<T, I, G, S> = {\n      childGroups: [],\n      tasks: new Set(),\n      pending: 0,\n    };\n    groupNodes.set(group, groupNode);\n\n    if (parentTask === undefined && !parent) {\n      newRootGroups.push(group);\n    } else if (parent) {\n      groupNodes.get(parent)?.childGroups.push(group);\n    }\n  }\n\n  function addTask(task: Task<T, I, G, S>): void {\n    for (const group of task.groups) {\n      const groupNode = groupNodes.get(group);\n      if (groupNode) {\n        groupNode.tasks.add(task);\n        groupNode.pending++;\n        if (rootGroups.has(group)) {\n          startTask(task);\n        }\n      }\n    }\n  }\n\n  function addStreams(\n    streams: ReadonlyArray<S>,\n    parentTask?: Task<T, I, G, S>,\n  ): ReadonlyArray<S> {\n    if (!parentTask) {\n      return streams;\n    }\n    const taskNode = taskNodes.get(parentTask);\n    if (taskNode) {\n      taskNode.childStreams.push(...streams);\n    }\n    return [];\n  }\n\n  function pruneEmptyGroups(\n    newGroups: ReadonlyArray<G>,\n    nonEmptyNewGroups: Array<G> = [],\n  ): ReadonlyArray<G> {\n    for (const newGroup of newGroups) {\n      const newGroupState = groupNodes.get(newGroup);\n      if (newGroupState) {\n        if (newGroupState.pending === 0) {\n          groupNodes.delete(newGroup);\n          pruneEmptyGroups(newGroupState.childGroups, nonEmptyNewGroups);\n        } else {\n          nonEmptyNewGroups.push(newGroup);\n        }\n      }\n    }\n    return nonEmptyNewGroups;\n  }\n\n  function startNewWork(\n    newGroups: ReadonlyArray<G>,\n    newStreams: ReadonlyArray<S>,\n  ): void {\n    for (const group of newGroups) {\n      rootGroups.add(group);\n      startGroup(group);\n    }\n    for (const stream of newStreams) {\n      rootStreams.add(stream);\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      startStream(stream);\n    }\n  }\n\n  function startGroup(group: G): void {\n    const groupNode = groupNodes.get(group);\n    if (groupNode) {\n      for (const task of groupNode.tasks) {\n        startTask(task);\n      }\n    }\n  }\n\n  function startTask(task: Task<T, I, G, S>): void {\n    if (taskNodes.has(task)) {\n      return;\n    }\n    taskNodes.set(task, {\n      value: undefined,\n      childStreams: [],\n    });\n    try {\n      const result = task.computation.result();\n      if (isPromise(result)) {\n        result.then(\n          (resolved) => {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            pushGraphEvent({ kind: 'TASK_SUCCESS', task, result: resolved });\n          },\n          (error: unknown) => {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            pushGraphEvent({ kind: 'TASK_FAILURE', task, error });\n          },\n        );\n      } else {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        pushGraphEvent({ kind: 'TASK_SUCCESS', task, result });\n      }\n    } catch (error) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      pushGraphEvent({ kind: 'TASK_FAILURE', task, error });\n    }\n  }\n\n  async function startStream(stream: S): Promise<void> {\n    try {\n      await stream.queue.forEachBatch(async (items) => {\n        const pushed = pushGraphEvent({\n          kind: 'STREAM_ITEMS',\n          stream,\n          items,\n        });\n        if (isPromise(pushed)) {\n          await pushed;\n        }\n      });\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      pushGraphEvent({ kind: 'STREAM_SUCCESS', stream });\n    } catch (error) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      pushGraphEvent({ kind: 'STREAM_FAILURE', stream, error });\n    }\n  }\n\n  function handleGraphEvents(\n    graphEvents: Generator<GraphEvent<T, I, G, S>>,\n  ): ReadonlyArray<WorkQueueEvent<T, I, G, S>> | undefined {\n    const workQueueEvents: Array<WorkQueueEvent<T, I, G, S>> = [];\n    for (const graphEvent of graphEvents) {\n      switch (graphEvent.kind) {\n        case 'TASK_SUCCESS':\n          workQueueEvents.push(...taskSuccess(graphEvent));\n          break;\n        case 'TASK_FAILURE':\n          workQueueEvents.push(...taskFailure(graphEvent));\n          break;\n        case 'STREAM_ITEMS':\n          workQueueEvents.push(...streamItems(graphEvent));\n          break;\n        case 'STREAM_SUCCESS':\n          // check whether already deleted within streamItems()\n          if (rootStreams.has(graphEvent.stream)) {\n            rootStreams.delete(graphEvent.stream);\n            workQueueEvents.push(graphEvent);\n          }\n          break;\n        case 'STREAM_FAILURE':\n          rootStreams.delete(graphEvent.stream);\n          workQueueEvents.push(graphEvent);\n          break;\n      }\n    }\n\n    if (rootGroups.size === 0 && rootStreams.size === 0) {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      stopGraphEvents();\n      workQueueEvents.push({ kind: 'WORK_QUEUE_TERMINATION' });\n    }\n\n    return workQueueEvents.length > 0 ? workQueueEvents : undefined;\n  }\n\n  function taskSuccess(\n    graphEvent: TaskSuccessGraphEvent<T, I, G, S>,\n  ): ReadonlyArray<\n    GroupValuesEvent<T, I, G, S> | GroupSuccessEvent<T, I, G, S>\n  > {\n    const { task, result } = graphEvent;\n    const { value, work } = result;\n    const taskNode = taskNodes.get(task);\n    if (taskNode) {\n      taskNode.value = value;\n    }\n    maybeIntegrateWork(work, task);\n\n    const groupEvents: Array<\n      GroupValuesEvent<T, I, G, S> | GroupSuccessEvent<T, I, G, S>\n    > = [];\n    const newGroups: Array<G> = [];\n    const newStreams: Array<S> = [];\n    for (const group of task.groups) {\n      const groupNode = groupNodes.get(group);\n      if (groupNode) {\n        groupNode.pending--;\n        if (rootGroups.has(group) && groupNode.pending === 0) {\n          const {\n            groupValuesEvent,\n            groupSuccessEvent,\n            newGroups: childNewGroups,\n            newStreams: childNewStreams,\n          } = finishGroupSuccess(group, groupNode);\n          if (groupValuesEvent) {\n            groupEvents.push(groupValuesEvent);\n          }\n          groupEvents.push(groupSuccessEvent);\n          newGroups.push(...childNewGroups);\n          newStreams.push(...childNewStreams);\n        }\n      }\n    }\n\n    startNewWork(newGroups, newStreams);\n    return groupEvents;\n  }\n\n  function taskFailure(\n    graphEvent: TaskFailureGraphEvent<T, I, G, S>,\n  ): ReadonlyArray<GroupFailureEvent<G>> {\n    const { task, error } = graphEvent;\n    taskNodes.delete(task);\n    const groupFailureEvents: Array<GroupFailureEvent<G>> = [];\n    for (const group of task.groups) {\n      const groupNode = groupNodes.get(group);\n      if (groupNode) {\n        groupFailureEvents.push(finishGroupFailure(group, groupNode, error));\n      }\n    }\n    return groupFailureEvents;\n  }\n\n  function streamItems(\n    graphEvent: StreamItemsEvent<T, I, G, S>,\n  ):\n    | [StreamValuesEvent<T, I, G, S>]\n    | [StreamValuesEvent<T, I, G, S>, StreamSuccessEvent<T, I, G, S>] {\n    const { stream, items } = graphEvent;\n    const values: Array<I> = [];\n    const newGroups: Array<G> = [];\n    const newStreams: Array<S> = [];\n    for (const { value, work } of items) {\n      const { newGroups: itemNewGroups, newStreams: itemNewStreams } =\n        maybeIntegrateWork(work);\n      const nonEmptyNewGroups = pruneEmptyGroups(itemNewGroups);\n      startNewWork(nonEmptyNewGroups, itemNewStreams);\n      values.push(value);\n      newGroups.push(...nonEmptyNewGroups);\n      newStreams.push(...itemNewStreams);\n    }\n    const streamValuesEvent: StreamValuesEvent<T, I, G, S> = {\n      kind: 'STREAM_VALUES',\n      stream,\n      values,\n      newGroups,\n      newStreams,\n    };\n\n    // queues allow peeking ahead see if stream has stopped\n    if (stream.queue.isStopped()) {\n      rootStreams.delete(stream);\n      return [streamValuesEvent, { kind: 'STREAM_SUCCESS', stream }];\n    }\n    return [streamValuesEvent];\n  }\n\n  function finishGroupSuccess(\n    group: G,\n    groupNode: GroupNode<T, I, G, S>,\n  ): {\n    groupValuesEvent: GroupValuesEvent<T, I, G, S> | undefined;\n    groupSuccessEvent: GroupSuccessEvent<T, I, G, S>;\n    newGroups: ReadonlyArray<G>;\n    newStreams: ReadonlyArray<S>;\n  } {\n    groupNodes.delete(group);\n    const values: Array<T> = [];\n    const newStreams: Array<S> = [];\n    for (const task of groupNode.tasks) {\n      const taskNode = taskNodes.get(task);\n      if (taskNode) {\n        const { value, childStreams } = taskNode;\n        if (value !== undefined) {\n          values.push(value);\n        }\n        for (const childStream of childStreams) {\n          newStreams.push(childStream);\n        }\n        removeTask(task);\n      }\n    }\n    const newGroups = pruneEmptyGroups(groupNode.childGroups);\n    rootGroups.delete(group);\n    return {\n      groupValuesEvent: values.length\n        ? { kind: 'GROUP_VALUES', group, values }\n        : undefined,\n      groupSuccessEvent: {\n        kind: 'GROUP_SUCCESS',\n        group,\n        newGroups,\n        newStreams,\n      },\n      newGroups,\n      newStreams,\n    };\n  }\n\n  function finishGroupFailure(\n    group: G,\n    groupNode: GroupNode<T, I, G, S>,\n    error: unknown,\n  ): GroupFailureEvent<G> {\n    removeGroup(group, groupNode);\n    rootGroups.delete(group);\n    return { kind: 'GROUP_FAILURE', group, error };\n  }\n\n  function removeGroup(group: G, groupNode: GroupNode<T, I, G, S>): void {\n    groupNodes.delete(group);\n    for (const task of groupNode.tasks) {\n      if (task.groups.every((taskGroup) => !groupNodes.has(taskGroup))) {\n        removeTask(task);\n      }\n    }\n    for (const childGroup of groupNode.childGroups) {\n      const childGroupState = groupNodes.get(childGroup);\n      if (childGroupState) {\n        removeGroup(childGroup, childGroupState);\n      }\n    }\n  }\n\n  function removeTask(task: Task<T, I, G, S>): void {\n    for (const group of task.groups) {\n      const groupNode = groupNodes.get(group);\n      groupNode?.tasks.delete(task);\n    }\n    taskNodes.delete(task);\n  }\n}\n"]}