portadom 1.0.0 → 1.0.2
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.
- package/dist/cjs/dom/dom.js +0 -1
- package/dist/cjs/dom/dom.js.map +1 -1
- package/dist/cjs/dom/types.d.ts +58 -10
- package/dist/cjs/dom/types.js +32 -0
- package/dist/cjs/dom/types.js.map +1 -1
- package/dist/cjs/utils/async.d.ts +4 -0
- package/dist/cjs/utils/async.js +26 -1
- package/dist/cjs/utils/async.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/dom/dom.js
CHANGED
package/dist/cjs/dom/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/dom/dom.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,qDAA6B;AAE7B,4CAAyD;AACzD,sCAAyC;AAEzC,0CAA+C;AAC/C,yCAA2F;AAC3F,mCAA2F;AAK3F,gEAAgE;AACzD,MAAM,eAAe,GAAG,CAAqB,IAAQ,EAAuB,EAAE;IACnF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;IAExC,uBAAuB;IACvB,oBAAoB;IACpB,uBAAuB;IAEvB,MAAM,IAAI,GAAgC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;;QAChE,MAAM,GAAG,GAAG,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,EAAE,mCAAI,IAAI,CAAC;QAC7C,OAAO,IAAA,kBAAS,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAuC,CAAC,OAAO,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC,CAAC,CAAE,GAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAuC,CAAC,OAAO,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC,CAAC,CAAE,GAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAwC,CAAC,OAAO,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAA,oBAAW,EAAC,GAAa,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CACxC,UAA8B,EAC9B,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE;;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,OAAO,GAAG,MAAA,IAAA,aAAG,EAAC,IAAI,EAAE,QAAQ,CAAC,mCAAI,IAAI,CAAC;QAC1C,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,OAAO,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAU,CAAM,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,KAAK,GAAiC,CAC1C,YAAkC,EAClC,OAAO,GAAG,EAAE,EACZ,EAAE;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,QAA2B,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;;QAC1E,IAAI,OAAO,GAAG,MAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;QAClD,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,OAAO,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAiC,CAAmB,SAAc,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QAC7F,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACxE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAkB,CAAC;YACjD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAS,CAAC,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAkB,CAAC;QAC1D,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAA+B,CAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QAC5F,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAkB,CAAC;QACzD,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAA,CAAC;IAEF,MAAM,QAAQ,GAAoC,GAAG,EAAE;QACrD,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAkB,CAAC;QAC9C,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,GAAG,GAA+B,GAAG,EAAE;;QAC3C,mDAAmD;QACnD,MAAM,MAAM,GAAG,CAAA,MAAA,MAAA,MAAM,EAAE,CAAC,WAAW,0CAAE,QAAQ,0CAAE,IAAI,KAAI,IAAI,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,GAAG,GAA+B,CAAO,KAAyB,EAAE,EAAE;QAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IAEvB,MAAM,OAAO,GAAmC,CAA8B,QAAQ,EAAE,EAAE;;QACxF,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAe,CAAC,EAAE;YAC3E,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;SACpC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAkB,CAAC;QACzE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAoC,CAA8B,QAAQ,EAAE,EAAE;QAC1F,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAe,CAAC,EAAE;YAC3E,OAAO,IAAA,kCAA0B,EAAC,EAAE,CAAC,CAAC;SACvC;QACD,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAa,CAAC,CAAC,kBAAkB;QACtF,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,IAAA,kCAA0B,EAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAmC,CAA8B,QAAQ,EAAE,EAAE;;QACxF,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAe,CAAC,EAAE;YAC3E,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;SACpC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAkB,CAAC;QACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAkC,GAAgC,EAAE;QAC9E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAkB,CAAC;QAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAoC,GAAgC,EAAE;QAClF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAa,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,IAAA,kCAA0B,EAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,GAAgC,EAAE;;QAC1E,MAAM,MAAM,GAAG,CAAC,CAAC,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAuB,KAAI,IAAI,CAAkB,CAAC;QACvF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAkC,GAAG,EAAE;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAkB,GAAO,EAAE,GAAO,EAAE,EAAE;QAC/D,uCAAuC;QACvC,iFAAiF;QACjF,MAAM,2BAA2B,GAAG,CAAC,GAAO,EAAE,GAAO,EAAE,EAAE;YACvD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,KAAK,CAAC,uBAAuB,CAAC;YAClD,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;QAEF,gFAAgF;QAChF,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAE/F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc;YACxC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAElC,MAAM,WAAW,GAAG,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,WAAwB,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAA6C,CAClE,OAAO,EACP,EAAE;QACF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAS,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,mCAAmC,CAAK;QAC7E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAiB;QAC/E,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAA0B;QAChD,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACpF,CAAC;QACD,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;KAC9D,CAAC,CAAC;IAEH,MAAM,6BAA6B,GAAyD,CAG1F,QAAQ,EACR,EAAE;QACF,MAAM,GAAG,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC,IAAI,CACvD,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAe,EAAC,QAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7E,CAAC;QACF,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QAEJ,IAAI;QACJ,WAAW;QACX,WAAW;QACX,YAAY;QACZ,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,GAAG;QACH,QAAQ;QACR,GAAG;QACH,GAAG;QAEH,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,iBAAiB;QACjB,6BAA6B;KACE,CAAC;AACpC,CAAC,CAAC;AAxNW,QAAA,eAAe,mBAwN1B;AAQF,4CAA4C;AACrC,MAAM,eAAe,GAAG,CAC7B,WAAe,EACf,MAAqB,EACA,EAAE;IACvB,uBAAuB;IACvB,oBAAoB;IACpB,uBAAuB;IAEvB,MAAM,IAAI,GAAgC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;;QAChE,MAAM,GAAG,GAAG,MAAA,MAAA,WAAW,CAAC,IAAI,EAAE,0CAAE,IAAI,EAAE,mCAAI,IAAI,CAAC;QAC/C,OAAO,IAAA,kBAAS,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAuC,CAAC,OAAO,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC,CAAC,CAAE,GAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAuC,CAAC,OAAO,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC,CAAC,CAAE,GAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAwC,CAAC,OAAO,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,IAAA,oBAAW,EAAC,GAAa,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;;QAC1E,IAAI,OAAO,GAAG,MAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;QACjD,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,OAAO,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAiC,CAAmB,SAAc,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QAC7F,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACxE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAkB,CAAC;YACjD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAS,CAAC,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CACxC,UAA8B,EAC9B,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE;;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,OAAO,GAAG,MAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,IAAA,aAAG,EAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,OAAO,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAU,CAAM,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,KAAK,GAAiC,CAC1C,YAAkC,EAClC,OAAO,GAAG,EAAE,EACZ,EAAE;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,QAA2B,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QACxF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAkB,CAAC;QAC1D,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;IAEF,MAAM,GAAG,GAA+B,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QACtF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAkB,CAAC;QACzD,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAoC,GAAG,EAAE;QACrD,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAkB,CAAC;QAC9C,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,GAAG,GAA+B,GAAG,EAAE;QAC3C,OAAO,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,GAAG,GAA+B,CAAO,KAAyB,EAAE,EAAE;QAC1E,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IAEvB,MAAM,OAAO,GAAmC,CAC9C,QAAQ,EACR,EAAE;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAY,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAA,uBAAe,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAoC,CAChD,QAAQ,EACR,EAAE;QACF,MAAM,SAAS,GAAG,IAAA,gCAAqB,EAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAa,CAAC;QAChF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAmC,CAC9C,QAAQ,EACR,EAAE;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAY,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAA,uBAAe,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAkC,GAAyC,EAAE;QACvF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAY,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAA,uBAAe,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAoC,GAAyC,EAAE;QAC3F,MAAM,QAAQ,GAAG,IAAA,gCAAqB,EAAC,WAAW,CAAC,QAAQ,EAAE,CAAa,CAAC;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAgC,GAAyC,EAAE;;QACnF,MAAM,MAAM,GAAG,MAAA,WAAW,CAAC,KAAK,0CAAE,KAAK,EAAmB,CAAC;QAC3D,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAAE,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,IAAA,uBAAe,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAkC,GAAG,EAAE;QACjD,WAAW,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,2EAA2E;IAC3E,MAAM,kBAAkB,GAAG,CAAO,GAAO,EAAE,GAAO,EAAE,EAAE;QACpD,MAAM,UAAU,GAAG,IAAA,gCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,CAAS,CAAC;QAChE,MAAM,UAAU,GAAG,IAAA,gCAAqB,EAAC,GAAG,CAAC,OAAO,EAAE,CAAS,CAAC;QAEhE,IAAI,cAAc,GAAc,IAAI,CAAC;QACrC,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE;YACvC,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE;gBACvC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC;oBAAE,SAAS;gBACjD,cAAc,GAAG,cAAc,CAAC;gBAChC,MAAM;aACP;YACD,IAAI,cAAc;gBAAE,MAAM;SAC3B;QACD,OAAO,cAAc,CAAC;IACxB,CAAC,CAAA,CAAC;IAEF,MAAM,iBAAiB,GAA6C,CAGlE,OAAO,EACP,EAAE;QACF,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrE,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAA,uBAAe,EAAS,QAAyB,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,mCAAmC,CAAK;QAC7E,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,gCAAqB,EAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAS;QACzF,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAe;QAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/C,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;KAC9D,CAAC,CAAC;IAEH,MAAM,6BAA6B,GAAyD,CAG1F,QAAQ,EACR,EAAE;QACF,MAAM,GAAG,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrE,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBAAE,OAAO,IAAI,CAAC;YACnC,OAAO,IAAA,uBAAe,EAAS,QAAyB,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,WAAW;QAEjB,IAAI;QACJ,WAAW;QACX,WAAW;QACX,YAAY;QACZ,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,GAAG;QACH,QAAQ;QACR,GAAG;QACH,GAAG;QAEH,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,iBAAiB;QACjB,6BAA6B;KACA,CAAC;AAClC,CAAC,CAAC;AAvNW,QAAA,eAAe,mBAuN1B;AAOF,MAAM,cAAc,GAAG,CAAO,EAAmD,EAAE,EAAE;IACnF,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,MAAM,GAAG,MAAO,EAAoB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5B,CAAC,CAAA,CAAC;AAEF,6DAA6D;AACtD,MAAM,wBAAwB,GAAG,CACtC,IAAQ,EACR,IAAU,EACoB,EAAE;IAChC,uBAAuB;IACvB,oBAAoB;IACpB,uBAAuB;IAEvB,MAAM,IAAI,GAAyC,CAAO,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE;;QAC/E,MAAM,GAAG,GAAG,MAAA,MAAA,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,0CAAE,IAAI,EAAE,mCAAI,IAAI,CAAC;QACvD,OAAO,IAAA,kBAAS,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC,CAAA,CAAC;IAEF,MAAM,WAAW,GAAgD,CAAO,OAAO,EAAE,EAAE;QACjF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,CAAC,CAAA,CAAC;IAEF,MAAM,WAAW,GAAgD,CAAO,OAAO,EAAE,EAAE;QACjF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,CAAC,CAAA,CAAC;IAEF,MAAM,YAAY,GAAiD,CAAO,OAAO,EAAE,EAAE;QACnF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,IAAA,oBAAW,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAA,CAAC;IAEF,MAAM,IAAI,GAAyC,CACjD,UAA8B,EAC9B,OAAO,GAAG,EAAE,EACZ,EAAE;QACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,OAAY,CAAC;IACtB,CAAC,CAAA,CAAC;IAEF,MAAM,KAAK,GAA0C,CACnD,YAAkC,EAClC,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAO,IAAgB;aACjC,QAAQ,CACP,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE;YAChC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,GAAG,GAAQ,EAAE,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;oBAC3B,IAAI,EAAE,IAAI,IAAI;wBAAE,MAAM;oBACtB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;iBACjB;gBACD,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACjD,OAAO,IAAA,kBAAS,EAAC,GAAG,EAAE,UAAU,CAAQ,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,CAC1B;aACA,KAAK,CAAC,qBAAa,CAAC,CAAC;QACxB,OAAO,IAAS,CAAC;IACnB,CAAC,CAAA,CAAC;IAEF,MAAM,IAAI,GAAyC,CAAO,QAAQ,EAAE,OAAO,EAAE,EAAE;;QAC7E,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,MAAA,IAAI,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;IAChC,CAAC,CAAA,CAAC;IAEF,MAAM,KAAK,GAA0C,CACnD,SAAe,EACf,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAC3B,EAAE;QACF,MAAM,IAAI,GAAI,IAAgB;aAC3B,QAAQ,CACP,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAI,SAAkB,CAAC,MAAM,CAA4B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;;gBACnF,IAAI,OAAO,GAAG,MAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,mCAAI,IAAI,CAAC;gBAC5C,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAA,kBAAS,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC3C,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAS,CAAC,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,CAC1B;aACA,KAAK,CAAC,qBAAa,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,GAAyC,CAAO,EACxD,UAAU,EACV,aAAa,EACb,OAAO,GACR,GAAG,EAAE,EAAE,EAAE;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAkB,CAAC;QAClE,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAAwC,CAAO,EACtD,UAAU,EACV,aAAa,EACb,OAAO,GACR,GAAG,EAAE,EAAE,EAAE;QACR,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAkB,CAAC;QACjE,OAAO,IAAA,eAAS,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAA,CAAC;IAEF,MAAM,QAAQ,GAA6C,GAAS,EAAE;QACpE,wEAAwE;QACxE,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAkB,CAAC;QACtD,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAAwC,GAAS,EAAE;QAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IAC5B,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAAwC,CAAO,KAAyB,EAAE,EAAE;QACnF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IAEvB,MAAM,OAAO,GAA4C,CAGvD,QAAQ,EACR,EAAE;QACF,MAAM,GAAG,GAAG,IAAI;aACb,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAe,CAAC;gBAAE,OAAO,IAAI,CAAC;YACvF,OAAQ,EAAc,CAAC,aAAa,CAAU,CAAC,CAAC,IAAI,IAAI,CAAC;QAC3D,CAAC,EAAE,QAAQ,CAAC;aACX,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAA6C,CAGzD,QAAQ,EACR,EAAE;QACF,MAAM,IAAI,GAAG,IAAI;aACd,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAe,CAAC;gBAAE,OAAO,EAAE,CAAC;YACrF,OAAO,CAAC,GAAI,EAAc,CAAC,gBAAgB,CAAU,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,EAAE,QAAQ,CAAC;aACX,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,SAAS,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,MAAM,IAAA,mCAAwB,EAAM,SAAS,CAAC,CAAC;YACjE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,gCAAwB,EAAC,EAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAA4C,CAGvD,QAAQ,EACR,EAAE;QACF,MAAM,GAAG,GAAG,IAAI;aACb,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAe,CAAC;gBAAE,OAAO,IAAI,CAAC;YACvF,OAAQ,EAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC5C,CAAC,EAAE,QAAQ,CAAC;aACX,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAA2C,GAEnD,EAAE;QACJ,MAAM,GAAG,GAAG,IAAI;aACb,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC;aAChD,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAA6C,GAEvD,EAAE;QACJ,MAAM,IAAI,GAAG,IAAI;aACd,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAI,EAAc,CAAC,QAAQ,CAAC,CAAC;aACrD,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,SAAS,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,MAAM,IAAA,mCAAwB,EAAM,SAAS,CAAC,CAAC;YACjE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,gCAAwB,EAAC,EAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAyC,GAE/C,EAAE;QACJ,MAAM,GAAG,GAAG,IAAI;aACb,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,EAAE,CAAC,aAAa,0CAAE,eAAe,KAAI,IAAI,CAAA,EAAA,CAAC;aACjE,KAAK,CAAC,qBAAa,CAAC;aACpB,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAA,CAAC,CAAC;QACL,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAA2C,GAAS,EAAE;QAChE,MAAO,IAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;IAC7E,CAAC,CAAA,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAO,IAAQ,EAAE,IAAQ,EAAE,EAAE;QACtD,MAAM,cAAc,GAAG,MAAM,CAC3B,MAAM,IAAA,uBAAY,EAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACjC;aACE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YAC/B,gFAAgF;YAChF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACvF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,qBAAa,CAAC,CAAC;QAExB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc;YACxC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YACjC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,CACrB,MAAM,IAAA,uBAAY,EAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CACtC;aACE,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC9B,uCAAuC;YACvC,iFAAiF;YACjF,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;YAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,KAAK,CAAC,uBAAuB,CAAC;YAClD,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;aACD,KAAK,CAAC,qBAAa,CAAC,CAAC;QAExB,MAAM,SAAS,GAAG,MAAO,QAAqB,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;QAC3F,OAAO,SAAS,CAAC,CAAC,CAAE,QAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAA,CAAC;IAEF,MAAM,iBAAiB,GAAsD,CAG3E,OAAO,EACP,EAAE;QACF,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACpE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,QAAQ,IAAI,SAAS;gBAC1B,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAyB,EAAE,IAAI,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,mCAAmC,CAAK;QAC7E,gBAAgB,EAAE,CAAO,QAAQ,EAAE,EAAE;YACnC,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjF,OAAO,SAAS,CAAC;QACnB,CAAC,CAAA;QACD,SAAS,EAAE,CAAO,EAAE,EAAE,EAAE;YACtB,OAAO,IAAA,gCAAwB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAC1D,CAAC,CAAA;QACD,UAAU,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,MAAM,IAAA,uBAAY,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;iBACpC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;gBACvB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAC;gBAC/B,gFAAgF;gBAChF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBAC1F,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;iBACD,KAAK,CAAC,qBAAa,CAAC,CAAC;QAC1B,CAAC,CAAA;QACD,iBAAiB,EAAE,kBAAkB;KACtC,CAAC,CAAC;IAEH,MAAM,6BAA6B,GACjC,CAAoD,QAAQ,EAAE,EAAE;QAC9D,MAAM,GAAG,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YAC3E,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,QAAQ,IAAI,SAAS;gBAC1B,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAyB,EAAE,IAAI,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEJ,OAAO;QACL,IAAI;QAEJ,IAAI;QACJ,WAAW;QACX,WAAW;QACX,YAAY;QACZ,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,GAAG;QACH,QAAQ;QACR,GAAG;QACH,GAAG;QAEH,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,iBAAiB;QACjB,6BAA6B;KACS,CAAC;AAC3C,CAAC,CAAC;AAvUW,QAAA,wBAAwB,4BAuUnC;AAKF,8DAA8D;AACvD,MAAM,yBAAyB,GAAG,CACvC,IAAQ,EACR,IAAU,EACqB,EAAE;IACjC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAA,gCAAwB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEvD,uBAAuB;IACvB,oBAAoB;IACpB,uBAAuB;IAEvB,YAAY;IAEZ,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IAEvB,MAAM,OAAO,GAA6C,CACxD,QAAQ,EACR,EAAE;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACtD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,iCAAyB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAA8C,CAC1D,QAAQ,EACR,EAAE;QACF,MAAM,IAAI,GAAG,IAAI;aACd,OAAO,CAAC,QAAQ,CAAC;aACjB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAClB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,iCAAyB,EAAC,EAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACL,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAA6C,CACxD,QAAQ,EACR,EAAE;QACF,qDAAqD;QACrD,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACtD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,iCAAyB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAA4C,GAAgC,EAAE;QACxF,OAAO,OAAO,CAAS,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,QAAQ,GAA8C,GAAgC,EAAE;QAC5F,MAAM,IAAI,GAAG,IAAI;aACd,OAAO,CAAC,gBAAgB,CAAC;aACzB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAClB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,iCAAyB,EAAC,EAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACL,OAAO,IAAA,kCAA0B,EAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,IAAI,GAA0C,GAAgC,EAAE;QACpF,qDAAqD;QACrD,oGAAoG;QACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YACtD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,iCAAyB,EAAC,QAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,MAAM,GAA4C,GAAS,EAAE;QACjE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;IAChE,CAAC,CAAA,CAAC;IAEF,2EAA2E;IAC3E,MAAM,kBAAkB,GAAG,CAAO,GAAO,EAAE,GAAO,EAAE,EAAE;QACpD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC;QAEhE,IAAI,cAAc,GAAc,IAAI,CAAC;QACrC,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE;YACvC,KAAK,MAAM,cAAc,IAAI,UAAU,EAAE;gBACvC,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAY,EAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAY,EAAE,EAAE;oBAC7D,OAAO,GAAG,KAAK,GAAG,CAAC;gBACrB,CAAC,CAAC,CAAC;gBACH,IAAI,MAAM,EAAE;oBACV,cAAc,GAAG,cAAoB,CAAC;oBACtC,MAAM;iBACP;aACF;YACD,IAAI,cAAc;gBAAE,MAAM;SAC3B;QACD,OAAO,cAAc,CAAC;IACxB,CAAC,CAAA,CAAC;IAEF,MAAM,iBAAiB,GAAuD,CAG5E,OAAO,EACP,EAAE;QACF,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YACpE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,QAAQ,IAAI,SAAS;gBAC1B,CAAC,CAAC,IAAA,iCAAyB,EAAC,QAAyB,EAAE,IAAI,CAAC;gBAC5D,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,mCAAmC,CAAK;QAC7E,gBAAgB,EAAE,CAAO,QAAQ,EAAE,EAAE;YACnC,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjF,OAAO,SAAS,CAAC;QACnB,CAAC,CAAA;QACD,SAAS,EAAE,CAAO,EAAE,EAAE,EAAE;YACtB,OAAO,IAAA,iCAAyB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAC3D,CAAC,CAAA;QACD,UAAU,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,MAAM,IAAA,uBAAY,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;iBACpC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;gBACvB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;oBAAE,OAAO,KAAK,CAAC;gBAC/B,gFAAgF;gBAChF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBAC1F,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;iBACD,KAAK,CAAC,qBAAa,CAAC,CAAC;QAC1B,CAAC,CAAA;QACD,iBAAiB,EAAE,kBAAkB;KACtC,CAAC,CAAC;IAEH,MAAM,6BAA6B,GACjC,CAAoD,QAAQ,EAAE,EAAE;QAC9D,MAAM,GAAG,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAO,QAAQ,EAAE,EAAE;YAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,QAAoB,aAApB,QAAQ,uBAAR,QAAQ,CAAc,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,qBAAa,CAAC,CAAA,CAAC;YAC3F,OAAO,QAAQ,IAAI,SAAS;gBAC1B,CAAC,CAAC,IAAA,gCAAwB,EAAC,QAAyB,EAAE,IAAI,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,IAAA,6BAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;IAEJ,OAAO;QACL,IAAI;QAEJ,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,GAAG,EAAE,SAAS,CAAC,GAAG;QAElB,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,iBAAiB;QACjB,6BAA6B;KACU,CAAC;AAC5C,CAAC,CAAC;AA9KW,QAAA,yBAAyB,6BA8KpC;AAEF,MAAM,mCAAmC,GAAG,CAAK,KAOhD,EAAE,EAAE;IACH,MAAM,6BAA6B,GAAG,CAAO,QAAgB,EAAsB,EAAE;QACnF,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,UAAU,GAAc,IAAI,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;YACpB,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzF,MAAM,aAAa,GAAG,CAAC,UAAU;gBAC/B,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,cAAc,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;oBACxE,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,UAAU,CAAC;YACf,UAAU,GAAG,aAAa,CAAC;SAC5B;QAED,OAAO,UAAgB,CAAC;IAC1B,CAAC,CAAA,CAAC;IAEF,OAAO,6BAA6B,CAAC;AACvC,CAAC,CAAC;AAEF,IAAA,uBAAe,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC","sourcesContent":["import type { AnyNode, Cheerio } from 'cheerio';\nimport type { ElementHandle, JSHandle, Locator, Page } from 'playwright';\nimport get from 'lodash/get';\n\nimport { strAsNumber, strOrNull } from '../utils/format';\nimport { formatUrl } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport { logAndRethrow } from '../utils/error';\nimport { mergeHandles, splitCheerioSelection, splitPlaywrightSelection } from './domUtils';\nimport { createPortadomArrayPromise, createPortadomPromise, type Portadom } from './types';\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport type BrowserPortadom<T extends Element = Element> = Portadom<T, Element>;\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport const browserPortadom = <El extends Element>(node: El): BrowserPortadom<El> => {\n const getDoc = () => node.ownerDocument;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: BrowserPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = node.textContent?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: BrowserPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: BrowserPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: BrowserPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const prop: BrowserPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = get(node, propPath) ?? null;\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: BrowserPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const attr: BrowserPortadom<El>['attr'] = (propName, { allowEmpty } = {}) => {\n let attrVal = node.getAttribute(propName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: BrowserPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const href: BrowserPortadom<El>['href'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: BrowserPortadom<El>['src'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: BrowserPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: BrowserPortadom<El>['url'] = () => {\n // See https://stackoverflow.com/a/16010322/9788634\n const urlVal = getDoc().defaultView?.location?.href || null;\n return urlVal;\n };\n\n const map: BrowserPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: BrowserPortadom<El>['findOne'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.querySelector(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const findMany: BrowserPortadom<El>['findMany'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomArrayPromise([]);\n }\n const resultEls = [...node.querySelectorAll(selector)] as TNewEl[]; // prettier-ignore\n const dom = resultEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const closest: BrowserPortadom<El>['closest'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.closest(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const parent: BrowserPortadom<El>['parent'] = <TNewEl extends Element = El>() => {\n const parentEl = (node.parentNode || null) as TNewEl | null;\n const dom = parentEl ? browserPortadom(parentEl) : null;\n return createPortadomPromise(dom);\n };\n\n const children: BrowserPortadom<El>['children'] = <TNewEl extends Element = El>() => {\n const childEls = [...node.children] as TNewEl[];\n const dom = childEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const root: BrowserPortadom<El>['root'] = <TNewEl extends Element = El>() => {\n const rootEl = ((node.ownerDocument?.documentElement as any) || null) as TNewEl | null;\n const dom = rootEl ? browserPortadom(rootEl) : null;\n return createPortadomPromise(dom);\n };\n\n const remove: BrowserPortadom<El>['remove'] = () => {\n node.remove();\n };\n\n const _getCommonAncestor = <El extends Node>(el1: El, el2: El) => {\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const _getCommonAncestorFromRange = (el1: El, el2: El) => {\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const isEl1BeforeEl2 = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: el1, lastEl: el2 }\n : { firstEl: el2, lastEl: el1 };\n\n const containerEl = _getCommonAncestorFromRange(firstEl, lastEl);\n return containerEl as El | null;\n };\n\n const getCommonAncestor: BrowserPortadom<El>['getCommonAncestor'] = <TNewEl extends Element = El>(\n otherEl\n ) => {\n const ancestor = _getCommonAncestor(node, otherEl);\n const dom = ancestor ? browserPortadom<TNewEl>(ancestor) : null;\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => node.querySelectorAll(selector) as Iterable<El>,\n getParent: (el) => el.parentElement as El | null,\n isAncestor: (el1, el2) => {\n return !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n },\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: BrowserPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Element = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then<BrowserPortadom<TNewEl> | null>(\n (ancestor) => (ancestor ? browserPortadom(ancestor as any as TNewEl) : null)\n );\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies Portadom<El, Element>;\n};\n\n/** Implementation of Portadom in Cheerio */\nexport type CheerioPortadom<El extends Cheerio<AnyNode> = Cheerio<AnyNode>> = Portadom<\n El,\n Cheerio<AnyNode>\n>;\n\n/** Implementation of Portadom in Cheerio */\nexport const cheerioPortadom = <El extends Cheerio<AnyNode>>(\n cheerioNode: El,\n srcUrl: string | null\n): CheerioPortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: CheerioPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = cheerioNode.text()?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: CheerioPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: CheerioPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: CheerioPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const attr: CheerioPortadom<El>['attr'] = (attrName, { allowEmpty } = {}) => {\n let attrVal = cheerioNode.attr(attrName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: CheerioPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const prop: CheerioPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = cheerioNode.prop(propPath[0]) ?? null;\n if (propPath.length > 1) propVal = get(propVal, propPath.slice(1));\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: CheerioPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const href: CheerioPortadom<El>['href'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const src: CheerioPortadom<El>['src'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const nodeName: CheerioPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: CheerioPortadom<El>['url'] = () => {\n return srcUrl ?? null;\n };\n\n const map: CheerioPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(cheerioNode);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: CheerioPortadom<El>['findOne'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.find(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const findMany: CheerioPortadom<El>['findMany'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEls = splitCheerioSelection(cheerioNode.find(selector)) as TNewEl[];\n const doms = resultEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const closest: CheerioPortadom<El>['closest'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.closest(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const parent: CheerioPortadom<El>['parent'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const parentEl = cheerioNode.parent().first() as TNewEl;\n if (!parentEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(parentEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const children: CheerioPortadom<El>['children'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const childEls = splitCheerioSelection(cheerioNode.children()) as TNewEl[];\n const doms = childEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const root: CheerioPortadom<El>['root'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const rootEl = cheerioNode._root?.first() as TNewEl | null;\n if (!rootEl?.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(rootEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const remove: CheerioPortadom<El>['remove'] = () => {\n cheerioNode.remove();\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = splitCheerioSelection(el1.parents()) as El[];\n const ch2Parents = splitCheerioSelection(el2.parents()) as El[];\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n if (!comparerParent.is(compareeParent)) continue;\n commonAncestor = comparerParent;\n break;\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: CheerioPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(cheerioNode, otherEl).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => splitCheerioSelection(cheerioNode.find(selector)) as El[],\n getParent: (el) => el.parent() as El | null,\n isAncestor: (el1, el2) => el1.is(el2.parents()),\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: CheerioPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node: cheerioNode,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies CheerioPortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport type PlaywrightHandlePortadom<\n El extends Locator | ElementHandle<Node> = Locator | ElementHandle<Node>\n> = Portadom<El, Locator | ElementHandle<Node>>;\n\nconst verifyHandleEl = async (el: Locator | ElementHandle<Node> | JSHandle | null) => {\n if (!el) return null;\n const exists = await (el as ElementHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return exists ? el : null;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport const playwrightHandlePortadom = <El extends Locator | ElementHandle<Node>>(\n node: El,\n page: Page\n): PlaywrightHandlePortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: PlaywrightHandlePortadom<El>['text'] = async ({ allowEmpty } = {}) => {\n const txt = (await node.textContent())?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: PlaywrightHandlePortadom<El>['textAsUpper'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleUpperCase() : txt;\n };\n\n const textAsLower: PlaywrightHandlePortadom<El>['textAsLower'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: PlaywrightHandlePortadom<El>['textAsNumber'] = async (options) => {\n const txt = await text(options);\n return strAsNumber(txt, options);\n };\n\n const prop: PlaywrightHandlePortadom<El>['prop'] = async <R = unknown>(\n propOrPath: MaybeArray<string>,\n options = {}\n ) => {\n const [resProp] = await props([propOrPath], options);\n return resProp as R;\n };\n\n const props: PlaywrightHandlePortadom<El>['props'] = async <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n { allowEmpty = false } = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const data = await (node as Locator)\n .evaluate(\n (el, { propPaths, allowEmpty }) => {\n return propPaths.map((propPath) => {\n let val: any = el;\n for (const prop of propPath) {\n if (el == null) break;\n val = val[prop];\n }\n val = typeof val === 'string' ? val.trim() : val;\n return strOrNull(val, allowEmpty) as any;\n });\n },\n { propPaths, allowEmpty }\n )\n .catch(logAndRethrow);\n return data as R;\n };\n\n const attr: PlaywrightHandlePortadom<El>['attr'] = async (attrName, options) => {\n const data = await attrs([attrName], options);\n return data[attrName] ?? null;\n };\n\n const attrs: PlaywrightHandlePortadom<El>['attrs'] = <El extends string>(\n attrNames: El[],\n { allowEmpty = false } = {}\n ) => {\n const data = (node as Locator)\n .evaluate(\n (el, { attrNames, allowEmpty }) => {\n const attrData = (attrNames as El[]).reduce<Record<El, string | null>>((agg, name) => {\n let attrVal = el.getAttribute(name) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n agg[name] = strOrNull(attrVal, allowEmpty);\n return agg;\n }, {} as any);\n return attrData;\n },\n { attrNames, allowEmpty }\n )\n .catch(logAndRethrow);\n return data;\n };\n\n const href: PlaywrightHandlePortadom<El>['href'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('href', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: PlaywrightHandlePortadom<El>['src'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('src', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: PlaywrightHandlePortadom<El>['nodeName'] = async () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = (await prop('nodeName')) as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: PlaywrightHandlePortadom<El>['url'] = async () => {\n return page.url() || null;\n };\n\n const map: PlaywrightHandlePortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightHandlePortadom<El>['findOne'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).querySelector<Element>(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightHandlePortadom<El>['findMany'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const doms = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return [];\n return [...(el as Element).querySelectorAll<Element>(s)];\n }, selector)\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightHandlePortadom<El>['closest'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).closest(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightHandlePortadom<El>['parent'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.parentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const children: PlaywrightHandlePortadom<El>['children'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const doms = node\n .evaluateHandle((el) => [...(el as Element).children])\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightHandlePortadom<El>['root'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.ownerDocument?.documentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightHandlePortadom<El>['remove'] = async () => {\n await (node as Locator).evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n const _getCommonAncestor = async (loc1: El, loc2: El) => {\n const isEl1BeforeEl2 = await (\n await mergeHandles([loc1, loc2])\n )\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n return result;\n })\n .catch(logAndRethrow);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: loc1, lastEl: loc2 }\n : { firstEl: loc2, lastEl: loc1 };\n\n const ancestor = await (\n await mergeHandles([firstEl, lastEl])\n )\n .evaluateHandle(([el1, el2]) => {\n if (!el1 || !el2) return null;\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n })\n .catch(logAndRethrow);\n\n const hasResult = await (ancestor as JSHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return hasResult ? (ancestor as El) : null;\n };\n\n const getCommonAncestor: PlaywrightHandlePortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightHandlePortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightHandlePortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightHandlePortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Locators */\nexport type PlaywrightLocatorPortadom<El extends Locator = Locator> = Portadom<El, Locator>;\n\n/** Implementation of Portadom in Playwright using Locators */\nexport const playwrightLocatorPortadom = <El extends Locator>(\n node: El,\n page: Page\n): PlaywrightLocatorPortadom<El> => {\n // NOTE: Where possible, make use of the already-existing logic for Handles\n const handleDom = playwrightHandlePortadom(node, page);\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Empty */\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightLocatorPortadom<El>['findOne'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const resultEl = node.locator(selector);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightLocatorPortadom<El>['findMany'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const doms = node\n .locator(selector)\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightLocatorPortadom<El>['closest'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634\n const resultEl = node.locator(`xpath=ancestor::${selector.trim()}[position() = 1]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightLocatorPortadom<El>['parent'] = <TNewEl extends Locator = El>() => {\n return closest<TNewEl>('*');\n };\n\n const children: PlaywrightLocatorPortadom<El>['children'] = <TNewEl extends Locator = El>() => {\n const doms = node\n .locator('xpath=child::*')\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightLocatorPortadom<El>['root'] = <TNewEl extends Locator = El>() => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634 and https://stackoverflow.com/q/31562639/9788634\n const resultEl = node.locator(`xpath=ancestor::*[position() = last()]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightLocatorPortadom<El>['remove'] = async () => {\n await node.evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = await el1.locator(`xpath=ancestor::*`).all();\n const ch2Parents = await el2.locator(`xpath=ancestor::*`).all();\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n const handle = await mergeHandles([comparerParent, compareeParent]);\n const isSame = await handle.evaluate(([el1, el2]: Element[]) => {\n return el1 === el2;\n });\n if (isSame) {\n commonAncestor = comparerParent as El;\n break;\n }\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: PlaywrightLocatorPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightLocatorPortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightLocatorPortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightLocatorPortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (ancestor) => {\n const hasResult = await (ancestor as Locator)?.evaluate((el) => !!el).catch(logAndRethrow);\n return ancestor && hasResult\n ? playwrightHandlePortadom(ancestor as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text: handleDom.text,\n textAsLower: handleDom.textAsLower,\n textAsUpper: handleDom.textAsUpper,\n textAsNumber: handleDom.textAsNumber,\n attr: handleDom.attr,\n attrs: handleDom.attrs,\n prop: handleDom.prop,\n props: handleDom.props,\n href: handleDom.href,\n src: handleDom.src,\n nodeName: handleDom.nodeName,\n url: handleDom.url,\n map: handleDom.map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightLocatorPortadom<El>;\n};\n\nconst _createCommonAncestorFromSelectorFn = <El>(input: {\n querySelectorAll: (selector: string) => MaybePromise<Iterable<El> | El[]>;\n getParent: (el: El) => MaybePromise<El | null>;\n /** Function that returns `true` if `el1` is ancestor of `el2`. */\n isAncestor: (el1: El, el2: El) => MaybePromise<boolean>;\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n getCommonAncestor: (el1: El, el2: El) => MaybePromise<El | null>;\n}) => {\n const getCommonAncestorFromSelector = async (selector: string): Promise<El | null> => {\n const els = [...(await input.querySelectorAll(selector))];\n if (!els.length) return null;\n if (els.length === 1) return input.getParent(els[0]);\n\n const comparerEl = els.shift();\n let ancestorEl: El | null = null;\n for (const el of els) {\n const currAncestorEl = comparerEl ? await input.getCommonAncestor(comparerEl, el) : null;\n const newAncestorEl = !ancestorEl\n ? currAncestorEl\n : currAncestorEl && (await input.isAncestor(currAncestorEl, ancestorEl))\n ? currAncestorEl\n : ancestorEl;\n ancestorEl = newAncestorEl;\n }\n\n return ancestorEl as El;\n };\n\n return getCommonAncestorFromSelector;\n};\n\nbrowserPortadom(document.body);\n"]}
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/dom/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnyNode, Cheerio } from 'cheerio';\nimport type { ElementHandle, JSHandle, Locator, Page } from 'playwright';\nimport get from 'lodash/get';\n\nimport { strAsNumber, strOrNull } from '../utils/format';\nimport { formatUrl } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport { logAndRethrow } from '../utils/error';\nimport { mergeHandles, splitCheerioSelection, splitPlaywrightSelection } from './domUtils';\nimport { createPortadomArrayPromise, createPortadomPromise, type Portadom } from './types';\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport type BrowserPortadom<T extends Element = Element> = Portadom<T, Element>;\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport const browserPortadom = <El extends Element>(node: El): BrowserPortadom<El> => {\n const getDoc = () => node.ownerDocument;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: BrowserPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = node.textContent?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: BrowserPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: BrowserPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: BrowserPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const prop: BrowserPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = get(node, propPath) ?? null;\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: BrowserPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const attr: BrowserPortadom<El>['attr'] = (propName, { allowEmpty } = {}) => {\n let attrVal = node.getAttribute(propName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: BrowserPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const href: BrowserPortadom<El>['href'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: BrowserPortadom<El>['src'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: BrowserPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: BrowserPortadom<El>['url'] = () => {\n // See https://stackoverflow.com/a/16010322/9788634\n const urlVal = getDoc().defaultView?.location?.href || null;\n return urlVal;\n };\n\n const map: BrowserPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: BrowserPortadom<El>['findOne'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.querySelector(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const findMany: BrowserPortadom<El>['findMany'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomArrayPromise([]);\n }\n const resultEls = [...node.querySelectorAll(selector)] as TNewEl[]; // prettier-ignore\n const dom = resultEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const closest: BrowserPortadom<El>['closest'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.closest(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const parent: BrowserPortadom<El>['parent'] = <TNewEl extends Element = El>() => {\n const parentEl = (node.parentNode || null) as TNewEl | null;\n const dom = parentEl ? browserPortadom(parentEl) : null;\n return createPortadomPromise(dom);\n };\n\n const children: BrowserPortadom<El>['children'] = <TNewEl extends Element = El>() => {\n const childEls = [...node.children] as TNewEl[];\n const dom = childEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const root: BrowserPortadom<El>['root'] = <TNewEl extends Element = El>() => {\n const rootEl = ((node.ownerDocument?.documentElement as any) || null) as TNewEl | null;\n const dom = rootEl ? browserPortadom(rootEl) : null;\n return createPortadomPromise(dom);\n };\n\n const remove: BrowserPortadom<El>['remove'] = () => {\n node.remove();\n };\n\n const _getCommonAncestor = <El extends Node>(el1: El, el2: El) => {\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const _getCommonAncestorFromRange = (el1: El, el2: El) => {\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const isEl1BeforeEl2 = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: el1, lastEl: el2 }\n : { firstEl: el2, lastEl: el1 };\n\n const containerEl = _getCommonAncestorFromRange(firstEl, lastEl);\n return containerEl as El | null;\n };\n\n const getCommonAncestor: BrowserPortadom<El>['getCommonAncestor'] = <TNewEl extends Element = El>(\n otherEl\n ) => {\n const ancestor = _getCommonAncestor(node, otherEl);\n const dom = ancestor ? browserPortadom<TNewEl>(ancestor) : null;\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => node.querySelectorAll(selector) as Iterable<El>,\n getParent: (el) => el.parentElement as El | null,\n isAncestor: (el1, el2) => {\n return !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n },\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: BrowserPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Element = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then<BrowserPortadom<TNewEl> | null>(\n (ancestor) => (ancestor ? browserPortadom(ancestor as any as TNewEl) : null)\n );\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies Portadom<El, Element>;\n};\n\n/** Implementation of Portadom in Cheerio */\nexport type CheerioPortadom<El extends Cheerio<AnyNode> = Cheerio<AnyNode>> = Portadom<\n El,\n Cheerio<AnyNode>\n>;\n\n/** Implementation of Portadom in Cheerio */\nexport const cheerioPortadom = <El extends Cheerio<AnyNode>>(\n cheerioNode: El,\n srcUrl: string | null\n): CheerioPortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: CheerioPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = cheerioNode.text()?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: CheerioPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: CheerioPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: CheerioPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const attr: CheerioPortadom<El>['attr'] = (attrName, { allowEmpty } = {}) => {\n let attrVal = cheerioNode.attr(attrName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: CheerioPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const prop: CheerioPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = cheerioNode.prop(propPath[0]) ?? null;\n if (propPath.length > 1) propVal = get(propVal, propPath.slice(1));\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: CheerioPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const href: CheerioPortadom<El>['href'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const src: CheerioPortadom<El>['src'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const nodeName: CheerioPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: CheerioPortadom<El>['url'] = () => {\n return srcUrl ?? null;\n };\n\n const map: CheerioPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(cheerioNode);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: CheerioPortadom<El>['findOne'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.find(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const findMany: CheerioPortadom<El>['findMany'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEls = splitCheerioSelection(cheerioNode.find(selector)) as TNewEl[];\n const doms = resultEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const closest: CheerioPortadom<El>['closest'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.closest(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const parent: CheerioPortadom<El>['parent'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const parentEl = cheerioNode.parent().first() as TNewEl;\n if (!parentEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(parentEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const children: CheerioPortadom<El>['children'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const childEls = splitCheerioSelection(cheerioNode.children()) as TNewEl[];\n const doms = childEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const root: CheerioPortadom<El>['root'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const rootEl = cheerioNode._root?.first() as TNewEl | null;\n if (!rootEl?.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(rootEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const remove: CheerioPortadom<El>['remove'] = () => {\n cheerioNode.remove();\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = splitCheerioSelection(el1.parents()) as El[];\n const ch2Parents = splitCheerioSelection(el2.parents()) as El[];\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n if (!comparerParent.is(compareeParent)) continue;\n commonAncestor = comparerParent;\n break;\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: CheerioPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(cheerioNode, otherEl).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => splitCheerioSelection(cheerioNode.find(selector)) as El[],\n getParent: (el) => el.parent() as El | null,\n isAncestor: (el1, el2) => el1.is(el2.parents()),\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: CheerioPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node: cheerioNode,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies CheerioPortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport type PlaywrightHandlePortadom<\n El extends Locator | ElementHandle<Node> = Locator | ElementHandle<Node>\n> = Portadom<El, Locator | ElementHandle<Node>>;\n\nconst verifyHandleEl = async (el: Locator | ElementHandle<Node> | JSHandle | null) => {\n if (!el) return null;\n const exists = await (el as ElementHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return exists ? el : null;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport const playwrightHandlePortadom = <El extends Locator | ElementHandle<Node>>(\n node: El,\n page: Page\n): PlaywrightHandlePortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: PlaywrightHandlePortadom<El>['text'] = async ({ allowEmpty } = {}) => {\n const txt = (await node.textContent())?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: PlaywrightHandlePortadom<El>['textAsUpper'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleUpperCase() : txt;\n };\n\n const textAsLower: PlaywrightHandlePortadom<El>['textAsLower'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: PlaywrightHandlePortadom<El>['textAsNumber'] = async (options) => {\n const txt = await text(options);\n return strAsNumber(txt, options);\n };\n\n const prop: PlaywrightHandlePortadom<El>['prop'] = async <R = unknown>(\n propOrPath: MaybeArray<string>,\n options = {}\n ) => {\n const [resProp] = await props([propOrPath], options);\n return resProp as R;\n };\n\n const props: PlaywrightHandlePortadom<El>['props'] = async <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n { allowEmpty = false } = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const data = await (node as Locator)\n .evaluate(\n (el, { propPaths, allowEmpty }) => {\n return propPaths.map((propPath) => {\n let val: any = el;\n for (const prop of propPath) {\n if (el == null) break;\n val = val[prop];\n }\n val = typeof val === 'string' ? val.trim() : val;\n return strOrNull(val, allowEmpty) as any;\n });\n },\n { propPaths, allowEmpty }\n )\n .catch(logAndRethrow);\n return data as R;\n };\n\n const attr: PlaywrightHandlePortadom<El>['attr'] = async (attrName, options) => {\n const data = await attrs([attrName], options);\n return data[attrName] ?? null;\n };\n\n const attrs: PlaywrightHandlePortadom<El>['attrs'] = <El extends string>(\n attrNames: El[],\n { allowEmpty = false } = {}\n ) => {\n const data = (node as Locator)\n .evaluate(\n (el, { attrNames, allowEmpty }) => {\n const attrData = (attrNames as El[]).reduce<Record<El, string | null>>((agg, name) => {\n let attrVal = el.getAttribute(name) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n agg[name] = strOrNull(attrVal, allowEmpty);\n return agg;\n }, {} as any);\n return attrData;\n },\n { attrNames, allowEmpty }\n )\n .catch(logAndRethrow);\n return data;\n };\n\n const href: PlaywrightHandlePortadom<El>['href'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('href', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: PlaywrightHandlePortadom<El>['src'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('src', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: PlaywrightHandlePortadom<El>['nodeName'] = async () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = (await prop('nodeName')) as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: PlaywrightHandlePortadom<El>['url'] = async () => {\n return page.url() || null;\n };\n\n const map: PlaywrightHandlePortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightHandlePortadom<El>['findOne'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).querySelector<Element>(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightHandlePortadom<El>['findMany'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const doms = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return [];\n return [...(el as Element).querySelectorAll<Element>(s)];\n }, selector)\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightHandlePortadom<El>['closest'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).closest(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightHandlePortadom<El>['parent'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.parentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const children: PlaywrightHandlePortadom<El>['children'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const doms = node\n .evaluateHandle((el) => [...(el as Element).children])\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightHandlePortadom<El>['root'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.ownerDocument?.documentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightHandlePortadom<El>['remove'] = async () => {\n await (node as Locator).evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n const _getCommonAncestor = async (loc1: El, loc2: El) => {\n const isEl1BeforeEl2 = await (\n await mergeHandles([loc1, loc2])\n )\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n return result;\n })\n .catch(logAndRethrow);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: loc1, lastEl: loc2 }\n : { firstEl: loc2, lastEl: loc1 };\n\n const ancestor = await (\n await mergeHandles([firstEl, lastEl])\n )\n .evaluateHandle(([el1, el2]) => {\n if (!el1 || !el2) return null;\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n })\n .catch(logAndRethrow);\n\n const hasResult = await (ancestor as JSHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return hasResult ? (ancestor as El) : null;\n };\n\n const getCommonAncestor: PlaywrightHandlePortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightHandlePortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightHandlePortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightHandlePortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Locators */\nexport type PlaywrightLocatorPortadom<El extends Locator = Locator> = Portadom<El, Locator>;\n\n/** Implementation of Portadom in Playwright using Locators */\nexport const playwrightLocatorPortadom = <El extends Locator>(\n node: El,\n page: Page\n): PlaywrightLocatorPortadom<El> => {\n // NOTE: Where possible, make use of the already-existing logic for Handles\n const handleDom = playwrightHandlePortadom(node, page);\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Empty */\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightLocatorPortadom<El>['findOne'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const resultEl = node.locator(selector);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightLocatorPortadom<El>['findMany'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const doms = node\n .locator(selector)\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightLocatorPortadom<El>['closest'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634\n const resultEl = node.locator(`xpath=ancestor::${selector.trim()}[position() = 1]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightLocatorPortadom<El>['parent'] = <TNewEl extends Locator = El>() => {\n return closest<TNewEl>('*');\n };\n\n const children: PlaywrightLocatorPortadom<El>['children'] = <TNewEl extends Locator = El>() => {\n const doms = node\n .locator('xpath=child::*')\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightLocatorPortadom<El>['root'] = <TNewEl extends Locator = El>() => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634 and https://stackoverflow.com/q/31562639/9788634\n const resultEl = node.locator(`xpath=ancestor::*[position() = last()]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightLocatorPortadom<El>['remove'] = async () => {\n await node.evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = await el1.locator(`xpath=ancestor::*`).all();\n const ch2Parents = await el2.locator(`xpath=ancestor::*`).all();\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n const handle = await mergeHandles([comparerParent, compareeParent]);\n const isSame = await handle.evaluate(([el1, el2]: Element[]) => {\n return el1 === el2;\n });\n if (isSame) {\n commonAncestor = comparerParent as El;\n break;\n }\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: PlaywrightLocatorPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightLocatorPortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightLocatorPortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightLocatorPortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (ancestor) => {\n const hasResult = await (ancestor as Locator)?.evaluate((el) => !!el).catch(logAndRethrow);\n return ancestor && hasResult\n ? playwrightHandlePortadom(ancestor as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text: handleDom.text,\n textAsLower: handleDom.textAsLower,\n textAsUpper: handleDom.textAsUpper,\n textAsNumber: handleDom.textAsNumber,\n attr: handleDom.attr,\n attrs: handleDom.attrs,\n prop: handleDom.prop,\n props: handleDom.props,\n href: handleDom.href,\n src: handleDom.src,\n nodeName: handleDom.nodeName,\n url: handleDom.url,\n map: handleDom.map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightLocatorPortadom<El>;\n};\n\nconst _createCommonAncestorFromSelectorFn = <El>(input: {\n querySelectorAll: (selector: string) => MaybePromise<Iterable<El> | El[]>;\n getParent: (el: El) => MaybePromise<El | null>;\n /** Function that returns `true` if `el1` is ancestor of `el2`. */\n isAncestor: (el1: El, el2: El) => MaybePromise<boolean>;\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n getCommonAncestor: (el1: El, el2: El) => MaybePromise<El | null>;\n}) => {\n const getCommonAncestorFromSelector = async (selector: string): Promise<El | null> => {\n const els = [...(await input.querySelectorAll(selector))];\n if (!els.length) return null;\n if (els.length === 1) return input.getParent(els[0]);\n\n const comparerEl = els.shift();\n let ancestorEl: El | null = null;\n for (const el of els) {\n const currAncestorEl = comparerEl ? await input.getCommonAncestor(comparerEl, el) : null;\n const newAncestorEl = !ancestorEl\n ? currAncestorEl\n : currAncestorEl && (await input.isAncestor(currAncestorEl, ancestorEl))\n ? currAncestorEl\n : ancestorEl;\n ancestorEl = newAncestorEl;\n }\n\n return ancestorEl as El;\n };\n\n return getCommonAncestorFromSelector;\n};\n"]}
|
package/dist/cjs/dom/types.d.ts
CHANGED
|
@@ -301,21 +301,17 @@ export interface PortadomArrayPromise<El extends BaseEl, BaseEl> {
|
|
|
301
301
|
*
|
|
302
302
|
* NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
|
|
303
303
|
*/
|
|
304
|
-
reduce:
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
|
|
308
|
-
};
|
|
304
|
+
reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
|
|
305
|
+
reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
|
|
306
|
+
reduce<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
|
|
309
307
|
/**
|
|
310
308
|
* Wrapper for {@link Array.reduceRight}.
|
|
311
309
|
*
|
|
312
310
|
* NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
|
|
313
311
|
*/
|
|
314
|
-
reduceRight:
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
|
|
318
|
-
};
|
|
312
|
+
reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
|
|
313
|
+
reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;
|
|
314
|
+
reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;
|
|
319
315
|
/**
|
|
320
316
|
* Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.
|
|
321
317
|
*/
|
|
@@ -344,6 +340,58 @@ export interface PortadomArrayPromise<El extends BaseEl, BaseEl> {
|
|
|
344
340
|
unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;
|
|
345
341
|
/** NOTE: Does NOT return an instance of PortadomArrayPromise */
|
|
346
342
|
values: (...args: Parameters<Portadom<El, BaseEl>[]['values']>) => Promise<IterableIterator<Portadom<El, BaseEl>>>;
|
|
343
|
+
/**
|
|
344
|
+
* Similar to {@link Array.forEach}, but awaits for Promises. Items are handled one-by-one.
|
|
345
|
+
*/
|
|
346
|
+
forEachAsyncSerial: (...args: [
|
|
347
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
|
|
348
|
+
]) => Promise<void>;
|
|
349
|
+
/**
|
|
350
|
+
* Similar to {@link Array.forEach}, but awaits for Promises. Items are handled all in parallel.
|
|
351
|
+
*/
|
|
352
|
+
forEachAsyncParallel: (...args: [
|
|
353
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
|
|
354
|
+
]) => Promise<void>;
|
|
355
|
+
/**
|
|
356
|
+
* Similar to {@link Array.map}, but awaits for Promises. Items are handled one-by-one.
|
|
357
|
+
*
|
|
358
|
+
* NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
|
|
359
|
+
*/
|
|
360
|
+
mapAsyncSerial: <U>(...args: [
|
|
361
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>
|
|
362
|
+
]) => Promise<Awaited<U>[]>;
|
|
363
|
+
/**
|
|
364
|
+
* Similar to {@link Array.map}, but awaits for Promises. Items are handled all in parallel.
|
|
365
|
+
*
|
|
366
|
+
* NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}
|
|
367
|
+
*/
|
|
368
|
+
mapAsyncParallel: <U>(...args: [
|
|
369
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>
|
|
370
|
+
]) => Promise<Awaited<U>[]>;
|
|
371
|
+
/**
|
|
372
|
+
* Similar to {@link Array.filter}, but awaits for Promises. Items are handled one-by-one.
|
|
373
|
+
*
|
|
374
|
+
* Returns the resulting array wrapped in {@link PortadomArrayPromise}.
|
|
375
|
+
*/
|
|
376
|
+
filterAsyncSerial: (...args: [
|
|
377
|
+
predicate: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
|
|
378
|
+
]) => PortadomArrayPromise<El, BaseEl>;
|
|
379
|
+
/**
|
|
380
|
+
* Similar to {@link Array.filter}, but awaits for Promises. Items are handled all in parallel.
|
|
381
|
+
*
|
|
382
|
+
* Returns the resulting array wrapped in {@link PortadomArrayPromise}.
|
|
383
|
+
*/
|
|
384
|
+
filterAsyncParallel: (...args: [
|
|
385
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
|
|
386
|
+
]) => PortadomArrayPromise<El, BaseEl>;
|
|
387
|
+
/**
|
|
388
|
+
* Similar to {@link Array.find}, but awaits for Promises. Items are handled one-by-one.
|
|
389
|
+
*
|
|
390
|
+
* Returns the resulting item as {@link PortadomPromise}.
|
|
391
|
+
*/
|
|
392
|
+
findAsyncSerial: (...args: [
|
|
393
|
+
callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>
|
|
394
|
+
]) => PortadomPromise<El, BaseEl>;
|
|
347
395
|
}
|
|
348
396
|
/**
|
|
349
397
|
* Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain
|
package/dist/cjs/dom/types.js
CHANGED
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.createPortadomArrayPromise = exports.createPortadomPromise = void 0;
|
|
13
|
+
const async_1 = require("../utils/async");
|
|
13
14
|
/**
|
|
14
15
|
* Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain
|
|
15
16
|
* Portadom methods before the Promise is resolved.
|
|
@@ -167,6 +168,9 @@ const createPortadomArrayPromise = (promiseDom) => {
|
|
|
167
168
|
const promise = Promise.resolve(promiseDom);
|
|
168
169
|
return {
|
|
169
170
|
promise,
|
|
171
|
+
///////////////////
|
|
172
|
+
// ARRAY API
|
|
173
|
+
///////////////////
|
|
170
174
|
at: (...args) => (0, exports.createPortadomPromise)(promise.then((d) => { var _a; return (_a = d.at(...args)) !== null && _a !== void 0 ? _a : null; })),
|
|
171
175
|
/** NOTE: The concat values are expected to be Portadom instances */
|
|
172
176
|
concat: (...args) => (0, exports.createPortadomArrayPromise)(promise.then((d) => d.concat(...args))),
|
|
@@ -210,6 +214,34 @@ const createPortadomArrayPromise = (promiseDom) => {
|
|
|
210
214
|
unshift: (...args) => promise.then((d) => d.unshift(...args)),
|
|
211
215
|
/** NOTE: Does NOT return an instance of PortadomArrayPromise */
|
|
212
216
|
values: (...args) => promise.then((d) => d.values(...args)),
|
|
217
|
+
///////////////////////
|
|
218
|
+
// EXTENDED ARRAY API
|
|
219
|
+
///////////////////////
|
|
220
|
+
forEachAsyncSerial: (...args) => {
|
|
221
|
+
return promise.then((d) => (0, async_1.serialAsyncForEach)(d, ...args));
|
|
222
|
+
},
|
|
223
|
+
forEachAsyncParallel: (...args) => {
|
|
224
|
+
return promise.then((d) => (0, async_1.parallelAsyncForEach)(d, ...args));
|
|
225
|
+
},
|
|
226
|
+
mapAsyncSerial: (...args) => {
|
|
227
|
+
return promise.then((d) => (0, async_1.serialAsyncMap)(d, ...args));
|
|
228
|
+
},
|
|
229
|
+
mapAsyncParallel: (...args) => {
|
|
230
|
+
return promise.then((d) => (0, async_1.parallelAsyncMap)(d, ...args));
|
|
231
|
+
},
|
|
232
|
+
filterAsyncSerial: (...args) => {
|
|
233
|
+
return (0, exports.createPortadomArrayPromise)(promise.then((d) => (0, async_1.serialAsyncFilter)(d, ...args)));
|
|
234
|
+
},
|
|
235
|
+
filterAsyncParallel: (...args) => {
|
|
236
|
+
return (0, exports.createPortadomArrayPromise)(promise.then((d) => (0, async_1.parallelAsyncFilter)(d, ...args)));
|
|
237
|
+
},
|
|
238
|
+
findAsyncSerial: (...args) => {
|
|
239
|
+
return (0, exports.createPortadomPromise)(promise.then((d) => __awaiter(void 0, void 0, void 0, function* () {
|
|
240
|
+
var _a;
|
|
241
|
+
const res = (_a = yield (0, async_1.serialAsyncFind)(d, ...args)) !== null && _a !== void 0 ? _a : null;
|
|
242
|
+
return res;
|
|
243
|
+
})));
|
|
244
|
+
}, // prettier-ignore
|
|
213
245
|
}; // prettier-ignore
|
|
214
246
|
};
|
|
215
247
|
exports.createPortadomArrayPromise = createPortadomArrayPromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StrAsNumOptions } from '../utils/format';\nimport type { FormatUrlOptions } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\n\n/**\n * Common interface for working with DOM despite different environments.\n *\n * Consider these environments:\n * 1) Browser (via Playwright & Chromium) - uses Browser API to work with DOM\n * 2) Cheerio - uses own API to work with DOM\n *\n * This common interfaces makes the scraping code more portable between the two.\n */\nexport interface Portadom<El extends BaseEl, BaseEl> {\n node: El | null;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text and convert it to number */\n textAsNumber: (options?: StrAsNumOptions) => MaybePromise<number | null>;\n /** Get element's attribute */\n attr: (attrName: string, options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's attributes */\n attrs: <T extends string>(\n attrNames: T[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<Record<T, string | null>>;\n /** Get element's property */\n prop: <R = unknown>(\n /** Single or nested prop path */\n propName: MaybeArray<string>,\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's properties */\n props: <R extends any[]>(\n /** List of single or nested prop paths */\n propName: MaybeArray<string>[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's href */\n href: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's src */\n src: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's nodeName */\n nodeName: () => MaybePromise<string | null>;\n /** Get URL of website associated with the DOM */\n url: () => MaybePromise<string | null>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(map: (node: El | null) => TVal) => MaybePromise<TVal>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(selector: string) => PortadomArrayPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>() => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: () => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(otherEl: El) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n selector: string\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomPromise<El extends BaseEl, BaseEl> {\n promise: Promise<Portadom<El, BaseEl> | null>;\n node: Promise<NonNullable<El> | null>;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (\n ...args: Parameters<Portadom<El, BaseEl>['text']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['text']>>>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsUpper']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsUpper']>>>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsLower']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsLower']>>>;\n /** Get element's text and convert it to number */\n textAsNumber: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsNumber']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsNumber']>>>;\n /** Get element's attribute */\n attr: (\n ...args: Parameters<Portadom<El, BaseEl>['attr']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attr']>>>;\n /** Get element's attributes */\n attrs: <Attrs extends string>(\n ...args: [attrNames: Attrs[], options?: { allowEmpty?: boolean }]\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attrs']> | null>>;\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<Portadom<El, BaseEl>['prop']>) => Promise<R | null>;\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<Portadom<El, BaseEl>['props']>) => Promise<R | null>;\n /** Get element's href */\n href: (\n ...args: Parameters<Portadom<El, BaseEl>['href']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['href']>>>;\n /** Get element's src */\n src: (\n ...args: Parameters<Portadom<El, BaseEl>['src']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['src']>>>;\n /** Get element's nodeName */\n nodeName: (\n ...args: Parameters<Portadom<El, BaseEl>['nodeName']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['nodeName']>>>;\n /** Get URL of website associated with the DOM */\n url: (\n ...args: Parameters<Portadom<El, BaseEl>['url']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['url']>>>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [map: (node: El | null) => TVal]) => Promise<TVal | null>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findOne']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findMany']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['closest']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['parent']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['children']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: (...args: Parameters<Portadom<El, BaseEl>['remove']>) => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['root']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestor']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestorFromSelector']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl> | null>\n): PortadomPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n get node() {\n return promise.then((d) => d?.node ?? null);\n },\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (...args: Parameters<T['text']>) => promise.then((d) => d?.text(...args) ?? null),\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (...args: Parameters<T['textAsUpper']>) => promise.then((d) => d?.textAsUpper(...args) ?? null),\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (...args: Parameters<T['textAsLower']>) => promise.then((d) => d?.textAsLower(...args) ?? null),\n /** Get element's text and convert it to number */\n textAsNumber: (...args: Parameters<T['textAsNumber']>) => promise.then((d) => d?.textAsNumber(...args) ?? null),\n /** Get element's attribute */\n attr: (...args: Parameters<T['attr']>) => promise.then((d) => d?.attr(...args) ?? null),\n /** Get element's attributes */\n attrs: <Attrs extends string>(...args: [\n attrNames: Attrs[],\n options?: { allowEmpty?: boolean }\n ]) => promise.then((d) => d?.attrs<Attrs>(...args) ?? null),\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<T['prop']>) => promise.then<R | null>((d) => d?.prop<R>(...args) ?? null),\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<T['props']>) => promise.then<R | null>((d) => d?.props<R>(...args) ?? null),\n /** Get element's href */\n href: (...args: Parameters<T['href']>) => promise.then((d) => d?.href(...args) ?? null),\n /** Get element's src */\n src: (...args: Parameters<T['src']>) => promise.then((d) => d?.src(...args) ?? null),\n /** Get element's nodeName */\n nodeName: (...args: Parameters<T['nodeName']>) => promise.then((d) => d?.nodeName(...args) ?? null),\n /** Get URL of website associated with the DOM */\n url: (...args: Parameters<T['url']>) => promise.then((d) => d?.url(...args) ?? null),\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [\n map: (node: El | null) => TVal\n ]) => promise.then<TVal | null>((d) => d?.map<TVal>(...args) ?? null),\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(...args: Parameters<T['findOne']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.findOne<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(...args: Parameters<T['findMany']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.findMany<TNewEl>(...args).promise : [])\n );\n },\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(...args: Parameters<T['closest']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.closest<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(...args: Parameters<T['parent']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.parent<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(...args: Parameters<T['children']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.children<TNewEl>(...args).promise : [])\n );\n },\n /** Get remove the element */\n remove: (...args: Parameters<T['remove']>) => promise.then((d) => d?.remove(...args)),\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(...args: Parameters<T['root']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.root<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(...args: [\n otherEl: El\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestor<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(...args: [\n selector: string\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestorFromSelector<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n } satisfies PortadomPromise<El, BaseEl>; // prettier-ignore\n};\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomArrayPromise<El extends BaseEl, BaseEl> {\n /** Wrapped Promise of an array of {@link Portadom} instances */\n promise: Promise<Portadom<El, BaseEl>[]>;\n /** Wrapper for {@link Array.at} that returns the resulting item as {@link PortadomPromise}. */\n at: (...args: Parameters<Portadom<El, BaseEl>[]['at']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.concat} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n concat: (\n ...args: Parameters<Portadom<El, BaseEl>[]['concat']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.copyWithin} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n copyWithin: (\n ...args: Parameters<Portadom<El, BaseEl>[]['copyWithin']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Does NOT return an instance of {@link PortadomArrayPromise}\n */\n entries: (\n ...args: Parameters<Portadom<El, BaseEl>[]['entries']>\n ) => Promise<IterableIterator<[number, Portadom<El, BaseEl>]>>;\n /** Wrapper for {@link Array.every}. */\n every: (...args: Parameters<Portadom<El, BaseEl>[]['every']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.fill}.\n *\n * NOTE: Fill values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}.\n *\n * NOTE2: Unlike {@link Array.fill}, this option doesn't allow to specify `start` and `end`.\n */\n fill: <U>(...args: [value: U]) => Promise<U[]>;\n /**\n * Wrapper for {@link Array.filter} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filter: (\n ...args: Parameters<Portadom<El, BaseEl>[]['filter']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.find} that returns the resulting item as {@link PortadomPromise}. */\n find: (...args: Parameters<Portadom<El, BaseEl>[]['find']>) => PortadomPromise<El, BaseEl>;\n /** Wrapper for {@link Array.findIndex}. */\n findIndex: (...args: Parameters<Portadom<El, BaseEl>[]['findIndex']>) => Promise<number>;\n /** Wrapper for {@link Array.flat} that returns the resulting array wrapped in {@link PortadomArrayPromise}. */\n flat: (...args: Parameters<Portadom<El, BaseEl>[]['flat']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.forEach}. */\n forEach: (...args: Parameters<Portadom<El, BaseEl>[]['forEach']>) => Promise<void>;\n /** Wrapper for {@link Array.includes}. */\n includes: (...args: Parameters<Portadom<El, BaseEl>[]['includes']>) => Promise<boolean>;\n /** Wrapper for {@link Array.indexOf}. */\n indexOf: (...args: Parameters<Portadom<El, BaseEl>[]['indexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.join}. */\n join: (...args: Parameters<Portadom<El, BaseEl>[]['join']>) => Promise<string>;\n /** Wrapper for {@link Array.keys}. */\n keys: (...args: Parameters<Portadom<El, BaseEl>[]['keys']>) => Promise<IterableIterator<number>>;\n /** Wrapper for {@link Array.lastIndexOf}. */\n lastIndexOf: (...args: Parameters<Portadom<El, BaseEl>[]['lastIndexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.length}. */\n length: Promise<number>;\n /**\n * Wrapper for {@link Array.map}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.pop} that returns the resulting item as {@link PortadomPromise}. */\n pop: (...args: Parameters<Portadom<El, BaseEl>[]['pop']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.push}.\n *\n * NOTE: The pushed values are expected to be {@link Portadom} instances.\n */\n push: (...args: Parameters<Portadom<El, BaseEl>[]['push']>) => Promise<number>;\n /**\n * Wrapper for {@link Array.reduce}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduce: {\n (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n (callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n <U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;\n }; // prettier-ignore\n /**\n * Wrapper for {@link Array.reduceRight}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduceRight: {\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>;\n reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>;\n }; // prettier-ignore\n /**\n * Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n reverse: (\n ...args: Parameters<Portadom<El, BaseEl>[]['reverse']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.shift} that returns the resulting item as {@link PortadomPromise}. */\n shift: (...args: Parameters<Portadom<El, BaseEl>[]['shift']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.slice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n slice: (...args: Parameters<Portadom<El, BaseEl>[]['slice']>) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.some}. */\n some: (...args: Parameters<Portadom<El, BaseEl>[]['some']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.sort} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n sort: (...args: Parameters<Portadom<El, BaseEl>[]['sort']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.splice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n splice: (\n ...args: Parameters<Portadom<El, BaseEl>[]['splice']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.unshift}.\n *\n * NOTE: The added values are expected to be {@link Portadom} instances.\n */\n unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (\n ...args: Parameters<Portadom<El, BaseEl>[]['values']>\n ) => Promise<IterableIterator<Portadom<El, BaseEl>>>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomArrayPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl>[]>\n): PortadomArrayPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n at: (...args: Parameters<T[]['at']>) => createPortadomPromise(\n promise.then((d) => d.at(...args) ?? null)\n ),\n /** NOTE: The concat values are expected to be Portadom instances */\n concat: (...args: Parameters<T[]['concat']>) => createPortadomArrayPromise(\n promise.then((d) => d.concat(...args))\n ),\n copyWithin: (...args: Parameters<T[]['copyWithin']>) => createPortadomArrayPromise(\n promise.then((d) => d.copyWithin(...args))\n ),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n entries: (...args: Parameters<T[]['entries']>) => promise.then((d) => d.entries(...args)),\n every: (...args: Parameters<T[]['every']>) => promise.then((d) => d.every(...args)),\n /** NOTE: The fill value is expected to be a Portadom instance */\n fill: <U>(...args: [value: U]) => promise.then((d) => d.fill(...(args as [any])) as U[]),\n filter: (...args: Parameters<T[]['filter']>) => createPortadomArrayPromise(\n promise.then((d) => d.filter(...args))\n ),\n find: (...args: Parameters<T[]['find']>) => createPortadomPromise(\n promise.then((d) => d.find(...args) ?? null)\n ),\n findIndex: (...args: Parameters<T[]['findIndex']>) => promise.then((d) => d.findIndex(...args)),\n flat: (...args: Parameters<T[]['flat']>) => createPortadomArrayPromise(\n promise.then((d) => d.flat(...args))\n ),\n /** NOTE: Items are expected to be mapped to Portadom instances */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => promise.then<U[]>((d) => d.flatMap<U, This>(...args)),\n forEach: (...args: Parameters<T[]['forEach']>) => promise.then((d) => d.forEach(...args)),\n includes: (...args: Parameters<T[]['includes']>) => promise.then((d) => d.includes(...args)),\n indexOf: (...args: Parameters<T[]['indexOf']>) => promise.then((d) => d.indexOf(...args)),\n join: (...args: Parameters<T[]['join']>) => promise.then((d) => d.join(...args)),\n keys: (...args: Parameters<T[]['keys']>) => promise.then((d) => d.keys(...args)),\n lastIndexOf: (...args: Parameters<T[]['lastIndexOf']>) => promise.then((d) => d.lastIndexOf(...args)),\n get length () {\n return promise.then((d) => d.length);\n },\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => promise.then<U[]>((d) => d.map(...args)),\n pop: (...args: Parameters<T[]['pop']>) => createPortadomPromise(\n promise.then((d) => d.pop(...args) ?? null)\n ),\n push: (...args: Parameters<T[]['push']>) => promise.then((d) => d.push(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduce has a complex type, so let the type definition handle that\n reduce: (...args: any[]) => promise.then((d) => d.reduce(...args as [any])),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduceRight has a complex type, so let the type definition handle that\n reduceRight: ((...args: any[]) => promise.then<any>((d) => d.reduceRight(...args as [any]))) as any as PortadomArrayPromise<El, BaseEl>['reduceRight'],\n reverse: (...args: Parameters<T[]['reverse']>) => createPortadomArrayPromise(\n promise.then((d) => d.reverse(...args))\n ),\n shift: (...args: Parameters<T[]['shift']>) => createPortadomPromise(\n promise.then((d) => d.shift(...args) ?? null)\n ),\n slice: (...args: Parameters<T[]['slice']>) => createPortadomArrayPromise(\n promise.then((d) => d.slice(...args))\n ),\n some: (...args: Parameters<T[]['some']>) => promise.then((d) => d.some(...args)),\n sort: (...args: Parameters<T[]['sort']>) => createPortadomArrayPromise(\n promise.then((d) => d.sort(...args))\n ),\n splice: (...args: Parameters<T[]['splice']>) => createPortadomArrayPromise(\n promise.then((d) => d.splice(...args))\n ),\n unshift: (...args: Parameters<T[]['unshift']>) => promise.then((d) => d.unshift(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (...args: Parameters<T[]['values']>) => promise.then((d) => d.values(...args)),\n } satisfies PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dom/types.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,0CAQwB;AAwNxB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,MAAM,qBAAqB,GAAG,CACnC,UAAqD,EACxB,EAAE;IAG/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO;QACP,IAAI,IAAI;YACN,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,mCAAI,IAAI,CAAA,EAAA,CAAC,CAAC;QAC9C,CAAC;QAED,uBAAuB;QACvB,oBAAoB;QACpB,uBAAuB;QAEvB,mCAAmC;QACnC,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,gDAAgD;QAChD,WAAW,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,WAAW,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC5G,gDAAgD;QAChD,WAAW,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,WAAW,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC5G,kDAAkD;QAClD,YAAY,EAAE,CAAC,GAAG,IAAmC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,YAAY,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC/G,8BAA8B;QAC9B,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,+BAA+B;QAC/B,KAAK,EAAE,CAAuB,GAAG,IAGhC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAQ,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAC3D,6BAA6B;QAC7B,IAAI,EAAE,CAAc,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAI,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACjH,+BAA+B;QAC/B,KAAK,EAAE,CAAkB,GAAG,IAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAI,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACxH,yBAAyB;QACzB,IAAI,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACvF,wBAAwB;QACxB,GAAG,EAAE,CAAC,GAAG,IAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACpF,6BAA6B;QAC7B,QAAQ,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACnG,iDAAiD;QACjD,GAAG,EAAE,CAAC,GAAG,IAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QACpF,4CAA4C;QAC5C,GAAG,EAAE,CAAO,GAAG,IAEd,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAc,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,CAAO,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;QAErE,uBAAuB;QACvB,kBAAkB;QAClB,uBAAuB;QAEvB,oDAAoD;QACpD,OAAO,EAAE,CAA6B,GAAG,IAA8B,EAAE,EAAE;YACzE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC9D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,gDAAgD;QAChD,QAAQ,EAAE,CAA6B,GAAG,IAA+B,EAAE,EAAE;YAC3E,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAA6B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9F,CAAC;QACJ,CAAC;QACD,8DAA8D;QAC9D,OAAO,EAAE,CAA6B,GAAG,IAA8B,EAAE,EAAE;YACzE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC9D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,2BAA2B;QAC3B,MAAM,EAAE,CAA6B,GAAG,IAA6B,EAAE,EAAE;YACvE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC7D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD,6BAA6B;QAC7B,QAAQ,EAAE,CAA6B,GAAG,IAA+B,EAAE,EAAE;YAC3E,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAA6B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9F,CAAC;QACJ,CAAC;QACD,6BAA6B;QAC7B,MAAM,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACrF,uBAAuB;QACvB,IAAI,EAAE,CAA6B,GAAG,IAA2B,EAAE,EAAE;YACnE,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD;;;WAGG;QACH,iBAAiB,EAAE,CAA6B,GAAG,IAElD,EAAE,EAAE;YACH,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,iBAAiB,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBACxE,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;QACD;;;;WAIG;QACH,6BAA6B,EAAE,CAA6B,GAAG,IAE9D,EAAE,EAAE;YACH,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAkC,CAAO,CAAC,EAAE,EAAE;;gBACxD,MAAM,GAAG,GAAG,MAAA,MAAM,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,6BAA6B,CAAS,GAAG,IAAI,EAAE,OAAO,CAAA,mCAAI,IAAI,CAAC;gBACpF,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;KACoC,CAAC,CAAC,kBAAkB;AAC7D,CAAC,CAAC;AApIW,QAAA,qBAAqB,yBAoIhC;AA4OF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,MAAM,0BAA0B,GAAG,CACxC,UAAgD,EACd,EAAE;IAGpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO;QAEP,mBAAmB;QACnB,YAAY;QACZ,mBAAmB;QAEnB,EAAE,EAAE,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC3C;QACD,oEAAoE;QACpE,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,UAAU,EAAE,CAAC,GAAG,IAAmC,EAAE,EAAE,CAAC,IAAA,kCAA0B,EAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAC3C;QACD,gEAAgE;QAChE,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACnF,iEAAiE;QACjE,IAAI,EAAE,CAAI,GAAG,IAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAI,IAAc,CAAQ,CAAC;QACxF,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC7C;QACD,SAAS,EAAE,CAAC,GAAG,IAAkC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/F,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CACrC;QACD,kEAAkE;QAClE,OAAO,EAAE,CAAU,GAAG,IAGrB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAU,GAAG,IAAI,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,QAAQ,EAAE,CAAC,GAAG,IAAiC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,WAAW,EAAE,CAAC,GAAG,IAAoC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;QACrG,IAAI,MAAM;YACR,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,gEAAgE;QAChE,GAAG,EAAE,CAAI,GAAG,IAGX,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9C,GAAG,EAAE,CAAC,GAAG,IAA4B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC5C;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,gEAAgE;QAChE,0EAA0E;QAC1E,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAa,CAAC,CAAC;QAC3E,gEAAgE;QAChE,+EAA+E;QAC/E,WAAW,EAAE,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,IAAa,CAAC,CAAC,CAA2D;QACtJ,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,IAAA,kCAA0B,EAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CACxC;QACD,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,IAAA,6BAAqB,EACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAC9C;QACD,KAAK,EAAE,CAAC,GAAG,IAA8B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CACtC;QACD,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,GAAG,IAA6B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CACrC;QACD,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,IAAA,kCAA0B,EACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CACvC;QACD,OAAO,EAAE,CAAC,GAAG,IAAgC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACzF,gEAAgE;QAChE,MAAM,EAAE,CAAC,GAAG,IAA+B,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAEtF,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QAEvB,kBAAkB,EAAE,CAAC,GAAG,IAAwE,EAAE,EAAE;YAClG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAkB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,oBAAoB,EAAE,CAAC,GAAG,IAA0E,EAAE,EAAE;YACtG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,4BAAoB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,cAAc,EAAE,CAAI,GAAG,IAEtB,EAAE,EAAE;YACH,OAAO,OAAO,CAAC,IAAI,CAAe,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAmC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,gBAAgB,EAAE,CAAI,GAAG,IAExB,EAAE,EAAE;YACH,OAAO,OAAO,CAAC,IAAI,CAAe,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,wBAAgB,EAAmC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3G,CAAC;QACD,iBAAiB,EAAE,CAAC,GAAG,IAAuE,EAAE,EAAE;YAChG,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,yBAAiB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACnD,CAAC;QACJ,CAAC;QACD,mBAAmB,EAAE,CAAC,GAAG,IAAyE,EAAE,EAAE;YACpG,OAAO,IAAA,kCAA0B,EAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CACrD,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,CAAC,GAAG,IAAqE,EAAE,EAAE;YAC5F,OAAO,IAAA,6BAAqB,EAC1B,OAAO,CAAC,IAAI,CAAC,CAAO,CAAC,EAAE,EAAE;;gBACvB,MAAM,GAAG,GAAG,MAAA,MAAM,IAAA,uBAAe,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,mCAAI,IAAI,CAAC;gBACtD,OAAO,GAAG,CAAC;YACb,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC,EAAE,kBAAkB;KACqB,CAAC,CAAC,kBAAkB;AAClE,CAAC,CAAC;AA9HW,QAAA,0BAA0B,8BA8HrC","sourcesContent":["import type { StrAsNumOptions } from '../utils/format';\nimport type { FormatUrlOptions } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport {\n parallelAsyncFilter,\n parallelAsyncForEach,\n parallelAsyncMap,\n serialAsyncFilter,\n serialAsyncFind,\n serialAsyncForEach,\n serialAsyncMap,\n} from '../utils/async';\n\n/**\n * Common interface for working with DOM despite different environments.\n *\n * Consider these environments:\n * 1) Browser (via Playwright & Chromium) - uses Browser API to work with DOM\n * 2) Cheerio - uses own API to work with DOM\n *\n * This common interfaces makes the scraping code more portable between the two.\n */\nexport interface Portadom<El extends BaseEl, BaseEl> {\n node: El | null;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's text and convert it to number */\n textAsNumber: (options?: StrAsNumOptions) => MaybePromise<number | null>;\n /** Get element's attribute */\n attr: (attrName: string, options?: { allowEmpty?: boolean }) => MaybePromise<string | null>;\n /** Get element's attributes */\n attrs: <T extends string>(\n attrNames: T[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<Record<T, string | null>>;\n /** Get element's property */\n prop: <R = unknown>(\n /** Single or nested prop path */\n propName: MaybeArray<string>,\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's properties */\n props: <R extends any[]>(\n /** List of single or nested prop paths */\n propName: MaybeArray<string>[],\n options?: { allowEmpty?: boolean }\n ) => MaybePromise<R>;\n /** Get element's href */\n href: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's src */\n src: (options?: { allowEmpty?: boolean } & FormatUrlOptions) => MaybePromise<string | null>;\n /** Get element's nodeName */\n nodeName: () => MaybePromise<string | null>;\n /** Get URL of website associated with the DOM */\n url: () => MaybePromise<string | null>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(map: (node: El | null) => TVal) => MaybePromise<TVal>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(selector: string) => PortadomArrayPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(selector: string) => PortadomPromise<TNewEl, BaseEl>; // prettier-ignore\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>() => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: () => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>() => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(otherEl: El) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n selector: string\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomPromise<El extends BaseEl, BaseEl> {\n promise: Promise<Portadom<El, BaseEl> | null>;\n node: Promise<NonNullable<El> | null>;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (\n ...args: Parameters<Portadom<El, BaseEl>['text']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['text']>>>;\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsUpper']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsUpper']>>>;\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsLower']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsLower']>>>;\n /** Get element's text and convert it to number */\n textAsNumber: (\n ...args: Parameters<Portadom<El, BaseEl>['textAsNumber']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['textAsNumber']>>>;\n /** Get element's attribute */\n attr: (\n ...args: Parameters<Portadom<El, BaseEl>['attr']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attr']>>>;\n /** Get element's attributes */\n attrs: <Attrs extends string>(\n ...args: [attrNames: Attrs[], options?: { allowEmpty?: boolean }]\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['attrs']> | null>>;\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<Portadom<El, BaseEl>['prop']>) => Promise<R | null>;\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<Portadom<El, BaseEl>['props']>) => Promise<R | null>;\n /** Get element's href */\n href: (\n ...args: Parameters<Portadom<El, BaseEl>['href']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['href']>>>;\n /** Get element's src */\n src: (\n ...args: Parameters<Portadom<El, BaseEl>['src']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['src']>>>;\n /** Get element's nodeName */\n nodeName: (\n ...args: Parameters<Portadom<El, BaseEl>['nodeName']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['nodeName']>>>;\n /** Get URL of website associated with the DOM */\n url: (\n ...args: Parameters<Portadom<El, BaseEl>['url']>\n ) => Promise<Awaited<ReturnType<Portadom<El, BaseEl>['url']>>>;\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [map: (node: El | null) => TVal]) => Promise<TVal | null>;\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findOne']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['findMany']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['closest']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['parent']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['children']>\n ) => PortadomArrayPromise<TNewEl, BaseEl>;\n /** Remove the element */\n remove: (...args: Parameters<Portadom<El, BaseEl>['remove']>) => MaybePromise<void>;\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['root']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestor']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(\n ...args: Parameters<Portadom<El, BaseEl>['getCommonAncestorFromSelector']>\n ) => PortadomPromise<TNewEl, BaseEl>;\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a {@link Portadom} instance. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl> | null>\n): PortadomPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n get node() {\n return promise.then((d) => d?.node ?? null);\n },\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Get element's text (trimmed) */\n text: (...args: Parameters<T['text']>) => promise.then((d) => d?.text(...args) ?? null),\n /** Get element's text as uppercase (trimmed) */\n textAsUpper: (...args: Parameters<T['textAsUpper']>) => promise.then((d) => d?.textAsUpper(...args) ?? null),\n /** Get element's text as lowercase (trimmed) */\n textAsLower: (...args: Parameters<T['textAsLower']>) => promise.then((d) => d?.textAsLower(...args) ?? null),\n /** Get element's text and convert it to number */\n textAsNumber: (...args: Parameters<T['textAsNumber']>) => promise.then((d) => d?.textAsNumber(...args) ?? null),\n /** Get element's attribute */\n attr: (...args: Parameters<T['attr']>) => promise.then((d) => d?.attr(...args) ?? null),\n /** Get element's attributes */\n attrs: <Attrs extends string>(...args: [\n attrNames: Attrs[],\n options?: { allowEmpty?: boolean }\n ]) => promise.then((d) => d?.attrs<Attrs>(...args) ?? null),\n /** Get element's property */\n prop: <R = unknown>(...args: Parameters<T['prop']>) => promise.then<R | null>((d) => d?.prop<R>(...args) ?? null),\n /** Get element's properties */\n props: <R extends any[]>(...args: Parameters<T['props']>) => promise.then<R | null>((d) => d?.props<R>(...args) ?? null),\n /** Get element's href */\n href: (...args: Parameters<T['href']>) => promise.then((d) => d?.href(...args) ?? null),\n /** Get element's src */\n src: (...args: Parameters<T['src']>) => promise.then((d) => d?.src(...args) ?? null),\n /** Get element's nodeName */\n nodeName: (...args: Parameters<T['nodeName']>) => promise.then((d) => d?.nodeName(...args) ?? null),\n /** Get URL of website associated with the DOM */\n url: (...args: Parameters<T['url']>) => promise.then((d) => d?.url(...args) ?? null),\n /** Freely modify the underlying DOM node */\n map: <TVal>(...args: [\n map: (node: El | null) => TVal\n ]) => promise.then<TVal | null>((d) => d?.map<TVal>(...args) ?? null),\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n /** Get a single descendant matching the selector */\n findOne: <TNewEl extends BaseEl = El>(...args: Parameters<T['findOne']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.findOne<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get all descendants matching the selector */\n findMany: <TNewEl extends BaseEl = El>(...args: Parameters<T['findMany']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.findMany<TNewEl>(...args).promise : [])\n );\n },\n /** Get a single ancestor (or itself) matching the selector */\n closest: <TNewEl extends BaseEl = El>(...args: Parameters<T['closest']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.closest<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /** Get element's parent */\n parent: <TNewEl extends BaseEl = El>(...args: Parameters<T['parent']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.parent<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /** Get element's children */\n children: <TNewEl extends BaseEl = El>(...args: Parameters<T['children']>) => {\n return createPortadomArrayPromise(\n promise.then<Portadom<TNewEl, BaseEl>[]>((d) => d ? d.children<TNewEl>(...args).promise : [])\n );\n },\n /** Get remove the element */\n remove: (...args: Parameters<T['remove']>) => promise.then((d) => d?.remove(...args)),\n /** Get root element */\n root: <TNewEl extends BaseEl = El>(...args: Parameters<T['root']>) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.root<TNewEl>(...args).promise ?? null;\n return res;\n })\n );\n },\n /**\n * Given two elements, return closest ancestor element that encompases them both,\n * or `null` if none such found.\n */\n getCommonAncestor: <TNewEl extends BaseEl = El>(...args: [\n otherEl: El\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestor<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n /**\n * Given a selector, find all DOM elements that match the selector,\n * and return closest ancestor element that encompases them all,\n * or `null` if none such found.\n */\n getCommonAncestorFromSelector: <TNewEl extends BaseEl = El>(...args: [\n selector: string\n ]) => {\n return createPortadomPromise(\n promise.then<Portadom<TNewEl, BaseEl> | null>(async (d) => {\n const res = await d?.getCommonAncestorFromSelector<TNewEl>(...args).promise ?? null;\n return res;\n }),\n );\n },\n } satisfies PortadomPromise<El, BaseEl>; // prettier-ignore\n};\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport interface PortadomArrayPromise<El extends BaseEl, BaseEl> {\n /** Wrapped Promise of an array of {@link Portadom} instances */\n promise: Promise<Portadom<El, BaseEl>[]>;\n\n ///////////////////\n // ARRAY API\n ///////////////////\n\n /** Wrapper for {@link Array.at} that returns the resulting item as {@link PortadomPromise}. */\n at: (...args: Parameters<Portadom<El, BaseEl>[]['at']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.concat} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n concat: (\n ...args: Parameters<Portadom<El, BaseEl>[]['concat']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.copyWithin} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n *\n * NOTE: The concat values are expected to be {@link Portadom} instances\n */\n copyWithin: (\n ...args: Parameters<Portadom<El, BaseEl>[]['copyWithin']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Does NOT return an instance of {@link PortadomArrayPromise}\n */\n entries: (\n ...args: Parameters<Portadom<El, BaseEl>[]['entries']>\n ) => Promise<IterableIterator<[number, Portadom<El, BaseEl>]>>;\n /** Wrapper for {@link Array.every}. */\n every: (...args: Parameters<Portadom<El, BaseEl>[]['every']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.fill}.\n *\n * NOTE: Fill values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}.\n *\n * NOTE2: Unlike {@link Array.fill}, this option doesn't allow to specify `start` and `end`.\n */\n fill: <U>(...args: [value: U]) => Promise<U[]>;\n /**\n * Wrapper for {@link Array.filter} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filter: (\n ...args: Parameters<Portadom<El, BaseEl>[]['filter']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.find} that returns the resulting item as {@link PortadomPromise}. */\n find: (...args: Parameters<Portadom<El, BaseEl>[]['find']>) => PortadomPromise<El, BaseEl>;\n /** Wrapper for {@link Array.findIndex}. */\n findIndex: (...args: Parameters<Portadom<El, BaseEl>[]['findIndex']>) => Promise<number>;\n /** Wrapper for {@link Array.flat} that returns the resulting array wrapped in {@link PortadomArrayPromise}. */\n flat: (...args: Parameters<Portadom<El, BaseEl>[]['flat']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.entries}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.forEach}. */\n forEach: (...args: Parameters<Portadom<El, BaseEl>[]['forEach']>) => Promise<void>;\n /** Wrapper for {@link Array.includes}. */\n includes: (...args: Parameters<Portadom<El, BaseEl>[]['includes']>) => Promise<boolean>;\n /** Wrapper for {@link Array.indexOf}. */\n indexOf: (...args: Parameters<Portadom<El, BaseEl>[]['indexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.join}. */\n join: (...args: Parameters<Portadom<El, BaseEl>[]['join']>) => Promise<string>;\n /** Wrapper for {@link Array.keys}. */\n keys: (...args: Parameters<Portadom<El, BaseEl>[]['keys']>) => Promise<IterableIterator<number>>;\n /** Wrapper for {@link Array.lastIndexOf}. */\n lastIndexOf: (...args: Parameters<Portadom<El, BaseEl>[]['lastIndexOf']>) => Promise<number>;\n /** Wrapper for {@link Array.length}. */\n length: Promise<number>;\n /**\n * Wrapper for {@link Array.map}.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => Promise<U[]>; // prettier-ignore\n /** Wrapper for {@link Array.pop} that returns the resulting item as {@link PortadomPromise}. */\n pop: (...args: Parameters<Portadom<El, BaseEl>[]['pop']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.push}.\n *\n * NOTE: The pushed values are expected to be {@link Portadom} instances.\n */\n push: (...args: Parameters<Portadom<El, BaseEl>[]['push']>) => Promise<number>;\n /**\n * Wrapper for {@link Array.reduce}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduce(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduce<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>; // prettier-ignore\n /**\n * Wrapper for {@link Array.reduceRight}.\n *\n * NOTE: The reduce value can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduceRight(callbackfn: (previousValue: Portadom<El, BaseEl>, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => Portadom<El, BaseEl>, initialValue: Portadom<El, BaseEl>): Promise<Portadom<El, BaseEl>>; // prettier-ignore\n reduceRight<U>(callbackfn: (previousValue: U, currentValue: Portadom<El, BaseEl>, currentIndex: number, array: Portadom<El, BaseEl>[]) => U, initialValue: U): Promise<U>; // prettier-ignore\n /**\n * Wrapper for {@link Array.reverse} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n reverse: (\n ...args: Parameters<Portadom<El, BaseEl>[]['reverse']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.shift} that returns the resulting item as {@link PortadomPromise}. */\n shift: (...args: Parameters<Portadom<El, BaseEl>[]['shift']>) => PortadomPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.slice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n slice: (...args: Parameters<Portadom<El, BaseEl>[]['slice']>) => PortadomArrayPromise<El, BaseEl>;\n /** Wrapper for {@link Array.some}. */\n some: (...args: Parameters<Portadom<El, BaseEl>[]['some']>) => Promise<boolean>;\n /**\n * Wrapper for {@link Array.sort} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n sort: (...args: Parameters<Portadom<El, BaseEl>[]['sort']>) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.splice} that returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n splice: (\n ...args: Parameters<Portadom<El, BaseEl>[]['splice']>\n ) => PortadomArrayPromise<El, BaseEl>;\n /**\n * Wrapper for {@link Array.unshift}.\n *\n * NOTE: The added values are expected to be {@link Portadom} instances.\n */\n unshift: (...args: Parameters<Portadom<El, BaseEl>[]['unshift']>) => Promise<number>;\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (\n ...args: Parameters<Portadom<El, BaseEl>[]['values']>\n ) => Promise<IterableIterator<Portadom<El, BaseEl>>>;\n\n ///////////////////////\n // EXTENDED ARRAY API\n ///////////////////////\n\n /**\n * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled one-by-one.\n */\n forEachAsyncSerial: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => Promise<void>; // prettier-ignore\n\n /**\n * Similar to {@link Array.forEach}, but awaits for Promises. Items are handled all in parallel.\n */\n forEachAsyncParallel: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => Promise<void>; // prettier-ignore\n\n /**\n * Similar to {@link Array.map}, but awaits for Promises. Items are handled one-by-one.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n mapAsyncSerial: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => Promise<Awaited<U>[]>; // prettier-ignore\n\n /**\n * Similar to {@link Array.map}, but awaits for Promises. Items are handled all in parallel.\n *\n * NOTE: Mapped values can be anything, so result is NOT wrapped in an instance of {@link PortadomArrayPromise}\n */\n mapAsyncParallel: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => Promise<Awaited<U>[]>; // prettier-ignore\n\n /**\n * Similar to {@link Array.filter}, but awaits for Promises. Items are handled one-by-one.\n *\n * Returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filterAsyncSerial: (...args: [\n predicate: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n\n /**\n * Similar to {@link Array.filter}, but awaits for Promises. Items are handled all in parallel.\n *\n * Returns the resulting array wrapped in {@link PortadomArrayPromise}.\n */\n filterAsyncParallel: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n\n /**\n * Similar to {@link Array.find}, but awaits for Promises. Items are handled one-by-one.\n *\n * Returns the resulting item as {@link PortadomPromise}.\n */\n findAsyncSerial: (...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<unknown>\n ]) => PortadomPromise<El, BaseEl>; // prettier-ignore\n}\n\n/**\n * Wrapper for a {@link Promise} that resolves to a n Array of {@link Portadom} instances. This allows us to chain\n * Portadom methods before the Promise is resolved.\n *\n * Example:\n *\n * ```js\n * const dom = Promise.resolve(browserPortadom({}));\n * ```\n *\n * Instead of:\n * ```js\n * const resA = await (await dom).findOne('..');\n * const resB = await (await dom).text();\n * ```\n *\n * You can call:\n * ```js\n * const domP = createPortadomArrayPromise(dom);\n * const resA = await domP.findOne('..');\n * const resB = await domP.text();\n * ```\n */\nexport const createPortadomArrayPromise = <El extends BaseEl, BaseEl>(\n promiseDom: MaybePromise<Portadom<El, BaseEl>[]>\n): PortadomArrayPromise<El, BaseEl> => {\n type T = Portadom<El, BaseEl>;\n\n const promise = Promise.resolve(promiseDom);\n return {\n promise,\n\n ///////////////////\n // ARRAY API\n ///////////////////\n\n at: (...args: Parameters<T[]['at']>) => createPortadomPromise(\n promise.then((d) => d.at(...args) ?? null)\n ),\n /** NOTE: The concat values are expected to be Portadom instances */\n concat: (...args: Parameters<T[]['concat']>) => createPortadomArrayPromise(\n promise.then((d) => d.concat(...args))\n ),\n copyWithin: (...args: Parameters<T[]['copyWithin']>) => createPortadomArrayPromise(\n promise.then((d) => d.copyWithin(...args))\n ),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n entries: (...args: Parameters<T[]['entries']>) => promise.then((d) => d.entries(...args)),\n every: (...args: Parameters<T[]['every']>) => promise.then((d) => d.every(...args)),\n /** NOTE: The fill value is expected to be a Portadom instance */\n fill: <U>(...args: [value: U]) => promise.then((d) => d.fill(...(args as [any])) as U[]),\n filter: (...args: Parameters<T[]['filter']>) => createPortadomArrayPromise(\n promise.then((d) => d.filter(...args))\n ),\n find: (...args: Parameters<T[]['find']>) => createPortadomPromise(\n promise.then((d) => d.find(...args) ?? null)\n ),\n findIndex: (...args: Parameters<T[]['findIndex']>) => promise.then((d) => d.findIndex(...args)),\n flat: (...args: Parameters<T[]['flat']>) => createPortadomArrayPromise(\n promise.then((d) => d.flat(...args))\n ),\n /** NOTE: Items are expected to be mapped to Portadom instances */\n flatMap: <U, This>(...args: [\n callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n thisArg?: This | undefined\n ]) => promise.then<U[]>((d) => d.flatMap<U, This>(...args)),\n forEach: (...args: Parameters<T[]['forEach']>) => promise.then((d) => d.forEach(...args)),\n includes: (...args: Parameters<T[]['includes']>) => promise.then((d) => d.includes(...args)),\n indexOf: (...args: Parameters<T[]['indexOf']>) => promise.then((d) => d.indexOf(...args)),\n join: (...args: Parameters<T[]['join']>) => promise.then((d) => d.join(...args)),\n keys: (...args: Parameters<T[]['keys']>) => promise.then((d) => d.keys(...args)),\n lastIndexOf: (...args: Parameters<T[]['lastIndexOf']>) => promise.then((d) => d.lastIndexOf(...args)),\n get length () {\n return promise.then((d) => d.length);\n },\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n map: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number, array: Portadom<El, BaseEl>[]) => U,\n thisArg?: any\n ]) => promise.then<U[]>((d) => d.map(...args)),\n pop: (...args: Parameters<T[]['pop']>) => createPortadomPromise(\n promise.then((d) => d.pop(...args) ?? null)\n ),\n push: (...args: Parameters<T[]['push']>) => promise.then((d) => d.push(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduce has a complex type, so let the type definition handle that\n reduce: (...args: any[]) => promise.then((d) => d.reduce(...args as [any])),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n // NOTE: reduceRight has a complex type, so let the type definition handle that\n reduceRight: ((...args: any[]) => promise.then<any>((d) => d.reduceRight(...args as [any]))) as any as PortadomArrayPromise<El, BaseEl>['reduceRight'],\n reverse: (...args: Parameters<T[]['reverse']>) => createPortadomArrayPromise(\n promise.then((d) => d.reverse(...args))\n ),\n shift: (...args: Parameters<T[]['shift']>) => createPortadomPromise(\n promise.then((d) => d.shift(...args) ?? null)\n ),\n slice: (...args: Parameters<T[]['slice']>) => createPortadomArrayPromise(\n promise.then((d) => d.slice(...args))\n ),\n some: (...args: Parameters<T[]['some']>) => promise.then((d) => d.some(...args)),\n sort: (...args: Parameters<T[]['sort']>) => createPortadomArrayPromise(\n promise.then((d) => d.sort(...args))\n ),\n splice: (...args: Parameters<T[]['splice']>) => createPortadomArrayPromise(\n promise.then((d) => d.splice(...args))\n ),\n unshift: (...args: Parameters<T[]['unshift']>) => promise.then((d) => d.unshift(...args)),\n /** NOTE: Does NOT return an instance of PortadomArrayPromise */\n values: (...args: Parameters<T[]['values']>) => promise.then((d) => d.values(...args)),\n\n ///////////////////////\n // EXTENDED ARRAY API\n ///////////////////////\n\n forEachAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['forEachAsyncSerial']>) => {\n return promise.then((d) => serialAsyncForEach(d, ...args));\n }, // prettier-ignore\n forEachAsyncParallel: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['forEachAsyncParallel']>) => {\n return promise.then((d) => parallelAsyncForEach(d, ...args));\n }, // prettier-ignore\n mapAsyncSerial: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => {\n return promise.then<Awaited<U>[]>((d) => serialAsyncMap<Portadom<El, BaseEl>, Awaited<U>>(d, ...args));\n }, // prettier-ignore\n mapAsyncParallel: <U>(...args: [\n callbackfn: (value: Portadom<El, BaseEl>, index: number) => MaybePromise<Awaited<U>>\n ]) => {\n return promise.then<Awaited<U>[]>((d) => parallelAsyncMap<Portadom<El, BaseEl>, Awaited<U>>(d, ...args));\n }, // prettier-ignore\n filterAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['filterAsyncSerial']>) => {\n return createPortadomArrayPromise(\n promise.then((d) => serialAsyncFilter(d, ...args))\n );\n }, // prettier-ignore\n filterAsyncParallel: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['filterAsyncParallel']>) => {\n return createPortadomArrayPromise(\n promise.then((d) => parallelAsyncFilter(d, ...args))\n );\n }, // prettier-ignore\n findAsyncSerial: (...args: Parameters<PortadomArrayPromise<El, BaseEl>['findAsyncSerial']>) => {\n return createPortadomPromise(\n promise.then(async (d) => {\n const res = await serialAsyncFind(d, ...args) ?? null;\n return res;\n })\n );\n }, // prettier-ignore\n } satisfies PortadomArrayPromise<El, BaseEl>; // prettier-ignore\n};\n"]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { MaybePromise } from '../utils/types';
|
|
2
2
|
export declare const serialAsyncMap: <T, R>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<R>) => Promise<R[]>;
|
|
3
|
+
export declare const parallelAsyncMap: <T, R>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<R>) => Promise<(Awaited<R> | Awaited<R>)[]>;
|
|
3
4
|
export declare const serialAsyncFilter: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<T[]>;
|
|
5
|
+
export declare const parallelAsyncFilter: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<unknown>) => Promise<T[]>;
|
|
4
6
|
export declare const serialAsyncFind: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<T | undefined>;
|
|
7
|
+
export declare const serialAsyncForEach: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<any>) => Promise<void>;
|
|
8
|
+
export declare const parallelAsyncForEach: <T>(inputArr: T[], fn: (item: T, index: number) => MaybePromise<unknown>) => Promise<void>;
|
|
5
9
|
export interface RetryAsyncOptions {
|
|
6
10
|
/** Number of retries after the function call fails */
|
|
7
11
|
maxRetries?: number;
|
package/dist/cjs/utils/async.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.retryAsync = exports.wait = exports.serialAsyncFind = exports.serialAsyncFilter = exports.serialAsyncMap = void 0;
|
|
12
|
+
exports.retryAsync = exports.wait = exports.parallelAsyncForEach = exports.serialAsyncForEach = exports.serialAsyncFind = exports.parallelAsyncFilter = exports.serialAsyncFilter = exports.parallelAsyncMap = exports.serialAsyncMap = void 0;
|
|
13
13
|
const serialAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
14
|
const results = yield inputArr.reduce((aggResultPromise, input, index) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
15
|
const agg = yield aggResultPromise;
|
|
@@ -20,6 +20,11 @@ const serialAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, funct
|
|
|
20
20
|
return results;
|
|
21
21
|
});
|
|
22
22
|
exports.serialAsyncMap = serialAsyncMap;
|
|
23
|
+
const parallelAsyncMap = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const results = yield Promise.all(inputArr.map(fn));
|
|
25
|
+
return results;
|
|
26
|
+
});
|
|
27
|
+
exports.parallelAsyncMap = parallelAsyncMap;
|
|
23
28
|
const serialAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
29
|
const results = yield inputArr.reduce((aggResultPromise, input, index) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
30
|
const agg = yield aggResultPromise;
|
|
@@ -31,6 +36,12 @@ const serialAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, fu
|
|
|
31
36
|
return results;
|
|
32
37
|
});
|
|
33
38
|
exports.serialAsyncFilter = serialAsyncFilter;
|
|
39
|
+
const parallelAsyncFilter = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
+
const filterResults = yield Promise.all(inputArr.map(fn));
|
|
41
|
+
const finalArr = inputArr.filter((val, index) => filterResults[index]);
|
|
42
|
+
return finalArr;
|
|
43
|
+
});
|
|
44
|
+
exports.parallelAsyncFilter = parallelAsyncFilter;
|
|
34
45
|
const serialAsyncFind = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
46
|
let index = 0;
|
|
36
47
|
for (const input of inputArr) {
|
|
@@ -41,6 +52,20 @@ const serialAsyncFind = (inputArr, fn) => __awaiter(void 0, void 0, void 0, func
|
|
|
41
52
|
}
|
|
42
53
|
});
|
|
43
54
|
exports.serialAsyncFind = serialAsyncFind;
|
|
55
|
+
const serialAsyncForEach = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
|
+
let index = 0;
|
|
57
|
+
for (const input of inputArr) {
|
|
58
|
+
yield fn(input, index);
|
|
59
|
+
index++;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
exports.serialAsyncForEach = serialAsyncForEach;
|
|
63
|
+
const parallelAsyncForEach = (inputArr, fn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const promises = [];
|
|
65
|
+
inputArr.forEach((val, index) => promises.push(Promise.resolve(fn(val, index))));
|
|
66
|
+
yield Promise.all(promises);
|
|
67
|
+
});
|
|
68
|
+
exports.parallelAsyncForEach = parallelAsyncForEach;
|
|
44
69
|
/** @param {number} ms Number of ms to wait */
|
|
45
70
|
const wait = (ms) => new Promise((res) => setTimeout(res, ms));
|
|
46
71
|
exports.wait = wait;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/utils/async.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaybePromise } from '../utils/types';\n\nexport const serialAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n agg.push(result);\n return agg;\n }, Promise.resolve([] as R[]));\n\n return results;\n};\n\nexport const serialAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n if (result) agg.push(input);\n return agg;\n }, Promise.resolve([] as T[]));\n\n return results;\n};\n\nexport const serialAsyncFind = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n const result = await fn(input, index);\n if (result) return input;\n index++;\n }\n};\n\nexport interface RetryAsyncOptions {\n /** Number of retries after the function call fails */\n maxRetries?: number;\n /** Delay between retries in milliseconds */\n delay?: number;\n /** Callback called with error if the function call errors */\n onError?: (error: unknown, retryIndex: number) => MaybePromise<void>;\n}\n\n/** @param {number} ms Number of ms to wait */\nexport const wait = (ms?: number) => new Promise((res) => setTimeout(res, ms));\n\n/** Call async function, and retry to call it `maxRetries` times if it fails. */\nexport const retryAsync = async <T>(\n fn: (retries: number) => Promise<T>,\n { maxRetries = 1, delay = 0, onError = () => {} }: RetryAsyncOptions = {}\n) => {\n if (typeof maxRetries !== 'number' || maxRetries < 0) {\n throw Error(\n `Invalid input for maxRetries in retryAsync(fn, maxRetries). maxRetries must be a non-negative number. Got ${maxRetries}`\n );\n }\n\n let result: T | null = null;\n const errors: unknown[] = [];\n let retries = 0;\n while (retries <= maxRetries) {\n try {\n result = await fn(retries);\n } catch (err) {\n errors.push(err);\n await onError(err, retries);\n await wait(delay);\n retries++;\n continue; // Retry if failed\n }\n break; // Exit loop and continue flow if success\n }\n return {\n result,\n errors,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/utils/async.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaybePromise } from '../utils/types';\n\nexport const serialAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n agg.push(result);\n return agg;\n }, Promise.resolve([] as R[]));\n\n return results;\n};\n\nexport const parallelAsyncMap = async <T, R>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<R>\n) => {\n const results = await Promise.all(inputArr.map(fn));\n return results;\n};\n\nexport const serialAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n const results = await inputArr.reduce(async (aggResultPromise, input, index) => {\n const agg = await aggResultPromise;\n const result = await fn(input, index);\n if (result) agg.push(input);\n return agg;\n }, Promise.resolve([] as T[]));\n\n return results;\n};\n\nexport const parallelAsyncFilter = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<unknown>\n) => {\n const filterResults = await Promise.all(inputArr.map(fn));\n const finalArr = inputArr.filter((val, index) => filterResults[index]);\n return finalArr;\n};\n\nexport const serialAsyncFind = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n const result = await fn(input, index);\n if (result) return input;\n index++;\n }\n};\n\nexport const serialAsyncForEach = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<any>\n) => {\n let index = 0;\n for (const input of inputArr) {\n await fn(input, index);\n index++;\n }\n};\n\nexport const parallelAsyncForEach = async <T>(\n inputArr: T[],\n fn: (item: T, index: number) => MaybePromise<unknown>\n) => {\n const promises: Promise<any>[] = [];\n inputArr.forEach((val, index) => promises.push(Promise.resolve(fn(val, index))));\n await Promise.all(promises);\n};\n\nexport interface RetryAsyncOptions {\n /** Number of retries after the function call fails */\n maxRetries?: number;\n /** Delay between retries in milliseconds */\n delay?: number;\n /** Callback called with error if the function call errors */\n onError?: (error: unknown, retryIndex: number) => MaybePromise<void>;\n}\n\n/** @param {number} ms Number of ms to wait */\nexport const wait = (ms?: number) => new Promise((res) => setTimeout(res, ms));\n\n/** Call async function, and retry to call it `maxRetries` times if it fails. */\nexport const retryAsync = async <T>(\n fn: (retries: number) => Promise<T>,\n { maxRetries = 1, delay = 0, onError = () => {} }: RetryAsyncOptions = {}\n) => {\n if (typeof maxRetries !== 'number' || maxRetries < 0) {\n throw Error(\n `Invalid input for maxRetries in retryAsync(fn, maxRetries). maxRetries must be a non-negative number. Got ${maxRetries}`\n );\n }\n\n let result: T | null = null;\n const errors: unknown[] = [];\n let retries = 0;\n while (retries <= maxRetries) {\n try {\n result = await fn(retries);\n } catch (err) {\n errors.push(err);\n await onError(err, retries);\n await wait(delay);\n retries++;\n continue; // Retry if failed\n }\n break; // Exit loop and continue flow if success\n }\n return {\n result,\n errors,\n };\n};\n"]}
|
package/package.json
CHANGED