@currents/playwright
Version:
Playwright integration and reporter for [Currents](https://currents.dev/playwright) - a cloud dashboard for debugging, troubleshooting and analysing parallel CI tests supporting Cypress and Playwright.
20 lines (19 loc) • 103 kB
JavaScript
"use strict";var mi=Object.create;var ze=Object.defineProperty;var fi=Object.getOwnPropertyDescriptor;var hi=Object.getOwnPropertyNames;var Ei=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var f=(t,e)=>()=>(t&&(e=t(t=0)),e);var qt=(t,e)=>{for(var r in e)ze(t,r,{get:e[r],enumerable:!0})},on=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of hi(e))!Ii.call(t,s)&&s!==r&&ze(t,s,{get:()=>e[s],enumerable:!(n=fi(e,s))||n.enumerable});return t};var g=(t,e,r)=>(r=t!=null?mi(Ei(t)):{},on(e||!t||!t.__esModule?ze(r,"default",{value:t,enumerable:!0}):r,t)),Ci=t=>on(ze({},"__esModule",{value:!0}),t);var i=f(()=>{"use strict"});var fe,Kt=f(()=>{"use strict";i();fe=class extends Error{}});var Qe,Jt=f(()=>{"use strict";i();Qe={guide:{ciBuildId:"https://docs.currents.dev/guides/ci-build-id",integration:"https://docs.currents.dev/integration-with-playwright/currents-playwright"}}});function an(t){Ti.push(t)}var Ti,Yt=f(()=>{"use strict";i();Ti=[]});var Le,se,Xe=f(()=>{"use strict";i();Le=[],se=[]});var x,he,Fe,P,d,Ee,un,_,Ie,Ce,cn,ln,De,z,pn,Te,oe,Me,Be,uu,cu,ke,m,lu,gn=f(()=>{"use strict";i();x=g(require("chalk")),he=g(require("util"));E();Yt();Xe();Fe=(...t)=>{let e=he.default.format(...t);an(e),console.log(e)},P=Fe,d=(...t)=>{let e=he.default.format(...t);return se.push(e),l("WARNING: ",e),Fe(x.default.bgYellow.black(" WARNING "),e)},Ee=(...t)=>{let e=he.default.format(...t);return l("WARNING: ",e),Fe(x.default.bgYellow.black(" WARNING "),e)},un=(...t)=>{let e=he.default.format(...t);return l("ERRRO: ",e),Fe(x.default.bgRed.white(" ERROR "),e)},_=(...t)=>{let e=he.default.format(...t);return Le.push(e),l("ERROR: ",e),Fe(x.default.bgRed.white(" ERROR "),e)},Ie=()=>console.log(`
`+Ce()+`
`),Ce=()=>x.default.dim(Array(64).fill("=").join("")),cn=(t="",e=64)=>{let r=` start of ${t??"block"} `,n=Math.max(e-r.length,0)/2,s=Math.floor(n),o=Math.ceil(n);return x.default.dim(`${Array(s).fill("-").join("")}${r}${Array(o).fill("-").join("")}`)},ln=(t="",e=64)=>{let r=` end of ${t??"block"} `,n=Math.max(e-r.length,0)/2,s=Math.floor(n),o=Math.ceil(n);return x.default.dim(`${Array(s).fill("-").join("")}${r}${Array(o).fill("-").join("")}`)},De=(t=2)=>console.log(Array(t).fill("").join(`
`)),z=x.default.cyan,pn=x.default.blueBright,Te=x.default.red,oe=x.default.yellow,Me=x.default.green,Be=x.default.gray,uu=x.default.white,cu=x.default.black,ke=x.default.magenta,m=x.default.dim,lu=x.default.bold});var R=f(()=>{"use strict";i();Yt();gn()});function mn(t){if(!t)return;if(t==="false")return!1;let e=parseInt(t,10);if(isNaN(e)||e<1)throw new dn.CommanderError(255,"Invalid argument provided.","--pwc-cancel-after-failures must be a positive integer or 'false', provided: "+t);return e}var dn,fn=f(()=>{"use strict";i();dn=require("commander")});function hn(t){return F[t]?.env}function En(t){return F[t].cli}function In(t){return F[t].name}function Cn(){return{projectId:process.env[F.projectId.env],recordKey:process.env[F.recordKey.env],ciBuildId:process.env[F.ciBuildId.env],tag:process.env[F.tag.env]?process.env[F.tag.env]?.split(",").map(t=>t.trim()):void 0,cancelAfterFailures:mn(process.env[F.cancelAfterFailures.env]),disableTitleTags:process.env[F.disableTitleTags.env],testSuiteFile:process.env[F.testSuiteFile.env],machineId:process.env[F.machineId.env],orchestrationId:process.env[F.orchestrationId.env]}}var F,zt=f(()=>{"use strict";i();fn();F={currentsConfigFile:{name:"Currents Config File Path",env:"CURRENTS_CONFIG_FILE_PATH",cli:"--pwc-config"},ciBuildId:{name:"CI Build ID",env:"CURRENTS_CI_BUILD_ID",cli:"--ci-build-id"},recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Currents Tag",env:"CURRENTS_TAG",cli:"--tag"},cancelAfterFailures:{name:"Currents Cancel After Failures",env:"CURRENTS_CANCEL_AFTER_FAILURES",cli:"--pwc-cancel-after-failures"},disableTitleTags:{name:"Disable Title Tags",env:"CURRENTS_DISABLE_TITLE_TAGS",cli:"--pwc-disable-title-tags"},testSuiteFile:{name:"Test Suite File",env:"CURRENTS_TEST_SUITE_FILE",cli:"--pwc-test-suite-file"},machineId:{name:"Machine ID",env:"CURRENTS_MACHINE_ID",cli:"--pwc-machine-id"},orchestrationId:{name:"Orchestration ID",env:"CURRENTS_ORCHESTRATION_ID",cli:"--pwc-orchestration-id"},outputFile:{name:"Output File",env:"CURRENTS_OUTPUT_FILE",cli:"--pwc-output-file"},batchSize:{name:"Batch Size",env:"CURRENTS_BATCH_SIZE",cli:"--pwc-batch-size"}}});function ye(){if(Qt)return Qt;if(process.env.CURRENTS_PWC_CLI_CONFIG_PATH)try{let t=JSON.parse(Rn.default.readFileSync(process.env.CURRENTS_PWC_CLI_CONFIG_PATH).toString());return Tn("Options from serialized CLI config file: %o",t),Qt=t,t}catch(t){return Tn("Could not read CLI config file: %o",t),{}}return{}}var Rn,Tn,Qt,Xt=f(()=>{"use strict";i();Rn=g(require("fs"));E();Tn=l.extend("cli-options-serializer"),Qt=null});function yn(t,e,r={validationFn:tr}){Zt("reporter options: %o",t),Zt("config file options: %o",e);let n={...D(er),...D(e),...D(t),...D(ye()),...D(Cn()),orchestration:{...D(er.orchestration),...D(e?.orchestration),...D(t?.orchestration),...D(ye().orchestration)},coverage:{...D(er.coverage),...D(e?.coverage),...D(t?.coverage),...D(ye().coverage)}};r.validationFn(n),Ze=n,Zt("resolved currents config: %o",Ze)}function tr(t){Ri.forEach(e=>{if(!t[e])throw _(`${In(e)} is required for Currents Reporter. Use the following methods:
- environment variable: ${m(hn(e))}
- CLI flag: ${m(En(e))}
- reporter configuration option ${m(e)} in ${m("playwright.config.ts")}
\u{1F4D6} ${Qe.guide.integration}`),new fe("Missing required config variable")})}function D(t){return Object.entries(t??{}).reduce((e,[r,n])=>n===void 0?e:{...e,[r]:n},{})}function G(){return!!Ze?.orchestrationId}function w(){return Ze}function _n(t){t.preserveOutput!=="always"&&d(`The "preserveOutput" property in your Playwright config is set to ${t.preserveOutput}. This may cause artifacts to be removed before they are uploaded to Currents. We recommend setting it to "always".`)}function Sn(t){return t?Object.values(t).map(e=>e.name):[]}function et(t,e){return e?.projects===!0?t:Array.isArray(e?.projects)?e?.projects.length===0?t:e?.projects.filter(r=>t.includes(r)):[]}var Zt,Ri,er,Ze,rr=f(()=>{"use strict";i();E();Kt();Jt();R();zt();Xt();Zt=l.extend("config"),Ri=["projectId","recordKey"],er={removeTitleTags:!1,disableTitleTags:!1,orchestration:{skipReporterInjection:!1},coverage:{projects:!1}},Ze=null});function An(t){let e=new WeakMap;function r(n){if(typeof n=="object"&&n!==null){if(e.has(n))return"[Circular]";e.set(n,!0)}}return(0,xn.cloneDeepWith)(t,r)}function tt(t){let r=Object.getOwnPropertySymbols(t).find(s=>s.toString().match(/configInternalSymbol/))??Object.getOwnPropertyNames(t).find(s=>s.match(/_internal/));return r?t[r]:(d("Could not extract internal playwright configuration"),null)}var xn,Pn=f(()=>{"use strict";i();xn=require("lodash");R()});var B=f(()=>{"use strict";i();rr();zt();Xt();Pn()});var bn,wn=f(()=>{bn={name:"@currents/playwright",version:"1.14.1",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev",url:"https://currents.dev"},license:"MIT",homepage:"https://currents.dev",repository:{type:"git",url:"https://github.com/currents-dev/currents-playwright-changelog.git"},scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it --verbose","publish:npm":"npm run rm && npm run build && ./publish.js","release-ci":"npm run rm && npm run build && ./publish.js -t latest"},bin:{pwc:"./dist/bin/pwc.js","pwc-p":"./dist/bin/pwc-p.js"},devDependencies:{"@playwright/test":"^1.44.0","@release-it/conventional-changelog":"^7.0.2","@types/async-retry":"^1.4.5","@types/babel__code-frame":"^7.0.3","@types/debug":"^4.1.12","@types/getos":"^3.0.4","@types/json-stringify-safe":"^5.0.3","@types/lodash":"^4.17.15","@types/pluralize":"^0.0.33","@types/proxy-from-env":"^1.0.4","@types/randomstring":"^1.3.0","@types/regexp.escape":"^2.0.0","@types/shelljs":"^0.8.16","@types/stack-utils":"^2.0.3","@types/tmp":"^0.2.6","@types/ws":"^8.18.1",eslint:"^9.23.0","eslint-config-custom":"*",msw:"^2.8.2","release-it":"^19.0.3",rimraf:"^6.0.1",tsconfig:"*",tsup:"^8.5.0",typescript:"^5.8.3",vitest:"^3.2.3",wtfnode:"^0.10.0"},dependencies:{"@babel/code-frame":"^7.27.1","@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0","async-retry":"^1.3.3",axios:"^1.9.0","axios-retry":"^4.5.0",c12:"^1.11.2",chalk:"^4.1.2",commander:"^12.1.0","date-fns":"^4.1.0",debug:"^4.3.7",dotenv:"^16.5.0",execa:"^9.5.3",getos:"^3.2.1","https-proxy-agent":"^7.0.5","istanbul-lib-coverage":"^3.2.2","json-stringify-safe":"^5.0.1","lil-http-terminator":"^1.2.3",lodash:"^4.17.21",nanoid:"^3.3.8","object-sizeof":"^2.6.5","p-debounce":"^2.1.0","p-map":"^4.0.0","p-queue":"6.6.2",pino:"^9.6.0",pluralize:"^8.0.0","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0","regexp.escape":"^2.0.1","source-map-support":"^0.5.21","stack-utils":"^2.0.6",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.7.1",ws:"^8.18.2"},files:["dist","!**/*.map","!**/*/*.map","**/*.LEGAL.txt","LICENSE.md","README.md","CHANGELOG.md"],keywords:["playwright","playwright dashboard","cloud dashboard","reporter","currents","tests reporter","sorry cypress","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./discovery":{import:"./dist/reporters/discovery.js",require:"./dist/reporters/discovery.js"},"./orchestration":{import:"./dist/orchestration/index.js",require:"./dist/orchestration/index.js"},"./package.json":"./package.json"},publishConfig:{access:"public",registry:"https://registry.npmjs.org"},"release-it":{npm:{publish:!1},github:{release:!0},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"../../CHANGELOG.md"}},git:{commitMessage:"chore: release v${version}",tagName:"v${version}"},hooks:{"before:github:release":"npm run --prefix ../../ update-public-changelog"}}}});var rt,nr=f(()=>{"use strict";i();wn();rt=bn.version});function st(t={}){let e=vn.default.create(t);return e.interceptors.request.use(r=>{let n={...r},s=e.getUri(r),o=Nn.default.getProxyForUrl(s);return o&&(_i("Using HTTP proxy %s for %s ",o,s),n.proxy=!1,n.httpsAgent=Si(o)),n}),e}function Si(t){return nt||(nt=new On.HttpsProxyAgent(t),nt)}var vn,On,Nn,_i,nt,sr=f(()=>{"use strict";i();vn=g(require("axios")),On=require("https-proxy-agent"),Nn=g(require("proxy-from-env"));E();_i=l.extend("axios");nt=null});var or,Un,Ln=f(()=>{"use strict";i();or=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Un=()=>3e4});function Dn(){ot.addListener("runCancelled",Bn)}function Mn(){ot.removeListener("runCancelled",Bn)}function Bn(){l("Run cancelled: %s",ar()),process.exit(1)}var Fn,ot,ir=f(()=>{"use strict";i();Fn=g(require("events"));E();it();ot=new Fn.default});var ur,at,ar,ut,kn=f(()=>{"use strict";i();R();ir();ur={cancellationReason:null},at=t=>{ur.cancellationReason||(ur.cancellationReason=t)},ar=()=>ur.cancellationReason,ut=({showWarning:t=!0}={})=>{let e=ar();e&&(t&&d("%s",e),ot.emit("runCancelled",e))}});var it=f(()=>{"use strict";i();kn()});var jn,ie,ct=f(()=>{"use strict";i();jn=require("nanoid"),ie=(0,jn.customAlphabet)("abcdefghijklmnopqrstuvwxyz",10)});var lt,cr,_e,pt,gt=f(()=>{"use strict";i();lt=require("ts-pattern"),cr={outcome:null,scannerConfig:null,currentsConfig:null,internalConfig:null},_e=(t,e)=>(0,lt.match)(t).with(lt.P.union("scannerConfig","currentsConfig","internalConfig"),r=>{cr[r]=e}).with("outcome",r=>{cr[r]=e}).exhaustive(),pt=()=>cr});function Vn(t){(0,O.match)(t).when(Gn.isAxiosError,xi).otherwise(()=>{d("Unexpected error while sending network request: %s",t)})}function xi(t){return(0,O.match)(t).with({code:"ECONNABORTED"},()=>{d("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{d("Network connection aborted")}).with({code:"ECONNRESET"},()=>{d("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{d("Network connection timeout")}).with({response:O.P.not(O.P.nullish)},e=>{Ai(e,{status:e.response.status,data:e.response.data})}).otherwise(e=>{d(`[currents] Unexpected network error: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status,payload:t.response?.config.data,requestId:je(t)})})}function Ai(t,{status:e,data:r}){(0,O.match)(e).with(401,()=>{d(`[currents] ${t.response?.config.method} ${t.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{d(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 400 Bad Request from cloud service:
%o`,r)}).with(429,()=>{d(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Pi(t,r)}).otherwise(()=>{d(`[currents] Unexpected network response: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status,requestId:je(t)})})}function Pi(t,e){(0,O.match)(e).with({code:lr.MISSING_SUITE,message:O.P.string,errors:O.P.array(O.P.string)},async r=>{let{message:n,errors:s}=r;De(1),_(...$n(n,s)),dt({id:ie(),text:(0,Hn.default)(pt(),null,2)}).then(o=>{_(`Please share this URL with Currents support for further investigation:
${o}`)}).catch(o=>{d("Failed to upload debug artifact: %s",o)}),De(1)}).with({code:lr.RUN_CANCELLED,message:O.P.string},r=>{at(r.message),ut()}).with({code:lr.RUN_EXPIRED,message:O.P.string},r=>{d(r.message)}).with({message:O.P.string,errors:O.P.array(O.P.string)},r=>{let{message:n,errors:s}=r;De(1),d(...$n(n,s)),De(1)}).otherwise(()=>{d(`[currents] Unexpected network response: %s
%O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status,requestId:je(t)})})}function $n(t,e){return Wn.default.isString(t)?e?.length===0?[t]:[t,`
${(e??[]).map(r=>` - ${r}`).join(`
`)}
`]:["Unexpected network error"]}function je(t){return t?.response?.headers["apigw-requestid"]}var Gn,Hn,Wn,O,lr,pr=f(()=>{"use strict";i();Gn=require("axios"),Hn=g(require("json-stringify-safe")),Wn=g(require("lodash")),O=require("ts-pattern");it();ct();R();gr();gt();lr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"}});function Yn(t,e,r){let n=r.method?.toUpperCase(),s=r.url,o=je(e),a=(0,qn.default)(mr(t)),c=`Network request '${n} ${s}' failed: '${e.message}'.${o?` Request ID: ${o}.`:""} Next attempt is in ${a} (${t}/${r["axios-retry"]?.retries||fr()}).`;Kn(c),d(c)}var dr,qn,Kn,mr,Jn,fr,zn=f(()=>{"use strict";i();dr=require("axios"),qn=g(require("pretty-ms"));E();R();pr();Kn=l.extend("http"),mr=t=>[3*1e3,15*1e3,30*1e3][t-1],Jn=t=>(Kn("isRetriableError: %o",{message:t.message,code:"code"in t?t.code:void 0,status:"response"in t?t.response?.status:void 0,headers:"response"in t?t.response?.headers:void 0,data:"response"in t?t.response?.data:void 0,isAxiosError:(0,dr.isAxiosError)(t)}),"code"in t&&t.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET","ENOTFOUND","EAI_AGAIN"].includes(t.code)?!0:(0,dr.isAxiosError)(t)?[429,500,502,503,504].includes(t.response?.status??0):!1),fr=()=>3});function as(t){is["x-pw-version"]=t??"0.0.0"}function Oi(){let t=st({baseURL:or(),timeout:Un(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(async e=>{let{currentsOptions:r}=e,n={...vi,...r};return n.enableCompression&&(0,ns.default)(e.data)>n.compressThresholdBytes?(e.headers["Content-Encoding"]="gzip",{...e,data:await bi((0,es.default)(e.data))}):e}),t.interceptors.request.use(e=>{let r=e["axios-retry"]?.retryCount??0,n=w();e.headers.set({...is,"Accept-Encoding":"gzip, deflate, br","x-currents-idempotency-key":e.headers["x-currents-idempotency-key"]??(0,rs.nanoid)(),"x-pwc-request-attempt":r,"x-currents-key":n?.recordKey??null}),n?.orchestrationId&&e.headers.set("x-currents-orchestration-id",n.orchestrationId),n?.machineId&&e.headers.set("x-currents-machine-id",n.machineId),e.headers.get("Content-Type")||e.headers.set("Content-Type","application/json");let s={...ts.default.pick(e,"method","url","headers"),data:Buffer.isBuffer(e.data)?"buffer":e.data};return r?Qn("network request retry: %o",Xn({...s,isRetry:!0})):Qn("network request: %o",Xn(s)),e}),(0,Zn.default)(t,{retries:fr(),retryCondition:Jn,retryDelay:mr,shouldResetTimeout:!0,onRetry:Yn}),t}function us(){return mt||(mt=Oi(),mt)}function Xn(t){return{method:t.method,baseUrl:or(),url:t.url,data:t.isRetry?"<retry>":Ni(t.data),headers:{...t.headers,"x-currents-key":"***"}}}function Ni(t){return t?.results?.raw?{...t,results:{...t.results,raw:"***"}}:t}var Zn,es,ts,rs,ns,ss,os,Qn,wi,is,bi,mt,vi,hr=f(()=>{"use strict";i();Zn=g(require("axios-retry")),es=g(require("json-stringify-safe")),ts=g(require("lodash")),rs=require("nanoid"),ns=g(require("object-sizeof")),ss=require("util"),os=g(require("zlib"));B();E();nr();sr();Ln();zn();Qn=l.extend("http"),wi=1024*1024*1,is={"x-pw-version":"0.0.0","x-pwc-version":rt},bi=(0,ss.promisify)(os.default.gzip);mt=null,vi={enableCompression:!1,compressThresholdBytes:wi}});async function L(t,e=us){try{let r=await e().request(t);return cs("network response: %o",{...ls.default.omit(r,"request","config"),url:r.config.url,method:r.config.method}),r}catch(r){let n=r;throw cs("network error: %o",{code:n.code,message:n.message,url:n.config?.url,method:n.config?.method,status:n.response?.status,headers:n.response?.headers,data:n.response?.data}),Vn(n),n}}var ls,cs,ps=f(()=>{"use strict";i();ls=g(require("lodash"));E();hr();pr();cs=l.extend("http")});var ae=f(()=>{"use strict";i();ps()});var gs={};qt(gs,{getDebugUrl:()=>Ui});var Ui,ds=f(()=>{"use strict";i();ae();Ui=({runId:t,type:e})=>L({method:"POST",url:"runs/debug-logs",data:{type:e,runId:t}}).then(r=>r.data)});function Li(t,e){return ft({path:t,name:null,uploadUrl:e,contentType:"text/plain"},"text/plain",void 0)}async function ft(t,e,r){let n=await fs.default.readFile(t.path);return Er("Uploading file %s",t.uploadUrl,{buffer:Buffer.byteLength(n)}),Es(n,t.uploadUrl,e,r)}async function Ir(t,e,r){return Er("Uploading buffer %s",t.name,{buffer:Buffer.byteLength(t.buffer)}),Es(t.buffer,t.uploadUrl,e,r)}async function Fi(t,e,r,n){return st().request({method:"put",url:e,data:t,onUploadProgress:n,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Es(...t){await(0,ms.default)(async()=>{await Fi(...t)},{retries:5,onRetry:(e,r)=>{if(Er(`Upload failed %d out of 5 attempts: %s
%o`,r,e.message,e.response?.data),r===5){_(`Cannot upload after ${r} times: ${e.message}`);return}d(`Upload failed ${r} out of 5 attempts: ${e.message}`)}})}var ms,fs,Er,hs,Is=f(()=>{"use strict";i();ms=g(require("async-retry")),fs=g(require("fs/promises"));E();sr();R();Er=l.extend("upload"),hs=(s=>(s.PNG="image/png",s.WEBM="video/webm",s.TEXT="text/plain",s.ZIP="application/zip",s))(hs||{})});var Cs={};qt(Cs,{ContentType:()=>hs,sendBuffer:()=>Ir,sendPath:()=>ft,uploadText:()=>Li});var Cr=f(()=>{"use strict";i();Is()});async function dt(t){let{getDebugUrl:e}=await Promise.resolve().then(()=>(ds(),gs));try{let{readUrl:r,uploadUrl:n}=await e({runId:t.id,type:"pw-debug"}),{uploadText:s,sendBuffer:o}=await Promise.resolve().then(()=>(Cr(),Cs));return"text"in t&&await o({name:`${t.id}-discovery-debug.log`,buffer:Buffer.from(t.text,"utf-8"),contentType:"text/plain",uploadUrl:n},"text/plain",void 0),"path"in t&&await s(t.path,n),r}catch{return null}}var Tr,Rr=f(()=>{"use strict";i();Tr=g(require("debug"))});function Di(t){return t==="false"?!1:t==="remote"?"remote":t==="full"?"full":!!t}var Ts,Rs,ys=f(()=>{"use strict";i();Ts=require("@commander-js/extra-typings"),Rs=new Ts.Option("--pwc-debug [boolean | 'remote' | 'full']","enable debug logs for the reporter. Specify 'remote' to upload logs to Currents. Specify 'full' to dump the debug logs to stdout and upload to Currents.").argParser(Di).env("CURRENTS_DEBUG")});var _s,Ss,xs=f(()=>{"use strict";i();_s=require("@commander-js/extra-typings");ys();Ss=()=>new _s.Command().allowUnknownOption().addOption(Rs).helpOption(!1)});var Q,As,_r,Ps,ws,yr,ht,Sr=f(()=>{"use strict";i();Q=g(require("debug")),As=g(require("fs")),_r=g(require("path")),Ps=g(require("util")),ws=require("fs/promises");ct();R();xs();Rr();Q.default.useColors=function(){return!1};yr=Q.default.log,ht=class t{constructor(e="core"){this.source=e;this.pipelines={};if(this.mode=Ss().parse().opts().pwcDebug??!1,this.debug=(0,Q.default)(`currents:remote-debug:${this.source}`),!this.mode)return this;if(!this.shouldEnableDebug())return this;let r=process.env.DEBUG?`${process.env.DEBUG},currents*`:"currents*";if(Q.default.enable(r),!this.shouldUploadRemoteDebug())return this;let n=ie(),s=_r.default.resolve(".currents-debug"),o=_r.default.resolve(s,`${n}.log`);(0,ws.mkdir)(s,{recursive:!0}),P(m(`\u{1F47E} Initiated remote ${this.source} debug log collection:`),m(o));let a=As.default.createWriteStream(o,{flags:"a"});return Q.default.log=(...c)=>{this.mode&&(a.write(`${Ps.default.formatWithOptions({colors:!1},...c)}
`),this.shouldMuteLocalStdout()||yr(...c))},this.pipelines[n]={id:n,writeStream:a,type:this.source,tempFilePath:o},this}static factory(e="core"){return this.instance||(this.instance=new t(e)),this.instance}getDebugMode(){return this.mode}async finalize({runId:e}={runId:void 0}){try{let r=Object.keys(this.pipelines);r.length===0&&(this.debug("No debug pipelines found"),Q.default.log=yr);for(let n of r)await this.uploadDebug(n,e??ie())}catch{}finally{Q.default.log=yr}}async uploadDebug(e,r){let n=this.pipelines[e];if(!n){this.debug("No debug pipeline found for id %s",e);return}P(m(`\u{1F47E} ${n.type} debug log written:`),m(n?.tempFilePath));try{let s=await dt({id:r,path:n.tempFilePath});n?.writeStream.end(),P(m(`\u{1F47E} ${n.type} debug log uploaded:`),m(s))}catch(s){d(`Failed to upload ${n.type}} debug log ${m(n.tempFilePath)}: ${s.message}`)}}shouldEnableDebug(){return this.mode==="full"||this.mode==="remote"||this.mode===!0}shouldUploadRemoteDebug(){return this.mode==="full"||this.mode==="remote"}shouldMuteLocalStdout(){return this.mode==="remote"}}});var gr=f(()=>{"use strict";i();Rr();Sr()});var l,E=f(()=>{"use strict";i();gr();l=(0,Tr.default)("currents")});var Ja={};qt(Ja,{configHelpers:()=>qa,currentsReporter:()=>Wa,default:()=>Ka,fixtures:()=>Va});module.exports=Ci(Ja);i();i();i();var $s=g(require("crypto")),At=g(require("fs")),te=g(require("path"));E();i();var Et=g(require("fs")),bs=g(require("istanbul-lib-coverage")),vs=g(require("p-map"));E();var It=l.extend("coverage");function V({target:t,stage:e}){return({event:r,status:n,message:s,details:o})=>{let a=o?JSON.stringify(o):"",c=`[${e}] [${r}] [${n}] ${s} ${a}`,p=["test_attempt_reports_generation","test_attempt_reports_merging"].includes(e)?c:`${c} [${JSON.stringify(t)}]`;It(p)}}async function Ct(t){try{return await Et.default.promises.readdir(t)}catch(e){return It(e),null}}async function Mi(t){try{return await Et.default.promises.readFile(t,"utf-8")}catch(e){return It(e),null}}async function Bi(t){try{let e=JSON.parse(t);return Object.keys(e).length===0?"empty":e}catch(e){return It(e),"invalid"}}async function ki(t,e){try{let n=(await Et.default.promises.stat(t)).size/(1024*1024),s=await Mi(t);if(!s)return e({event:"file_read",status:"failed",message:"Failed to read file",details:{filePath:t,fileSizeInMB:n}}),null;e({event:"file_read",status:"passed",message:"File read successfully",details:{filePath:t,fileSizeInMB:n}});let o=await Bi(s);switch(o){case"empty":return e({event:"parse",status:"passed",message:"Coverage JSON is empty",details:{filePath:t}}),null;case"invalid":return e({event:"parse",status:"failed",message:"Coverage report is not a valid JSON",details:{filePath:t}}),null;default:return e({event:"parse",status:"passed",message:"Coverage report parsed successfully",details:{filePath:t}}),o}}catch(r){return e({event:"file_read",status:"failed",message:"Error processing coverage file",details:{filePath:t,error:r}}),null}}async function Tt(t,e){let r=bs.default.createCoverageMap({}),n=0;if(await(0,vs.default)(t,async s=>{let o=await ki(s,e);if(o)try{r.merge(o),n++,e({event:"merge",status:"passed",message:"Merged file successfully",details:{filePath:s}})}catch(a){e({event:"merge",status:"failed",message:"Failed to merge file",details:{filePath:s,error:a}})}},{concurrency:5}),n===0)return e({event:"merge",status:"failed",message:"No files merged",details:{files:t.length}}),null;e({event:"merge",status:"passed",message:"Merged files successfully",details:{files:n}});try{let s=r.toJSON();return e({event:"parse",status:"passed",message:"Parsed coverage map data",details:{files:t.length}}),s}catch(s){e({event:"parse",status:"failed",message:"Failed to parse coverage map data",details:{files:t.length,error:s}})}return null}var Os=(t,e={})=>e.coverage?.projects===!0?!0:Array.isArray(e.coverage?.projects)&&e.coverage.projects.includes(t);i();i();var xr=require("lodash");i();var Rt=g(require("path"));function Ns(t,e){return ji(Rt.default.relative(e,t.file))}function ji(t){return t.split(Rt.default.sep).join(Rt.default.posix.sep)}function X(t){return Z(t.parent.project())}function A(t){let e=t.titlePath(),r=_t(t).title;return e.slice(e.indexOf(r)+1,e.length)}function yt(t){return t.titlePath().filter(e=>!!e).join(" > ")}function _t(t){let e=t.parent;for(;e.parent?.location;)e=e.parent;return e}function k(t,e){let r=_t(t).location;return Ns(r,e.rootDir)}function M(t){return t.id??t._id}function ue(t,e){return`${M(t)}-${e.retry}`}function Us(t){return{workerIndex:(0,xr.isNil)(t.results[0]?.workerIndex)?-1:t.results[0].workerIndex,parallelIndex:(0,xr.isNil)(t.results[0]?.parallelIndex)?-1:t.results[0].parallelIndex}}function Z(t){if(!t)return"__currents_no_project__";let r=("__projectId"in t?t.__projectId:"").trim(),n=t.name.trim()?r:`project${r?`-0${r}`:""}`;if(n.length>256)throw new Error(`Project name is too long for ${n}`);return n}R();i();var St=g(require("fs")),Ds=g(require("os")),xt=g(require("path"));i();var $e={OR8N_SUITE_FILE_PREFIX:"currents-or8n-",FIXTURES_DIR_PREFIX:"currents-fixtures-",FIXTURES_CONFIG_ERR_FILE:"config_fixture_error.log",FIXTURES_WARNING_FILE_PREFIX:"config_fixture_warning"},ee={ACTION_SKIP:"_currents:rule:skip",ACTION_QUARANTINE:"_currents:rule:quarantine",ACTION_MATCH:"_currents:action:match",ACTION_SKIP_POST:"_currents:rule:skip-post",ACTION_QUARANTINE_POST:"_currents:rule:quarantine-post"};i();var Ge=g(require("fs")),$i=require("tmp-promise");function Ls(t){try{return Ge.closeSync(Ge.openSync(t,"wx")),!0}catch(e){if(e.code==="EEXIST")return!1;throw e}}R();var Fs=()=>process.env.CURRENTS_FIXTURES_TMP_DIR??xt.resolve(Ds.tmpdir(),`${$e.FIXTURES_DIR_PREFIX}${process.ppid}`),Ms=(t,e)=>{let r=e.stack??e.message;St.appendFileSync(t,r)},Ar=t=>(St.mkdirSync(Fs(),{recursive:!0}),xt.join(Fs(),t)),Se=(t,e)=>{let r=Ar(`${$e.FIXTURES_WARNING_FILE_PREFIX}_${t}.log`);Ls(r)&&e.forEach(s=>d(s))};var Gs=l.extend("fixture");function Gi(t){return t.coverage?.dir?te.default.resolve(t.coverage?.dir):te.default.join(process.cwd(),".nyc_output")}function Pr(t){return t.name||"project"}function Hi(t,e){return te.default.join(t,Pr(e))}function Wi(){return $s.default.randomBytes(16).toString("hex")}async function Vi(t,e){let r=await Ct(t);if(!r)return e({event:"find",status:"failed",message:"Coverage directory not found",details:{coverageFiles:r}}),null;if(r.length===0)return e({event:"find",status:"failed",message:"No coverage files found",details:{coverageFiles:r,coverageDir:t}}),null;let n=r.map(s=>te.default.join(t,s));return Tt(n,e)}async function qi(t,e,r){let{project:n,testId:s,retry:o,titlePath:a}=e,c=Pr(n),p=te.default.join(r,`${s}-${o}`),h=V({target:{projectId:c,titlePath:a,testId:s,attemptId:o},stage:"test_attempt_reports_generation"});return await t.addInitScript(()=>window.addEventListener("beforeunload",()=>{if(console.info("Location: "+window.location.href),!window.__coverage__){console.warn("Coverage data is not available in window.__coverage__ before unloading the page.");return}window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))})),await At.default.promises.mkdir(p,{recursive:!0}),h({event:"file_write",status:"passed",message:"Coverage directory created",details:{coverageDir:p}}),await t.exposeFunction("collectIstanbulCoverage",C=>{if(!C)return;let I=te.default.join(p,`${Wi()}.json`);try{At.default.writeFileSync(I,C),h({event:"file_write",status:"passed",message:"Coverage file created",details:{coverageFilePath:I}})}catch(T){h({event:"file_write",status:"failed",message:"Failed to create coverage file",details:{coverageFilePath:I,error:T}})}}),p}async function Ki(t,e,r,n){let{project:s,testId:o,retry:a,titlePath:c}=e,p=Pr(s);for(let T of t.pages())try{await T.evaluate(()=>{if(!window.__coverage__){console.warn("Coverage data is not available in window.__coverage__ after test execution. This may result in incomplete coverage reports.");return}window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))})}catch{d("Failed to collect coverage from all pages. Coverage may be incomplete")}let h=V({target:{projectId:p,titlePath:c,testId:o,attemptId:a},stage:"test_attempt_reports_merging"}),C=await Vi(n,h);if(!C){h({event:"merge",status:"failed",message:"Failed to obtain coverage map",details:{coverageDir:n}});return}let I=te.default.join(r,`${o}-${a}.json`);try{await At.default.promises.writeFile(I,JSON.stringify(C,null,2)),h({event:"file_write",status:"passed",message:"Test attempt coverage file created",details:{coverageOutputPath:I}})}catch(T){h({event:"file_write",status:"failed",message:"Failed to create test attempt coverage file",details:{coverageOutputPath:I,error:T}})}}var Ji=async function({context:t,currentsConfig:e,use:r,testInfo:n}){if(!e)return await Se("coverageFixture",["Currents config not found. Skipping coverage fixture"]),await r(t);if(!Os(Z(n.project),e))return Gs("Coverage is disabled"),await r(t);let{project:s}=n,o,a;try{o=Hi(Gi(e),s),a=await qi(t,n,o)}catch(c){d("Failed to setup coverage context",c)}if(await r(t),!(!o||!a))try{await Ki(t,n,o,a)}catch(c){d("Failed to collect coverage",c)}},Hs=async({context:t,currentsFixturesEnabled:e,currentsConfig:r},n,s)=>{if(!e)return Gs("Currents fixtures disabled, skipping coverage fixture"),await n(t);await Ji({context:t,currentsConfig:r,use:n,testInfo:s})};i();i();i();var wr=class{constructor(){this._state={}}getState(e){return this._state[e]}upsertState(e,r){return this._state[e]||(typeof r=="function"?this._state[e]=r():this._state[e]=r),this._state[e]}async populateState(e,r){return this._state[e]||(this._state[e]=await r),this._state[e]}},H=new wr;E();i();var zs=require("@currents/commit-info"),Qs=require("lodash");i();var wt=require("lodash");E();i();var S=require("lodash");E();ct();var Pt=l.extend("ci"),Yi=(t,...e)=>(0,S.chain)(e).compact().join(t).value(),zi=(t,e)=>(0,S.set)(t,(0,S.camelCase)(e),process.env[e]),y=t=>(0,S.transform)(t,zi,{}),Qi=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Xi=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Zi=()=>(0,S.some)(process.env,(t,e)=>/^CODEBUILD_/.test(e)),ea=()=>process.env.bamboo_buildNumber,ta=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,ra=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,na=()=>(0,S.some)(process.env,(t,e)=>/^CONCOURSE_/.test(e)),sa=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),oa=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,ia=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,aa=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,ua={appveyor:"APPVEYOR",azure:Xi,awsCodeBuild:Zi,bamboo:ea,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:ta,codeshipPro:ra,concourse:na,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:sa,goCD:"GO_JOB_NAME",googleCloud:oa,jenkins:ia,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Qi,travis:"TRAVIS",wercker:aa,netlify:"NETLIFY",layerci:"LAYERCI"};function ca(){let{env:t}=process;return(0,S.findKey)(ua,e=>{if((0,S.isString)(e))return t[e];if((0,S.isFunction)(e))return e()})}var Ws=()=>({appveyor:y(["APPVEYOR_JOB_ID","APPVEYOR_ACCOUNT_NAME","APPVEYOR_PROJECT_SLUG","APPVEYOR_BUILD_NUMBER","APPVEYOR_BUILD_VERSION","APPVEYOR_PULL_REQUEST_NUMBER","APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH"]),azure:y(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:y(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:y(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:y(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:y(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:y(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:y(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:y(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:y(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:y(["CF_BUILD_ID","CF_BUILD_URL","CF_CURRENT_ATTEMPT","CF_STEP_NAME","CF_PIPELINE_NAME","CF_PIPELINE_TRIGGER_ID","CF_PULL_REQUEST_ID","CF_PULL_REQUEST_IS_FORK","CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_TARGET"]),drone:y(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:y(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:y(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:y(["GO_SERVER_URL","GO_ENVIRONMENT_NAME","GO_PIPELINE_NAME","GO_PIPELINE_COUNTER","GO_PIPELINE_LABEL","GO_STAGE_NAME","GO_STAGE_COUNTER","GO_JOB_NAME","GO_TRIGGER_USER","GO_REVISION","GO_TO_REVISION","GO_FROM_REVISION","GO_MATERIAL_HAS_CHANGED"]),googleCloud:y(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:y(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:y(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:y(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:y(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:y(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:y(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:y(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),la=()=>{let{env:t}=process;return{appveyor:{sha:t.APPVEYOR_REPO_COMMIT,branch:t.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||t.APPVEYOR_REPO_BRANCH,message:Yi(`
`,t.APPVEYOR_REPO_COMMIT_MESSAGE,t.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:t.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:t.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:t.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:t.CODEBUILD_SOURCE_REPO_URL},azure:{sha:t.BUILD_SOURCEVERSION,branch:t.BUILD_SOURCEBRANCHNAME,message:t.BUILD_SOURCEVERSIONMESSAGE,authorName:t.BUILD_SOURCEVERSIONAUTHOR,authorEmail:t.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:t.bamboo_planRepository_revision,branch:t.bamboo_planRepository_branch,authorName:t.bamboo_planRepository_username,remoteOrigin:t.bamboo_planRepository_repositoryURL},bitbucket:{sha:t.BITBUCKET_COMMIT,branch:t.BITBUCKET_BRANCH},buildkite:{sha:t.BUILDKITE_COMMIT,branch:t.BUILDKITE_BRANCH,message:t.BUILDKITE_MESSAGE,authorName:t.BUILDKITE_BUILD_CREATOR,authorEmail:t.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:t.BUILDKITE_REPO,defaultBranch:t.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:t.CIRCLE_SHA1,branch:t.CIRCLE_BRANCH,authorName:t.CIRCLE_USERNAME,remoteOrigin:t.CIRCLE_REPOSITORY_URL},codeshipBasic:{sha:t.CI_COMMIT_ID,branch:t.CI_BRANCH,message:t.CI_COMMIT_MESSAGE,authorName:t.CI_COMMITTER_NAME,authorEmail:t.CI_COMMITTER_EMAIL},codeshipPro:{sha:t.CI_COMMIT_ID,branch:t.CI_BRANCH,message:t.CI_COMMIT_MESSAGE,authorName:t.CI_COMMITTER_NAME,authorEmail:t.CI_COMMITTER_EMAIL},codeFresh:{sha:t.CF_REVISION,branch:t.CF_BRANCH,message:t.CF_COMMIT_MESSAGE,authorName:t.CF_COMMIT_AUTHOR},drone:{sha:t.DRONE_COMMIT_SHA,branch:t.DRONE_SOURCE_BRANCH,message:t.DRONE_COMMIT_MESSAGE,authorName:t.DRONE_COMMIT_AUTHOR,authorEmail:t.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:t.DRONE_GIT_HTTP_URL,defaultBranch:t.DRONE_REPO_BRANCH},githubActions:{sha:t.GITHUB_SHA,branch:t.GH_BRANCH||t.GITHUB_REF,defaultBranch:t.GITHUB_BASE_REF,remoteBranch:t.GITHUB_HEAD_REF,runAttempt:t.GITHUB_RUN_ATTEMPT},gitlab:{sha:t.CI_COMMIT_SHA,branch:t.CI_COMMIT_REF_NAME,message:t.CI_COMMIT_MESSAGE,authorName:t.GITLAB_USER_NAME,authorEmail:t.GITLAB_USER_EMAIL,remoteOrigin:t.CI_REPOSITORY_URL,defaultBranch:t.CI_DEFAULT_BRANCH},googleCloud:{sha:t.COMMIT_SHA,branch:t.BRANCH_NAME},jenkins:{sha:t.GIT_COMMIT,branch:t.GIT_BRANCH},semaphore:{sha:t.SEMAPHORE_GIT_SHA,branch:t.SEMAPHORE_GIT_BRANCH,remoteOrigin:t.SEMAPHORE_GIT_REPO_SLUG},shippable:{sha:t.COMMIT,branch:t.BRANCH,message:t.COMMIT_MESSAGE,authorName:t.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:t.BUILD_SOURCEVERSION,branch:t.BUILD_SOURCEBRANCHNAME,message:t.BUILD_SOURCEVERSIONMESSAGE,authorName:t.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:t.TRAVIS_PULL_REQUEST_SHA||t.TRAVIS_COMMIT,branch:t.TRAVIS_PULL_REQUEST_BRANCH||t.TRAVIS_BRANCH,message:t.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:t.COMMIT_REF,branch:t.BRANCH,remoteOrigin:t.REPOSITORY_URL},layerci:{sha:t.GIT_COMMIT,branch:t.LAYERCI_BRANCH,message:t.GIT_COMMIT_TITLE}}},Vs=t=>{let e=qs();return e?(0,S.chain)(t()).get(e).value():{}};function pa(){return(0,S.chain)(Ws()).omitBy(S.isNull).keys().value()}function qs(){let t=ca();return Pt("detected CI provider name: %s",t),t||null}function ga(){return Vs(Ws)}function Ks(){return Vs(la)}function da(t){return t&&pa().includes(t)}function Js(t){let e=ga(),r=qs(),n=ma(t,r);return Pt("detected CI provider: %s",r),Pt("detected CI params: %O",e),Pt("detected CI build ID: %o",n),{params:e,provider:r,ciBuildId:n}}function ma(t,e){return t?{source:"user",value:t}:da(e)?{source:"server",value:null}:{source:"random",value:`auto:${ie()}`}}var br=l.extend("ci-git");function Ys(t){br("git commit existing info: %O",t);let e=Ks();br("commit info from provider environment variables: %O",e);let r=(0,wt.transform)(t,(n,s,o)=>{let a=s||(e?e[o]:null);return n[o]=(0,wt.defaultTo)(a,null)});return br("combined git and environment variables from provider: %O",r),r}var fa=async()=>{let t=await(0,zs.commitInfo)();return Ys({branch:t.branch,remoteOrigin:t.remote,authorEmail:t.email,authorName:t.author,message:t.message,sha:t.sha,ghaEventData:t.ghaEventData})},bt=(0,Qs.memoize)(fa);var vr=l.extend("fixture"),Or=async function(t,e){let r;try{r=await H.upsertState("fixtureGitInfo",async()=>await bt())}catch(n){vr("Failed to retrieve git info",n)}vr("Git info",r),t&&await t(r)},Xs=async({currentsFixturesEnabled:t},e,r)=>{if(!t)return vr("Currents fixtures disabled, skipping git info fixture"),await e();await Or(e,r)};i();E();var Zs=l.extend("fixture"),Nr=async function(t,e,r=null,n=null){let s=await H.getState("projectRules");if(!s){Zs("No actions found, skipping actions processing"),await t(n||{});return}s.applyBefore(e,r),await t(n||s.rules),s.applyAfter(e,r)},eo=async({gitInfo:t,currentsFixturesEnabled:e},r,n)=>{if(!e)return Zs("Currents fixtures disabled, skipping action fixture"),await r({});await Nr(r,n,t)};i();B();E();i();var to=g(require("crypto"));function ce(t){return typeof t=="string"&&(t=Buffer.from(t)),to.default.createHash("md5").update(t).digest("hex")}i();var lo=require("axios");E();R();i();ae();function ro(t){return L({method:"GET",url:`/rules/project/${t}`,"axios-retry":{retries:1}}).then(e=>e.data)}i();var N={EQ:"eq",NEQ:"neq",IN:"in",NOTIN:"notIn",ANY:"any",EMPTY:"empty",INC:"inc",NOTINC:"notInc",INCALL:"incAll",NOTINCALL:"notIncAll"},no=[N.EMPTY,N.NEQ,N.NOTIN,N.NOTINC,N.NOTINCALL],re={SKIP:"skip",QUARANTINE:"quarantine"};i();var co=require("lodash");i();var so=g(require("lodash")),oo=t=>Array.isArray(t)?t.length>0:!!t,vt=(t,e)=>Array.isArray(t)||Array.isArray(e)?so.default.xor([t].flat(),[e].flat()).length===0:t===e,He=(t,e)=>{if(Array.isArray(e)||Array.isArray(t)){let r=[t].flat(),n=[e].flat();for(let s=0,o=0,a=!1;s<n.length;){let c=He(r[o],n[s]);if(c){s++,o=0;continue}if(a=a||!c,o<r.length)o++;else{if(a)return!1;o=0,s<n.length&&s++}}return!0}return typeof e=="string"&&typeof t=="string"?new RegExp(e).test(t):vt(t,e)},Ur=(t,e)=>{if(Array.isArray(e)||Array.isArray(t)){let r=[t].flat(),n=[e].flat();for(let s=0,o=0;s<n.length;){if(He(r[o],n[s]))return!0;o<r.length?o++:(o=0,s<n.length&&s++)}return!1}return vt(t,e)},io=(t,e)=>{let r=new Set([t].flat());return[e].flat().every(n=>r.has(n))},Lr=(t,e)=>{let r=new Set([t].flat());return[e].flat().some(n=>r.has(n))},ao=(t,e)=>Array.isArray(t)?Lr(t,e):new Set([e].flat()).has(t);i();function Fr(t){return typeof t=="string"?uo(t):Array.isArray(t)?t.map(uo):t}function uo(t){return t.startsWith("@")?t:`@${t}`}var We=({input:t,toMatch:e,op:r,allowRegex:n})=>{let s=(()=>{switch(r){case N.ANY:case N.EMPTY:return oo(t);case N.EQ:case N.NEQ:return n?He(t,e):vt(t,e);case N.IN:case N.NOTIN:return n?Ur(t,e):ao(t,e);case N.INC:case N.NOTINC:return n?Ur(t,e):Lr(t,e);case N.INCALL:case N.NOTINCALL:return n?He(t,e):io(t,e);default:return!1}})();return no.includes(r)?!s:s},Ot=class{constructor(e,r=(n,...s)=>{}){this.rules=e;this._debug=r}matchCondition(e,r){switch(e.type){case"title":case"titlePath":case"file":{let n={input:r[e.type],toMatch:e.value,op:e.op,allowRegex:!0},s=We(n);return this._debug("Check condition type %s : %O and got result %s",e.type,n,s),s}case"git_branch":case"git_authorName":case"git_authorEmail":case"git_remoteOrigin":case"git_message":{let n={input:r.gitInfo&&r.gitInfo[e.type.replace("git_","")],toMatch:e.value,op:e.op,allowRegex:!0},s=We(n);return this._debug("Check condition type %s : %O and got result %s",e.type,n,s),s}case"project":case"testId":{let n={input:r[e.type],toMatch:e.value,op:e.op,allowRegex:!1},s=We(n);return this._debug("Check condition type %s %O and got result %s",e.type,n,s),s}case"tag":{let n=r[e.type]!==void 0?Fr(r[e.type]):void 0,s=e.value!==null?Fr(e.value):null,o={input:n,toMatch:s,op:e.op,allowRegex:!1},a=We(o);return this._debug("Check condition type %s %O and got result %s",e.type,o,a),a}case"error_message":{let n=r.errors?.map(c=>c.message),s=e.value,o={input:n,toMatch:s,op:e.op,allowRegex:!0},a=We(o);return this._debug("Check condition type %s %O and got result %s",e.type,o,a),a}default:return!1}}matchRule(e,r){return this._debug("Check for rule match %j with test %O",e,r),e.matcher.op==="AND"?e.matcher.cond.every(n=>this.matchCondition(n,r)):e.matcher.op==="OR"?e.matcher.cond.some(n=>this.matchCondition(n,r)):!1}getMatchedRules(e){return this.rules.filter(r=>this.matchRule(r,e))}getMatchedRulesGroupedByType(e){let r=this.rules.filter(n=>this.matchRule(n,e));return(0,co.groupBy)(r,n=>n.action[0].op)}getMatchedRulesForAction(e,r){return this.getMatchedRules(e).filter(n=>n.action.some(s=>s.op===r))}};i();var xe=l.extend("fixture"),Nt=class extends Ot{constructor(r){super(r,xe);this.rules=r}actionTrace(r,n,s,o){return{rule:{v:s.v,id:s._id,name:s.name,type:r,appliedAt:Date.now()},testInfo:{config:{version:n.config.version},testId:n.testId,status:o}}}testInfoToMatchable(r,n){return{title:r.title,titlePath:r.titlePath,file:r.titlePath[0],project:r.project.name,testId:r.testId,tag:r.tags,gitInfo:n,errors:r.errors?.filter(s=>!!s.message).map(s=>({message:s.message}))}}markMatchedTest(r,n){try{let s=this.getMatchedRulesGroupedByType(n);for(let[o,a]of Object.entries(s)){if(a.length==0)return;xe("Test matched an action. Matchable: %O, ActionType: %s, Actions: %j",n,o,a);let c=this.actionTrace(o,r,a[0]);r.annotations.push({type:ee.ACTION_MATCH,description:JSON.stringify(c)})}}catch(s){d("Failed to mark a test with matching actions",s)}}applyBefore(r,n){let s=this.testInfoToMatchable(r,n);this.markMatchedTest(r,s);let o=[];try{o=this.getMatchedRulesForAction(s,re.SKIP),o.length>0&&xe("Test matched after before. %O Actions : %j",s,o)}catch(a){d("Failed to apply before actions",a)}o.some(a=>{r.annotations.push({type:ee.ACTION_SKIP,description:JSON.stringify(this.actionTrace(re.SKIP,r,a))}),r.skip(!0,`Skipping due to matched Currents.dev skip action: ${a.name}`)})}applyAfter(r,n){let s=[];try{let o=this.testInfoToMatchable(r,n);s=this.getMatchedRulesForAction(o,re.QUARANTINE),s.length>0&&xe("Test matched after rules. %O Actions : %j",o,s)}catch(o){d("Failed to apply after action",o)}s.some(o=>{r.expectedStatus!==r.status&&(xe("Quarantining test, status was: %s",r.status),r.annotations.push({type:ee.ACTION_QUARANTINE,description:JSON.stringify(this.actionTrace(re.QUARANTINE,r,o,r.status))}),r.status="skipped",r.skip(!0,`Quarantining due to matched Currents.dev action: ${o.name}`))})}},po=async t=>{try{let e=await ro(t);return new Nt(e.rules)}catch(e){return xe("Failed to fetch project actions: %o",(0,lo.isAxiosError)(e)?e.toJSON():e),d("Failed to fetch project actions"),new Nt([])}};i();i();B();E();R();i();var go=require("c12");function mo(t){return(0,go.loadConfig)({name:"currents",configFile:t})}i();R();function fo(t=()=>!1){let e=Date.now(),r=Ea();for(;!t();)if(Date.now()-e>r)throw _(`Could not load Currents config after ${r}ms, exiting...`),new Error("Could not load Currents config")}function Ea(t=5e3){let e=Number(process.env.CURRENTS_CONFIG_LOAD_TIMEOUT_MS);return isNaN(e)||e<1?t:e}var ho=l.extend("config-loader"),Ae=class{constructor(e,r=o=>{},n=()=>{process.exit(1)},s={validationFn:tr}){this.reporterOptions=e;this.onSuccess=r;this.onFailure=n;this.options=s;this._configLoaded=!1;this._promise=null}start(){return this._promise=mo(ye().pwcConfigPath).then(async e=>{this.onSuccess(e),yn(this.reporterOptions,e.config,{validationFn:this.options.validationFn})}).catch(e=>{_("Could not load currents configuration: %O",e),this.onFailure()}).finally(()=>{this._configLoaded=!0}),this}waitSync(){return ho("Waiting to load config..."),fo(()=>this._configLoaded),this}load(){return this._promise||(ho("Starting config loader"),this.start()),this._promise}};i();function q(t){return t!=null}i();var Eo=g(require("fs"));E();var Dr=l.extend("fixture:worker-config:run-if-no-marker");async function Io(t){let e=Ar($e.FIXTURES_CONFIG_ERR_FILE);if(Dr("Checking if error marker exists",e),Eo.default.existsSync(e))return Dr("Error file exists, skipping config loader"),!1;try{return await t(),!0}catch(r){return Ms(e,r),Dr("Failed to load config",r),!1}}async function Co(t){let e=[],r=await Io(async()=>{await H.upsertState("fixtureConfigLoader",new Ae(t,()=>{},()=>{},{validationFn:n=>e=Ia(n)})).load()});return{missingKeys:e,loaded:r}}function Ia(t){return["projectId","recordKey"].map(e=>t[e]?null:e).filter(q)}var To=l.extend("fixture:worker-config"),Mr=async function({config:t,use:e,workerInfo:r,chainedFixture:n=null}){try{let{missingKeys:o,loaded:a}=await Co(t);if(!a){Se("fixture:worker-config:not-loaded",["Failed to load Currents config"]),await e(n);return}if(o.length>0){Se(ce(`missing_config_keys_${o.join("-")}`),o.map(c=>`Missing Currents configuration: "${c}". Currents Fixtures may not work as expected.`)),await e(n);return}}catch(o){To("Failed to load config",o),Se(ce("fixture:worker-config:exception"),["Error loading Currents configuration. Currents Fixtures may not work as expected."]),await e(n);return}let s=w();s&&await H.populateState("projectRules",po(s.projectId)),await e(n||s)},Ro=async({currentsConfigOptions:t,currentsFixturesEnabled:e},r,n)=>{if(!e)return To("Currents fixtures are disabled, skipping config fixture"),await r(null);await Mr({config:t,use:r,workerInfo:n})};var yo={currentsFixturesEnabled:[!0,{scope:"worker",option:!0}],currentsConfigOptions:[{},{scope:"worker",option:!0}],gitInfo:[Xs,