{"version":3,"sources":["jsdelivr-header.js","/npm/allure-playwright@3.6.0/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,6iBCHA,IAAA,QAAA,QAAA,WACA,UAAA,QAAA,oBACA,UAAA,uBAAA,QAAA,cACA,aAAA,uBAAA,QAAA,iBACA,iBAAA,QAAA,qBAYA,KAAA,QAAA,yBAOA,UAAA,QAAA,kCAoBA,QAAA,QAAA,eAEA,OAAA,QAAA,cAovBA,MAAA,QAAA,oBAAgD,SAAA,uBAAA,GAAA,OAAA,KAAA,WAAA,EAAA,CAAA,QAAA,EAAA,UAAA,iLAnyBhD,IAAA,EAAA,EAAA,EAAA,mBAAA,cAAA,GAAA,EAAA,EAAA,UAAA,aAAA,EAAA,EAAA,aAAA,yBAAA,EAAA,EAAA,EAAA,EAAA,GAAA,IAAA,EAAA,KAAA,qBAAA,EAAA,EAAA,EAAA,EAAA,OAAA,OAAA,EAAA,WAAA,OAAA,oBAAA,EAAA,mBAAA,EAAA,EAAA,GAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,GAAA,GAAA,EAAA,EAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAAA,EAAA,GAAA,EAAA,SAAA,EAAA,GAAA,OAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,GAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,GAAA,IAAA,GAAA,EAAA,EAAA,OAAA,IAAA,KAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,IAAA,KAAA,EAAA,GAAA,EAAA,EAAA,OAAA,EAAA,MAAA,EAAA,GAAA,EAAA,GAAA,GAAA,EAAA,IAAA,KAAA,EAAA,EAAA,GAAA,EAAA,EAAA,KAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,GAAA,KAAA,KAAA,EAAA,GAAA,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,GAAA,EAAA,SAAA,EAAA,MAAA,GAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,GAAA,GAAA,EAAA,QAAA,UAAA,oCAAA,GAAA,IAAA,GAAA,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,EAAA,KAAA,GAAA,CAAA,IAAA,IAAA,GAAA,EAAA,IAAA,EAAA,GAAA,GAAA,EAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,OAAA,EAAA,EAAA,EAAA,IAAA,IAAA,EAAA,QAAA,EAAA,EAAA,GAAA,MAAA,IAAA,KAAA,EAAA,IAAA,MAAA,UAAA,wCAAA,EAAA,KAAA,OAAA,EAAA,EAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAA,IAAA,EAAA,EAAA,SAAA,EAAA,KAAA,GAAA,EAAA,IAAA,EAAA,UAAA,oCAAA,EAAA,YAAA,EAAA,GAAA,EAAA,CAAA,UAAA,GAAA,EAAA,EAAA,EAAA,GAAA,EAAA,EAAA,KAAA,EAAA,MAAA,EAAA,YAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,SAAA,EAAA,UAAA,MAAA,EAAA,KAAA,EAAA,GAAA,EAAA,EAAA,IAAA,GAAA,CAAA,KAAA,EAAA,YAAA,IAAA,UAAA,IAAA,UAAA,IAAA,CAAA,EAAA,OAAA,eAAA,IAAA,EAAA,GAAA,GAAA,IAAA,GAAA,QAAA,oBAAA,EAAA,GAAA,GAAA,kBAAA,IAAA,IAAA,GAAA,EAAA,EAAA,UAAA,EAAA,UAAA,OAAA,OAAA,GAAA,SAAA,EAAA,GAAA,OAAA,OAAA,eAAA,OAAA,eAAA,EAAA,IAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,sBAAA,EAAA,UAAA,OAAA,OAAA,GAAA,CAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,cAAA,GAAA,oBAAA,EAAA,cAAA,KAAA,YAAA,oBAAA,oBAAA,EAAA,EAAA,qBAAA,oBAAA,GAAA,oBAAA,EAAA,EAAA,aAAA,oBAAA,EAAA,GAAA,kBAAA,IAAA,IAAA,oBAAA,EAAA,sDAAA,aAAA,kBAAA,EAAA,EAAA,EAAA,EAAA,cAAA,oBAAA,EAAA,EAAA,EAAA,GAAA,IAAA,EAAA,OAAA,eAAA,IAAA,EAAA,gBAAA,GAAA,EAAA,EAAA,oBAAA,SAAA,EAAA,EAAA,EAAA,GAAA,GAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,IAAA,EAAA,GAAA,MAAA,KAAA,EAAA,SAAA,EAAA,GAAA,oBAAA,EAAA,GAAA,SAAA,GAAA,OAAA,KAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,oBAAA,EAAA,EAAA,EAAA,EAAA,UAAA,mBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,QAAA,EAAA,EAAA,GAAA,GAAA,EAAA,EAAA,KAAA,OAAA,GAAA,YAAA,EAAA,EAAA,CAAA,EAAA,KAAA,EAAA,GAAA,QAAA,QAAA,GAAA,KAAA,EAAA,EAAA,UAAA,kBAAA,GAAA,sBAAA,EAAA,KAAA,EAAA,UAAA,WAAA,SAAA,SAAA,EAAA,GAAA,IAAA,EAAA,EAAA,MAAA,EAAA,GAAA,SAAA,EAAA,GAAA,mBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,GAAA,mBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,gBAAA,2BAAA,EAAA,GAAA,IAAA,EAAA,oBAAA,QAAA,EAAA,OAAA,WAAA,EAAA,kBAAA,EAAA,IAAA,MAAA,QAAA,KAAA,EAAA,4BAAA,KAAA,GAAA,GAAA,iBAAA,EAAA,OAAA,CAAA,IAAA,EAAA,GAAA,IAAA,EAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,kBAAA,GAAA,EAAA,OAAA,CAAA,MAAA,IAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,SAAA,GAAA,MAAA,CAAA,EAAA,EAAA,EAAA,WAAA,UAAA,6IAAA,EAAA,GAAA,EAAA,GAAA,SAAA,EAAA,WAAA,IAAA,KAAA,EAAA,EAAA,EAAA,eAAA,EAAA,EAAA,OAAA,OAAA,EAAA,EAAA,KAAA,CAAA,EAAA,EAAA,SAAA,GAAA,GAAA,EAAA,EAAA,CAAA,EAAA,EAAA,eAAA,GAAA,MAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,CAAA,aAAA,SAAA,GAAA,OAAA,gBAAA,IAAA,iBAAA,IAAA,4BAAA,IAAA,kBAAA,UAAA,mBAAA,UAAA,UAAA,sJAAA,gBAAA,GAAA,GAAA,MAAA,QAAA,GAAA,OAAA,CAAA,UAAA,mBAAA,GAAA,OAAA,mBAAA,IAAA,iBAAA,IAAA,4BAAA,IAAA,oBAAA,UAAA,qBAAA,UAAA,UAAA,iJAAA,4BAAA,EAAA,GAAA,GAAA,EAAA,qBAAA,EAAA,OAAA,kBAAA,EAAA,GAAA,IAAA,EAAA,GAAA,SAAA,KAAA,GAAA,MAAA,uBAAA,GAAA,EAAA,cAAA,EAAA,EAAA,YAAA,MAAA,QAAA,GAAA,QAAA,EAAA,MAAA,KAAA,GAAA,cAAA,GAAA,2CAAA,KAAA,GAAA,kBAAA,EAAA,QAAA,YAAA,iBAAA,GAAA,uBAAA,QAAA,MAAA,EAAA,OAAA,WAAA,MAAA,EAAA,qBAAA,MAAA,KAAA,EAAA,UAAA,mBAAA,GAAA,GAAA,MAAA,QAAA,GAAA,OAAA,kBAAA,EAAA,UAAA,kBAAA,EAAA,IAAA,MAAA,KAAA,EAAA,UAAA,EAAA,EAAA,QAAA,QAAA,EAAA,EAAA,EAAA,MAAA,GAAA,EAAA,EAAA,IAAA,EAAA,GAAA,EAAA,GAAA,OAAA,CAAA,UAAA,QAAA,EAAA,GAAA,IAAA,EAAA,OAAA,KAAA,GAAA,GAAA,OAAA,sBAAA,KAAA,EAAA,OAAA,sBAAA,GAAA,IAAA,IAAA,QAAA,SAAA,GAAA,OAAA,OAAA,yBAAA,EAAA,GAAA,UAAA,KAAA,EAAA,KAAA,MAAA,EAAA,EAAA,QAAA,CAAA,UAAA,cAAA,GAAA,QAAA,EAAA,EAAA,EAAA,UAAA,OAAA,IAAA,KAAA,EAAA,MAAA,UAAA,GAAA,UAAA,GAAA,GAAA,EAAA,EAAA,QAAA,OAAA,IAAA,GAAA,SAAA,SAAA,GAAA,gBAAA,EAAA,EAAA,EAAA,GAAA,IAAA,OAAA,0BAAA,OAAA,iBAAA,EAAA,OAAA,0BAAA,IAAA,QAAA,OAAA,IAAA,SAAA,SAAA,GAAA,OAAA,eAAA,EAAA,EAAA,OAAA,yBAAA,EAAA,GAAA,WAAA,CAAA,UAAA,gBAAA,EAAA,GAAA,KAAA,aAAA,GAAA,UAAA,UAAA,8CAAA,kBAAA,EAAA,GAAA,QAAA,EAAA,EAAA,EAAA,EAAA,OAAA,IAAA,KAAA,EAAA,EAAA,GAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,cAAA,YAAA,MAAA,UAAA,GAAA,OAAA,eAAA,EAAA,eAAA,EAAA,KAAA,EAAA,WAAA,aAAA,EAAA,EAAA,GAAA,OAAA,GAAA,kBAAA,EAAA,UAAA,GAAA,GAAA,kBAAA,EAAA,GAAA,OAAA,eAAA,EAAA,aAAA,UAAA,IAAA,CAAA,UAAA,4BAAA,EAAA,GAAA,2BAAA,EAAA,KAAA,IAAA,EAAA,UAAA,2BAAA,EAAA,GAAA,GAAA,EAAA,IAAA,GAAA,UAAA,UAAA,2EAAA,gBAAA,EAAA,EAAA,GAAA,OAAA,EAAA,eAAA,MAAA,EAAA,OAAA,eAAA,EAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,IAAA,EAAA,GAAA,EAAA,CAAA,UAAA,eAAA,GAAA,IAAA,EAAA,aAAA,EAAA,0BAAA,QAAA,OAAA,YAAA,aAAA,EAAA,GAAA,aAAA,QAAA,OAAA,OAAA,EAAA,IAAA,EAAA,EAAA,OAAA,aAAA,YAAA,EAAA,KAAA,EAAA,EAAA,KAAA,EAAA,GAAA,wBAAA,QAAA,GAAA,OAAA,EAAA,UAAA,UAAA,kEAAA,EAAA,OAAA,QAAA,EAAA,UAAA,kBAAA,EAAA,EAAA,GAAA,sBAAA,MAAA,EAAA,EAAA,IAAA,GAAA,OAAA,UAAA,OAAA,EAAA,EAAA,EAAA,UAAA,UAAA,iDADA,IAAA,sBAAA,IAAA,QA4Da,eAAc,QAAA,eAAA,WAqBxB,OAAA,cAFD,SAAA,EAAY,GAAwC,gBAAA,KAAA,GAAA,4BAAA,KAAA,uBAAA,gBAAA,KAAA,iBAAA,gBAAA,KAAA,gBAAA,gBAAA,KAAA,kBAAA,gBAAA,KAAA,oBAAA,gBAAA,KAAA,sBAAA,gBAAA,KAAA,wBAAA,gBAAA,KAAA,kBAX1B,IAAI,MAAM,gBAAA,KAAA,iBACD,IAAE,gBAAA,KAAA,8BACoB,IAAE,gBAAA,KAAA,qBACA,IAAI,KAAK,gBAAA,KAAA,oBACE,IAAI,KAAK,gBAAA,KAAA,wBACf,IAAI,KAAK,gBAAA,KAAA,uBACV,IAAI,KAAK,gBAAA,KAAA,8BACN,IAAI,KAAK,gBAAA,KAAA,6BACV,IAAI,KAAK,gBAAA,KAAA,aAC5C,IAAI,SAGhC,KAAK,QAAO,cAAA,CAAK,YAAY,EAAM,QAAQ,GAAS,EACtD,GAAC,EAAA,IAAA,cAAA,MAED,SAAY,GACV,KAAK,OAAS,EACd,KAAK,UAAY,EAAO,SAAS,GAAG,UACpC,KAAK,YAAc,EAAO,SAAS,GAAG,YAEtC,IAAM,GAAW,EAAA,2BAEjB,GAAK,EAAL,CAKA,IAAM,EAAgB,EAAO,OAAO,sBAAsB,GAAQ,IAElE,GAAK,EAAL,CAIA,IAAM,EAAqB,EAAS,MAAM,QAAO,SAAC,GAAI,OAAK,EAAK,QAAQ,IAClE,EAAoC,GACpC,EAAoC,GACpC,EAAoB,GAE1B,EAAmB,SAAQ,SAAC,GAErB,IAAI,KAAK,EAAK,UAKnB,EAAgB,KAAK,GAJnB,EAAgB,KAAK,EAKzB,IAGA,IAAM,EAAwB,SAAC,GAAgB,OAAK,EAAA,wBAAa,kBAAK,UAAS,IAAA,OAAK,IAAY,EAEhG,GAAI,EAAgB,OAAQ,CAE1B,IAAM,EAAkB,EAErB,KAAI,SAAC,GAAI,OAAK,EAAK,SAAU,QAAQ,QAAS,GAAG,IACjD,IAAI,GAEP,EAAQ,KAAI,MAAZ,EAAO,mBAAS,GAClB,CAEA,GAAI,EAAgB,OAAQ,CAC1B,IAAM,EAAkB,EAGrB,KAAI,SAAC,GAAI,OAAK,EAAK,SAAU,MAAM,KAAK,EAAE,IAC1C,IAAI,GAEP,EAAQ,KAAI,MAAZ,EAAO,mBAAS,GAClB,CAEK,EAAQ,SAIb,EAAc,QAAU,EA5CxB,CAPA,CAoDF,GAAC,CAAA,IAAA,UAAA,MAED,WAAiB,GAAC,CAAA,IAAA,SAAA,MAElB,WAAgB,GAAC,CAAA,IAAA,WAAA,MAEjB,WAAkB,GAAC,CAAA,IAAA,WAAA,MAEnB,WAAkB,GAAC,CAAA,IAAA,UAAA,MAEnB,SAAQ,GACN,KAAK,MAAQ,EACb,KAAK,cAAgB,IAAI,0BAAe,4BAAA,GACnC,KAAK,SAAO,IACf,QAAQ,EAAA,+BAAoB,CAAE,WAAY,KAAK,QAAQ,eAE3D,GAAC,CAAA,IAAA,cAAA,MAED,SAAY,GACV,IAAM,EAAQ,EAAK,OACb,GAAgB,EAAA,gCAA0B,EAAK,OAC/C,EAAU,EAAM,UAChB,EAAe,kBAAK,SAAS,aAAO,EAAP,EAAS,QAAS,EAAK,SAAS,MAC7D,EAAoB,EAAa,MAAM,kBAAK,KAC5C,EAAe,EAAkB,KAAK,KAE5B,EAAgC,SAAjB,EAAM,aAAV,MAAA,GACrB,EAAa,EAAY,OAAS,EAAC,GAAA,OAAM,EAAY,KAAK,KAAI,KAAM,GACpE,EAAc,GAAA,OAAM,EAAY,KAAA,OAAI,GAAU,OAAG,EAAK,OACtD,EAA8B,CAClC,KAAM,EAAc,WACpB,OAAM,GAAA,OAAA,mBAAM,EAAc,QAAM,oBAAK,EAAA,oCACrC,MAAK,mBAAM,EAAc,OACzB,WAAY,GACZ,MAAO,GACP,YAAY,EAAA,eAAI,GAChB,SAAQ,GAAA,OAAK,EAAY,KAAA,OAAI,EAAK,SAAS,KAAI,KAAA,OAAI,EAAK,SAAS,QACjE,UAAW,EAAkB,OAAM,MAAxB,EAAiB,mBAAW,KASzC,GANA,EAAO,OAAQ,MAAK,EAAA,+BACpB,EAAO,OAAQ,MAAK,EAAA,6BAAkB,eACtC,EAAO,OAAQ,MAAK,EAAA,2BAAgB,IACpC,EAAO,OAAQ,KAAK,CAAE,KAAM,YAAa,MAAO,EAAM,YAAY,KAAK,SAGnE,SAAU,EAAM,KAAA,EACZ,EAAgB,EAAK,KAAK,KAAI,SAAC,GAAG,MAAM,CAC5C,KAAM,2BAAU,IAChB,MAAO,EAAI,WAAW,KAAO,EAAI,UAAU,GAAK,EACjD,KACD,EAAA,EAAO,QAAQ,KAAI,MAAA,EAAA,mBAAI,GACzB,CAEA,GAAI,gBAAiB,EAAM,KACgB,EADhB,EAAA,2BACA,EAAK,aAAW,IAAzC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA2C,KAewB,EAVhC,EALxB,EAAU,EAAA,MACnB,GAAwB,SAApB,EAAW,MAAuC,UAApB,EAAW,KAI7C,GAAwB,UAApB,EAAW,KAUf,GAAwB,QAApB,EAAW,MAAsC,aAApB,EAAW,KAU5C,GAAwB,gBAApB,EAAW,KAAf,CAKA,IAAM,GAAkB,EAAA,uBAAiB,EAAW,KAAM,EAAW,aAEjE,EACF,EAAO,OAAQ,KAAK,GAItB,EAAO,MAAO,KAAK,CACjB,KAAI,GAAA,OAAK,EAAW,KAAI,MAAA,OAAK,EAAW,aACxC,OAAQ,wBAAO,OACf,MAAO,uBAAM,SACb,WAAY,GACZ,MAAO,GACP,YAAa,GACb,cAAe,CAAC,GAhBlB,MAFE,EAAO,YAAc,EAAW,iBAVhC,EAAO,MAAO,MACZ,EAAA,sBAA6B,QAAnB,EAAC,KAAK,QAAQ,aAAK,IAAA,IAAI,CAAC,EAAG,CACnC,KAAM,0BAAS,IACf,IAAK,EAAW,oBAbpB,EAAO,MAAO,MACZ,EAAA,sBAA6B,QAAnB,EAAC,KAAK,QAAQ,aAAK,IAAA,IAAI,CAAC,EAAG,CACnC,KAAM,0BAAS,MACf,IAAK,EAAW,cAqCxB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACH,CAEI,WAAS,MACX,EAAO,WAAY,KAAK,CAAE,KAAM,UAAW,MAAO,EAAQ,QAGxD,aAAO,EAAP,EAAS,YAAa,GACxB,EAAO,WAAY,KAAK,CAAE,KAAM,aAAc,MAAK,GAAA,OAAK,EAAK,gBAAkB,KAGjF,IAAM,EAAW,KAAK,cAAe,UAAU,GAE/C,KAAK,mBAAmB,IAAI,EAAK,GAAI,GACrC,KAAK,4BAA4B,KAAK,EAAc,WACtD,GAAC,CAAA,IAAA,cAAA,MAoBD,SAAY,EAAgB,EAA+B,GAAsB,IAAA,EACzE,EAAmB,EAAK,QAAU,oCAClC,EAAkB,EAAK,QAAU,mCACjC,EAAa,GAAoB,EACjC,GAAyB,EAAA,yBAAiB,GAC1C,GAAwB,EAAA,wBAAgB,GACxC,EAAa,GAA0B,EACvC,EAAW,KAAK,mBAAmB,IAAI,EAAK,IAElD,IAAI,kBAAA,sBAAA,KAAK,mBAAiB,KAAtB,KAAuB,GAA3B,CAIA,IAAM,EAAoB,4BAAA,IACrB,EAAA,+BAAkB,IACrB,KAAM,EAAK,MACX,MAAO,EAAK,UAAU,UACtB,MAAO,uBAAM,QACb,MAAM,EAAA,0BAGR,GAAI,CAAC,cAAe,UAAU,SAAS,EAAK,YAAc,EAAY,KAAA,EAAA,EAC9D,EAAS,EAAK,QAAyC,QAAnC,EAAG,KAAK,WAAW,IAAI,EAAK,eAAO,IAAA,IAAW,KAClE,EAA6C,QAAtC,EAAG,KAAK,kBAAkB,IAAI,EAAK,WAAG,IAAA,IAAI,GAGvD,OAFA,EAAQ,KAAK,CAAE,MAAM,EAAA,iCAAyB,EAAK,OAAQ,SAAU,eAAU,SAC/E,KAAK,kBAAkB,IAAI,EAAK,GAAI,EAEtC,CAEA,GAAI,EAAJ,CAEE,IAAI,EAAQ,EACR,KAAK,sBAAsB,IAAI,EAAK,IACpC,KAAK,qBAAqB,IAAI,EAAK,IAEvC,IAAK,EAAO,CACV,EAAQ,IAAI,4BACZ,IAAM,EAAwB,4BAAA,IACzB,EAAA,+BAAkB,IACrB,KAAM,EAAyB,oCAA+B,mCAC9D,MAAO,EAAK,UAAU,UACtB,MAAO,uBAAM,QACb,MAAM,EAAA,0BAER,EAAM,UAAU,GACZ,EACF,KAAK,sBAAsB,IAAI,EAAK,GAAI,GAExC,KAAK,qBAAqB,IAAI,EAAK,GAAI,EAE3C,CAEA,GAAI,CAAC,cAAe,UAAU,SAAS,EAAK,UAAW,KAAA,EACjD,EACJ,EAAM,UAAU,GAEhB,IAAM,EAAc,EAAyB,KAAK,4BAA8B,KAAK,2BAErF,EAAM,YAAW,SAAC,GAAe,IAAA,EAC/B,EAAgB,4BAAA,GAAQ,GAAI,IAAE,KAAM,EAAW,OAC/C,EAAW,MAAO,EAAA,2BAAmB,EAAW,MAChD,EAAW,MAAQ,uBAAM,SACzB,EAAY,IAAI,EAAK,GAAE,GAAA,OAAA,mBAA+B,QAA/B,EAAO,EAAY,IAAI,EAAK,WAAG,IAAA,IAAI,IAAE,CAAG,IACjE,IACA,EAAM,WAEN,IAAM,EAA6C,QAAtC,EAAG,KAAK,kBAAkB,IAAI,EAAK,WAAG,IAAA,IAAI,GAGvD,OAFA,EAAQ,KAAK,CAAE,MAAM,EAAA,iCAAyB,EAAK,OAAQ,SAAU,SACrE,KAAK,kBAAkB,IAAI,EAAK,GAAI,EAEtC,CAEA,EAAM,UAAU,EAElB,KA7CA,CA+CA,GAAI,EAAY,CACd,IAAM,EAAQ,IAAI,4BAOlB,OANA,EAAM,UAAU,QACZ,EACF,KAAK,sBAAsB,IAAI,EAAK,GAAI,GAExC,KAAK,qBAAqB,IAAI,EAAK,GAAI,GAG3C,CAEA,IAAM,EAAa,EAAK,QAAyC,QAAnC,EAAG,KAAK,WAAW,IAAI,EAAK,eAAO,IAAA,IAAW,KACtE,EAAc,KAAK,cAAe,UAAU,EAAU,EAAY,GAEpE,GACF,KAAK,WAAW,IAAI,EAAM,EAjB5B,CA/DA,CAkFF,GAAC,CAAA,IAAA,YAAA,MAED,SAAU,EAAgB,EAA+B,GACvD,IAAM,EAAmB,EAAK,QAAU,oCAClC,EAAkB,EAAK,QAAU,mCAIvC,GAHmB,GAAoB,EAGvC,CACE,IAAM,EAAQ,EAAkB,KAAK,qBAAqB,IAAI,EAAK,IAAM,KAAK,sBAAsB,IAAI,EAAK,IAGzG,IACF,EAAM,YAAW,SAAC,GAAe,IAAA,EACkD,GAAN,QAA3E,GAAmC,EAAA,kCAAuB,EAAW,cAAM,IAAA,IAAI,CAAC,GAAxE,cAAM,IAAA,EAAG,wBAAO,OAAM,EAC9B,EAAW,OAAS,EAAK,MAAQ,wBAAO,OAAS,EACjD,EAAW,MAAQ,uBAAM,SACrB,EAAK,QACP,EAAW,cAAa,cAAA,IAAQ,EAAA,kCAA4B,EAAK,QAErE,IACA,EAAM,SAAS,CACb,SAAU,EAAK,WAIrB,MAEA,IAAI,kBAAA,sBAAA,KAAK,mBAAiB,KAAtB,KAAuB,KAIvB,CAAC,cAAe,UAAU,SAAS,EAAK,UAA5C,CAGA,IAAM,EAAW,KAAK,mBAAmB,IAAI,EAAK,IAC5C,GAAyB,EAAA,yBAAiB,GAC1C,GAAwB,EAAA,wBAAgB,GAI9C,GAFe,GAA0B,EAE7B,CACV,IAAM,EAJY,EAIU,KAAK,qBAAqB,IAAI,EAAK,IAAM,KAAK,sBAAsB,IAAI,EAAK,IAGzG,IAAK,EACH,OAcF,OAXA,EAAM,YAAW,SAAC,GAAe,IAAA,EACkD,GAAN,QAA3E,GAAmC,EAAA,kCAAuB,EAAW,cAAM,IAAA,IAAI,CAAC,GAAxE,cAAM,IAAA,EAAG,wBAAO,OAAM,EAC9B,EAAW,OAAS,EAAK,MAAQ,wBAAO,OAAS,EACjD,EAAW,MAAQ,uBAAM,SACrB,EAAK,QACP,EAAW,cAAa,cAAA,IAAQ,EAAA,kCAA4B,EAAK,QAErE,SACA,EAAM,SAAS,CACb,SAAU,EAAK,UAGnB,CAIA,GAFoB,KAAK,cAAe,YAAY,GAEpD,CAIA,IAAM,EAAW,KAAK,WAAW,IAAI,GAEhC,IAIL,KAAK,cAAe,WAAW,GAAU,SAAC,GAAe,IAAA,EAC0B,GAAN,QAA3E,GAAmC,EAAA,kCAAuB,EAAW,cAAM,IAAA,IAAI,CAAC,GAAxE,cAAM,IAAA,EAAG,wBAAO,OAAM,EAC9B,EAAW,OAAS,EAAK,MAAQ,wBAAO,OAAS,EACjD,EAAW,MAAQ,uBAAM,SACrB,EAAK,QACP,EAAW,cAAa,cAAA,IAAQ,EAAA,kCAA4B,EAAK,QAErE,IACA,KAAK,cAAe,SAAS,EAAU,CAAE,SAAU,EAAK,WAhBxD,CAjCA,CAkDF,GAAC,CAAA,IAAA,YAAA,OAAA,EAAA,kBAAA,eAAA,GAED,SAAA,EAAgB,EAAgB,GAA4B,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAAA,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,OACpD,EAAW,KAAK,mBAAmB,IAAI,EAAK,IAE5C,OAAoC,IAAzB,EAAO,cAA8B,EAAO,cAAgB,EAAO,YAC9E,EAAM,OAAA,OAAU,qBAAQ,IAAG,YAAA,OAAW,GACtC,EAAQ,EAAO,MACrB,EAC8D,EAAK,OAAO,YAAW,EAAA,SAAA,GAA5E,EAAiB,EAAA,GAAE,EAAc,EAAA,GAAK,EAAW,EAAA,MAAA,GACpD,EAAmB,KAAK,sBAAsB,IAAI,EAAK,IACvD,EAAkB,KAAK,qBAAqB,IAAI,EAAK,IAE3D,KAAK,cAAe,WAAW,GAAU,SAAC,GAgBxC,GAfA,EAAW,OAAO,MAAK,EAAA,2BACvB,EAAW,OAAO,MAAK,EAAA,0BAAe,IAElC,KAAsB,EAAA,eAAS,EAAY,2BAAU,eACvD,EAAW,OAAO,KAAK,CAAE,KAAM,2BAAU,aAAc,MAAO,IAG5D,EAAK,QAAQ,YAAc,KAAmB,EAAA,eAAS,EAAY,2BAAU,QAC/E,EAAW,OAAO,KAAK,CAAE,KAAM,2BAAU,MAAO,MAAO,IAGrD,EAAY,OAAS,KAAM,EAAA,eAAS,EAAY,2BAAU,YAC5D,EAAW,OAAO,KAAK,CAAE,KAAM,2BAAU,UAAW,MAAO,EAAY,KAAK,SAG1E,EACF,EAAW,cAAa,cAAA,IAAQ,EAAA,kCAA4B,QACvD,KAAA,EACC,EAA6B,QAAnB,EAAG,EAAK,mBAAW,IAAA,GAElC,QAFkC,EAAhB,EAAkB,MACnC,SAAC,GAAU,MAAyB,SAApB,EAAW,MAAuC,UAApB,EAAW,IAAgB,WAC1E,IAAA,OAAA,EAFkB,EAEhB,YAEC,IACF,EAAW,cAAa,4BAAA,GAAQ,EAAW,eAAa,IAAE,QAAS,IAEvE,CAEA,EAAW,QAAS,EAAA,4BAAoB,EAAO,OAAQ,EAAK,gBAC5D,EAAW,MAAQ,uBAAM,QAC3B,IAEI,EAAO,OAAO,OAAS,GACzB,KAAK,cAAe,gBAClB,OACA,EACA,SACA,OAAO,MAAK,EAAA,gBAAU,EAAO,OAAO,KAAK,KAAM,SAC/C,CACE,YAAa,6BAAY,OAK3B,EAAO,OAAO,OAAS,GACzB,KAAK,cAAe,gBAClB,OACA,EACA,SACA,OAAO,MAAK,EAAA,gBAAU,EAAO,OAAO,KAAK,KAAM,SAC/C,CACE,YAAa,6BAAY,OAKzB,EAAwE,QAAhD,EAAG,KAAK,4BAA4B,IAAI,EAAK,WAAG,IAAA,IAAI,GAG5E,EAA6C,QAAtC,EAAG,KAAK,kBAAkB,IAAI,EAAK,WAAG,IAAA,IAAI,GACjD,EAAgB,IAAI,IAAiC,EAAA,2BAC3C,GAAO,IAAvB,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAW,EAAC,EAAA,OACJ,EAA6B,QAA5B,EAAG,EAAc,IAAI,EAAE,aAAK,IAAA,IAAI,IACrC,KAAK,GACP,EAAc,IAAI,EAAE,KAAM,EAC3B,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAEK,EAAa,SAAC,GAClB,IAAM,EAAS,EAAc,IAAI,GACjC,GAAK,GAA4B,IAAlB,EAAO,OAGtB,OAAO,EAAO,OAChB,EAAC,EAAA,2BAEwB,EAAO,aAAW,EAAA,EAAA,EAAA,EAAA,IAAA,WAAA,EAAA,EAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAEG,GAFnC,EAAU,EAAA,MACb,EAAmB,EAAW,cAAgB,8CAC9C,EAAW,EAAW,EAAW,OAEnC,EAAgB,CAAA,EAAA,EAAA,QAC6C,OAAzD,EAAmC,QAA3B,EAAG,SAAkB,QAAV,EAAR,EAAU,gBAAQ,IAAA,OAAA,EAAlB,EAAoB,YAAI,IAAA,IAAI,aAAQ,EAAR,EAAU,SAAQ,EAAA,EAAA,EACzD,KAAK,kBAAkB,EAAU,EAAU,GAAW,cAAA,EAAA,EAAA,eAI1D,YAAU,SAAQ,CAAA,EAAA,EAAA,QAenB,OAdK,EAAW,EAAS,SACpB,EAAe,EAAyB,SAAS,IACjD,EAAc,EAAe,EAAmB,KAG9C,EAAa,EAAY,eAAe,EAAS,SAE/C,EAAW,EAAY,cAAc,EAAY,KAAK,cAAe,QAC3E,EAAW,YAAY,KAAK,CAC1B,KAAM,EAAW,KACjB,KAAM,EAAW,YACjB,OAAQ,KAGb,EAAA,EAAA,eAIC,YAAU,SAAQ,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,EACd,KAAK,kBAAkB,EAAU,EAAS,SAAU,GAAW,cAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,EAIjE,KAAK,kBAAkB,OAAU,EAAW,GAAW,OAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,eAAA,EAAA,EAAA,GAAA,EAAA,IAAA,EAAA,EAAA,YAK/D,KAAK,cAAe,WAAW,GAAU,SAAC,GACxC,IAuBsB,EAKD,EA5Bf,EAAe,EAAW,OAAO,QAAgC,SAAC,EAAK,GAO3E,OANK,EAAI,EAAM,QACb,EAAI,EAAM,MAAQ,IAGpB,EAAI,EAAM,MAAM,KAAK,GAEd,CACT,GAAG,CAAC,GACE,EAAY,OAAO,KAAK,GAAc,SAAQ,SAAC,GACnD,IAAM,EAAc,EAAa,GAEjC,OACE,IAAc,2BAAU,OACxB,IAAc,2BAAU,cACxB,IAAc,2BAAU,UAEjB,EAAY,OAAO,GAGrB,CACT,IAEI,KACF,EAAA,EAAW,OAAM,QAAO,MAAA,EAAA,mBAAI,EAAiB,QAC7C,EAAK,sBAAqB,OAAQ,EAAK,KAGrC,KACF,EAAA,EAAW,OAAM,KAAI,MAAA,EAAA,mBAAI,EAAgB,QACzC,EAAK,qBAAoB,OAAQ,EAAK,KAGxC,EAAW,OAAS,CACtB,IACA,KAAK,cAAe,SAAS,EAAU,CAAE,SAAU,EAAO,WAC1D,KAAK,cAAe,UAAU,GAC9B,KAAK,kBAAiB,OAAQ,EAAK,IAAI,eAAA,EAAA,EAAA,MAAA,EAAA,KAAA,oBACxC,SApKc,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,oBAAA,OAAA,EAAA,kBAAA,eAAA,GAsKf,SAAA,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAAA,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,OACQ,EAAmB,KAAK,MAAM,WAAW,QAAO,SAAA,GAAe,IAAZ,EAAK,EAAL,MACjD,GAAgB,EAAA,gCAA0B,GAEhD,OAAQ,EAAK,4BAA4B,SAAS,EAAc,WAClE,IAAE,EAAA,2BAEqB,GAAgB,EAAA,EAAA,EAAA,EAAA,IAAA,WAAA,EAAA,EAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QACV,OADlB,EAAQ,EAAA,MACjB,KAAK,YAAY,GAAU,EAAA,EAAA,EACrB,KAAK,UAAU,EAAU,CAC7B,OAAQ,wBAAO,QACf,YAAa,GACb,SAAU,EACV,OAAQ,GACR,cAAe,EACf,YAAa,EACb,MAAO,EACP,MAAO,GACP,OAAQ,GACR,OAAQ,GACR,UAAW,KAAK,gBAChB,YAAa,KACb,OAAA,EAAA,EAAA,eAAA,EAAA,EAAA,eAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,cAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,MAAA,EAAA,KAAA,iBAEL,WAxBsB,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,QAAA,OAAA,EAAA,kBAAA,eAAA,GA0BvB,SAAA,IAAA,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,cAAA,EAAA,EAAA,EACQ,KAAK,oBAAmB,OAE9B,KAAK,cAAe,uBACpB,KAAK,cAAe,6BAA6B,cAAA,EAAA,EAAA,MAAA,EAAA,KAAA,KAClD,WALU,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,gBAAA,MAOX,WACE,OAAO,CACT,GAAC,CAAA,IAAA,6BAAA,MAED,SAAmC,EAA4B,GAC7D,IAAA,EAAkC,EAAQ,KAAlC,EAAI,EAAJ,KAAI,EAAA,EAAE,kBAAU,IAAA,EAAG,GAAE,EAE7B,KAAK,cAAe,WAAW,GAAoB,SAAC,GAAS,IAAA,EACvD,IACF,EAAK,KAAO,IAGd,EAAA,EAAK,YAAW,KAAI,MAAA,EAAA,mBAAI,GAC1B,GACF,GAAC,CAAA,IAAA,oBAAA,OAAA,EAAA,kBAAA,eAAA,GAED,SAAA,EACE,EACA,EACA,GAKC,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,UAEI,EAAW,MAAS,EAAW,KAAI,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,UAImD,KAArF,EAAuB,EAAW,cAAgB,gDAE3B,EAAW,KAAI,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,cAIxC,EAAoB,CAAA,EAAA,EAAA,QACiC,GAElC,mBAFf,EAAU,KAAK,MAAM,EAAW,KAAM,aAEhC,KAAwB,CAAA,EAAA,EAAA,QAC4B,OAA9D,KAAK,2BAA2B,EAAqB,GAAS,EAAA,EAAA,UAGF,OAA9D,KAAK,cAAe,qBAAqB,EAAU,CAAC,IAAU,EAAA,EAAA,UAW/D,IAPK,EAAa,KAAK,cAAe,UAAU,EAAU,EAAoB,CAAE,KAAM,EAAW,SAMhG,KAAK,cAAe,SAAS,OAAY,IAGvC,EAAW,KAAI,CAAA,EAAA,EAAA,QACjB,KAAK,cAAe,gBAAgB,EAAU,EAAY,EAAW,KAAM,EAAW,KAAM,CAC1F,YAAa,EAAW,cACvB,EAAA,EAAA,mBACO,EAAA,oBAAW,EAAW,MAAM,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,UAGhC,EACgB,UAApB,EAAW,MAA+C,oBAA3B,EAAW,YACtC,0CACA,EAAW,YAEjB,KAAK,cAAe,gBAAgB,EAAU,EAAY,EAAW,KAAM,EAAW,KAAO,CAC3F,gBACC,UAGA,EAAW,KAAK,MAAM,sBAAc,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,UAS8C,GALjF,EAC8C,QADjB,EAAG,EACnC,KAAM,QAAQ,KAAK,UAAY,KAAK,oBAAa,IAAA,OAAA,EADd,EAElC,QAAQ,qBAAe,IACxB,QAAQ,QAAS,IAEd,EAAiB,EAAW,KAAM,QAAQ,qBAAe,IAAI,QAAQ,QAAS,KAEhF,KAAK,eAAe,SAAS,KAAmB,KAAK,eAAe,SAAS,GAA8B,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,UASxF,OANjB,EAAU,eAAA,EAAA,kBAAA,eAAA,GAAG,SAAA,EAAO,GAAgB,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,cAAA,EAAA,EAAA,GAC3B,EAAA,kBAAO,GACjB,MAAK,kBAAM,CAAI,IAAC,OACV,kBAAM,CAAK,IAAC,cAAA,EAAA,EAAA,EAAA,EAAA,GAAA,GAAA,EAAA,KACtB,gBAJe,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAMV,EAAiB,eAAA,EAAA,kBAAA,eAAA,GAAG,SAAA,EAAO,GAAwC,IAAA,EAAA,EAAA,OAAA,eAAA,GAAA,SAAA,GAAA,cAAA,EAAA,GAAA,OAEN,OAD3D,EAAW,GAAA,OAAM,EAAc,KAAA,OAAI,EAAQ,QAC3C,EAAY,GAAA,OAAM,EAA6B,KAAA,OAAI,EAAQ,QAAA,EAAA,EAAA,EACvD,EAAW,GAAY,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,GAClB,EAAA,6BAAkB,GAAY,OAGC,cAAA,EAAA,EAAA,EAAA,EAAA,GAHD,cAAA,EAAA,EAAA,EAEnC,EAAW,GAAa,WAAA,EAAA,EAAA,CAAA,EAAA,EAAA,eAAA,EAAA,EAAA,GACnB,EAAA,6BAAkB,GAAa,cAAA,EAAA,EAAA,OAEvC,GAAS,GAAA,EAAA,KACjB,gBAVsB,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,EAAA,EAAA,GAYI,EAAkB,UAAS,QAApC,OAAZ,EAAY,EAAA,EAAA,EAAA,EAAA,GACW,EAAkB,YAAW,QAAtC,OAAd,EAAc,EAAA,EAAA,EAAA,EAAA,GACK,EAAkB,QAAO,QAA5C,EAAU,EAAA,EAEV,EAAW,EAAW,KAAK,QAAQ,qBAAe,IAExD,KAAK,cAAe,gBAClB,OACA,EACA,EACA,OAAO,KACL,KAAK,UAAU,CACb,SAAU,EACV,OAAQ,EACR,KAAM,EACN,KAAM,IAER,SAEF,CACE,YAAa,6BAAY,UACzB,cAAe,eAInB,KAAK,eAAe,KAAK,GAAgB,eAAA,EAAA,EAAA,MAAA,EAAA,KAAA,KAC1C,SAnH8B,EAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,UAAA,MAqH/B,WACE,MAAO,IACT,KAzHC,IAAA,EA/CsB,EAtKR,EAFd,CAgVA,CA7tBwB,GAguB3B,SAAA,kBAthBoB,GAChB,OAAK,KAAK,QAAQ,SAAW,CAAC,YAAa,SAAU,eAAe,SAAS,EAAK,YAK5D,WAAlB,EAAK,UAAwC,qBAAf,EAAK,SAKpB,mBAAf,EAAK,SAA8B,EAAA,oCAA4B,EAAM,mBAK3E,CAygBK,IAAM,OAAM,QAAA,OAAG,kCAEtB,SAAA,QAAA,QAKe","file":"/npm/allure-playwright@3.6.0/dist/cjs/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/allure-playwright@3.6.0/dist/cjs/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* eslint max-lines: off */\nimport type { FullConfig } from \"@playwright/test\";\nimport type { TestResult as PlaywrightTestResult, Suite, TestCase, TestStep } from \"@playwright/test/reporter\";\nimport { existsSync } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport {\n  ContentType,\n  type ImageDiffAttachment,\n  type Label,\n  LabelName,\n  LinkType,\n  Stage,\n  Status,\n  type StepResult,\n  type TestResult,\n} from \"allure-js-commons\";\nimport type { RuntimeMessage, RuntimeStepMetadataMessage, TestPlanV1Test } from \"allure-js-commons/sdk\";\nimport {\n  extractMetadataFromString,\n  getMessageAndTraceFromError,\n  getMetadataLabel,\n  hasLabel,\n  stripAnsi,\n} from \"allure-js-commons/sdk\";\nimport {\n  ALLURE_RUNTIME_MESSAGE_CONTENT_TYPE,\n  ReporterRuntime,\n  ShallowStepsStack,\n  createDefaultWriter,\n  createStepResult,\n  escapeRegExp,\n  formatLink,\n  getEnvironmentLabels,\n  getFrameworkLabel,\n  getHostLabel,\n  getLanguageLabel,\n  getPackageLabel,\n  getThreadLabel,\n  getWorstTestStepResult,\n  md5,\n  parseTestPlan,\n  randomUuid,\n  readImageAsBase64,\n} from \"allure-js-commons/sdk/reporter\";\nimport { allurePlaywrightLegacyApi } from \"./legacy.js\";\nimport type { AllurePlaywrightReporterConfig, AttachStack, AttachmentTarget, ReporterV2 } from \"./model.js\";\nimport {\n  AFTER_HOOKS_ROOT_STEP_TITLE,\n  BEFORE_HOOKS_ROOT_STEP_TITLE,\n  diffEndRegexp,\n  isAfterHookStep,\n  isBeforeHookStep,\n  isDescendantOfStepWithTitle,\n  normalizeAttachStepTitle,\n  normalizeHookTitle,\n  statusToAllureStats,\n} from \"./utils.js\";\n\nexport class AllureReporter implements ReporterV2 {\n  config!: FullConfig;\n  suite!: Suite;\n  options: AllurePlaywrightReporterConfig;\n  outputDir: string | undefined;\n  snapshotDir: string | undefined;\n\n  private allureRuntime: ReporterRuntime | undefined;\n  private globalStartTime = new Date();\n  private processedDiffs: string[] = [];\n  private readonly startedTestCasesTitlesCache: string[] = [];\n  private readonly allureResultsUuids: Map<string, string> = new Map();\n  private readonly attachmentTargets: Map<string, AttachmentTarget[]> = new Map();\n  private beforeHooksStepsStack: Map<string, ShallowStepsStack> = new Map();\n  private afterHooksStepsStack: Map<string, ShallowStepsStack> = new Map();\n  private beforeHooksAttachmentsStack: Map<string, AttachStack[]> = new Map();\n  private afterHooksAttachmentsStack: Map<string, AttachStack[]> = new Map();\n  private readonly pwStepUuid = new WeakMap<TestStep, string>();\n\n  constructor(config: AllurePlaywrightReporterConfig) {\n    this.options = { suiteTitle: true, detail: true, ...config };\n  }\n\n  onConfigure(config: FullConfig): void {\n    this.config = config;\n    this.outputDir = config.projects[0].outputDir;\n    this.snapshotDir = config.projects[0].snapshotDir;\n\n    const testPlan = parseTestPlan();\n\n    if (!testPlan) {\n      return;\n    }\n\n    // @ts-ignore\n    const configElement = config[Object.getOwnPropertySymbols(config)[0]];\n\n    if (!configElement) {\n      return;\n    }\n\n    const testsWithSelectors = testPlan.tests.filter((test) => test.selector);\n    const v1ReporterTests: TestPlanV1Test[] = [];\n    const v2ReporterTests: TestPlanV1Test[] = [];\n    const cliArgs: string[] = [];\n\n    testsWithSelectors.forEach((test) => {\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      if (!/#/.test(test.selector!)) {\n        v2ReporterTests.push(test);\n        return;\n      }\n\n      v1ReporterTests.push(test);\n    });\n\n    // The path needs to be specific to the current OS. Otherwise, it may not match against the test file.\n    const selectorToGrepPattern = (selector: string) => escapeRegExp(path.normalize(`/${selector}`));\n\n    if (v2ReporterTests.length) {\n      // we need to cut off column because playwright works only with line number\n      const v2SelectorsArgs = v2ReporterTests\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        .map((test) => test.selector!.replace(/:\\d+$/, \"\"))\n        .map(selectorToGrepPattern);\n\n      cliArgs.push(...v2SelectorsArgs);\n    }\n\n    if (v1ReporterTests.length) {\n      const v1SelectorsArgs = v1ReporterTests\n        // we can filter tests only by absolute path, so we need to cut off test name\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        .map((test) => test.selector!.split(\"#\")[0])\n        .map(selectorToGrepPattern);\n\n      cliArgs.push(...v1SelectorsArgs);\n    }\n\n    if (!cliArgs.length) {\n      return;\n    }\n\n    configElement.cliArgs = cliArgs;\n  }\n\n  onError(): void {}\n\n  onExit(): void {}\n\n  onStdErr(): void {}\n\n  onStdOut(): void {}\n\n  onBegin(suite: Suite): void {\n    this.suite = suite;\n    this.allureRuntime = new ReporterRuntime({\n      ...this.options,\n      writer: createDefaultWriter({ resultsDir: this.options.resultsDir }),\n    });\n  }\n\n  onTestBegin(test: TestCase) {\n    const suite = test.parent;\n    const titleMetadata = extractMetadataFromString(test.title);\n    const project = suite.project()!;\n    const testFilePath = path.relative(project?.testDir, test.location.file);\n    const relativeFileParts = testFilePath.split(path.sep);\n    const relativeFile = relativeFileParts.join(\"/\");\n    // root > project > file path > test.describe...\n    const [, , , ...suiteTitles] = suite.titlePath();\n    const nameSuites = suiteTitles.length > 0 ? `${suiteTitles.join(\" \")} ` : \"\";\n    const testCaseIdBase = `${relativeFile}#${nameSuites}${test.title}`;\n    const result: Partial<TestResult> = {\n      name: titleMetadata.cleanTitle,\n      labels: [...titleMetadata.labels, ...getEnvironmentLabels()],\n      links: [...titleMetadata.links],\n      parameters: [],\n      steps: [],\n      testCaseId: md5(testCaseIdBase),\n      fullName: `${relativeFile}:${test.location.line}:${test.location.column}`,\n      titlePath: relativeFileParts.concat(...suiteTitles),\n    };\n\n    result.labels!.push(getLanguageLabel());\n    result.labels!.push(getFrameworkLabel(\"playwright\"));\n    result.labels!.push(getPackageLabel(testFilePath));\n    result.labels!.push({ name: \"titlePath\", value: suite.titlePath().join(\" > \") });\n\n    // support for earlier playwright versions\n    if (\"tags\" in test) {\n      const tags: Label[] = test.tags.map((tag) => ({\n        name: LabelName.TAG,\n        value: tag.startsWith(\"@\") ? tag.substring(1) : tag,\n      }));\n      result.labels!.push(...tags);\n    }\n\n    if (\"annotations\" in test) {\n      for (const annotation of test.annotations) {\n        if (annotation.type === \"skip\" || annotation.type === \"fixme\") {\n          continue;\n        }\n\n        if (annotation.type === \"issue\") {\n          result.links!.push(\n            formatLink(this.options.links ?? {}, {\n              type: LinkType.ISSUE,\n              url: annotation.description!,\n            }),\n          );\n          continue;\n        }\n\n        if (annotation.type === \"tms\" || annotation.type === \"test_key\") {\n          result.links!.push(\n            formatLink(this.options.links ?? {}, {\n              type: LinkType.TMS,\n              url: annotation.description!,\n            }),\n          );\n          continue;\n        }\n\n        if (annotation.type === \"description\") {\n          result.description = annotation.description;\n          continue;\n        }\n\n        const annotationLabel = getMetadataLabel(annotation.type, annotation.description);\n\n        if (annotationLabel) {\n          result.labels!.push(annotationLabel);\n          continue;\n        }\n\n        result.steps!.push({\n          name: `${annotation.type}: ${annotation.description!}`,\n          status: Status.PASSED,\n          stage: Stage.FINISHED,\n          parameters: [],\n          steps: [],\n          attachments: [],\n          statusDetails: {},\n        });\n      }\n    }\n\n    if (project?.name) {\n      result.parameters!.push({ name: \"Project\", value: project.name });\n    }\n\n    if (project?.repeatEach > 1) {\n      result.parameters!.push({ name: \"Repetition\", value: `${test.repeatEachIndex + 1}` });\n    }\n\n    const testUuid = this.allureRuntime!.startTest(result);\n\n    this.allureResultsUuids.set(test.id, testUuid);\n    this.startedTestCasesTitlesCache.push(titleMetadata.cleanTitle);\n  }\n\n  #shouldIgnoreStep(step: TestStep) {\n    if (!this.options.detail && ![\"test.step\", \"attach\", \"test.attach\"].includes(step.category)) {\n      return true;\n    }\n\n    // ignore noisy route.continue()\n    if (step.category === \"pw:api\" && step.title === \"route.continue()\") {\n      return true;\n    }\n\n    // playwright doesn't report this step\n    if (step.title === \"Worker Cleanup\" || isDescendantOfStepWithTitle(step, \"Worker Cleanup\")) {\n      return true;\n    }\n\n    return false;\n  }\n\n  onStepBegin(test: TestCase, _result: PlaywrightTestResult, step: TestStep): void {\n    const isRootBeforeHook = step.title === BEFORE_HOOKS_ROOT_STEP_TITLE;\n    const isRootAfterHook = step.title === AFTER_HOOKS_ROOT_STEP_TITLE;\n    const isRootHook = isRootBeforeHook || isRootAfterHook;\n    const isBeforeHookDescendant = isBeforeHookStep(step);\n    const isAfterHookDescendant = isAfterHookStep(step);\n    const isHookStep = isBeforeHookDescendant || isAfterHookDescendant;\n    const testUuid = this.allureResultsUuids.get(test.id)!;\n\n    if (this.#shouldIgnoreStep(step)) {\n      return;\n    }\n\n    const baseStep: StepResult = {\n      ...createStepResult(),\n      name: step.title,\n      start: step.startTime.getTime(),\n      stage: Stage.RUNNING,\n      uuid: randomUuid(),\n    };\n\n    if ([\"test.attach\", \"attach\"].includes(step.category) && !isHookStep) {\n      const parent = step.parent ? this.pwStepUuid.get(step.parent) ?? null : null;\n      const targets = this.attachmentTargets.get(test.id) ?? [];\n      targets.push({ name: normalizeAttachStepTitle(step.title), stepUuid: parent ?? undefined });\n      this.attachmentTargets.set(test.id, targets);\n      return;\n    }\n\n    if (isHookStep) {\n      // Lazily initialize the hook stack if it doesn't exist (e.g., when detail: false and root hook was ignored)\n      let stack = isBeforeHookDescendant\n        ? this.beforeHooksStepsStack.get(test.id)\n        : this.afterHooksStepsStack.get(test.id);\n\n      if (!stack) {\n        stack = new ShallowStepsStack();\n        const rootHookStep: StepResult = {\n          ...createStepResult(),\n          name: isBeforeHookDescendant ? BEFORE_HOOKS_ROOT_STEP_TITLE : AFTER_HOOKS_ROOT_STEP_TITLE,\n          start: step.startTime.getTime(),\n          stage: Stage.RUNNING,\n          uuid: randomUuid(),\n        };\n        stack.startStep(rootHookStep);\n        if (isBeforeHookDescendant) {\n          this.beforeHooksStepsStack.set(test.id, stack);\n        } else {\n          this.afterHooksStepsStack.set(test.id, stack);\n        }\n      }\n\n      if ([\"test.attach\", \"attach\"].includes(step.category)) {\n        let hookStepWithUuid: AttachStack | undefined;\n        stack.startStep(baseStep);\n\n        const attachStack = isBeforeHookDescendant ? this.beforeHooksAttachmentsStack : this.afterHooksAttachmentsStack;\n\n        stack.updateStep((stepResult) => {\n          hookStepWithUuid = { ...step, uuid: stepResult.uuid as string } as AttachStack;\n          stepResult.name = normalizeHookTitle(stepResult.name!);\n          stepResult.stage = Stage.FINISHED;\n          attachStack.set(test.id, [...(attachStack.get(test.id) ?? []), hookStepWithUuid]);\n        });\n        stack.stopStep();\n\n        const targets = this.attachmentTargets.get(test.id) ?? [];\n        targets.push({ name: normalizeAttachStepTitle(step.title), hookStep: hookStepWithUuid });\n        this.attachmentTargets.set(test.id, targets);\n        return;\n      }\n\n      stack.startStep(baseStep);\n      return;\n    }\n\n    if (isRootHook) {\n      const stack = new ShallowStepsStack();\n      stack.startStep(baseStep);\n      if (isRootBeforeHook) {\n        this.beforeHooksStepsStack.set(test.id, stack);\n      } else {\n        this.afterHooksStepsStack.set(test.id, stack);\n      }\n      return;\n    }\n\n    const parentUuid = step.parent ? this.pwStepUuid.get(step.parent) ?? null : null;\n    const createdUuid = this.allureRuntime!.startStep(testUuid, parentUuid, baseStep);\n\n    if (createdUuid) {\n      this.pwStepUuid.set(step, createdUuid);\n    }\n  }\n\n  onStepEnd(test: TestCase, _result: PlaywrightTestResult, step: TestStep): void {\n    const isRootBeforeHook = step.title === BEFORE_HOOKS_ROOT_STEP_TITLE;\n    const isRootAfterHook = step.title === AFTER_HOOKS_ROOT_STEP_TITLE;\n    const isRootHook = isRootBeforeHook || isRootAfterHook;\n\n    // For root hooks, check if we have a lazily created stack that needs to be finalized\n    if (isRootHook) {\n      const stack = isRootAfterHook ? this.afterHooksStepsStack.get(test.id) : this.beforeHooksStepsStack.get(test.id);\n\n      // If stack exists (was lazily created), finalize the root hook step\n      if (stack) {\n        stack.updateStep((stepResult) => {\n          const { status = Status.PASSED } = getWorstTestStepResult(stepResult.steps) ?? {};\n          stepResult.status = step.error ? Status.FAILED : status;\n          stepResult.stage = Stage.FINISHED;\n          if (step.error) {\n            stepResult.statusDetails = { ...getMessageAndTraceFromError(step.error) };\n          }\n        });\n        stack.stopStep({\n          duration: step.duration,\n        });\n      }\n      return;\n    }\n\n    if (this.#shouldIgnoreStep(step)) {\n      return;\n    }\n    // ignore test.attach steps since attachments are already in the report\n    if ([\"test.attach\", \"attach\"].includes(step.category)) {\n      return;\n    }\n    const testUuid = this.allureResultsUuids.get(test.id)!;\n    const isBeforeHookDescendant = isBeforeHookStep(step);\n    const isAfterHookDescendant = isAfterHookStep(step);\n    const isAfterHook = isAfterHookDescendant;\n    const isHook = isBeforeHookDescendant || isAfterHookDescendant;\n\n    if (isHook) {\n      const stack = isAfterHook ? this.afterHooksStepsStack.get(test.id) : this.beforeHooksStepsStack.get(test.id);\n\n      // Stack might not exist if root hook was ignored (e.g., detail: false) and no test.step was called inside it\n      if (!stack) {\n        return;\n      }\n\n      stack.updateStep((stepResult) => {\n        const { status = Status.PASSED } = getWorstTestStepResult(stepResult.steps) ?? {};\n        stepResult.status = step.error ? Status.FAILED : status;\n        stepResult.stage = Stage.FINISHED;\n        if (step.error) {\n          stepResult.statusDetails = { ...getMessageAndTraceFromError(step.error) };\n        }\n      });\n      stack.stopStep({\n        duration: step.duration,\n      });\n      return;\n    }\n\n    const currentStep = this.allureRuntime!.currentStep(testUuid);\n\n    if (!currentStep) {\n      return;\n    }\n\n    const stepUuid = this.pwStepUuid.get(step);\n\n    if (!stepUuid) {\n      return;\n    }\n\n    this.allureRuntime!.updateStep(stepUuid, (stepResult) => {\n      const { status = Status.PASSED } = getWorstTestStepResult(stepResult.steps) ?? {};\n      stepResult.status = step.error ? Status.FAILED : status;\n      stepResult.stage = Stage.FINISHED;\n      if (step.error) {\n        stepResult.statusDetails = { ...getMessageAndTraceFromError(step.error) };\n      }\n    });\n    this.allureRuntime!.stopStep(stepUuid, { duration: step.duration });\n  }\n\n  async onTestEnd(test: TestCase, result: PlaywrightTestResult) {\n    const testUuid = this.allureResultsUuids.get(test.id)!;\n    // We need to check parallelIndex first because pw introduced this field only in v1.30.0\n    const threadId = result.parallelIndex !== undefined ? result.parallelIndex : result.workerIndex;\n    const thread = `pid-${process.pid}-worker-${threadId}`;\n    const error = result.error;\n    // only apply default suites if not set by user\n    const [, projectSuiteTitle, fileSuiteTitle, ...suiteTitles] = test.parent.titlePath();\n    const beforeHooksStack = this.beforeHooksStepsStack.get(test.id);\n    const afterHooksStack = this.afterHooksStepsStack.get(test.id);\n\n    this.allureRuntime!.updateTest(testUuid, (testResult) => {\n      testResult.labels.push(getHostLabel());\n      testResult.labels.push(getThreadLabel(thread));\n\n      if (projectSuiteTitle && !hasLabel(testResult, LabelName.PARENT_SUITE)) {\n        testResult.labels.push({ name: LabelName.PARENT_SUITE, value: projectSuiteTitle });\n      }\n\n      if (this.options.suiteTitle && fileSuiteTitle && !hasLabel(testResult, LabelName.SUITE)) {\n        testResult.labels.push({ name: LabelName.SUITE, value: fileSuiteTitle });\n      }\n\n      if (suiteTitles.length > 0 && !hasLabel(testResult, LabelName.SUB_SUITE)) {\n        testResult.labels.push({ name: LabelName.SUB_SUITE, value: suiteTitles.join(\" > \") });\n      }\n\n      if (error) {\n        testResult.statusDetails = { ...getMessageAndTraceFromError(error) };\n      } else {\n        const skipReason = test.annotations?.find(\n          (annotation) => annotation.type === \"skip\" || annotation.type === \"fixme\",\n        )?.description;\n\n        if (skipReason) {\n          testResult.statusDetails = { ...testResult.statusDetails, message: skipReason };\n        }\n      }\n\n      testResult.status = statusToAllureStats(result.status, test.expectedStatus);\n      testResult.stage = Stage.FINISHED;\n    });\n\n    if (result.stdout.length > 0) {\n      this.allureRuntime!.writeAttachment(\n        testUuid,\n        undefined,\n        \"stdout\",\n        Buffer.from(stripAnsi(result.stdout.join(\"\")), \"utf-8\"),\n        {\n          contentType: ContentType.TEXT,\n        },\n      );\n    }\n\n    if (result.stderr.length > 0) {\n      this.allureRuntime!.writeAttachment(\n        testUuid,\n        undefined,\n        \"stderr\",\n        Buffer.from(stripAnsi(result.stderr.join(\"\")), \"utf-8\"),\n        {\n          contentType: ContentType.TEXT,\n        },\n      );\n    }\n\n    const attachmentsInBeforeHooks = this.beforeHooksAttachmentsStack.get(test.id) ?? [];\n\n    // FIFO\n    const targets = this.attachmentTargets.get(test.id) ?? [];\n    const targetsByName = new Map<string, AttachmentTarget[]>();\n    for (const t of targets) {\n      const q = targetsByName.get(t.name) ?? [];\n      q.push(t);\n      targetsByName.set(t.name, q);\n    }\n\n    const takeByName = (name: string): AttachmentTarget | undefined => {\n      const target = targetsByName.get(name);\n      if (!target || target.length === 0) {\n        return undefined;\n      }\n      return target.shift();\n    };\n\n    for (const attachment of result.attachments) {\n      const isRuntimeMessage = attachment.contentType === ALLURE_RUNTIME_MESSAGE_CONTENT_TYPE;\n      const stepInfo = takeByName(attachment.name);\n\n      if (isRuntimeMessage) {\n        const stepUuid = stepInfo?.hookStep?.uuid ?? stepInfo?.stepUuid;\n        await this.processAttachment(testUuid, stepUuid, attachment);\n        continue;\n      }\n\n      if (stepInfo?.hookStep) {\n        const hookStep = stepInfo.hookStep;\n        const isBeforeHook = attachmentsInBeforeHooks.includes(hookStep);\n        const targetStack = isBeforeHook ? beforeHooksStack : afterHooksStack;\n\n        if (targetStack) {\n          const stepResult = targetStack.findStepByUuid(hookStep.uuid);\n          if (stepResult) {\n            const fileName = targetStack.addAttachment(attachment, this.allureRuntime!.writer);\n            stepResult.attachments.push({\n              name: attachment.name,\n              type: attachment.contentType,\n              source: fileName,\n            });\n          }\n        }\n        continue;\n      }\n\n      if (stepInfo?.stepUuid) {\n        await this.processAttachment(testUuid, stepInfo.stepUuid, attachment);\n        continue;\n      }\n\n      await this.processAttachment(testUuid, undefined, attachment);\n    }\n\n    // FIXME: temp logic for labels override, we need it here to keep the reporter compatible with v2 API\n    // in next iterations we need to implement the logic for every javascript integration\n    this.allureRuntime!.updateTest(testUuid, (testResult) => {\n      const mappedLabels = testResult.labels.reduce<Record<string, Label[]>>((acc, label) => {\n        if (!acc[label.name]) {\n          acc[label.name] = [];\n        }\n\n        acc[label.name].push(label);\n\n        return acc;\n      }, {});\n      const newLabels = Object.keys(mappedLabels).flatMap((labelName) => {\n        const labelsGroup = mappedLabels[labelName];\n\n        if (\n          labelName === LabelName.SUITE ||\n          labelName === LabelName.PARENT_SUITE ||\n          labelName === LabelName.SUB_SUITE\n        ) {\n          return labelsGroup.slice(-1);\n        }\n\n        return labelsGroup;\n      });\n\n      if (beforeHooksStack) {\n        testResult.steps.unshift(...beforeHooksStack.steps);\n        this.beforeHooksStepsStack.delete(test.id);\n      }\n\n      if (afterHooksStack) {\n        testResult.steps.push(...afterHooksStack.steps);\n        this.afterHooksStepsStack.delete(test.id);\n      }\n\n      testResult.labels = newLabels;\n    });\n    this.allureRuntime!.stopTest(testUuid, { duration: result.duration });\n    this.allureRuntime!.writeTest(testUuid);\n    this.attachmentTargets.delete(test.id);\n  }\n\n  async addSkippedResults() {\n    const unprocessedCases = this.suite.allTests().filter(({ title }) => {\n      const titleMetadata = extractMetadataFromString(title);\n\n      return !this.startedTestCasesTitlesCache.includes(titleMetadata.cleanTitle);\n    });\n\n    for (const testCase of unprocessedCases) {\n      this.onTestBegin(testCase);\n      await this.onTestEnd(testCase, {\n        status: Status.SKIPPED,\n        attachments: [],\n        duration: 0,\n        errors: [],\n        parallelIndex: 0,\n        workerIndex: 0,\n        retry: 0,\n        steps: [],\n        stderr: [],\n        stdout: [],\n        startTime: this.globalStartTime,\n        annotations: [],\n      });\n    }\n  }\n\n  async onEnd() {\n    await this.addSkippedResults();\n\n    this.allureRuntime!.writeEnvironmentInfo();\n    this.allureRuntime!.writeCategoriesDefinitions();\n  }\n\n  printsToStdio(): boolean {\n    return false;\n  }\n\n  private processStepMetadataMessage(attachmentStepUuid: string, message: RuntimeStepMetadataMessage) {\n    const { name, parameters = [] } = message.data;\n\n    this.allureRuntime!.updateStep(attachmentStepUuid, (step) => {\n      if (name) {\n        step.name = name;\n      }\n\n      step.parameters.push(...parameters);\n    });\n  }\n\n  private async processAttachment(\n    testUuid: string,\n    attachmentStepUuid: string | undefined,\n    attachment: {\n      name: string;\n      contentType: string;\n      path?: string;\n      body?: Buffer;\n    },\n  ) {\n    if (!attachment.body && !attachment.path) {\n      return;\n    }\n\n    const allureRuntimeMessage = attachment.contentType === ALLURE_RUNTIME_MESSAGE_CONTENT_TYPE;\n\n    if (allureRuntimeMessage && !attachment.body) {\n      return;\n    }\n\n    if (allureRuntimeMessage) {\n      const message = JSON.parse(attachment.body!.toString()) as RuntimeMessage;\n\n      if (message.type === \"step_metadata\") {\n        this.processStepMetadataMessage(attachmentStepUuid!, message);\n        return;\n      }\n      this.allureRuntime!.applyRuntimeMessages(testUuid, [message]);\n      return;\n    }\n\n    const parentUuid = this.allureRuntime!.startStep(testUuid, attachmentStepUuid, { name: attachment.name });\n\n    // only stop if step is created. Step may not be created only if test with specified uuid doesn't exists.\n    // usually, missing test by uuid means we should completely skip result processing;\n    // the later operations are safe and will only produce console warnings\n    if (parentUuid) {\n      this.allureRuntime!.stopStep(parentUuid, undefined);\n    }\n\n    if (attachment.body) {\n      this.allureRuntime!.writeAttachment(testUuid, parentUuid, attachment.name, attachment.body, {\n        contentType: attachment.contentType,\n      });\n    } else if (!existsSync(attachment.path!)) {\n      return;\n    } else {\n      const contentType =\n        attachment.name === \"trace\" && attachment.contentType === \"application/zip\"\n          ? \"application/vnd.allure.playwright-trace\"\n          : attachment.contentType;\n\n      this.allureRuntime!.writeAttachment(testUuid, parentUuid, attachment.name, attachment.path!, {\n        contentType,\n      });\n    }\n\n    if (!attachment.name.match(diffEndRegexp)) {\n      return;\n    }\n\n    const pathWithoutEndFromSnapshotDir = attachment\n      .path!.replace(this.outputDir!, this.snapshotDir!)\n      ?.replace(diffEndRegexp, \"\")\n      .replace(/\\.png/, \"\");\n\n    const pathWithoutEnd = attachment.path!.replace(diffEndRegexp, \"\").replace(/\\.png/, \"\");\n\n    if (this.processedDiffs.includes(pathWithoutEnd) || this.processedDiffs.includes(pathWithoutEndFromSnapshotDir)) {\n      return;\n    }\n    const fileExists = async (filePath: string) => {\n      return await access(filePath)\n        .then(() => true)\n        .catch(() => false);\n    };\n\n    const readImageFromDirs = async (modifier: \"actual\" | \"expected\" | \"diff\") => {\n      const defaultPath = `${pathWithoutEnd}-${modifier}.png`;\n      const snapshotPath = `${pathWithoutEndFromSnapshotDir}-${modifier}.png`;\n      if (await fileExists(defaultPath)) {\n        return await readImageAsBase64(defaultPath);\n      }\n      if (await fileExists(snapshotPath)) {\n        return await readImageAsBase64(snapshotPath);\n      }\n      return undefined;\n    };\n\n    const actualBase64 = await readImageFromDirs(\"actual\");\n    const expectedBase64 = await readImageFromDirs(\"expected\");\n    const diffBase64 = await readImageFromDirs(\"diff\");\n\n    const diffName = attachment.name.replace(diffEndRegexp, \"\");\n\n    this.allureRuntime!.writeAttachment(\n      testUuid,\n      undefined,\n      diffName,\n      Buffer.from(\n        JSON.stringify({\n          expected: expectedBase64,\n          actual: actualBase64,\n          diff: diffBase64,\n          name: diffName,\n        } as ImageDiffAttachment),\n        \"utf-8\",\n      ),\n      {\n        contentType: ContentType.IMAGEDIFF,\n        fileExtension: \".imagediff\",\n      },\n    );\n\n    this.processedDiffs.push(pathWithoutEnd);\n  }\n\n  version(): \"v2\" {\n    return \"v2\";\n  }\n}\n\n/**\n * @deprecated for removal, import functions directly from \"allure-js-commons\".\n */\nexport const allure = allurePlaywrightLegacyApi;\n\n/**\n * @deprecated for removal, import functions directly from \"@playwright/test\".\n */\nexport { test, expect } from \"@playwright/test\";\n\nexport default AllureReporter;\n"]}