@tiangong-lca/cli 0.1.7 → 0.1.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,"file":"lifecyclemodel-resulting-process.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-resulting-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAIlE,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAC5C,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAyGhD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAc,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,CAAC,CAAE,CAAC,KAAK,CAAS,CAAC;AAClE,CAAC;AAED,SAAS,QAAQ,CAAI,KAAQ;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,GAAG,MAAiB;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,MAAwC;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,MAAM,CAAC,GAAG,GAAS,IAAI,IAAI,EAAE;IACpC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,iCAAiC,CAAC,GAAsB;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC,yBAAyB,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC5C,CAAC;IAED,IACE,CAAC,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CACrE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CACrD,EACD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAC5E,CAAC;IAED,IACE,OAAO,GAAG,CAAC,qCAAqC,KAAK,QAAQ;QAC7D,CAAC,GAAG,CAAC,qCAAqC,CAAC,IAAI,EAAE,EACjD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAChB,kCAAkC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iDAAiD,EACrG;YACE,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,OAAO,EAAE;SACrB,CACF,CAAC;IACJ,CAAC;IAED,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAKvC;IAMC,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC;YAChD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,EAAE,EAAE,OAAO,CAAC,SAAS;YACrB,OAAO,EAAE,OAAO,CAAC,gBAAgB;YACjC,SAAS,EAAE,gCAAgC;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAAC,gDAAgD,SAAS,GAAG,EAAE;gBAC/E,IAAI,EAAE,yCAAyC;gBAC/C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,EAAE;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;YAC7F,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,MAAM,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,OAAO;YACL,MAAM;YACN,UAAU,EACR,MAAM,CAAC,UAAU,KAAK,iCAAiC;gBACrD,CAAC,CAAC,iCAAiC;gBACnC,CAAC,CAAC,uBAAuB;YAC7B,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;SACtD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,gCAAgC,EAAE,CAAC;YACjF,MAAM,IAAI,QAAQ,CAAC,0DAA0D,SAAS,GAAG,EAAE;gBACzF,IAAI,EAAE,+CAA+C;gBACrD,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAID,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAc;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IACxD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,GAAG,SAAS,2CAA2C,EAAE;YAC1E,IAAI,EAAE,oCAAoC;YAC1C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,gCAAgC,QAAQ,EAAE,EAAE;YAC7D,IAAI;YACJ,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,SAAiB;IACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAAC,gCAAgC,SAAS,GAAG,EAAE;YAC/D,IAAI,EAAE,+BAA+B;YACrC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,YAAqB;IACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,SAAiB;IAC7D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,QAAQ,CAAC,YAAY,SAAS,IAAI,KAAK,6BAA6B,EAAE;gBAC9E,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC;IACpD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,0DAA0D,EAAE;QAC7E,IAAI,EAAE,wCAAwC;QAC9C,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;IACjD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;QAC9E,IAAI,EAAE,uCAAuC;QAC7C,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,oEAAoE,EAAE;YACvF,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,8CAA8C,CAC5D,KAAc,EACd,OAEC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,iEAAiE,EAAE;YACpF,IAAI,EAAE,mCAAmC;YACzC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,MAAM,UAAU,GAA0C;QACxD,YAAY,EAAE;YACZ,EAAE,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC;YAC9C,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC;YACxC,iBAAiB,EAAE,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC;YAC9E,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;gBACjD,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;gBACvC,CAAC,CAAC,IAAI;SACT;QACD,UAAU,EAAE;YACV,IAAI,EAAE,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC;YACjD,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;YACnD,eAAe,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;YAC7D,kBAAkB,EAAE,0BAA0B,CAAC,aAAa,CAAC,kBAAkB,CAAC;YAChF,qBAAqB,EAAE,SAAS,CAAC,aAAa,CAAC,qBAAqB,EAAE,KAAK,CAAC;YAC5E,yBAAyB,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,yBAAyB,CAAC;SAC9F;QACD,eAAe,EAAE;YACf,oBAAoB,EAAE,CAAC,GAAG,EAAE;gBAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;gBACnF,OAAO,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9F,CAAC,CAAC,EAAE;YACJ,QAAQ,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC,GAAG,CACxF,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,0BAA0B,CAAC,CACxF;YACD,iBAAiB,EAAE,oBAAoB,CACrC,iBAAiB,CAAC,iBAAiB,EACnC,mCAAmC,CACpC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,mCAAmC,CAAC,CACvF;YACD,kBAAkB,EAAE,oBAAoB,CACtC,iBAAiB,CAAC,kBAAkB,EACpC,oCAAoC,CACrC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,oCAAoC,CAAC,CACxF;YACD,mBAAmB,EAAE,SAAS,CAC5B,iBAAiB,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,gBAAgB,EAC3E,KAAK,CACN;SACF;QACD,OAAO,EAAE;YACP,MAAM,EAAE,sBAAsB,CAAC,UAAU,CAAC,MAAM,CAAC;YACjD,wBAAwB,EAAE,SAAS,CAAC,UAAU,CAAC,wBAAwB,EAAE,IAAI,CAAC;YAC9E,yBAAyB,EAAE,SAAS,CAAC,UAAU,CAAC,yBAAyB,EAAE,IAAI,CAAC;SACjF;KACF,CAAC;IAEF,IACE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAC3B,CAAC,UAAU,CAAC,YAAY,CAAC,YAAY;QACrC,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,EAC1C,CAAC;QACD,MAAM,IAAI,QAAQ,CAChB,mFAAmF,EACnF;YACE,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;QACrD,UAAU,CAAC,eAAe,CAAC,oBAAoB,GAAG,4BAA4B,CAC5E,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAC1C,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,UAAU,CAAC,eAAe,CAAC,iBAAiB,GAAG,yBAAyB,CACtE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAC1C,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAC1C,CAAC,CAAE,KAAK,CAAC,qBAAoC;QAC7C,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAmB;IAC7C,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAU,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,cAAc,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,kDAAkD,EAAE;QACrE,IAAI,EAAE,yCAAyC;QAC/C,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAoB;IAC5C,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5F,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAU,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAoB,EAAE,YAAoB;IACpE,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,IAAI,YAAY;aACvD;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAc;IACvD,OAAO;QACL;YACE,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,MAAM;SAChB;QACD;YACE,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,MAAM;SAChB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAiB;IAC5C,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAClE,CAAC,CAAC,cAAc,CAAC,uBAAuB;QACxC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC;YAC1D,CAAC,CAAE,cAAc,CAAC,gCAAgC,CAAgB;YAClE,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,aAAa,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,eAAe,CACtB,KAAiB,EACjB,WAAkE;IAMlE,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,OAAO,GACX,aAAa,CACX,WAAW,CAAC,EAAE,EACd,QAAQ,CAAC,aAAa,CAAC,EACvB,IAAI,CAAC,KAAK,CAAC,EACX,IAAI,CAAC,EAAE,EACP,QAAQ,CAAC,sBAAsB,CAChC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC9D,MAAM,OAAO,GACX,aAAa,CACX,WAAW,CAAC,OAAO,EACnB,mBAAmB,CAAC,KAAK,CAAC,EAC1B,IAAI,CAAC,UAAU,CAAC,EAChB,IAAI,CAAC,OAAO,EACZ,QAAQ,CAAC,UAAU,CAAC,CACrB,IAAI,uBAAuB,CAAC;IAC/B,MAAM,IAAI,GACR,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC;IAEzF,OAAO;QACL,EAAE,EAAE,OAAO;QACX,OAAO;QACP,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAiB;IAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,UAAU,CAAa,SAAS,CAAC,eAAe,CAAC,CAAC;IAEpE,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO;YACL,WAAW,EACT,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE;YACtF,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE;YAC5F,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,uBAAuB;YACvF,KAAK,EACH,aAAa,CACX,gBAAgB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,EAChD,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAC1B,GAAG,CAAC,cAAc,CAAC,CACpB,IAAI,WAAW,KAAK,GAAG,CAAC,EAAE;YAC7B,qBAAqB,EAAE,sBAAsB,CAC3C,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,uCAAuC,CAAC,CACvF;YACD,oBAAoB,EAAE,QAAQ,CAAC,GAAG,CAAC;YACnC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,uBAAuB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,OAAO,GAAG,UAAU,CAAa,WAAW,CAAC,cAAc,CAAC,CAAC;QAEnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;YACvD,MAAM,eAAe,GAAG,UAAU,CAAa,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5F,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE;gBACtD,MAAM,YAAY,GAAG,aAAa,CAChC,UAAU,CAAC,cAAc,CAAC,EAC1B,UAAU,CAAC,KAAK,CAAC,EACjB,UAAU,CAAC,EAAE,EACb,QAAQ,CAAC,mBAAmB,CAC7B,CAAC;gBACF,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,OAAO;gBACT,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC;oBACT,OAAO,EACL,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC3C,GAAG,QAAQ,CAAC,WAAW,SAAS,SAAS,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE;oBACxE,IAAI,EAAE,QAAQ,CAAC,WAAW;oBAC1B,EAAE,EAAE,YAAY;oBAChB,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACxD,SAAS,EAAE,aAAa,CACtB,QAAQ,CAAC,WAAW,CAAC,EACrB,UAAU,CAAC,WAAW,CAAC,EACvB,QAAQ,CAAC,QAAQ,CAClB;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAiB;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAmD,EAAE,CAAC;IAEjE,uBAAuB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,eAAe;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAmB,EACnB,OAGC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,yBAAyB;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAClE,CAAC,CAAC,cAAc,CAAC,uBAAuB;QACxC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,2CAA2C,OAAO,CAAC,WAAW,EAAE,EAAE;YACnF,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,IAAI,uBAAuB,CAAC;IAC/F,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC,qBAAqB;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,mBAAmB,GAAG,aAAa,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;IAC1F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,SAAS,GAAG,UAAU,CAAa,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrF,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,CACzF,CAAC;IAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAChB,sBAAsB,mBAAmB,IAAI,WAAW,0BAA0B,WAAW,EAAE,EAC/F;YACE,IAAI,EAAE,6CAA6C;YACnD,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,MAAM,aAAa,GAA2B,EAAE,CAAC;IAEjD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACvD,CAAC,CAAC,QAAQ,CAAC,sBAAsB;YACjC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,sBAAsB,CACnC,cAAc,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC,CACnF,CAAC;QAEF,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,YAAY,CAAC,QAAQ,CAAC,GAAG,sBAAsB,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC1F,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,aAAa,CAAC,QAAQ,CAAC,GAAG,sBAAsB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,QAAQ,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;QACtE,CAAC,CAAC,iBAAiB,CAAC,sBAAsB;QAC1C,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,WAAW;QACX,OAAO;QACP,GAAG,EAAE;YACH,cAAc,EAAE,OAAO;SACxB;QACD,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,2BAA2B,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC9D,iBAAiB,EAAE,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;QACrE,kBAAkB,EAAE,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAC5E,eAAe,EAAE,sBAAsB,CACrC,cAAc,CACZ,iBAAiB,CAAC,UAAU,IAAI,iBAAiB,CAAC,eAAe,EACjE,kBAAkB,CACnB,CACF;QACD,YAAY;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,SAAwB;IAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,cAAc,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAClF,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAwB;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,QAAQ,GAAG;IACf,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC;YACH,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,iBAAiB,CAAC,OAA8C;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAE5D,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE,MAAM,CAAC,CACxD,CAAC;YACb,UAAU,CAAa,OAAO,CAAC;iBAC5B,MAAM,CAAC,QAAQ,CAAC;iBAChB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO;gBACT,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBACjE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAiB,EACjB,OAAe,EACf,OAGC;IAED,MAAM,cAAc,GAAG,GAAG,SAAS,IAAI,OAAO,OAAO,CAAC;IAEtD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,cAAc,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAA8C,EAC9C,OAGC;IAKD,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC;IAChE,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,eAAe,GAAiB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAmD,EAAE,CAAC;IAEtE,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,OAAO,EAAE;YAC5D,WAAW;YACX,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,kBAAkB,CAC/B,cAAc,CAAC,SAAS,EAAE,wCAAwC,CAAC,EACnE;gBACE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACpC,UAAU,EAAE,SAAS;aACtB,CACF,CAAC;YACF,OAAO,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;YAC7C,eAAe,CAAC,IAAI,CAAC;gBACnB,UAAU;gBACV,OAAO;gBACP,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,SAAS,IAAK,KAAmB,CAAC;QAC1E,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACxC,OAAO,EAAE,iCAAiC,CAAC,GAAG,CAAC;YAC/C,SAAS;YACT,SAAS,EAAE,gCAAgC;SAC5C,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC;gBAClD,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,gBAAgB,EAAE,IAAI,CAAC,OAAO;gBAC9B,OAAO;gBACP,SAAS;aACV,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YACpE,eAAe,CAAC,IAAI,CAAC;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,iBAAiB,EAAE,IAAI,CAAC,OAAO;gBAC/B,gBAAgB,EAAE,YAAY,CAAC,eAAe;gBAC9C,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,WAAW,EAAE,YAAY,CAAC,UAAU;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAC9C,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAClE,CAAC;IAEF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,mBAAmB;aAChC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,QAAQ,CAChB,sEAAsE,OAAO,GAAG,EAChF;YACE,IAAI,EAAE,0CAA0C;YAChD,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO;QACP,iBAAiB,EAAE;YACjB,sBAAsB,EAAE,aAAa,CAAC,MAAM;YAC5C,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YACnD,uBAAuB,EAAE,WAAW,CAAC,MAAM;YAC3C,2BAA2B,EAAE,YAAY,CAAC,MAAM;YAChD,uBAAuB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACvD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC9C,CAAC,MAAM;YACR,KAAK,EAAE,eAAe;SACvB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAA8C;IAIrE,IAAI,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACtC,OAAO;YACL,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;YAC5D,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAC5C,MAAM,IAAI,QAAQ,CAAC,8DAA8D,EAAE;YACjF,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAChC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EACtC,gCAAgC,CACjC,CAAC;IAEF,OAAO;QACL,eAAe,EAAE,cAAc,CAAC,SAAS,EAAE,wCAAwC,CAAC;QACpF,SAAS,EAAE,SAAS;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAiB;IAIpD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACxD,CAAC,CAAC,QAAQ,CAAC,2BAA2B;QACtC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAiB;IACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,GAAG,GAAG,YAAY,CAAC,2BAA2B,CAAC;IACrD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,uBAAuB,CAC9B,gBAAmC,EACnC,mBAAkC;IAElC,MAAM,WAAW,GAAG,mBAAmB;QACrC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC;QAC3E,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;IAC/E,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,yDAAyD,EAAE;YAC5E,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAoB,EACpB,MAAc,EACd,UAAkB,EAClB,OAEC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,oBAAoB,CAAC,GAAG,UAAU,CAAC;IAC1C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC;IACrC,IAAI,iBAAiB,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,OAerC;IACC,MAAM,cAAc,GAAG,uBAAuB,CAC5C,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,0BAA0B,CACnC,CAAC;IACF,MAAM,SAAS,GAAG,GAAG,cAAc,CAAC,UAAU,IAAI,cAAc,CAAC,eAAe,EAAE,CAAC;IACnF,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoD,CAAC;IAE3E,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5C,IAAI,QAAQ,CAAC,qBAAqB,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;YACxD,CAAC,CAAE,aAAa,CAAC,SAAwB;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,UAAU,CAAa,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACvD,CAAC,CAAC,QAAQ,CAAC,sBAAsB;gBACjC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAE5D,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,GAAG,QAAQ,SAAS,SAAS,EAAE,CAAC;YAC5C,MAAM,YAAY,GAChB,cAAc,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC;gBAClF,QAAQ,CAAC,qBAAqB,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;gBACzE,OAAO;YACT,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;gBACd,MAAM,EAAE,sBAAsB,CAAC,YAAY,CAAC;gBAC5C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GACpB,OAAO,CAAC,cAAc,CACpB,GAAG,kBAAkB,CAAC,UAAU,IAAI,kBAAkB,CAAC,eAAe,EAAE,CACzE,CAAC;QACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAClB,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpD,kBAAkB,CAAC,qBAAqB,CAAC;QAE3C,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACxC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,SAAS,SAAS,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAiB,EAAE,CAAC;IACvC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,2BAA2B,GAAG,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC/D,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAChC,CAAC;IAEF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;QACvC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,qBAAqB,GACzB,QAAQ,KAAK,WAAW,CAAC,iBAAiB;YAC1C,SAAS,KAAK,CAAC,WAAW,CAAC,kBAAkB,IAAI,QAAQ,CAAC;YAC1D,CAAC,2BAA2B,CAAC;QAE/B,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1C,cAAc,IAAI,CAAC,CAAC;QACpB,IAAI,qBAAqB,EAAE,CAAC;YAC1B,2BAA2B,GAAG,UAAU,CAAC;QAC3C,CAAC;QAED,aAAa,CAAC,IAAI,CAChB,uBAAuB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE;YACpE,qBAAqB;SACtB,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAChB,4EAA4E,OAAO,CAAC,aAAa,GAAG,EACpG;YACE,IAAI,EAAE,0CAA0C;YAChD,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC;QAClE,CAAC,CAAE,YAAY,CAAC,kBAAiC;QACjD,CAAC,CAAC,EAAE,CAAC;IACP,YAAY,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;QAC9D,CAAC,CAAE,kBAAkB,CAAC,kBAAiC;QACvD,CAAC,CAAC,EAAE,CAAC;IACP,kBAAkB,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5C,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,UAAU,CAAa,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClG,cAAc,CAAC,IAAI,CACjB,GAAG,iBAAiB,CAClB,SAAS,OAAO,CAAC,IAAI,qDAAqD,OAAO,CAAC,aAAa,0FAA0F,EACzL,aAAa,OAAO,CAAC,aAAa,QAAQ,OAAO,CAAC,IAAI,yDAAyD,CAChH,CACF,CAAC;IACF,QAAQ,CAAC,uBAAuB,CAAC,GAAG,cAAc,CAAC;IAEnD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC;QAC9E,CAAC,CAAE,kBAAkB,CAAC,qBAAoC;QAC1D,CAAC,CAAC,EAAE,CAAC;IACP,kBAAkB,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACjE,qBAAqB,CAAC,wBAAwB,GAAG,2BAA2B,CAAC;IAE7E,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,UAAU,CAAC;QACxD,CAAC,CAAE,kBAAkB,CAAC,UAAyB;QAC/C,CAAC,CAAC,EAAE,CAAC;IACP,kBAAkB,CAAC,UAAU,GAAG,UAAU,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACjG,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,UAAU,CAAC,4BAA4B;YACrC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,SAAS,GAAG;QACvB,QAAQ,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;KACxE,CAAC;IAEF,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,yBAAyB,CAAC;QACrE,CAAC,CAAE,YAAY,CAAC,yBAAwC;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,YAAY,CAAC,yBAAyB,GAAG,cAAc,CAAC;IACxD,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;QAClE,CAAC,CAAE,cAAc,CAAC,uBAAsC;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,cAAc,CAAC,uBAAuB,GAAG,WAAW,CAAC;IACrD,WAAW,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9D,WAAW,CAAC,4BAA4B,CAAC;QACvC,4CAA4C,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,cAAc,EAAE,CAAC;IAEpG,MAAM,sBAAsB,GAAG,QAAQ,CAAC,YAAY,CAAC,sBAAsB,CAAC;QAC1E,CAAC,CAAE,YAAY,CAAC,sBAAqC;QACrD,CAAC,CAAC,EAAE,CAAC;IACP,YAAY,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,sBAAsB,CAAC;QACvE,CAAC,CAAE,sBAAsB,CAAC,sBAAqC;QAC/D,CAAC,CAAC,EAAE,CAAC;IACP,sBAAsB,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1D,MAAM,aAAa,GACjB,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,0BAA0B,CAAC;IAC1F,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;IAExC,QAAQ,CAAC,2BAA2B,GAAG;QACrC,EAAE,EAAE,OAAO,CAAC,aAAa;QACzB,OAAO,EAAE,OAAO,CAAC,kBAAkB;QACnC,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;IAEF,MAAM,QAAQ,GAAe;QAC3B,gCAAgC,EAAE,OAAO,CAAC,aAAa;QACvD,qCAAqC,EAAE,OAAO,CAAC,kBAAkB;QACjE,eAAe,EAAE,OAAO,CAAC,IAAI;QAC7B,oBAAoB,EAAE,OAAO,CAAC,mBAAmB;QACjD,gBAAgB,EAAE,aAAa;QAC/B,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC;KACvC,CAAC;IACF,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACnC,QAAQ,CAAC,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAC/D,CAAC;IAED,YAAY,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IAC3C,YAAY,CAAC,eAAe,GAAG;QAC7B,sBAAsB,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;QACvD,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;KACjC,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAKpC;IAcC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7F,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE;QACrE,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,MAAM,wBAAwB,GAAG,0BAA0B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG;QACpB,eAAe,EAAE,aAAa,CAAC,EAAE;QACjC,oBAAoB,EAAE,aAAa,CAAC,OAAO;QAC3C,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;QAChD,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QACH,KAAK;KACN,CAAC;IACF,MAAM,mBAAmB,GAAG,UAAU,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,gBAAgB,GACpB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU;QACrC,gBAAgB,CAAC,EAAE;QACnB,GAAG,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC1C,MAAM,qBAAqB,GACzB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,IAAI,gBAAgB,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;IAClG,MAAM,KAAK,GAAG;QACZ,oJAAoJ;QACpJ,8DAA8D;KAC/D,CAAC;IAEF,MAAM,cAAc,GAAG,4BAA4B,CAAC;QAClD,aAAa,EAAE,aAAa,CAAC,EAAE;QAC/B,kBAAkB,EAAE,aAAa,CAAC,OAAO;QACzC,eAAe,EAAE,aAAa,CAAC,IAAI;QACnC,mBAAmB;QACnB,SAAS,EAAE,gBAAgB;QAC3B,cAAc,EAAE,qBAAqB;QACrC,IAAI,EAAE,SAAS;QACf,mBAAmB;QACnB,gBAAgB;QAChB,KAAK;QACL,cAAc,EAAE,iBAAiB,CAAC,OAAO;QACzC,0BAA0B,EAAE,wBAAwB;QACpD,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB;QAChE,sBAAsB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,yBAAyB;KAC7E,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAa,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,mMAAmM;YACrM,CAAC,CAAC,qKAAqK,CAC1K,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG;QACzB,EAAE,EAAE,aAAa,CAAC,EAAE;QACpB,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,iBAAiB,EAAE,OAAO,CAAC,SAAS;QACpC,iCAAiC,EAAE,gBAAgB,CAAC,EAAE;QACtD,sCAAsC,EAAE,gBAAgB,CAAC,OAAO;QAChE,6BAA6B,EAAE,wBAAwB;QACvD,wBAAwB,EAAE,iBAAiB,CAAC,iBAAiB;KAC9D,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,YAAY,EAAE,MAAM,EAAE;QACtB,MAAM,EACJ,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;YAC1C,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,uBAAuB;QAC7B,YAAY,EAAE,kBAAkB;QAChC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;QAChD,UAAU,EAAE,gBAAgB,CAAC,MAAM;QACnC,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,6BAA6B,EAAE,wBAAwB;QACvD,wBAAwB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrE,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,oBAAoB,EAAE,mBAAmB;QACzC,yBAAyB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,yBAAyB;QAC/E,wBAAwB,EAAE,iBAAiB,CAAC,iBAAiB;QAC7D,uBAAuB,EAAE,CAAC;QAC1B,KAAK;KACN,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,YAAY,EAAE,kBAAkB;QAChC,mBAAmB,EAAE;YACnB;gBACE,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,gBAAgB;gBACpB,OAAO,EAAE,qBAAqB;gBAC9B,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,YAAY,EAAE,cAAc;gBAC5B,QAAQ,EAAE,cAAc,CAAC,kBAAkB;aAC5C;SACF;QACD,SAAS,EAAE;YACT;gBACE,iBAAiB,EAAE,aAAa,CAAC,EAAE;gBACnC,sBAAsB,EAAE,aAAa,CAAC,OAAO;gBAC7C,oBAAoB,EAAE,gBAAgB;gBACtC,yBAAyB,EAAE,qBAAqB;gBAChD,eAAe,EAAE,SAAS;gBAC1B,oBAAoB,EAAE,mBAAmB;gBACzC,UAAU,EAAE,IAAI;aACjB;SACF;QACD,MAAM;QACN,UAAU,EAAE;YACV,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;YACrC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB;YACjE,yBAAyB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,yBAAyB;SAChF;KACF,CAAC;IAEF,OAAO;QACL,MAAM;QACN,MAAM;QACN,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,OAAe,EAAE,GAAG,GAAS,IAAI,IAAI,EAAE;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC;QACvB,SAAS,EAAE,kCAAkC;QAC7C,OAAO;QACP,SAAS,EAAE,OAAO;QAClB,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,gBAAgB,CACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAClC,kCAAkC,EAClC,KAAK,CACN,CAAC,OAAO,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,OAAiD;IAEjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,iBAAiB,GAAG,8CAA8C,CAAC,KAAK,EAAE;QAC9E,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,eAAe,CACnC,WAAW,CAAC,eAAe,EAC3B,iBAAiB,CAAC,YAAY,CAC/B,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;QAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9B,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC;QAC7C,OAAO,EAAE,iBAAiB;QAC1B,eAAe,EAAE,WAAW,CAAC,eAAe;QAC5C,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,YAAY,EAAE;YACZ,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;YAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAK,KAAmB;SACrD;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,kBAAkB,EAAE,iBAAiB,CACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAC5C,iBAAiB,CAClB;QACD,uBAAuB,EAAE,iBAAiB,CACxC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,8BAA8B,CAAC,EACjD,WAAW,CAAC,eAAe,CAC5B;QACD,oBAAoB,EAAE,iBAAiB,CACrC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,EAC9C,UAAU,CAAC,kBAAkB,CAC9B;QACD,iBAAiB,EAAE,iBAAiB,CAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAC3C,UAAU,CAAC,MAAM,CAClB;QACD,yBAAyB,EAAE,iBAAiB,CAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC,EACnD,UAAU,CAAC,MAAM,CAClB;KACF,CAAC;IAEF,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACrC,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,uBAAuB,EAAE,CAAC;QAC1B,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE;YACZ,EAAE,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;YACpC,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC,OAAO;YAC9C,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,IAAI;YACxC,iBAAiB,EAAE,UAAU,CAAC,kBAAkB,CAAC,iBAAiB;YAClE,iCAAiC,EAC/B,UAAU,CAAC,kBAAkB,CAAC,iCAAiC;YACjE,sCAAsC,EACpC,UAAU,CAAC,kBAAkB,CAAC,sCAAsC;YACtE,6BAA6B,EAAE,UAAU,CAAC,kBAAkB,CAAC,6BAA6B;SAC3F;QACD,KAAK;KACN,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa;IACb,cAAc;IACd,sBAAsB;IACtB,SAAS;IACT,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,uBAAuB;IACvB,YAAY;IACZ,qBAAqB;IACrB,kBAAkB;IAClB,4BAA4B;IAC5B,yBAAyB;IACzB,iBAAiB;IACjB,sBAAsB;IACtB,eAAe;IACf,2BAA2B;IAC3B,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,4BAA4B;IAC5B,qBAAqB;IACrB,aAAa;CACd,CAAC","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport {\n fetchExactOrLatestProcessRow,\n normalizeSupabaseProcessPayload,\n requireSupabaseRestRuntime,\n} from './supabase-rest.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_DATASET_VERSION = '00.00.001';\nconst EPSILON = 1e-10;\nconst REMOTE_PROCESS_LOOKUP_TIMEOUT_MS = 10_000;\n\nexport type ProjectionMode = 'primary-only' | 'all-subproducts';\nexport type PublishIntent = 'dry_run' | 'prepare_only' | 'publish';\n\nexport type LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: string | null;\n version: string | null;\n name: string | null;\n json_ordered_path: string | null;\n json_ordered: JsonObject | null;\n };\n projection: {\n mode: ProjectionMode;\n process_id: string | null;\n process_version: string | null;\n metadata_overrides: JsonObject;\n attach_graph_snapshot: boolean;\n attach_graph_snapshot_uri: string | null;\n };\n process_sources: {\n process_catalog_path: string | null;\n run_dirs: string[];\n process_json_dirs: string[];\n process_json_files: string[];\n allow_remote_lookup: boolean;\n };\n publish: {\n intent: PublishIntent;\n prepare_process_payloads: boolean;\n prepare_relation_payloads: boolean;\n };\n};\n\nexport type LifecyclemodelResultingProcessReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n status: string;\n projected_process_count: number;\n relation_count: number;\n source_model: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n };\n files: {\n normalized_request: string;\n source_model_normalized: string;\n source_model_summary: string;\n projection_report: string;\n process_projection_bundle: string;\n };\n};\n\nexport type RunLifecyclemodelResultingProcessOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n};\n\ntype RemoteProcessLookupContext = {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonObject;\n sourceLabel: string;\n sourcePath: string | null;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: string;\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n};\n\ntype ProcessInstance = {\n instance_id: string;\n process_id: string;\n process_version: string;\n label: string;\n multiplication_factor: number;\n reference_to_process: JsonObject;\n raw: JsonObject;\n};\n\ntype Edge = {\n edge_id: string;\n from: string;\n to: string;\n exchange_id: string | null;\n flow_uuid: string | null;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensureList<T = unknown>(value: unknown): T[] {\n if (value === undefined || value === null) {\n return [];\n }\n\n return Array.isArray(value) ? (value as T[]) : ([value] as T[]);\n}\n\nfunction copyJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction uniqueStrings(values: Array<string | null | undefined>): string[] {\n const unique: string[] = [];\n const seen = new Set<string>();\n\n values.forEach((value) => {\n if (!value) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n unique.push(value);\n });\n\n return unique;\n}\n\nfunction sha256Text(text: string): string {\n return createHash('sha256').update(text).digest('hex');\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction requireRemoteProcessLookupRuntime(env: NodeJS.ProcessEnv) {\n const missing: string[] = [];\n if (typeof env.TIANGONG_LCA_API_BASE_URL !== 'string' || !env.TIANGONG_LCA_API_BASE_URL.trim()) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (\n ![env.TIANGONG_LCA_OAUTH_CLIENT_ID, env.TIANGONG_LCA_ACCESS_TOKEN].some(\n (value) => typeof value === 'string' && value.trim(),\n )\n ) {\n missing.push('TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN');\n }\n\n if (\n typeof env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY !== 'string' ||\n !env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.trim()\n ) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(\n `Remote process lookup requires ${missing.join(', ')} when process_sources.allow_remote_lookup=true.`,\n {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n },\n );\n }\n\n return requireSupabaseRestRuntime(env);\n}\n\nasync function fetchRemoteProcessRecord(options: {\n processId: string;\n requestedVersion: string;\n runtime: ReturnType<typeof createSupabaseDataRuntime>;\n fetchImpl: FetchLike;\n}): Promise<{\n record: ProcessRecord;\n resolution: 'remote_supabase_exact' | 'remote_supabase_latest_fallback';\n sourcePath: string;\n resolvedVersion: string;\n}> {\n const lookupKey = `${options.processId}@${options.requestedVersion}`;\n try {\n const lookup = await fetchExactOrLatestProcessRow({\n runtime: options.runtime,\n id: options.processId,\n version: options.requestedVersion,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n fetchImpl: options.fetchImpl,\n fallbackToLatest: true,\n });\n\n if (!lookup) {\n throw new CliError(`Could not resolve remote process dataset for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_PROCESS_NOT_FOUND',\n exitCode: 2,\n details: { process_id: options.processId, version: options.requestedVersion },\n });\n }\n\n const record = parseProcessRecord(normalizeSupabaseProcessPayload(lookup.row.json, lookupKey), {\n sourceLabel: 'remote:supabase',\n sourcePath: lookup.sourceUrl,\n });\n\n return {\n record,\n resolution:\n lookup.resolution === 'remote_supabase_latest_fallback'\n ? 'remote_supabase_latest_fallback'\n : 'remote_supabase_exact',\n sourcePath: lookup.sourceUrl,\n resolvedVersion: lookup.row.version || record.version,\n };\n } catch (error) {\n if (error instanceof CliError && error.code === 'SUPABASE_REST_RESPONSE_INVALID') {\n throw new CliError(`Remote process lookup returned an invalid response for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_RESPONSE_INVALID',\n exitCode: 1,\n details: error.details,\n });\n }\n\n throw error;\n }\n}\n\nfunction resolveInputPath(baseDir: string, value: string): string;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null {\n if (typeof value !== 'string' || !value.trim()) {\n return null;\n }\n\n const trimmed = value.trim();\n if (trimmed.startsWith('file:')) {\n return trimmed;\n }\n\n if (trimmed.includes('://')) {\n return trimmed;\n }\n\n return path.resolve(baseDir, trimmed);\n}\n\nfunction resolveLocalPath(value: string, fieldName: string): string {\n if (value.startsWith('file:')) {\n return fileURLToPath(value);\n }\n\n if (value.includes('://')) {\n throw new CliError(`${fieldName} must resolve to a local filesystem path.`, {\n code: 'LIFECYCLEMODEL_LOCAL_PATH_REQUIRED',\n exitCode: 2,\n details: value,\n });\n }\n\n return path.resolve(value);\n}\n\nfunction readJsonObject(filePath: string, code: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected a JSON object file: ${filePath}`, {\n code,\n exitCode: 2,\n });\n }\n\n return value;\n}\n\nfunction toFiniteNumber(value: unknown, fieldName: string): number {\n if (value === undefined || value === null || value === '') {\n return 0;\n }\n\n const parsed = typeof value === 'number' ? value : Number(String(value));\n if (!Number.isFinite(parsed)) {\n throw new CliError(`Expected a numeric value for ${fieldName}.`, {\n code: 'LIFECYCLEMODEL_INVALID_NUMBER',\n exitCode: 2,\n details: { fieldName, value },\n });\n }\n\n return parsed;\n}\n\nfunction normalizeNumericOutput(value: number): number {\n const rounded = Math.abs(value) < EPSILON ? 0 : Number.parseFloat(value.toFixed(12));\n return rounded === 0 ? 0 : rounded;\n}\n\nfunction toBoolean(value: unknown, defaultValue: boolean): boolean {\n if (value === undefined) {\n return defaultValue;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n\n return Boolean(value);\n}\n\nfunction normalizeStringArray(value: unknown, fieldName: string): string[] {\n const items = ensureList(value);\n\n return items.map((item, index) => {\n if (typeof item !== 'string' || !item.trim()) {\n throw new CliError(`Expected ${fieldName}[${index}] to be a non-empty string.`, {\n code: 'LIFECYCLEMODEL_INVALID_STRING_ARRAY',\n exitCode: 2,\n details: { fieldName, value: item },\n });\n }\n\n return item.trim();\n });\n}\n\nfunction normalizeProjectionMode(value: unknown): ProjectionMode {\n const mode = firstNonEmpty(value) ?? 'primary-only';\n if (mode === 'primary-only' || mode === 'all-subproducts') {\n return mode;\n }\n\n throw new CliError('projection.mode must be primary-only or all-subproducts.', {\n code: 'LIFECYCLEMODEL_INVALID_PROJECTION_MODE',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizePublishIntent(value: unknown): PublishIntent {\n const intent = firstNonEmpty(value) ?? 'dry_run';\n if (intent === 'dry_run' || intent === 'prepare_only' || intent === 'publish') {\n return intent;\n }\n\n throw new CliError('publish.intent must be dry_run, prepare_only, or publish.', {\n code: 'LIFECYCLEMODEL_INVALID_PUBLISH_INTENT',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizeMetadataOverrides(value: unknown): JsonObject {\n if (value === undefined) {\n return {};\n }\n\n if (!isRecord(value)) {\n throw new CliError('projection.metadata_overrides must be a JSON object when provided.', {\n code: 'LIFECYCLEMODEL_INVALID_METADATA_OVERRIDES',\n exitCode: 2,\n });\n }\n\n return copyJson(value);\n}\n\nexport function normalizeLifecyclemodelResultingProcessRequest(\n input: unknown,\n options: {\n requestPath: string;\n },\n): LifecyclemodelResultingProcessRequest {\n if (!isRecord(input)) {\n throw new CliError('Lifecyclemodel resulting-process request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const baseDir = path.dirname(path.resolve(options.requestPath));\n const sourceModelRaw = isRecord(input.source_model) ? input.source_model : {};\n const projectionRaw = isRecord(input.projection) ? input.projection : {};\n const processSourcesRaw = isRecord(input.process_sources) ? input.process_sources : {};\n const publishRaw = isRecord(input.publish) ? input.publish : {};\n\n const normalized: LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: firstNonEmpty(sourceModelRaw.id),\n version: firstNonEmpty(sourceModelRaw.version),\n name: firstNonEmpty(sourceModelRaw.name),\n json_ordered_path: resolveInputPath(baseDir, sourceModelRaw.json_ordered_path),\n json_ordered: isRecord(sourceModelRaw.json_ordered)\n ? copyJson(sourceModelRaw.json_ordered)\n : null,\n },\n projection: {\n mode: normalizeProjectionMode(projectionRaw.mode),\n process_id: firstNonEmpty(projectionRaw.process_id),\n process_version: firstNonEmpty(projectionRaw.process_version),\n metadata_overrides: normalizeMetadataOverrides(projectionRaw.metadata_overrides),\n attach_graph_snapshot: toBoolean(projectionRaw.attach_graph_snapshot, false),\n attach_graph_snapshot_uri: resolveInputPath(baseDir, projectionRaw.attach_graph_snapshot_uri),\n },\n process_sources: {\n process_catalog_path: (() => {\n const resolved = resolveInputPath(baseDir, processSourcesRaw.process_catalog_path);\n return resolved ? resolveLocalPath(resolved, 'process_sources.process_catalog_path') : null;\n })(),\n run_dirs: normalizeStringArray(processSourcesRaw.run_dirs, 'process_sources.run_dirs').map(\n (item) => resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.run_dirs'),\n ),\n process_json_dirs: normalizeStringArray(\n processSourcesRaw.process_json_dirs,\n 'process_sources.process_json_dirs',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_dirs'),\n ),\n process_json_files: normalizeStringArray(\n processSourcesRaw.process_json_files,\n 'process_sources.process_json_files',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_files'),\n ),\n allow_remote_lookup: toBoolean(\n processSourcesRaw.allow_remote_lookup ?? processSourcesRaw.allow_mcp_lookup,\n false,\n ),\n },\n publish: {\n intent: normalizePublishIntent(publishRaw.intent),\n prepare_process_payloads: toBoolean(publishRaw.prepare_process_payloads, true),\n prepare_relation_payloads: toBoolean(publishRaw.prepare_relation_payloads, true),\n },\n };\n\n if (\n !normalized.source_model.id &&\n !normalized.source_model.json_ordered &&\n !normalized.source_model.json_ordered_path\n ) {\n throw new CliError(\n 'source_model must include at least one of id, json_ordered, or json_ordered_path.',\n {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n if (!normalized.process_sources.process_catalog_path) {\n normalized.process_sources.process_catalog_path = autoDetectProcessCatalogPath(\n normalized.source_model.json_ordered_path,\n );\n }\n\n if (normalized.process_sources.process_json_dirs.length === 0) {\n normalized.process_sources.process_json_dirs = autoDetectProcessJsonDirs(\n normalized.source_model.json_ordered_path,\n );\n }\n\n return normalized;\n}\n\nfunction lifecyclemodelRoot(model: JsonObject): JsonObject {\n return isRecord(model.lifeCycleModelDataSet)\n ? (model.lifeCycleModelDataSet as JsonObject)\n : model;\n}\n\nfunction processDatasetRoot(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n\n for (const key of ['json_ordered', 'json'] as const) {\n const nested = payload[key];\n if (isRecord(nested) && isRecord(nested.processDataSet)) {\n return nested.processDataSet;\n }\n }\n\n throw new CliError('Process payload does not contain processDataSet.', {\n code: 'LIFECYCLEMODEL_PROCESS_DATASET_REQUIRED',\n exitCode: 2,\n });\n}\n\nfunction resolveNameField(namePayload: unknown): string | null {\n if (typeof namePayload === 'string') {\n return namePayload.trim() || null;\n }\n\n if (Array.isArray(namePayload)) {\n for (const item of namePayload) {\n const resolved = resolveNameField(item);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n }\n\n if (!isRecord(namePayload)) {\n return null;\n }\n\n const direct = firstNonEmpty(namePayload['@index'], namePayload['#text'], namePayload.text);\n if (direct) {\n return direct;\n }\n\n for (const key of ['baseName', 'shortName', 'name'] as const) {\n const nested = namePayload[key];\n if (isRecord(nested)) {\n const nestedText = firstNonEmpty(nested['@index'], nested['#text'], nested.text);\n if (nestedText) {\n return nestedText;\n }\n }\n\n const resolved = firstNonEmpty(nested);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n}\n\nfunction normalizedNameInfo(namePayload: unknown, fallbackText: string): JsonObject {\n if (isRecord(namePayload) && Object.keys(namePayload).length > 0) {\n return copyJson(namePayload);\n }\n\n return {\n baseName: [\n {\n '@xml:lang': 'en',\n '#text': resolveNameField(namePayload) ?? fallbackText,\n },\n ],\n };\n}\n\nfunction multilangFromText(enText: string, zhText: string): JsonObject[] {\n return [\n {\n '@xml:lang': 'en',\n '#text': enText,\n },\n {\n '@xml:lang': 'zh',\n '#text': zhText,\n },\n ];\n}\n\nfunction modelDatasetVersion(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const administrative = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : isRecord(administrative['common:publicationAndOwnership'])\n ? (administrative['common:publicationAndOwnership'] as JsonObject)\n : {};\n\n return firstNonEmpty(publication['common:dataSetVersion']);\n}\n\nfunction modelIdentifier(\n model: JsonObject,\n sourceModel: LifecyclemodelResultingProcessRequest['source_model'],\n): {\n id: string;\n version: string;\n name: string;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const modelId =\n firstNonEmpty(\n sourceModel.id,\n dataInfo['common:UUID'],\n root['@id'],\n root.id,\n dataInfo.identifierOfSubDataSet,\n ) ?? `lm-${sha256Text(JSON.stringify(model)).slice(0, 12)}`;\n const version =\n firstNonEmpty(\n sourceModel.version,\n modelDatasetVersion(model),\n root['@version'],\n root.version,\n dataInfo['@version'],\n ) ?? DEFAULT_DATASET_VERSION;\n const name =\n firstNonEmpty(sourceModel.name, resolveNameField(dataInfo.name), root.name) ?? modelId;\n\n return {\n id: modelId,\n version,\n name,\n };\n}\n\nfunction extractProcessInstances(model: JsonObject): ProcessInstance[] {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const technology = isRecord(info.technology)\n ? info.technology\n : isRecord(root.technology)\n ? root.technology\n : {};\n const processes = isRecord(technology.processes) ? technology.processes : {};\n const instances = ensureList<JsonObject>(processes.processInstance);\n\n return instances.filter(isRecord).map((item, index) => {\n const ref = isRecord(item.referenceToProcess) ? item.referenceToProcess : {};\n return {\n instance_id:\n firstNonEmpty(item['@dataSetInternalID'], item['@id'], item.id) ?? `pi-${index + 1}`,\n process_id: firstNonEmpty(ref['@refObjectId'], ref.id, ref.processId) ?? `proc-${index + 1}`,\n process_version: firstNonEmpty(ref['@version'], ref.version) ?? DEFAULT_DATASET_VERSION,\n label:\n firstNonEmpty(\n resolveNameField(ref['common:shortDescription']),\n resolveNameField(ref.shortDescription),\n resolveNameField(ref.name),\n ref['@refObjectId'],\n ) ?? `process-${index + 1}`,\n multiplication_factor: normalizeNumericOutput(\n toFiniteNumber(item['@multiplicationFactor'], 'processInstance.@multiplicationFactor'),\n ),\n reference_to_process: copyJson(ref),\n raw: copyJson(item),\n };\n });\n}\n\nfunction extractEdges(model: JsonObject): Edge[] {\n const edges: Edge[] = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const connections = isRecord(instance.raw.connections) ? instance.raw.connections : {};\n const outputs = ensureList<JsonObject>(connections.outputExchange);\n\n outputs.filter(isRecord).forEach((exchange, edgeIndex) => {\n const downstreamItems = ensureList<JsonObject>(exchange.downstreamProcess).filter(isRecord);\n downstreamItems.forEach((downstream, downstreamIndex) => {\n const downstreamId = firstNonEmpty(\n downstream['@refObjectId'],\n downstream['@id'],\n downstream.id,\n exchange.downstreamProcessId,\n );\n if (!downstreamId) {\n return;\n }\n\n edges.push({\n edge_id:\n firstNonEmpty(exchange['@id'], exchange.id) ??\n `${instance.instance_id}-edge-${edgeIndex + 1}-${downstreamIndex + 1}`,\n from: instance.instance_id,\n to: downstreamId,\n exchange_id: firstNonEmpty(exchange['@id'], exchange.id),\n flow_uuid: firstNonEmpty(\n exchange['@flowUUID'],\n downstream['@flowUUID'],\n exchange.flowUUID,\n ),\n });\n });\n });\n });\n\n return edges;\n}\n\nfunction processReferencePairs(model: JsonObject): Array<{ process_id: string; version: string }> {\n const seen = new Set<string>();\n const pairs: Array<{ process_id: string; version: string }> = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const key = `${instance.process_id}@${instance.process_version}`;\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n pairs.push({\n process_id: instance.process_id,\n version: instance.process_version,\n });\n });\n\n return pairs;\n}\n\nfunction parseProcessRecord(\n payload: JsonObject,\n options: {\n sourceLabel: string;\n sourcePath: string | null;\n },\n): ProcessRecord {\n const dataset = processDatasetRoot(payload);\n const info = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const administrative = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : {};\n const processUuid = firstNonEmpty(dataInfo['common:UUID']);\n if (!processUuid) {\n throw new CliError(`processDataSet missing common:UUID from ${options.sourceLabel}`, {\n code: 'LIFECYCLEMODEL_PROCESS_UUID_REQUIRED',\n exitCode: 2,\n });\n }\n\n const version = firstNonEmpty(publication['common:dataSetVersion']) ?? DEFAULT_DATASET_VERSION;\n const quantitativeReference = isRecord(info.quantitativeReference)\n ? info.quantitativeReference\n : {};\n const referenceInternalId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n const exchangesWrapper = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => String(item['@dataSetInternalID'] ?? '') === String(referenceInternalId ?? ''),\n );\n\n if (!referenceExchange) {\n throw new CliError(\n `reference exchange ${referenceInternalId ?? '(missing)'} not found for process ${processUuid}`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_EXCHANGE_NOT_FOUND',\n exitCode: 2,\n },\n );\n }\n\n const inputAmounts: Record<string, number> = {};\n const outputAmounts: Record<string, number> = {};\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection) ?? '';\n if (!flowUuid) {\n return;\n }\n\n const amount = normalizeNumericOutput(\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount'),\n );\n\n if (direction === 'Input') {\n inputAmounts[flowUuid] = normalizeNumericOutput((inputAmounts[flowUuid] ?? 0) + amount);\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = normalizeNumericOutput((outputAmounts[flowUuid] ?? 0) + amount);\n }\n });\n\n const referenceFlow = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n\n return {\n processUuid,\n version,\n raw: {\n processDataSet: dataset,\n },\n sourceLabel: options.sourceLabel,\n sourcePath: options.sourcePath,\n referenceExchangeInternalId: String(referenceInternalId ?? ''),\n referenceFlowUuid: firstNonEmpty(referenceFlow['@refObjectId']) ?? '',\n referenceDirection: firstNonEmpty(referenceExchange.exchangeDirection) ?? '',\n referenceAmount: normalizeNumericOutput(\n toFiniteNumber(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n 'reference amount',\n ),\n ),\n inputAmounts,\n outputAmounts,\n };\n}\n\nfunction autoDetectProcessCatalogPath(modelPath: string | null): string | null {\n if (!modelPath) {\n return null;\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return null;\n }\n\n if (path.basename(path.dirname(resolved)) !== 'lifecyclemodels') {\n return null;\n }\n\n const tidasBundleDir = path.dirname(path.dirname(resolved));\n if (path.basename(tidasBundleDir) !== 'tidas_bundle') {\n return null;\n }\n\n const candidate = path.join(path.dirname(tidasBundleDir), 'process-catalog.json');\n return existsSync(candidate) ? candidate : null;\n}\n\nfunction autoDetectProcessJsonDirs(modelPath: string | null): string[] {\n if (!modelPath) {\n return [];\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return [];\n }\n\n const candidates = [path.join(path.dirname(resolved), 'processes')];\n\n if (path.basename(path.dirname(resolved)) === 'lifecyclemodels') {\n candidates.push(path.join(path.dirname(path.dirname(resolved)), 'processes'));\n }\n\n const stem = path.basename(resolved, path.extname(resolved));\n if (stem.endsWith('-model')) {\n const prefix = stem.slice(0, -'-model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}-processes`));\n }\n }\n if (stem.endsWith('_model')) {\n const prefix = stem.slice(0, -'_model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}_processes`));\n }\n }\n\n return uniqueStrings(candidates.filter((candidate) => existsSync(candidate)));\n}\n\nconst PathSafe = {\n resolve(value: string): string | null {\n try {\n return resolveLocalPath(value, 'path');\n } catch {\n return null;\n }\n },\n};\n\nfunction processSourceDirs(request: LifecyclemodelResultingProcessRequest): string[] {\n const dirs = [...request.process_sources.process_json_dirs];\n\n request.process_sources.run_dirs.forEach((runDir) => {\n const candidate = path.join(runDir, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n\n if (request.process_sources.process_catalog_path) {\n try {\n const payload = JSON.parse(\n readFileSync(request.process_sources.process_catalog_path, 'utf8'),\n ) as unknown;\n ensureList<JsonObject>(payload)\n .filter(isRecord)\n .forEach((item) => {\n const sourceLabel = firstNonEmpty(item.source_label);\n if (!sourceLabel) {\n return;\n }\n const candidate = path.join(sourceLabel, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n } catch {\n // Keep local process resolution best-effort for catalog expansion.\n }\n }\n\n return uniqueStrings(dirs);\n}\n\nfunction locateLocalProcessFile(\n processId: string,\n version: string,\n options: {\n processDirs: string[];\n processFiles: string[];\n },\n): string | null {\n const targetFileName = `${processId}_${version}.json`;\n\n for (const directory of options.processDirs) {\n const candidate = path.join(directory, targetFileName);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n for (const filePath of options.processFiles) {\n if (existsSync(filePath) && path.basename(filePath) === targetFileName) {\n return filePath;\n }\n }\n\n return null;\n}\n\nasync function resolveProcessRecords(\n request: LifecyclemodelResultingProcessRequest,\n options: {\n sourceModelJson: JsonObject;\n remoteLookup?: RemoteProcessLookupContext;\n },\n): Promise<{\n records: Record<string, ProcessRecord>;\n resolutionSummary: JsonObject;\n}> {\n const requiredPairs = processReferencePairs(options.sourceModelJson);\n const processFiles = request.process_sources.process_json_files;\n const processDirs = processSourceDirs(request);\n const records: Record<string, ProcessRecord> = {};\n const resolutionItems: JsonObject[] = [];\n const unresolved: Array<{ process_id: string; version: string }> = [];\n\n requiredPairs.forEach(({ process_id, version }) => {\n const localPath = locateLocalProcessFile(process_id, version, {\n processDirs,\n processFiles,\n });\n\n if (localPath) {\n const record = parseProcessRecord(\n readJsonObject(localPath, 'LIFECYCLEMODEL_PROCESS_FILE_NOT_OBJECT'),\n {\n sourceLabel: path.dirname(localPath),\n sourcePath: localPath,\n },\n );\n records[`${process_id}@${version}`] = record;\n resolutionItems.push({\n process_id,\n version,\n resolution: 'local_file',\n source_path: localPath,\n });\n return;\n }\n\n unresolved.push({ process_id, version });\n });\n\n if (unresolved.length > 0 && request.process_sources.allow_remote_lookup) {\n const env = options.remoteLookup?.env ?? process.env;\n const fetchImpl = options.remoteLookup?.fetchImpl ?? (fetch as FetchLike);\n const runtime = createSupabaseDataRuntime({\n runtime: requireRemoteProcessLookupRuntime(env),\n fetchImpl,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n });\n\n for (const item of unresolved) {\n const remoteRecord = await fetchRemoteProcessRecord({\n processId: item.process_id,\n requestedVersion: item.version,\n runtime,\n fetchImpl,\n });\n records[`${item.process_id}@${item.version}`] = remoteRecord.record;\n resolutionItems.push({\n process_id: item.process_id,\n requested_version: item.version,\n resolved_version: remoteRecord.resolvedVersion,\n resolution: remoteRecord.resolution,\n source_path: remoteRecord.sourcePath,\n });\n }\n }\n\n const remainingUnresolved = requiredPairs.filter(\n ({ process_id, version }) => !records[`${process_id}@${version}`],\n );\n\n if (remainingUnresolved.length > 0) {\n const missing = remainingUnresolved\n .map((item) => `${item.process_id}@${item.version}`)\n .join(', ');\n throw new CliError(\n `Could not resolve referenced process datasets for lifecycle model: ${missing}.`,\n {\n code: 'LIFECYCLEMODEL_PROCESS_RESOLUTION_FAILED',\n exitCode: 2,\n },\n );\n }\n\n return {\n records,\n resolutionSummary: {\n required_process_count: requiredPairs.length,\n resolved_process_count: Object.keys(records).length,\n local_process_dir_count: processDirs.length,\n explicit_process_file_count: processFiles.length,\n remote_resolution_count: resolutionItems.filter((item) =>\n String(item.resolution).startsWith('remote_'),\n ).length,\n items: resolutionItems,\n },\n };\n}\n\nfunction loadSourceModel(request: LifecyclemodelResultingProcessRequest): {\n sourceModelJson: JsonObject;\n modelPath: string | null;\n} {\n if (request.source_model.json_ordered) {\n return {\n sourceModelJson: copyJson(request.source_model.json_ordered),\n modelPath: null,\n };\n }\n\n if (!request.source_model.json_ordered_path) {\n throw new CliError('source_model must include json_ordered or json_ordered_path.', {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_PATH_REQUIRED',\n exitCode: 2,\n });\n }\n\n const localPath = resolveLocalPath(\n request.source_model.json_ordered_path,\n 'source_model.json_ordered_path',\n );\n\n return {\n sourceModelJson: readJsonObject(localPath, 'LIFECYCLEMODEL_SOURCE_MODEL_NOT_OBJECT'),\n modelPath: localPath,\n };\n}\n\nfunction referenceToResultingProcess(model: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const ref = isRecord(dataInfo.referenceToResultingProcess)\n ? dataInfo.referenceToResultingProcess\n : {};\n\n return {\n id: firstNonEmpty(ref['@refObjectId'], ref.id),\n version: firstNonEmpty(ref['@version'], ref.version),\n };\n}\n\nfunction referenceProcessInstanceId(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const quantitative = isRecord(info.quantitativeReference) ? info.quantitativeReference : {};\n const ref = quantitative.referenceToReferenceProcess;\n return isRecord(ref) ? firstNonEmpty(ref['@refObjectId'], ref.id) : firstNonEmpty(ref);\n}\n\nfunction chooseReferenceInstance(\n processInstances: ProcessInstance[],\n requestedInstanceId: string | null,\n): ProcessInstance {\n const directMatch = requestedInstanceId\n ? processInstances.find((item) => item.instance_id === requestedInstanceId)\n : null;\n if (directMatch) {\n return directMatch;\n }\n\n const scaled = processInstances.find((item) => item.multiplication_factor > 0);\n if (scaled) {\n return scaled;\n }\n\n const fallback = processInstances[0];\n if (!fallback) {\n throw new CliError('Lifecycle model does not contain any process instances.', {\n code: 'LIFECYCLEMODEL_PROCESS_INSTANCES_REQUIRED',\n exitCode: 2,\n });\n }\n\n return fallback;\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonObject,\n amount: number,\n internalId: string,\n options: {\n quantitativeReference: boolean;\n },\n): JsonObject {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const normalizedAmount = normalizeNumericOutput(amount);\n cloned.meanAmount = normalizedAmount;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = normalizedAmount;\n }\n cloned.quantitativeReference = options.quantitativeReference;\n return cloned;\n}\n\nfunction buildResultingProcessPayload(options: {\n sourceModelId: string;\n sourceModelVersion: string;\n sourceModelName: string;\n sourceModelNameInfo: JsonObject;\n processId: string;\n processVersion: string;\n role: 'primary';\n projectionSignature: string;\n processInstances: ProcessInstance[];\n edges: Edge[];\n processRecords: Record<string, ProcessRecord>;\n referenceProcessInstanceId: string | null;\n metadataOverrides: JsonObject;\n attachGraphSnapshotUri: string | null;\n}): JsonObject {\n const chosenInstance = chooseReferenceInstance(\n options.processInstances,\n options.referenceProcessInstanceId,\n );\n const chosenKey = `${chosenInstance.process_id}@${chosenInstance.process_version}`;\n const finalRecord = options.processRecords[chosenKey];\n const finalProcess = copyJson(finalRecord.raw);\n const finalDataset = processDatasetRoot(finalProcess);\n const totals = new Map<string, { amount: number; exchange: JsonObject }>();\n\n options.processInstances.forEach((instance) => {\n if (instance.multiplication_factor === 0) {\n return;\n }\n\n const record = options.processRecords[`${instance.process_id}@${instance.process_version}`];\n const recordDataset = processDatasetRoot(record.raw);\n const exchangesWrapper = isRecord(recordDataset.exchanges)\n ? (recordDataset.exchanges as JsonObject)\n : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection);\n\n if (!flowUuid || (direction !== 'Input' && direction !== 'Output')) {\n return;\n }\n\n const key = `${flowUuid}\\u0000${direction}`;\n const scaledAmount =\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount') *\n instance.multiplication_factor;\n const existing = totals.get(key);\n if (existing) {\n existing.amount = normalizeNumericOutput(existing.amount + scaledAmount);\n return;\n }\n\n totals.set(key, {\n amount: normalizeNumericOutput(scaledAmount),\n exchange: copyJson(exchange),\n });\n });\n });\n\n const instanceById = new Map(options.processInstances.map((item) => [item.instance_id, item]));\n options.edges.forEach((edge) => {\n if (!edge.flow_uuid) {\n return;\n }\n\n const downstreamInstance = instanceById.get(edge.to);\n if (!downstreamInstance) {\n return;\n }\n\n const downstreamRecord =\n options.processRecords[\n `${downstreamInstance.process_id}@${downstreamInstance.process_version}`\n ];\n if (!downstreamRecord) {\n return;\n }\n\n const internalAmount =\n (downstreamRecord.inputAmounts[edge.flow_uuid] ?? 0) *\n downstreamInstance.multiplication_factor;\n\n ['Output', 'Input'].forEach((direction) => {\n const key = `${edge.flow_uuid}\\u0000${direction}`;\n const existing = totals.get(key);\n if (!existing) {\n return;\n }\n\n existing.amount = normalizeNumericOutput(existing.amount - internalAmount);\n });\n });\n\n const exchangeItems: JsonObject[] = [];\n let nextInternalId = 1;\n let referenceExchangeInternalId = '';\n const sortedEntries = [...totals.entries()].sort((left, right) =>\n left[0].localeCompare(right[0]),\n );\n\n sortedEntries.forEach(([key, payload]) => {\n if (payload.amount <= 0) {\n return;\n }\n\n const [flowUuid, direction] = key.split('\\u0000');\n const quantitativeReference =\n flowUuid === finalRecord.referenceFlowUuid &&\n direction === (finalRecord.referenceDirection || 'Output') &&\n !referenceExchangeInternalId;\n\n const internalId = String(nextInternalId);\n nextInternalId += 1;\n if (quantitativeReference) {\n referenceExchangeInternalId = internalId;\n }\n\n exchangeItems.push(\n cloneExchangeWithAmount(payload.exchange, payload.amount, internalId, {\n quantitativeReference,\n }),\n );\n });\n\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `Could not build resulting process reference exchange for lifecycle model ${options.sourceModelId}.`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_OUTPUT_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const processInformation = isRecord(finalDataset.processInformation)\n ? (finalDataset.processInformation as JsonObject)\n : {};\n finalDataset.processInformation = processInformation;\n const dataInfo = isRecord(processInformation.dataSetInformation)\n ? (processInformation.dataSetInformation as JsonObject)\n : {};\n processInformation.dataSetInformation = dataInfo;\n dataInfo['common:UUID'] = options.processId;\n dataInfo.name = copyJson(options.sourceModelNameInfo);\n const generalComment = ensureList<JsonObject>(dataInfo['common:generalComment']).filter(isRecord);\n generalComment.push(\n ...multilangFromText(\n `Local ${options.role} resulting process generated from lifecycle model ${options.sourceModelId}; exchanges are aggregated from included processes with internal linked flows cancelled.`,\n `本地为生命周期模型 ${options.sourceModelId} 生成的 ${options.role} resulting process;其 exchanges 由包含过程聚合并抵消内部连接 flow 后得到。`,\n ),\n );\n dataInfo['common:generalComment'] = generalComment;\n\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? (processInformation.quantitativeReference as JsonObject)\n : {};\n processInformation.quantitativeReference = quantitativeReference;\n quantitativeReference.referenceToReferenceFlow = referenceExchangeInternalId;\n\n const technology = isRecord(processInformation.technology)\n ? (processInformation.technology as JsonObject)\n : {};\n processInformation.technology = technology;\n const includedRefs = options.processInstances.map((item) => copyJson(item.reference_to_process));\n if (includedRefs.length > 0) {\n technology.referenceToIncludedProcesses =\n includedRefs.length === 1 ? includedRefs[0] : includedRefs;\n }\n\n finalDataset.exchanges = {\n exchange: exchangeItems.length === 1 ? exchangeItems[0] : exchangeItems,\n };\n\n const administrative = isRecord(finalDataset.administrativeInformation)\n ? (finalDataset.administrativeInformation as JsonObject)\n : {};\n finalDataset.administrativeInformation = administrative;\n const publication = isRecord(administrative.publicationAndOwnership)\n ? (administrative.publicationAndOwnership as JsonObject)\n : {};\n administrative.publicationAndOwnership = publication;\n publication['common:dataSetVersion'] = options.processVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/processes/${options.processId}?version=${options.processVersion}`;\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? (finalDataset.modellingAndValidation as JsonObject)\n : {};\n finalDataset.modellingAndValidation = modellingAndValidation;\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? (modellingAndValidation.LCIMethodAndAllocation as JsonObject)\n : {};\n modellingAndValidation.LCIMethodAndAllocation = lciMethod;\n const typeOfDataSet =\n firstNonEmpty(options.metadataOverrides.type_of_data_set) ?? 'partly terminated system';\n lciMethod.typeOfDataSet = typeOfDataSet;\n\n dataInfo.generatedFromLifecycleModel = {\n id: options.sourceModelId,\n version: options.sourceModelVersion,\n role: options.role,\n };\n\n const metadata: JsonObject = {\n generated_from_lifecyclemodel_id: options.sourceModelId,\n generated_from_lifecyclemodel_version: options.sourceModelVersion,\n projection_role: options.role,\n projection_signature: options.projectionSignature,\n type_of_data_set: typeOfDataSet,\n ...copyJson(options.metadataOverrides),\n };\n if (options.attachGraphSnapshotUri) {\n metadata.graph_snapshot_uri = options.attachGraphSnapshotUri;\n }\n\n finalProcess.projectionMetadata = metadata;\n finalProcess.topologySummary = {\n process_instance_count: options.processInstances.length,\n edge_count: options.edges.length,\n };\n\n return finalProcess;\n}\n\nasync function buildProjectionBundle(options: {\n request: LifecyclemodelResultingProcessRequest;\n sourceModelJson: JsonObject;\n modelPath: string | null;\n remoteLookup?: RemoteProcessLookupContext;\n}): Promise<{\n bundle: JsonObject;\n report: JsonObject;\n sourceModelSummary: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n resolved_process_summary: JsonObject;\n };\n}> {\n const root = lifecyclemodelRoot(options.sourceModelJson);\n const modelInfo = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const modelDataInfo = isRecord(modelInfo.dataSetInformation) ? modelInfo.dataSetInformation : {};\n const modelIdentity = modelIdentifier(options.sourceModelJson, options.request.source_model);\n const sourceModelNameInfo = normalizedNameInfo(modelDataInfo.name, modelIdentity.name);\n const processInstances = extractProcessInstances(options.sourceModelJson);\n const edges = extractEdges(options.sourceModelJson);\n const processResolution = await resolveProcessRecords(options.request, {\n sourceModelJson: options.sourceModelJson,\n remoteLookup: options.remoteLookup,\n });\n const referenceProcess = referenceToResultingProcess(options.sourceModelJson);\n const referenceProcessInstance = referenceProcessInstanceId(options.sourceModelJson);\n const signatureSeed = {\n source_model_id: modelIdentity.id,\n source_model_version: modelIdentity.version,\n projection_mode: options.request.projection.mode,\n process_instances: processInstances.map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n process_version: item.process_version,\n })),\n edges,\n };\n const projectionSignature = `sha256:${sha256Text(JSON.stringify(signatureSeed))}`;\n const primaryProcessId =\n options.request.projection.process_id ??\n referenceProcess.id ??\n `${modelIdentity.id}-resulting-process`;\n const primaryProcessVersion =\n options.request.projection.process_version ?? referenceProcess.version ?? modelIdentity.version;\n const notes = [\n 'This command materializes a deterministic resulting processDataSet by aggregating included process exchanges and cancelling internal linked flows.',\n 'Remote writes remain gated behind an explicit publish layer.',\n ];\n\n const primaryPayload = buildResultingProcessPayload({\n sourceModelId: modelIdentity.id,\n sourceModelVersion: modelIdentity.version,\n sourceModelName: modelIdentity.name,\n sourceModelNameInfo,\n processId: primaryProcessId,\n processVersion: primaryProcessVersion,\n role: 'primary',\n projectionSignature,\n processInstances,\n edges,\n processRecords: processResolution.records,\n referenceProcessInstanceId: referenceProcessInstance,\n metadataOverrides: options.request.projection.metadata_overrides,\n attachGraphSnapshotUri: options.request.projection.attach_graph_snapshot_uri,\n });\n\n if (options.request.projection.mode === 'all-subproducts') {\n const jsonTg = isRecord(root.json_tg) ? root.json_tg : {};\n const submodels = ensureList<JsonObject>(jsonTg.submodels).filter(isRecord);\n notes.push(\n submodels.length > 0\n ? 'Subproduct projection was requested, but this lifecycle model only carries submodel metadata and no submodel-specific topology slices; only the primary aggregated resulting process was emitted.'\n : 'Subproduct projection was requested, but the lifecycle model does not expose submodel topology metadata; only the primary aggregated resulting process was emitted.',\n );\n }\n\n const sourceModelSummary = {\n id: modelIdentity.id,\n version: modelIdentity.version,\n name: modelIdentity.name,\n json_ordered_path: options.modelPath,\n reference_to_resulting_process_id: referenceProcess.id,\n reference_to_resulting_process_version: referenceProcess.version,\n reference_process_instance_id: referenceProcessInstance,\n resolved_process_summary: processResolution.resolutionSummary,\n };\n\n const report = {\n generated_at: nowIso(),\n status:\n options.request.publish.intent === 'publish'\n ? 'projected_local_bundle'\n : 'prepared_local_bundle',\n source_model: sourceModelSummary,\n projection_mode: options.request.projection.mode,\n node_count: processInstances.length,\n edge_count: edges.length,\n reference_process_instance_id: referenceProcessInstance,\n process_instance_preview: processInstances.slice(0, 10).map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n label: item.label,\n })),\n edge_preview: edges.slice(0, 10),\n projection_signature: projectionSignature,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n resolved_process_summary: processResolution.resolutionSummary,\n projected_process_count: 1,\n notes,\n };\n\n const bundle = {\n source_model: sourceModelSummary,\n projected_processes: [\n {\n role: 'primary',\n id: primaryProcessId,\n version: primaryProcessVersion,\n name: modelIdentity.name,\n json_ordered: primaryPayload,\n metadata: primaryPayload.projectionMetadata,\n },\n ],\n relations: [\n {\n lifecyclemodel_id: modelIdentity.id,\n lifecyclemodel_version: modelIdentity.version,\n resulting_process_id: primaryProcessId,\n resulting_process_version: primaryProcessVersion,\n projection_role: 'primary',\n projection_signature: projectionSignature,\n is_primary: true,\n },\n ],\n report,\n projection: {\n mode: options.request.projection.mode,\n metadata_overrides: options.request.projection.metadata_overrides,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n },\n };\n\n return {\n bundle,\n report,\n sourceModelSummary,\n };\n}\n\nfunction defaultOutDir(requestPath: string, subject: string, now: Date = new Date()): string {\n const requestDir = path.dirname(path.resolve(requestPath));\n const runId = buildRunId({\n namespace: 'lifecyclemodel_resulting_process',\n subject,\n operation: 'build',\n now,\n });\n\n return resolveRunLayout(\n path.join(requestDir, 'artifacts'),\n 'lifecyclemodel_resulting_process',\n runId,\n ).runRoot;\n}\n\nexport async function runLifecyclemodelBuildResultingProcess(\n options: RunLifecyclemodelResultingProcessOptions,\n): Promise<LifecyclemodelResultingProcessReport> {\n const requestPath = path.resolve(options.inputPath);\n const input = readJsonInput(requestPath);\n const normalizedRequest = normalizeLifecyclemodelResultingProcessRequest(input, {\n requestPath,\n });\n const sourceModel = loadSourceModel(normalizedRequest);\n const modelIdentity = modelIdentifier(\n sourceModel.sourceModelJson,\n normalizedRequest.source_model,\n );\n const outDir = options.outDir\n ? path.resolve(options.outDir)\n : defaultOutDir(requestPath, modelIdentity.id, options.now);\n const projection = await buildProjectionBundle({\n request: normalizedRequest,\n sourceModelJson: sourceModel.sourceModelJson,\n modelPath: sourceModel.modelPath,\n remoteLookup: {\n env: options.env ?? process.env,\n fetchImpl: options.fetchImpl ?? (fetch as FetchLike),\n },\n });\n\n const files = {\n normalized_request: writeJsonArtifact(\n path.join(outDir, 'request.normalized.json'),\n normalizedRequest,\n ),\n source_model_normalized: writeJsonArtifact(\n path.join(outDir, 'source-model.normalized.json'),\n sourceModel.sourceModelJson,\n ),\n source_model_summary: writeJsonArtifact(\n path.join(outDir, 'source-model.summary.json'),\n projection.sourceModelSummary,\n ),\n projection_report: writeJsonArtifact(\n path.join(outDir, 'projection-report.json'),\n projection.report,\n ),\n process_projection_bundle: writeJsonArtifact(\n path.join(outDir, 'process-projection-bundle.json'),\n projection.bundle,\n ),\n };\n\n return {\n generated_at_utc: nowIso(options.now),\n request_path: requestPath,\n out_dir: outDir,\n status: String(projection.report.status),\n projected_process_count: 1,\n relation_count: 1,\n source_model: {\n id: projection.sourceModelSummary.id,\n version: projection.sourceModelSummary.version,\n name: projection.sourceModelSummary.name,\n json_ordered_path: projection.sourceModelSummary.json_ordered_path,\n reference_to_resulting_process_id:\n projection.sourceModelSummary.reference_to_resulting_process_id,\n reference_to_resulting_process_version:\n projection.sourceModelSummary.reference_to_resulting_process_version,\n reference_process_instance_id: projection.sourceModelSummary.reference_process_instance_id,\n },\n files,\n };\n}\n\n// Exposed for deterministic unit coverage of internal lifecyclemodel fallback logic.\nexport const __testInternals = {\n uniqueStrings,\n toFiniteNumber,\n normalizeNumericOutput,\n toBoolean,\n resolveNameField,\n normalizedNameInfo,\n modelIdentifier,\n extractProcessInstances,\n extractEdges,\n processReferencePairs,\n parseProcessRecord,\n autoDetectProcessCatalogPath,\n autoDetectProcessJsonDirs,\n processSourceDirs,\n locateLocalProcessFile,\n loadSourceModel,\n referenceToResultingProcess,\n referenceProcessInstanceId,\n chooseReferenceInstance,\n cloneExchangeWithAmount,\n buildResultingProcessPayload,\n buildProjectionBundle,\n defaultOutDir,\n};\n"]}
1
+ {"version":3,"file":"lifecyclemodel-resulting-process.js","sourceRoot":"","sources":["../../../src/lib/lifecyclemodel-resulting-process.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport { resolveProductionRuntimeEnv } from './env.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport {\n fetchExactOrLatestProcessRow,\n normalizeSupabaseProcessPayload,\n requireSupabaseRestRuntime,\n} from './supabase-rest.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_DATASET_VERSION = '00.00.001';\nconst EPSILON = 1e-10;\nconst REMOTE_PROCESS_LOOKUP_TIMEOUT_MS = 10_000;\n\nexport type ProjectionMode = 'primary-only' | 'all-subproducts';\nexport type PublishIntent = 'dry_run' | 'prepare_only' | 'publish';\n\nexport type LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: string | null;\n version: string | null;\n name: string | null;\n json_ordered_path: string | null;\n json_ordered: JsonObject | null;\n };\n projection: {\n mode: ProjectionMode;\n process_id: string | null;\n process_version: string | null;\n metadata_overrides: JsonObject;\n attach_graph_snapshot: boolean;\n attach_graph_snapshot_uri: string | null;\n };\n process_sources: {\n process_catalog_path: string | null;\n run_dirs: string[];\n process_json_dirs: string[];\n process_json_files: string[];\n allow_remote_lookup: boolean;\n };\n publish: {\n intent: PublishIntent;\n prepare_process_payloads: boolean;\n prepare_relation_payloads: boolean;\n };\n};\n\nexport type LifecyclemodelResultingProcessReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n status: string;\n projected_process_count: number;\n relation_count: number;\n source_model: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n };\n files: {\n normalized_request: string;\n source_model_normalized: string;\n source_model_summary: string;\n projection_report: string;\n process_projection_bundle: string;\n };\n};\n\nexport type RunLifecyclemodelResultingProcessOptions = {\n inputPath: string;\n outDir?: string | null;\n now?: Date;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n};\n\ntype RemoteProcessLookupContext = {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n};\n\ntype ProcessRecord = {\n processUuid: string;\n version: string;\n raw: JsonObject;\n sourceLabel: string;\n sourcePath: string | null;\n referenceExchangeInternalId: string;\n referenceFlowUuid: string;\n referenceDirection: string;\n referenceAmount: number;\n inputAmounts: Record<string, number>;\n outputAmounts: Record<string, number>;\n};\n\ntype ProcessInstance = {\n instance_id: string;\n process_id: string;\n process_version: string;\n label: string;\n multiplication_factor: number;\n reference_to_process: JsonObject;\n raw: JsonObject;\n};\n\ntype Edge = {\n edge_id: string;\n from: string;\n to: string;\n exchange_id: string | null;\n flow_uuid: string | null;\n};\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensureList<T = unknown>(value: unknown): T[] {\n if (value === undefined || value === null) {\n return [];\n }\n\n return Array.isArray(value) ? (value as T[]) : ([value] as T[]);\n}\n\nfunction copyJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction firstNonEmpty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction uniqueStrings(values: Array<string | null | undefined>): string[] {\n const unique: string[] = [];\n const seen = new Set<string>();\n\n values.forEach((value) => {\n if (!value) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n\n seen.add(value);\n unique.push(value);\n });\n\n return unique;\n}\n\nfunction sha256Text(text: string): string {\n return createHash('sha256').update(text).digest('hex');\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction requireRemoteProcessLookupRuntime(configuredEnv: NodeJS.ProcessEnv) {\n const env = resolveProductionRuntimeEnv(configuredEnv);\n const missing: string[] = [];\n if (typeof env.TIANGONG_LCA_API_BASE_URL !== 'string' || !env.TIANGONG_LCA_API_BASE_URL.trim()) {\n missing.push('TIANGONG_LCA_API_BASE_URL');\n }\n\n if (\n ![env.TIANGONG_LCA_OAUTH_CLIENT_ID, env.TIANGONG_LCA_ACCESS_TOKEN].some(\n (value) => typeof value === 'string' && value.trim(),\n )\n ) {\n missing.push('TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN');\n }\n\n if (\n typeof env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY !== 'string' ||\n !env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY.trim()\n ) {\n missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');\n }\n\n if (missing.length > 0) {\n throw new CliError(\n `Remote process lookup requires ${missing.join(', ')} when process_sources.allow_remote_lookup=true.`,\n {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_ENV_REQUIRED',\n exitCode: 2,\n details: { missing },\n },\n );\n }\n\n return requireSupabaseRestRuntime(env);\n}\n\nasync function fetchRemoteProcessRecord(options: {\n processId: string;\n requestedVersion: string;\n runtime: ReturnType<typeof createSupabaseDataRuntime>;\n fetchImpl: FetchLike;\n}): Promise<{\n record: ProcessRecord;\n resolution: 'remote_supabase_exact' | 'remote_supabase_latest_fallback';\n sourcePath: string;\n resolvedVersion: string;\n}> {\n const lookupKey = `${options.processId}@${options.requestedVersion}`;\n try {\n const lookup = await fetchExactOrLatestProcessRow({\n runtime: options.runtime,\n id: options.processId,\n version: options.requestedVersion,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n fetchImpl: options.fetchImpl,\n fallbackToLatest: true,\n });\n\n if (!lookup) {\n throw new CliError(`Could not resolve remote process dataset for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_PROCESS_NOT_FOUND',\n exitCode: 2,\n details: { process_id: options.processId, version: options.requestedVersion },\n });\n }\n\n const record = parseProcessRecord(normalizeSupabaseProcessPayload(lookup.row.json, lookupKey), {\n sourceLabel: 'remote:supabase',\n sourcePath: lookup.sourceUrl,\n });\n\n return {\n record,\n resolution:\n lookup.resolution === 'remote_supabase_latest_fallback'\n ? 'remote_supabase_latest_fallback'\n : 'remote_supabase_exact',\n sourcePath: lookup.sourceUrl,\n resolvedVersion: lookup.row.version || record.version,\n };\n } catch (error) {\n if (error instanceof CliError && error.code === 'SUPABASE_REST_RESPONSE_INVALID') {\n throw new CliError(`Remote process lookup returned an invalid response for ${lookupKey}.`, {\n code: 'LIFECYCLEMODEL_REMOTE_LOOKUP_RESPONSE_INVALID',\n exitCode: 1,\n details: error.details,\n });\n }\n\n throw error;\n }\n}\n\nfunction resolveInputPath(baseDir: string, value: string): string;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null;\nfunction resolveInputPath(baseDir: string, value: unknown): string | null {\n if (typeof value !== 'string' || !value.trim()) {\n return null;\n }\n\n const trimmed = value.trim();\n if (trimmed.startsWith('file:')) {\n return trimmed;\n }\n\n if (trimmed.includes('://')) {\n return trimmed;\n }\n\n return path.resolve(baseDir, trimmed);\n}\n\nfunction resolveLocalPath(value: string, fieldName: string): string {\n if (value.startsWith('file:')) {\n return fileURLToPath(value);\n }\n\n if (value.includes('://')) {\n throw new CliError(`${fieldName} must resolve to a local filesystem path.`, {\n code: 'LIFECYCLEMODEL_LOCAL_PATH_REQUIRED',\n exitCode: 2,\n details: value,\n });\n }\n\n return path.resolve(value);\n}\n\nfunction readJsonObject(filePath: string, code: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected a JSON object file: ${filePath}`, {\n code,\n exitCode: 2,\n });\n }\n\n return value;\n}\n\nfunction toFiniteNumber(value: unknown, fieldName: string): number {\n if (value === undefined || value === null || value === '') {\n return 0;\n }\n\n const parsed = typeof value === 'number' ? value : Number(String(value));\n if (!Number.isFinite(parsed)) {\n throw new CliError(`Expected a numeric value for ${fieldName}.`, {\n code: 'LIFECYCLEMODEL_INVALID_NUMBER',\n exitCode: 2,\n details: { fieldName, value },\n });\n }\n\n return parsed;\n}\n\nfunction normalizeNumericOutput(value: number): number {\n const rounded = Math.abs(value) < EPSILON ? 0 : Number.parseFloat(value.toFixed(12));\n return rounded === 0 ? 0 : rounded;\n}\n\nfunction toBoolean(value: unknown, defaultValue: boolean): boolean {\n if (value === undefined) {\n return defaultValue;\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n\n return Boolean(value);\n}\n\nfunction normalizeStringArray(value: unknown, fieldName: string): string[] {\n const items = ensureList(value);\n\n return items.map((item, index) => {\n if (typeof item !== 'string' || !item.trim()) {\n throw new CliError(`Expected ${fieldName}[${index}] to be a non-empty string.`, {\n code: 'LIFECYCLEMODEL_INVALID_STRING_ARRAY',\n exitCode: 2,\n details: { fieldName, value: item },\n });\n }\n\n return item.trim();\n });\n}\n\nfunction normalizeProjectionMode(value: unknown): ProjectionMode {\n const mode = firstNonEmpty(value) ?? 'primary-only';\n if (mode === 'primary-only' || mode === 'all-subproducts') {\n return mode;\n }\n\n throw new CliError('projection.mode must be primary-only or all-subproducts.', {\n code: 'LIFECYCLEMODEL_INVALID_PROJECTION_MODE',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizePublishIntent(value: unknown): PublishIntent {\n const intent = firstNonEmpty(value) ?? 'dry_run';\n if (intent === 'dry_run' || intent === 'prepare_only' || intent === 'publish') {\n return intent;\n }\n\n throw new CliError('publish.intent must be dry_run, prepare_only, or publish.', {\n code: 'LIFECYCLEMODEL_INVALID_PUBLISH_INTENT',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction normalizeMetadataOverrides(value: unknown): JsonObject {\n if (value === undefined) {\n return {};\n }\n\n if (!isRecord(value)) {\n throw new CliError('projection.metadata_overrides must be a JSON object when provided.', {\n code: 'LIFECYCLEMODEL_INVALID_METADATA_OVERRIDES',\n exitCode: 2,\n });\n }\n\n return copyJson(value);\n}\n\nexport function normalizeLifecyclemodelResultingProcessRequest(\n input: unknown,\n options: {\n requestPath: string;\n },\n): LifecyclemodelResultingProcessRequest {\n if (!isRecord(input)) {\n throw new CliError('Lifecyclemodel resulting-process request must be a JSON object.', {\n code: 'LIFECYCLEMODEL_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const baseDir = path.dirname(path.resolve(options.requestPath));\n const sourceModelRaw = isRecord(input.source_model) ? input.source_model : {};\n const projectionRaw = isRecord(input.projection) ? input.projection : {};\n const processSourcesRaw = isRecord(input.process_sources) ? input.process_sources : {};\n const publishRaw = isRecord(input.publish) ? input.publish : {};\n\n const normalized: LifecyclemodelResultingProcessRequest = {\n source_model: {\n id: firstNonEmpty(sourceModelRaw.id),\n version: firstNonEmpty(sourceModelRaw.version),\n name: firstNonEmpty(sourceModelRaw.name),\n json_ordered_path: resolveInputPath(baseDir, sourceModelRaw.json_ordered_path),\n json_ordered: isRecord(sourceModelRaw.json_ordered)\n ? copyJson(sourceModelRaw.json_ordered)\n : null,\n },\n projection: {\n mode: normalizeProjectionMode(projectionRaw.mode),\n process_id: firstNonEmpty(projectionRaw.process_id),\n process_version: firstNonEmpty(projectionRaw.process_version),\n metadata_overrides: normalizeMetadataOverrides(projectionRaw.metadata_overrides),\n attach_graph_snapshot: toBoolean(projectionRaw.attach_graph_snapshot, false),\n attach_graph_snapshot_uri: resolveInputPath(baseDir, projectionRaw.attach_graph_snapshot_uri),\n },\n process_sources: {\n process_catalog_path: (() => {\n const resolved = resolveInputPath(baseDir, processSourcesRaw.process_catalog_path);\n return resolved ? resolveLocalPath(resolved, 'process_sources.process_catalog_path') : null;\n })(),\n run_dirs: normalizeStringArray(processSourcesRaw.run_dirs, 'process_sources.run_dirs').map(\n (item) => resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.run_dirs'),\n ),\n process_json_dirs: normalizeStringArray(\n processSourcesRaw.process_json_dirs,\n 'process_sources.process_json_dirs',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_dirs'),\n ),\n process_json_files: normalizeStringArray(\n processSourcesRaw.process_json_files,\n 'process_sources.process_json_files',\n ).map((item) =>\n resolveLocalPath(resolveInputPath(baseDir, item), 'process_sources.process_json_files'),\n ),\n allow_remote_lookup: toBoolean(\n processSourcesRaw.allow_remote_lookup ?? processSourcesRaw.allow_mcp_lookup,\n false,\n ),\n },\n publish: {\n intent: normalizePublishIntent(publishRaw.intent),\n prepare_process_payloads: toBoolean(publishRaw.prepare_process_payloads, true),\n prepare_relation_payloads: toBoolean(publishRaw.prepare_relation_payloads, true),\n },\n };\n\n if (\n !normalized.source_model.id &&\n !normalized.source_model.json_ordered &&\n !normalized.source_model.json_ordered_path\n ) {\n throw new CliError(\n 'source_model must include at least one of id, json_ordered, or json_ordered_path.',\n {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n if (!normalized.process_sources.process_catalog_path) {\n normalized.process_sources.process_catalog_path = autoDetectProcessCatalogPath(\n normalized.source_model.json_ordered_path,\n );\n }\n\n if (normalized.process_sources.process_json_dirs.length === 0) {\n normalized.process_sources.process_json_dirs = autoDetectProcessJsonDirs(\n normalized.source_model.json_ordered_path,\n );\n }\n\n return normalized;\n}\n\nfunction lifecyclemodelRoot(model: JsonObject): JsonObject {\n return isRecord(model.lifeCycleModelDataSet)\n ? (model.lifeCycleModelDataSet as JsonObject)\n : model;\n}\n\nfunction processDatasetRoot(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n\n for (const key of ['json_ordered', 'json'] as const) {\n const nested = payload[key];\n if (isRecord(nested) && isRecord(nested.processDataSet)) {\n return nested.processDataSet;\n }\n }\n\n throw new CliError('Process payload does not contain processDataSet.', {\n code: 'LIFECYCLEMODEL_PROCESS_DATASET_REQUIRED',\n exitCode: 2,\n });\n}\n\nfunction resolveNameField(namePayload: unknown): string | null {\n if (typeof namePayload === 'string') {\n return namePayload.trim() || null;\n }\n\n if (Array.isArray(namePayload)) {\n for (const item of namePayload) {\n const resolved = resolveNameField(item);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n }\n\n if (!isRecord(namePayload)) {\n return null;\n }\n\n const direct = firstNonEmpty(namePayload['@index'], namePayload['#text'], namePayload.text);\n if (direct) {\n return direct;\n }\n\n for (const key of ['baseName', 'shortName', 'name'] as const) {\n const nested = namePayload[key];\n if (isRecord(nested)) {\n const nestedText = firstNonEmpty(nested['@index'], nested['#text'], nested.text);\n if (nestedText) {\n return nestedText;\n }\n }\n\n const resolved = firstNonEmpty(nested);\n if (resolved) {\n return resolved;\n }\n }\n\n return null;\n}\n\nfunction normalizedNameInfo(namePayload: unknown, fallbackText: string): JsonObject {\n if (isRecord(namePayload) && Object.keys(namePayload).length > 0) {\n return copyJson(namePayload);\n }\n\n return {\n baseName: [\n {\n '@xml:lang': 'en',\n '#text': resolveNameField(namePayload) ?? fallbackText,\n },\n ],\n };\n}\n\nfunction multilangFromText(enText: string, zhText: string): JsonObject[] {\n return [\n {\n '@xml:lang': 'en',\n '#text': enText,\n },\n {\n '@xml:lang': 'zh',\n '#text': zhText,\n },\n ];\n}\n\nfunction modelDatasetVersion(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const administrative = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : isRecord(administrative['common:publicationAndOwnership'])\n ? (administrative['common:publicationAndOwnership'] as JsonObject)\n : {};\n\n return firstNonEmpty(publication['common:dataSetVersion']);\n}\n\nfunction modelIdentifier(\n model: JsonObject,\n sourceModel: LifecyclemodelResultingProcessRequest['source_model'],\n): {\n id: string;\n version: string;\n name: string;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const modelId =\n firstNonEmpty(\n sourceModel.id,\n dataInfo['common:UUID'],\n root['@id'],\n root.id,\n dataInfo.identifierOfSubDataSet,\n ) ?? `lm-${sha256Text(JSON.stringify(model)).slice(0, 12)}`;\n const version =\n firstNonEmpty(\n sourceModel.version,\n modelDatasetVersion(model),\n root['@version'],\n root.version,\n dataInfo['@version'],\n ) ?? DEFAULT_DATASET_VERSION;\n const name =\n firstNonEmpty(sourceModel.name, resolveNameField(dataInfo.name), root.name) ?? modelId;\n\n return {\n id: modelId,\n version,\n name,\n };\n}\n\nfunction extractProcessInstances(model: JsonObject): ProcessInstance[] {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const technology = isRecord(info.technology)\n ? info.technology\n : isRecord(root.technology)\n ? root.technology\n : {};\n const processes = isRecord(technology.processes) ? technology.processes : {};\n const instances = ensureList<JsonObject>(processes.processInstance);\n\n return instances.filter(isRecord).map((item, index) => {\n const ref = isRecord(item.referenceToProcess) ? item.referenceToProcess : {};\n return {\n instance_id:\n firstNonEmpty(item['@dataSetInternalID'], item['@id'], item.id) ?? `pi-${index + 1}`,\n process_id: firstNonEmpty(ref['@refObjectId'], ref.id, ref.processId) ?? `proc-${index + 1}`,\n process_version: firstNonEmpty(ref['@version'], ref.version) ?? DEFAULT_DATASET_VERSION,\n label:\n firstNonEmpty(\n resolveNameField(ref['common:shortDescription']),\n resolveNameField(ref.shortDescription),\n resolveNameField(ref.name),\n ref['@refObjectId'],\n ) ?? `process-${index + 1}`,\n multiplication_factor: normalizeNumericOutput(\n toFiniteNumber(item['@multiplicationFactor'], 'processInstance.@multiplicationFactor'),\n ),\n reference_to_process: copyJson(ref),\n raw: copyJson(item),\n };\n });\n}\n\nfunction extractEdges(model: JsonObject): Edge[] {\n const edges: Edge[] = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const connections = isRecord(instance.raw.connections) ? instance.raw.connections : {};\n const outputs = ensureList<JsonObject>(connections.outputExchange);\n\n outputs.filter(isRecord).forEach((exchange, edgeIndex) => {\n const downstreamItems = ensureList<JsonObject>(exchange.downstreamProcess).filter(isRecord);\n downstreamItems.forEach((downstream, downstreamIndex) => {\n const downstreamId = firstNonEmpty(\n downstream['@refObjectId'],\n downstream['@id'],\n downstream.id,\n exchange.downstreamProcessId,\n );\n if (!downstreamId) {\n return;\n }\n\n edges.push({\n edge_id:\n firstNonEmpty(exchange['@id'], exchange.id) ??\n `${instance.instance_id}-edge-${edgeIndex + 1}-${downstreamIndex + 1}`,\n from: instance.instance_id,\n to: downstreamId,\n exchange_id: firstNonEmpty(exchange['@id'], exchange.id),\n flow_uuid: firstNonEmpty(\n exchange['@flowUUID'],\n downstream['@flowUUID'],\n exchange.flowUUID,\n ),\n });\n });\n });\n });\n\n return edges;\n}\n\nfunction processReferencePairs(model: JsonObject): Array<{ process_id: string; version: string }> {\n const seen = new Set<string>();\n const pairs: Array<{ process_id: string; version: string }> = [];\n\n extractProcessInstances(model).forEach((instance) => {\n const key = `${instance.process_id}@${instance.process_version}`;\n if (seen.has(key)) {\n return;\n }\n\n seen.add(key);\n pairs.push({\n process_id: instance.process_id,\n version: instance.process_version,\n });\n });\n\n return pairs;\n}\n\nfunction parseProcessRecord(\n payload: JsonObject,\n options: {\n sourceLabel: string;\n sourcePath: string | null;\n },\n): ProcessRecord {\n const dataset = processDatasetRoot(payload);\n const info = isRecord(dataset.processInformation) ? dataset.processInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const administrative = isRecord(dataset.administrativeInformation)\n ? dataset.administrativeInformation\n : {};\n const publication = isRecord(administrative.publicationAndOwnership)\n ? administrative.publicationAndOwnership\n : {};\n const processUuid = firstNonEmpty(dataInfo['common:UUID']);\n if (!processUuid) {\n throw new CliError(`processDataSet missing common:UUID from ${options.sourceLabel}`, {\n code: 'LIFECYCLEMODEL_PROCESS_UUID_REQUIRED',\n exitCode: 2,\n });\n }\n\n const version = firstNonEmpty(publication['common:dataSetVersion']) ?? DEFAULT_DATASET_VERSION;\n const quantitativeReference = isRecord(info.quantitativeReference)\n ? info.quantitativeReference\n : {};\n const referenceInternalId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n const exchangesWrapper = isRecord(dataset.exchanges) ? dataset.exchanges : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n const referenceExchange = exchanges.find(\n (item) => String(item['@dataSetInternalID'] ?? '') === String(referenceInternalId ?? ''),\n );\n\n if (!referenceExchange) {\n throw new CliError(\n `reference exchange ${referenceInternalId ?? '(missing)'} not found for process ${processUuid}`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_EXCHANGE_NOT_FOUND',\n exitCode: 2,\n },\n );\n }\n\n const inputAmounts: Record<string, number> = {};\n const outputAmounts: Record<string, number> = {};\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection) ?? '';\n if (!flowUuid) {\n return;\n }\n\n const amount = normalizeNumericOutput(\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount'),\n );\n\n if (direction === 'Input') {\n inputAmounts[flowUuid] = normalizeNumericOutput((inputAmounts[flowUuid] ?? 0) + amount);\n } else if (direction === 'Output') {\n outputAmounts[flowUuid] = normalizeNumericOutput((outputAmounts[flowUuid] ?? 0) + amount);\n }\n });\n\n const referenceFlow = isRecord(referenceExchange.referenceToFlowDataSet)\n ? referenceExchange.referenceToFlowDataSet\n : {};\n\n return {\n processUuid,\n version,\n raw: {\n processDataSet: dataset,\n },\n sourceLabel: options.sourceLabel,\n sourcePath: options.sourcePath,\n referenceExchangeInternalId: String(referenceInternalId ?? ''),\n referenceFlowUuid: firstNonEmpty(referenceFlow['@refObjectId']) ?? '',\n referenceDirection: firstNonEmpty(referenceExchange.exchangeDirection) ?? '',\n referenceAmount: normalizeNumericOutput(\n toFiniteNumber(\n referenceExchange.meanAmount ?? referenceExchange.resultingAmount,\n 'reference amount',\n ),\n ),\n inputAmounts,\n outputAmounts,\n };\n}\n\nfunction autoDetectProcessCatalogPath(modelPath: string | null): string | null {\n if (!modelPath) {\n return null;\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return null;\n }\n\n if (path.basename(path.dirname(resolved)) !== 'lifecyclemodels') {\n return null;\n }\n\n const tidasBundleDir = path.dirname(path.dirname(resolved));\n if (path.basename(tidasBundleDir) !== 'tidas_bundle') {\n return null;\n }\n\n const candidate = path.join(path.dirname(tidasBundleDir), 'process-catalog.json');\n return existsSync(candidate) ? candidate : null;\n}\n\nfunction autoDetectProcessJsonDirs(modelPath: string | null): string[] {\n if (!modelPath) {\n return [];\n }\n\n const resolved = PathSafe.resolve(modelPath);\n if (!resolved) {\n return [];\n }\n\n const candidates = [path.join(path.dirname(resolved), 'processes')];\n\n if (path.basename(path.dirname(resolved)) === 'lifecyclemodels') {\n candidates.push(path.join(path.dirname(path.dirname(resolved)), 'processes'));\n }\n\n const stem = path.basename(resolved, path.extname(resolved));\n if (stem.endsWith('-model')) {\n const prefix = stem.slice(0, -'-model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}-processes`));\n }\n }\n if (stem.endsWith('_model')) {\n const prefix = stem.slice(0, -'_model'.length).trim();\n if (prefix) {\n candidates.push(path.join(path.dirname(resolved), `${prefix}_processes`));\n }\n }\n\n return uniqueStrings(candidates.filter((candidate) => existsSync(candidate)));\n}\n\nconst PathSafe = {\n resolve(value: string): string | null {\n try {\n return resolveLocalPath(value, 'path');\n } catch {\n return null;\n }\n },\n};\n\nfunction processSourceDirs(request: LifecyclemodelResultingProcessRequest): string[] {\n const dirs = [...request.process_sources.process_json_dirs];\n\n request.process_sources.run_dirs.forEach((runDir) => {\n const candidate = path.join(runDir, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n\n if (request.process_sources.process_catalog_path) {\n try {\n const payload = JSON.parse(\n readFileSync(request.process_sources.process_catalog_path, 'utf8'),\n ) as unknown;\n ensureList<JsonObject>(payload)\n .filter(isRecord)\n .forEach((item) => {\n const sourceLabel = firstNonEmpty(item.source_label);\n if (!sourceLabel) {\n return;\n }\n const candidate = path.join(sourceLabel, 'exports', 'processes');\n if (existsSync(candidate)) {\n dirs.push(candidate);\n }\n });\n } catch {\n // Keep local process resolution best-effort for catalog expansion.\n }\n }\n\n return uniqueStrings(dirs);\n}\n\nfunction locateLocalProcessFile(\n processId: string,\n version: string,\n options: {\n processDirs: string[];\n processFiles: string[];\n },\n): string | null {\n const targetFileName = `${processId}_${version}.json`;\n\n for (const directory of options.processDirs) {\n const candidate = path.join(directory, targetFileName);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n for (const filePath of options.processFiles) {\n if (existsSync(filePath) && path.basename(filePath) === targetFileName) {\n return filePath;\n }\n }\n\n return null;\n}\n\nasync function resolveProcessRecords(\n request: LifecyclemodelResultingProcessRequest,\n options: {\n sourceModelJson: JsonObject;\n remoteLookup?: RemoteProcessLookupContext;\n },\n): Promise<{\n records: Record<string, ProcessRecord>;\n resolutionSummary: JsonObject;\n}> {\n const requiredPairs = processReferencePairs(options.sourceModelJson);\n const processFiles = request.process_sources.process_json_files;\n const processDirs = processSourceDirs(request);\n const records: Record<string, ProcessRecord> = {};\n const resolutionItems: JsonObject[] = [];\n const unresolved: Array<{ process_id: string; version: string }> = [];\n\n requiredPairs.forEach(({ process_id, version }) => {\n const localPath = locateLocalProcessFile(process_id, version, {\n processDirs,\n processFiles,\n });\n\n if (localPath) {\n const record = parseProcessRecord(\n readJsonObject(localPath, 'LIFECYCLEMODEL_PROCESS_FILE_NOT_OBJECT'),\n {\n sourceLabel: path.dirname(localPath),\n sourcePath: localPath,\n },\n );\n records[`${process_id}@${version}`] = record;\n resolutionItems.push({\n process_id,\n version,\n resolution: 'local_file',\n source_path: localPath,\n });\n return;\n }\n\n unresolved.push({ process_id, version });\n });\n\n if (unresolved.length > 0 && request.process_sources.allow_remote_lookup) {\n const env = options.remoteLookup?.env ?? process.env;\n const fetchImpl = options.remoteLookup?.fetchImpl ?? (fetch as FetchLike);\n const runtime = createSupabaseDataRuntime({\n runtime: requireRemoteProcessLookupRuntime(env),\n fetchImpl,\n timeoutMs: REMOTE_PROCESS_LOOKUP_TIMEOUT_MS,\n });\n\n for (const item of unresolved) {\n const remoteRecord = await fetchRemoteProcessRecord({\n processId: item.process_id,\n requestedVersion: item.version,\n runtime,\n fetchImpl,\n });\n records[`${item.process_id}@${item.version}`] = remoteRecord.record;\n resolutionItems.push({\n process_id: item.process_id,\n requested_version: item.version,\n resolved_version: remoteRecord.resolvedVersion,\n resolution: remoteRecord.resolution,\n source_path: remoteRecord.sourcePath,\n });\n }\n }\n\n const remainingUnresolved = requiredPairs.filter(\n ({ process_id, version }) => !records[`${process_id}@${version}`],\n );\n\n if (remainingUnresolved.length > 0) {\n const missing = remainingUnresolved\n .map((item) => `${item.process_id}@${item.version}`)\n .join(', ');\n throw new CliError(\n `Could not resolve referenced process datasets for lifecycle model: ${missing}.`,\n {\n code: 'LIFECYCLEMODEL_PROCESS_RESOLUTION_FAILED',\n exitCode: 2,\n },\n );\n }\n\n return {\n records,\n resolutionSummary: {\n required_process_count: requiredPairs.length,\n resolved_process_count: Object.keys(records).length,\n local_process_dir_count: processDirs.length,\n explicit_process_file_count: processFiles.length,\n remote_resolution_count: resolutionItems.filter((item) =>\n String(item.resolution).startsWith('remote_'),\n ).length,\n items: resolutionItems,\n },\n };\n}\n\nfunction loadSourceModel(request: LifecyclemodelResultingProcessRequest): {\n sourceModelJson: JsonObject;\n modelPath: string | null;\n} {\n if (request.source_model.json_ordered) {\n return {\n sourceModelJson: copyJson(request.source_model.json_ordered),\n modelPath: null,\n };\n }\n\n if (!request.source_model.json_ordered_path) {\n throw new CliError('source_model must include json_ordered or json_ordered_path.', {\n code: 'LIFECYCLEMODEL_SOURCE_MODEL_PATH_REQUIRED',\n exitCode: 2,\n });\n }\n\n const localPath = resolveLocalPath(\n request.source_model.json_ordered_path,\n 'source_model.json_ordered_path',\n );\n\n return {\n sourceModelJson: readJsonObject(localPath, 'LIFECYCLEMODEL_SOURCE_MODEL_NOT_OBJECT'),\n modelPath: localPath,\n };\n}\n\nfunction referenceToResultingProcess(model: JsonObject): {\n id: string | null;\n version: string | null;\n} {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const dataInfo = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const ref = isRecord(dataInfo.referenceToResultingProcess)\n ? dataInfo.referenceToResultingProcess\n : {};\n\n return {\n id: firstNonEmpty(ref['@refObjectId'], ref.id),\n version: firstNonEmpty(ref['@version'], ref.version),\n };\n}\n\nfunction referenceProcessInstanceId(model: JsonObject): string | null {\n const root = lifecyclemodelRoot(model);\n const info = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const quantitative = isRecord(info.quantitativeReference) ? info.quantitativeReference : {};\n const ref = quantitative.referenceToReferenceProcess;\n return isRecord(ref) ? firstNonEmpty(ref['@refObjectId'], ref.id) : firstNonEmpty(ref);\n}\n\nfunction chooseReferenceInstance(\n processInstances: ProcessInstance[],\n requestedInstanceId: string | null,\n): ProcessInstance {\n const directMatch = requestedInstanceId\n ? processInstances.find((item) => item.instance_id === requestedInstanceId)\n : null;\n if (directMatch) {\n return directMatch;\n }\n\n const scaled = processInstances.find((item) => item.multiplication_factor > 0);\n if (scaled) {\n return scaled;\n }\n\n const fallback = processInstances[0];\n if (!fallback) {\n throw new CliError('Lifecycle model does not contain any process instances.', {\n code: 'LIFECYCLEMODEL_PROCESS_INSTANCES_REQUIRED',\n exitCode: 2,\n });\n }\n\n return fallback;\n}\n\nfunction cloneExchangeWithAmount(\n exchange: JsonObject,\n amount: number,\n internalId: string,\n options: {\n quantitativeReference: boolean;\n },\n): JsonObject {\n const cloned = copyJson(exchange);\n cloned['@dataSetInternalID'] = internalId;\n const normalizedAmount = normalizeNumericOutput(amount);\n cloned.meanAmount = normalizedAmount;\n if ('resultingAmount' in cloned) {\n cloned.resultingAmount = normalizedAmount;\n }\n cloned.quantitativeReference = options.quantitativeReference;\n return cloned;\n}\n\nfunction buildResultingProcessPayload(options: {\n sourceModelId: string;\n sourceModelVersion: string;\n sourceModelName: string;\n sourceModelNameInfo: JsonObject;\n processId: string;\n processVersion: string;\n role: 'primary';\n projectionSignature: string;\n processInstances: ProcessInstance[];\n edges: Edge[];\n processRecords: Record<string, ProcessRecord>;\n referenceProcessInstanceId: string | null;\n metadataOverrides: JsonObject;\n attachGraphSnapshotUri: string | null;\n}): JsonObject {\n const chosenInstance = chooseReferenceInstance(\n options.processInstances,\n options.referenceProcessInstanceId,\n );\n const chosenKey = `${chosenInstance.process_id}@${chosenInstance.process_version}`;\n const finalRecord = options.processRecords[chosenKey];\n const finalProcess = copyJson(finalRecord.raw);\n const finalDataset = processDatasetRoot(finalProcess);\n const totals = new Map<string, { amount: number; exchange: JsonObject }>();\n\n options.processInstances.forEach((instance) => {\n if (instance.multiplication_factor === 0) {\n return;\n }\n\n const record = options.processRecords[`${instance.process_id}@${instance.process_version}`];\n const recordDataset = processDatasetRoot(record.raw);\n const exchangesWrapper = isRecord(recordDataset.exchanges)\n ? (recordDataset.exchanges as JsonObject)\n : {};\n const exchanges = ensureList<JsonObject>(exchangesWrapper.exchange).filter(isRecord);\n\n exchanges.forEach((exchange) => {\n const flowRef = isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet\n : {};\n const flowUuid = firstNonEmpty(flowRef['@refObjectId']);\n const direction = firstNonEmpty(exchange.exchangeDirection);\n\n if (!flowUuid || (direction !== 'Input' && direction !== 'Output')) {\n return;\n }\n\n const key = `${flowUuid}\\u0000${direction}`;\n const scaledAmount =\n toFiniteNumber(exchange.meanAmount ?? exchange.resultingAmount, 'exchange amount') *\n instance.multiplication_factor;\n const existing = totals.get(key);\n if (existing) {\n existing.amount = normalizeNumericOutput(existing.amount + scaledAmount);\n return;\n }\n\n totals.set(key, {\n amount: normalizeNumericOutput(scaledAmount),\n exchange: copyJson(exchange),\n });\n });\n });\n\n const instanceById = new Map(options.processInstances.map((item) => [item.instance_id, item]));\n options.edges.forEach((edge) => {\n if (!edge.flow_uuid) {\n return;\n }\n\n const downstreamInstance = instanceById.get(edge.to);\n if (!downstreamInstance) {\n return;\n }\n\n const downstreamRecord =\n options.processRecords[\n `${downstreamInstance.process_id}@${downstreamInstance.process_version}`\n ];\n if (!downstreamRecord) {\n return;\n }\n\n const internalAmount =\n (downstreamRecord.inputAmounts[edge.flow_uuid] ?? 0) *\n downstreamInstance.multiplication_factor;\n\n ['Output', 'Input'].forEach((direction) => {\n const key = `${edge.flow_uuid}\\u0000${direction}`;\n const existing = totals.get(key);\n if (!existing) {\n return;\n }\n\n existing.amount = normalizeNumericOutput(existing.amount - internalAmount);\n });\n });\n\n const exchangeItems: JsonObject[] = [];\n let nextInternalId = 1;\n let referenceExchangeInternalId = '';\n const sortedEntries = [...totals.entries()].sort((left, right) =>\n left[0].localeCompare(right[0]),\n );\n\n sortedEntries.forEach(([key, payload]) => {\n if (payload.amount <= 0) {\n return;\n }\n\n const [flowUuid, direction] = key.split('\\u0000');\n const quantitativeReference =\n flowUuid === finalRecord.referenceFlowUuid &&\n direction === (finalRecord.referenceDirection || 'Output') &&\n !referenceExchangeInternalId;\n\n const internalId = String(nextInternalId);\n nextInternalId += 1;\n if (quantitativeReference) {\n referenceExchangeInternalId = internalId;\n }\n\n exchangeItems.push(\n cloneExchangeWithAmount(payload.exchange, payload.amount, internalId, {\n quantitativeReference,\n }),\n );\n });\n\n if (!referenceExchangeInternalId) {\n throw new CliError(\n `Could not build resulting process reference exchange for lifecycle model ${options.sourceModelId}.`,\n {\n code: 'LIFECYCLEMODEL_REFERENCE_OUTPUT_REQUIRED',\n exitCode: 2,\n },\n );\n }\n\n const processInformation = isRecord(finalDataset.processInformation)\n ? (finalDataset.processInformation as JsonObject)\n : {};\n finalDataset.processInformation = processInformation;\n const dataInfo = isRecord(processInformation.dataSetInformation)\n ? (processInformation.dataSetInformation as JsonObject)\n : {};\n processInformation.dataSetInformation = dataInfo;\n dataInfo['common:UUID'] = options.processId;\n dataInfo.name = copyJson(options.sourceModelNameInfo);\n const generalComment = ensureList<JsonObject>(dataInfo['common:generalComment']).filter(isRecord);\n generalComment.push(\n ...multilangFromText(\n `Local ${options.role} resulting process generated from lifecycle model ${options.sourceModelId}; exchanges are aggregated from included processes with internal linked flows cancelled.`,\n `本地为生命周期模型 ${options.sourceModelId} 生成的 ${options.role} resulting process;其 exchanges 由包含过程聚合并抵消内部连接 flow 后得到。`,\n ),\n );\n dataInfo['common:generalComment'] = generalComment;\n\n const quantitativeReference = isRecord(processInformation.quantitativeReference)\n ? (processInformation.quantitativeReference as JsonObject)\n : {};\n processInformation.quantitativeReference = quantitativeReference;\n quantitativeReference.referenceToReferenceFlow = referenceExchangeInternalId;\n\n const technology = isRecord(processInformation.technology)\n ? (processInformation.technology as JsonObject)\n : {};\n processInformation.technology = technology;\n const includedRefs = options.processInstances.map((item) => copyJson(item.reference_to_process));\n if (includedRefs.length > 0) {\n technology.referenceToIncludedProcesses =\n includedRefs.length === 1 ? includedRefs[0] : includedRefs;\n }\n\n finalDataset.exchanges = {\n exchange: exchangeItems.length === 1 ? exchangeItems[0] : exchangeItems,\n };\n\n const administrative = isRecord(finalDataset.administrativeInformation)\n ? (finalDataset.administrativeInformation as JsonObject)\n : {};\n finalDataset.administrativeInformation = administrative;\n const publication = isRecord(administrative.publicationAndOwnership)\n ? (administrative.publicationAndOwnership as JsonObject)\n : {};\n administrative.publicationAndOwnership = publication;\n publication['common:dataSetVersion'] = options.processVersion;\n publication['common:permanentDataSetURI'] =\n `https://local.tiangong.invalid/processes/${options.processId}?version=${options.processVersion}`;\n\n const modellingAndValidation = isRecord(finalDataset.modellingAndValidation)\n ? (finalDataset.modellingAndValidation as JsonObject)\n : {};\n finalDataset.modellingAndValidation = modellingAndValidation;\n const lciMethod = isRecord(modellingAndValidation.LCIMethodAndAllocation)\n ? (modellingAndValidation.LCIMethodAndAllocation as JsonObject)\n : {};\n modellingAndValidation.LCIMethodAndAllocation = lciMethod;\n const typeOfDataSet =\n firstNonEmpty(options.metadataOverrides.type_of_data_set) ?? 'partly terminated system';\n lciMethod.typeOfDataSet = typeOfDataSet;\n\n dataInfo.generatedFromLifecycleModel = {\n id: options.sourceModelId,\n version: options.sourceModelVersion,\n role: options.role,\n };\n\n const metadata: JsonObject = {\n generated_from_lifecyclemodel_id: options.sourceModelId,\n generated_from_lifecyclemodel_version: options.sourceModelVersion,\n projection_role: options.role,\n projection_signature: options.projectionSignature,\n type_of_data_set: typeOfDataSet,\n ...copyJson(options.metadataOverrides),\n };\n if (options.attachGraphSnapshotUri) {\n metadata.graph_snapshot_uri = options.attachGraphSnapshotUri;\n }\n\n finalProcess.projectionMetadata = metadata;\n finalProcess.topologySummary = {\n process_instance_count: options.processInstances.length,\n edge_count: options.edges.length,\n };\n\n return finalProcess;\n}\n\nasync function buildProjectionBundle(options: {\n request: LifecyclemodelResultingProcessRequest;\n sourceModelJson: JsonObject;\n modelPath: string | null;\n remoteLookup?: RemoteProcessLookupContext;\n}): Promise<{\n bundle: JsonObject;\n report: JsonObject;\n sourceModelSummary: {\n id: string;\n version: string;\n name: string;\n json_ordered_path: string | null;\n reference_to_resulting_process_id: string | null;\n reference_to_resulting_process_version: string | null;\n reference_process_instance_id: string | null;\n resolved_process_summary: JsonObject;\n };\n}> {\n const root = lifecyclemodelRoot(options.sourceModelJson);\n const modelInfo = isRecord(root.lifeCycleModelInformation) ? root.lifeCycleModelInformation : {};\n const modelDataInfo = isRecord(modelInfo.dataSetInformation) ? modelInfo.dataSetInformation : {};\n const modelIdentity = modelIdentifier(options.sourceModelJson, options.request.source_model);\n const sourceModelNameInfo = normalizedNameInfo(modelDataInfo.name, modelIdentity.name);\n const processInstances = extractProcessInstances(options.sourceModelJson);\n const edges = extractEdges(options.sourceModelJson);\n const processResolution = await resolveProcessRecords(options.request, {\n sourceModelJson: options.sourceModelJson,\n remoteLookup: options.remoteLookup,\n });\n const referenceProcess = referenceToResultingProcess(options.sourceModelJson);\n const referenceProcessInstance = referenceProcessInstanceId(options.sourceModelJson);\n const signatureSeed = {\n source_model_id: modelIdentity.id,\n source_model_version: modelIdentity.version,\n projection_mode: options.request.projection.mode,\n process_instances: processInstances.map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n process_version: item.process_version,\n })),\n edges,\n };\n const projectionSignature = `sha256:${sha256Text(JSON.stringify(signatureSeed))}`;\n const primaryProcessId =\n options.request.projection.process_id ??\n referenceProcess.id ??\n `${modelIdentity.id}-resulting-process`;\n const primaryProcessVersion =\n options.request.projection.process_version ?? referenceProcess.version ?? modelIdentity.version;\n const notes = [\n 'This command materializes a deterministic resulting processDataSet by aggregating included process exchanges and cancelling internal linked flows.',\n 'Remote writes remain gated behind an explicit publish layer.',\n ];\n\n const primaryPayload = buildResultingProcessPayload({\n sourceModelId: modelIdentity.id,\n sourceModelVersion: modelIdentity.version,\n sourceModelName: modelIdentity.name,\n sourceModelNameInfo,\n processId: primaryProcessId,\n processVersion: primaryProcessVersion,\n role: 'primary',\n projectionSignature,\n processInstances,\n edges,\n processRecords: processResolution.records,\n referenceProcessInstanceId: referenceProcessInstance,\n metadataOverrides: options.request.projection.metadata_overrides,\n attachGraphSnapshotUri: options.request.projection.attach_graph_snapshot_uri,\n });\n\n if (options.request.projection.mode === 'all-subproducts') {\n const jsonTg = isRecord(root.json_tg) ? root.json_tg : {};\n const submodels = ensureList<JsonObject>(jsonTg.submodels).filter(isRecord);\n notes.push(\n submodels.length > 0\n ? 'Subproduct projection was requested, but this lifecycle model only carries submodel metadata and no submodel-specific topology slices; only the primary aggregated resulting process was emitted.'\n : 'Subproduct projection was requested, but the lifecycle model does not expose submodel topology metadata; only the primary aggregated resulting process was emitted.',\n );\n }\n\n const sourceModelSummary = {\n id: modelIdentity.id,\n version: modelIdentity.version,\n name: modelIdentity.name,\n json_ordered_path: options.modelPath,\n reference_to_resulting_process_id: referenceProcess.id,\n reference_to_resulting_process_version: referenceProcess.version,\n reference_process_instance_id: referenceProcessInstance,\n resolved_process_summary: processResolution.resolutionSummary,\n };\n\n const report = {\n generated_at: nowIso(),\n status:\n options.request.publish.intent === 'publish'\n ? 'projected_local_bundle'\n : 'prepared_local_bundle',\n source_model: sourceModelSummary,\n projection_mode: options.request.projection.mode,\n node_count: processInstances.length,\n edge_count: edges.length,\n reference_process_instance_id: referenceProcessInstance,\n process_instance_preview: processInstances.slice(0, 10).map((item) => ({\n instance_id: item.instance_id,\n process_id: item.process_id,\n label: item.label,\n })),\n edge_preview: edges.slice(0, 10),\n projection_signature: projectionSignature,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n resolved_process_summary: processResolution.resolutionSummary,\n projected_process_count: 1,\n notes,\n };\n\n const bundle = {\n source_model: sourceModelSummary,\n projected_processes: [\n {\n role: 'primary',\n id: primaryProcessId,\n version: primaryProcessVersion,\n name: modelIdentity.name,\n json_ordered: primaryPayload,\n metadata: primaryPayload.projectionMetadata,\n },\n ],\n relations: [\n {\n lifecyclemodel_id: modelIdentity.id,\n lifecyclemodel_version: modelIdentity.version,\n resulting_process_id: primaryProcessId,\n resulting_process_version: primaryProcessVersion,\n projection_role: 'primary',\n projection_signature: projectionSignature,\n is_primary: true,\n },\n ],\n report,\n projection: {\n mode: options.request.projection.mode,\n metadata_overrides: options.request.projection.metadata_overrides,\n attach_graph_snapshot_uri: options.request.projection.attach_graph_snapshot_uri,\n },\n };\n\n return {\n bundle,\n report,\n sourceModelSummary,\n };\n}\n\nfunction defaultOutDir(requestPath: string, subject: string, now: Date = new Date()): string {\n const requestDir = path.dirname(path.resolve(requestPath));\n const runId = buildRunId({\n namespace: 'lifecyclemodel_resulting_process',\n subject,\n operation: 'build',\n now,\n });\n\n return resolveRunLayout(\n path.join(requestDir, 'artifacts'),\n 'lifecyclemodel_resulting_process',\n runId,\n ).runRoot;\n}\n\nexport async function runLifecyclemodelBuildResultingProcess(\n options: RunLifecyclemodelResultingProcessOptions,\n): Promise<LifecyclemodelResultingProcessReport> {\n const requestPath = path.resolve(options.inputPath);\n const input = readJsonInput(requestPath);\n const normalizedRequest = normalizeLifecyclemodelResultingProcessRequest(input, {\n requestPath,\n });\n const sourceModel = loadSourceModel(normalizedRequest);\n const modelIdentity = modelIdentifier(\n sourceModel.sourceModelJson,\n normalizedRequest.source_model,\n );\n const outDir = options.outDir\n ? path.resolve(options.outDir)\n : defaultOutDir(requestPath, modelIdentity.id, options.now);\n const projection = await buildProjectionBundle({\n request: normalizedRequest,\n sourceModelJson: sourceModel.sourceModelJson,\n modelPath: sourceModel.modelPath,\n remoteLookup: {\n env: options.env ?? process.env,\n fetchImpl: options.fetchImpl ?? (fetch as FetchLike),\n },\n });\n\n const files = {\n normalized_request: writeJsonArtifact(\n path.join(outDir, 'request.normalized.json'),\n normalizedRequest,\n ),\n source_model_normalized: writeJsonArtifact(\n path.join(outDir, 'source-model.normalized.json'),\n sourceModel.sourceModelJson,\n ),\n source_model_summary: writeJsonArtifact(\n path.join(outDir, 'source-model.summary.json'),\n projection.sourceModelSummary,\n ),\n projection_report: writeJsonArtifact(\n path.join(outDir, 'projection-report.json'),\n projection.report,\n ),\n process_projection_bundle: writeJsonArtifact(\n path.join(outDir, 'process-projection-bundle.json'),\n projection.bundle,\n ),\n };\n\n return {\n generated_at_utc: nowIso(options.now),\n request_path: requestPath,\n out_dir: outDir,\n status: String(projection.report.status),\n projected_process_count: 1,\n relation_count: 1,\n source_model: {\n id: projection.sourceModelSummary.id,\n version: projection.sourceModelSummary.version,\n name: projection.sourceModelSummary.name,\n json_ordered_path: projection.sourceModelSummary.json_ordered_path,\n reference_to_resulting_process_id:\n projection.sourceModelSummary.reference_to_resulting_process_id,\n reference_to_resulting_process_version:\n projection.sourceModelSummary.reference_to_resulting_process_version,\n reference_process_instance_id: projection.sourceModelSummary.reference_process_instance_id,\n },\n files,\n };\n}\n\n// Exposed for deterministic unit coverage of internal lifecyclemodel fallback logic.\nexport const __testInternals = {\n uniqueStrings,\n toFiniteNumber,\n normalizeNumericOutput,\n toBoolean,\n resolveNameField,\n normalizedNameInfo,\n modelIdentifier,\n extractProcessInstances,\n extractEdges,\n processReferencePairs,\n parseProcessRecord,\n autoDetectProcessCatalogPath,\n autoDetectProcessJsonDirs,\n processSourceDirs,\n locateLocalProcessFile,\n loadSourceModel,\n referenceToResultingProcess,\n referenceProcessInstanceId,\n chooseReferenceInstance,\n cloneExchangeWithAmount,\n buildResultingProcessPayload,\n buildProjectionBundle,\n defaultOutDir,\n};\n"]}
@@ -28,6 +28,7 @@ export type SyncStateAwareProcessRecordOptions = {
28
28
  timeoutMs?: number;
29
29
  audit?: JsonObject;
30
30
  modelId?: string | null;
31
+ modelVersion?: string | null;
31
32
  targetUserId?: string | null;
32
33
  };
33
34
  declare function buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string;
@@ -146,6 +146,7 @@ async function saveDraft(options) {
146
146
  p_version: options.version,
147
147
  p_json_ordered: options.payload,
148
148
  p_model_id: options.modelId ?? null,
149
+ p_model_version: options.modelVersion ?? null,
149
150
  p_audit: options.audit ?? null,
150
151
  },
151
152
  timeoutMs: options.timeoutMs,
@@ -194,6 +195,12 @@ export async function syncStateAwareProcessRecord(options) {
194
195
  env: options.env,
195
196
  fetchImpl: options.fetchImpl,
196
197
  timeoutMs,
198
+ extraData: options.modelId !== undefined || options.modelVersion !== undefined
199
+ ? {
200
+ modelId: options.modelId ?? null,
201
+ modelVersion: options.modelVersion ?? null,
202
+ }
203
+ : undefined,
197
204
  });
198
205
  }
199
206
  return {
@@ -211,6 +218,7 @@ export async function syncStateAwareProcessRecord(options) {
211
218
  fetchImpl: options.fetchImpl,
212
219
  audit: options.audit,
213
220
  modelId: options.modelId,
221
+ modelVersion: options.modelVersion,
214
222
  }),
215
223
  visible_row: draftRow,
216
224
  };
@@ -1 +1 @@
1
- {"version":3,"file":"process-save-draft.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: processes\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { getJson, postJson, requireRemoteOkPayload } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteResult,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nexport type VisibleProcessRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n};\n\nexport type ProcessSaveDraftRpcResult = {\n ok: true;\n [key: string]: unknown;\n};\n\nexport type ProcessStateAwareWriteResult =\n | SupabaseJsonOrderedWriteResult\n | {\n status: 'success';\n operation: 'save_draft';\n write_path: 'cmd_dataset_save_draft';\n rpc_result: ProcessSaveDraftRpcResult;\n visible_row: VisibleProcessRow;\n };\n\nexport type SyncStateAwareProcessRecordOptions = {\n id: string;\n version: string;\n payload: JsonObject;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n audit?: JsonObject;\n modelId?: string | null;\n targetUserId?: string | null;\n};\n\nfunction buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/processes`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction parseVisibleRows(payload: unknown, url: string): VisibleProcessRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: trimToken(item.id) ?? '',\n version: trimToken(item.version) ?? '',\n user_id: trimToken(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function exactVisibleRows(options: {\n id: string;\n version: string;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n}): Promise<{\n rows: VisibleProcessRow[];\n restBaseUrl: string;\n accessToken: string;\n publishableKey: string;\n}> {\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env),\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(\n runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const url = buildVisibleRowsUrl(restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n client\n .from('processes')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n\n return {\n rows: parseVisibleRows(payload, url),\n restBaseUrl,\n accessToken: await runtime.getAccessToken(),\n publishableKey: runtime.publishableKey,\n };\n}\n\nfunction visibleDraftRow(rows: VisibleProcessRow[]): VisibleProcessRow | null {\n return rows.find((row) => row.state_code === 0) ?? null;\n}\n\nfunction visibleDraftRowForTarget(\n rows: VisibleProcessRow[],\n targetUserId: string | null,\n): VisibleProcessRow | null {\n if (!targetUserId) {\n return visibleDraftRow(rows);\n }\n return rows.find((row) => row.state_code === 0 && row.user_id === targetUserId) ?? null;\n}\n\nfunction buildCurrentUserUrl(restBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(restBaseUrl)}/auth/v1/user`;\n}\n\nasync function currentUserId(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<string> {\n const url = buildCurrentUserUrl(options.restBaseUrl);\n const payload = await getJson({\n url,\n headers: buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n const userId = isRecord(payload) ? trimToken(payload.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SAVE_DRAFT_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n return userId;\n}\n\nfunction assertTargetUserMatchesCurrent(options: {\n targetUserId: string | null;\n currentUserId: string;\n}): void {\n if (!options.targetUserId) {\n return;\n }\n if (options.currentUserId !== options.targetUserId) {\n throw new CliError(\n `Process save-draft target user ${options.targetUserId} does not match current CLI auth user ${options.currentUserId}.`,\n {\n code: 'PROCESS_SAVE_DRAFT_TARGET_USER_MISMATCH',\n exitCode: 1,\n details: {\n target_user_id: options.targetUserId,\n current_user_id: options.currentUserId,\n },\n },\n );\n }\n}\n\nfunction buildUnsupportedVisibleRowError(\n id: string,\n version: string,\n rows: VisibleProcessRow[],\n): CliError {\n const primaryRow = rows[0] ?? null;\n const stateCode =\n primaryRow?.state_code === null || primaryRow?.state_code === undefined\n ? 'unknown'\n : String(primaryRow.state_code);\n const visibleOwner = primaryRow?.user_id ?? 'unknown';\n\n return new CliError(\n `Process ${id}@${version} is already visible but cannot use save-draft because the visible row is not a current-user draft (state_code=${stateCode}, visible_owner=${visibleOwner}).`,\n {\n code: 'PUBLISH_PROCESS_SAVE_DRAFT_UNSUPPORTED_VISIBLE_ROW',\n exitCode: 1,\n details: {\n id,\n version,\n visible_rows: rows,\n },\n },\n );\n}\n\nasync function saveDraft(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n id: string;\n version: string;\n payload: JsonObject;\n timeoutMs: number;\n fetchImpl: FetchLike;\n audit?: JsonObject;\n modelId?: string | null;\n}): Promise<ProcessSaveDraftRpcResult> {\n const capability = resolveDataApiCapability({\n kind: 'rpc',\n name: 'cmd_dataset_save_draft',\n });\n const url = buildDataApiUrl(options.restBaseUrl, capability);\n const payload = requireRemoteOkPayload(\n await postJson({\n url,\n headers: applyDataApiProfileHeaders(\n {\n ...buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n 'Content-Type': 'application/json',\n },\n capability,\n 'POST',\n ),\n body: {\n p_table: 'processes',\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId ?? null,\n p_audit: options.audit ?? null,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n }),\n url,\n );\n\n if (!isRecord(payload) || payload.ok !== true) {\n throw new CliError(`Process save-draft RPC returned an unexpected payload for ${url}`, {\n code: 'REMOTE_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload as ProcessSaveDraftRpcResult;\n}\n\nexport async function syncStateAwareProcessRecord(\n options: SyncStateAwareProcessRecordOptions,\n): Promise<ProcessStateAwareWriteResult> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const targetUserId = trimToken(options.targetUserId);\n const visible = await exactVisibleRows({\n id: options.id,\n version: options.version,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n if (targetUserId) {\n const userId = await currentUserId({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n assertTargetUserMatchesCurrent({ targetUserId, currentUserId: userId });\n }\n\n const draftRow = visibleDraftRowForTarget(visible.rows, targetUserId);\n\n if (!draftRow) {\n if (visible.rows.length > 0) {\n throw buildUnsupportedVisibleRowError(options.id, options.version, visible.rows);\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: options.id,\n version: options.version,\n payload: options.payload,\n writeMode: 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n }\n\n return {\n status: 'success',\n operation: 'save_draft',\n write_path: 'cmd_dataset_save_draft',\n rpc_result: await saveDraft({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n id: options.id,\n version: options.version,\n payload: options.payload,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n audit: options.audit,\n modelId: options.modelId,\n }),\n visible_row: draftRow,\n };\n}\n\nexport const __testInternals = {\n buildVisibleRowsUrl,\n buildCurrentUserUrl,\n parseVisibleRows,\n visibleDraftRow,\n visibleDraftRowForTarget,\n assertTargetUserMatchesCurrent,\n buildUnsupportedVisibleRowError,\n};\n"]}
1
+ {"version":3,"file":"process-save-draft.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: processes\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { getJson, postJson, requireRemoteOkPayload } from './http.js';\nimport {\n buildSupabaseAuthHeaders,\n createSupabaseDataClient,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedWriteResult,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nexport type VisibleProcessRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n};\n\nexport type ProcessSaveDraftRpcResult = {\n ok: true;\n [key: string]: unknown;\n};\n\nexport type ProcessStateAwareWriteResult =\n | SupabaseJsonOrderedWriteResult\n | {\n status: 'success';\n operation: 'save_draft';\n write_path: 'cmd_dataset_save_draft';\n rpc_result: ProcessSaveDraftRpcResult;\n visible_row: VisibleProcessRow;\n };\n\nexport type SyncStateAwareProcessRecordOptions = {\n id: string;\n version: string;\n payload: JsonObject;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n audit?: JsonObject;\n modelId?: string | null;\n modelVersion?: string | null;\n targetUserId?: string | null;\n};\n\nfunction buildVisibleRowsUrl(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/processes`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction parseVisibleRows(payload: unknown, url: string): VisibleProcessRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: trimToken(item.id) ?? '',\n version: trimToken(item.version) ?? '',\n user_id: trimToken(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function exactVisibleRows(options: {\n id: string;\n version: string;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n}): Promise<{\n rows: VisibleProcessRow[];\n restBaseUrl: string;\n accessToken: string;\n publishableKey: string;\n}> {\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env),\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(\n runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const url = buildVisibleRowsUrl(restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n client\n .from('processes')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n\n return {\n rows: parseVisibleRows(payload, url),\n restBaseUrl,\n accessToken: await runtime.getAccessToken(),\n publishableKey: runtime.publishableKey,\n };\n}\n\nfunction visibleDraftRow(rows: VisibleProcessRow[]): VisibleProcessRow | null {\n return rows.find((row) => row.state_code === 0) ?? null;\n}\n\nfunction visibleDraftRowForTarget(\n rows: VisibleProcessRow[],\n targetUserId: string | null,\n): VisibleProcessRow | null {\n if (!targetUserId) {\n return visibleDraftRow(rows);\n }\n return rows.find((row) => row.state_code === 0 && row.user_id === targetUserId) ?? null;\n}\n\nfunction buildCurrentUserUrl(restBaseUrl: string): string {\n return `${deriveSupabaseProjectBaseUrl(restBaseUrl)}/auth/v1/user`;\n}\n\nasync function currentUserId(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n timeoutMs: number;\n fetchImpl: FetchLike;\n}): Promise<string> {\n const url = buildCurrentUserUrl(options.restBaseUrl);\n const payload = await getJson({\n url,\n headers: buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n const userId = isRecord(payload) ? trimToken(payload.id) : null;\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_SAVE_DRAFT_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n return userId;\n}\n\nfunction assertTargetUserMatchesCurrent(options: {\n targetUserId: string | null;\n currentUserId: string;\n}): void {\n if (!options.targetUserId) {\n return;\n }\n if (options.currentUserId !== options.targetUserId) {\n throw new CliError(\n `Process save-draft target user ${options.targetUserId} does not match current CLI auth user ${options.currentUserId}.`,\n {\n code: 'PROCESS_SAVE_DRAFT_TARGET_USER_MISMATCH',\n exitCode: 1,\n details: {\n target_user_id: options.targetUserId,\n current_user_id: options.currentUserId,\n },\n },\n );\n }\n}\n\nfunction buildUnsupportedVisibleRowError(\n id: string,\n version: string,\n rows: VisibleProcessRow[],\n): CliError {\n const primaryRow = rows[0] ?? null;\n const stateCode =\n primaryRow?.state_code === null || primaryRow?.state_code === undefined\n ? 'unknown'\n : String(primaryRow.state_code);\n const visibleOwner = primaryRow?.user_id ?? 'unknown';\n\n return new CliError(\n `Process ${id}@${version} is already visible but cannot use save-draft because the visible row is not a current-user draft (state_code=${stateCode}, visible_owner=${visibleOwner}).`,\n {\n code: 'PUBLISH_PROCESS_SAVE_DRAFT_UNSUPPORTED_VISIBLE_ROW',\n exitCode: 1,\n details: {\n id,\n version,\n visible_rows: rows,\n },\n },\n );\n}\n\nasync function saveDraft(options: {\n restBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n id: string;\n version: string;\n payload: JsonObject;\n timeoutMs: number;\n fetchImpl: FetchLike;\n audit?: JsonObject;\n modelId?: string | null;\n modelVersion?: string | null;\n}): Promise<ProcessSaveDraftRpcResult> {\n const capability = resolveDataApiCapability({\n kind: 'rpc',\n name: 'cmd_dataset_save_draft',\n });\n const url = buildDataApiUrl(options.restBaseUrl, capability);\n const payload = requireRemoteOkPayload(\n await postJson({\n url,\n headers: applyDataApiProfileHeaders(\n {\n ...buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),\n 'Content-Type': 'application/json',\n },\n capability,\n 'POST',\n ),\n body: {\n p_table: 'processes',\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId ?? null,\n p_model_version: options.modelVersion ?? null,\n p_audit: options.audit ?? null,\n },\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n }),\n url,\n );\n\n if (!isRecord(payload) || payload.ok !== true) {\n throw new CliError(`Process save-draft RPC returned an unexpected payload for ${url}`, {\n code: 'REMOTE_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload as ProcessSaveDraftRpcResult;\n}\n\nexport async function syncStateAwareProcessRecord(\n options: SyncStateAwareProcessRecordOptions,\n): Promise<ProcessStateAwareWriteResult> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const targetUserId = trimToken(options.targetUserId);\n const visible = await exactVisibleRows({\n id: options.id,\n version: options.version,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n if (targetUserId) {\n const userId = await currentUserId({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n assertTargetUserMatchesCurrent({ targetUserId, currentUserId: userId });\n }\n\n const draftRow = visibleDraftRowForTarget(visible.rows, targetUserId);\n\n if (!draftRow) {\n if (visible.rows.length > 0) {\n throw buildUnsupportedVisibleRowError(options.id, options.version, visible.rows);\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: 'processes',\n id: options.id,\n version: options.version,\n payload: options.payload,\n writeMode: 'upsert_current_version',\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n extraData:\n options.modelId !== undefined || options.modelVersion !== undefined\n ? {\n modelId: options.modelId ?? null,\n modelVersion: options.modelVersion ?? null,\n }\n : undefined,\n });\n }\n\n return {\n status: 'success',\n operation: 'save_draft',\n write_path: 'cmd_dataset_save_draft',\n rpc_result: await saveDraft({\n restBaseUrl: visible.restBaseUrl,\n publishableKey: visible.publishableKey,\n accessToken: visible.accessToken,\n id: options.id,\n version: options.version,\n payload: options.payload,\n timeoutMs,\n fetchImpl: options.fetchImpl,\n audit: options.audit,\n modelId: options.modelId,\n modelVersion: options.modelVersion,\n }),\n visible_row: draftRow,\n };\n}\n\nexport const __testInternals = {\n buildVisibleRowsUrl,\n buildCurrentUserUrl,\n parseVisibleRows,\n visibleDraftRow,\n visibleDraftRowForTarget,\n assertTargetUserMatchesCurrent,\n buildUnsupportedVisibleRowError,\n};\n"]}