@currents/cmd 1.11.0-beta.0 → 1.11.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/index.js CHANGED
@@ -1,23 +1,23 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var ss=Object.create;var fe=Object.defineProperty;var as=Object.getOwnPropertyDescriptor;var cs=Object.getOwnPropertyNames;var ps=Object.getPrototypeOf,ms=Object.prototype.hasOwnProperty;var us=(t,e)=>{for(var r in e)fe(t,r,{get:e[r],enumerable:!0})},ds=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of cs(e))!ms.call(t,n)&&n!==r&&fe(t,n,{get:()=>e[n],enumerable:!(o=as(e,n))||o.enumerable});return t};var l=(t,e,r)=>(r=t!=null?ss(ps(t)):{},ds(e||!t||!t.__esModule?fe(r,"default",{value:t,enumerable:!0}):r,t));var bI=require("source-map-support/register");var os=require("@commander-js/extra-typings");var ur={name:"@currents/cmd",version:"1.11.0-beta.0",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",repository:{type:"git",url:"https://github.com/currents-dev/currents-reporter"},description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^30.4.1","@jest/types":"^30.4.1","@release-it/conventional-changelog":"^12.0.0","release-it":"^21.0.2","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^25.5.0","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14","@types/xxhashjs":"^0.2.4",jest:"^30.4.2",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.9.3",vitest:"^4.1.0"},dependencies:{"@commander-js/extra-typings":"^13.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"1.18.1","axios-retry":"4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^17.4.2",execa:"^9.5.1","fs-extra":"^11.3.4",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^30.2.0","jest-config":"^30.3.0",lodash:"^4.18.1",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.8.5","source-map-support":"^0.5.21",tmp:"^0.2.7","tmp-promise":"^3.0.3","ts-pattern":"^5.8.0",unzipper:"^0.12.3",uuid:"11.1.1",xml2js:"^0.6.2",xxhashjs:"^0.2.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var mt=ur.version;var Ze=require("@commander-js/extra-typings");var ls=[];function le(t){ls.push(t)}var D=l(require("chalk")),j=l(require("util"));var ge=require("debug"),gs=l(require("fs-extra")),c=(0,ge.debug)("currents"),Es=null;function dr(){ge.debug.enable("currents,currents:*")}function fr(t){Es=t}var lr=[],gr=[];var St=(...t)=>{let e=j.default.format(...t);le(e),console.log(e)},Cs=(...t)=>{let e=j.default.format(...t);le(e),console.error(e)},O=St,R=(...t)=>{let e=j.default.format(...t);return gr.push(e),c("WARNING: ",e),St(D.default.bgYellow.black(" WARNING "),e)},ot=(...t)=>{let e=j.default.format(...Er(t));return c("WARNING: ",j.default.format(...t)),St(D.default.bgYellow.black(" WARNING "),e)},Pt=(...t)=>St(D.default.green.bold(j.default.format(...t))),I=(...t)=>{let e=j.default.format(...Er(t));return lr.push(e),c("ERROR: ",j.default.format(...t)),Cs(D.default.bgRed.white(" ERROR "),e)};var Er=t=>t.map(e=>e instanceof Error?e.message:e),bt=(t=2)=>console.log(Array(t).fill("").join(`
3
- `)),Kc=D.default.cyan,jc=D.default.blueBright,$c=D.default.red,Vc=D.default.yellow,Yc=D.default.green,Jc=D.default.gray,Wc=D.default.white,qc=D.default.black,Qc=D.default.magenta,g=D.default.dim,Xc=D.default.bold;var Xn=l(require("chalk"));function Cr(t,e){if(!t)return t;let r={...t};return e.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function xt(t){return Cr(t,["apiKey"])}function T(t){return Cr(t,["recordKey","key"])}var X=class extends Error{};var G=l(require("fs-extra")),Tt=require("path"),Ir=require("uuid");async function nt(t){try{return await G.default.readJson(t)}catch(e){throw I("Error while reading JSON file: %s",t,e),I}}async function it(t,e){try{return await G.default.writeFile(t,e,"utf8"),t}catch(r){throw I(`Error writing file at ${t}:`,r),r}}async function _t(t,e){try{try{return await G.default.access(t),t}catch{return await G.default.writeFile(t,e,"utf8"),t}}catch(r){throw I(`Error writing file at ${t}:`,r),r}}async function Rr(t,e){if(e){await G.default.ensureDir(t);return}let r=(0,Tt.dirname)(t);await G.default.ensureDir(r)}function Rs(){let t=new Date().toISOString().replace(/[:.]/g,"-"),e=(0,Ir.v4)();return`${t}-${e}`}async function Tr(t,e){let r=Rs(),o=(0,Tt.join)(t,e,r);return st(o)}async function st(t){try{return await G.default.ensureDir(t),c("Folder created",t),t}catch(e){throw I(`Failed to create folder at ${t}:`,e),e}}async function wt(t,e){try{return await G.default.ensureDir((0,Tt.dirname)(e)),await G.default.copy(t,e),c("File copied from %s to %s",t,e),e}catch(r){throw I(`Failed to copy file from ${t} to ${e}:`,r),r}}var _r=l(require("crypto"));function $(t){return _r.createHash("sha256").update(t).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Nt={};us(Nt,{getNanoid:()=>Ts,userFacingNanoid:()=>Ce});var Ee=require("nanoid"),hr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ts=(t=16)=>(0,Ee.customAlphabet)(hr,t)(),Ce=(0,Ee.customAlphabet)(hr,12);function Or(t){return Object.entries(t??{}).reduce((e,[r,o])=>o===void 0?e:{...e,[r]:o},{})}function yr(t){if(!(t===void 0||t.trim()===""))return!["false","0","no","off"].includes(t.trim().toLowerCase())}function _(t,e){return"env"in t[e]&&t[e].env?t[e].env:""}function Bt(t,e){return t[e].cli}function Lt(t,e){return t[e].name}function M(t,e,r,o,n){let i={...Or(o),...Or(r())};return e.forEach(a=>{if(!i[a])throw I(`${Lt(t,a)} is required for Currents Reporter. Use the following methods to set the value:
4
- - as environment variable: ${g(_(t,a))}
5
- - as CLI flag of the command: ${g(Bt(t,a))}`),new X("Missing required config variable")}),typeof n=="function"&&n(i),i}var _s={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},hs={branch:{name:"Run Branch",cli:"--branch"},output:{name:"Output Path",env:"CURRENTS_OUTPUT",cli:"--output"},ciBuildId:{name:"CI Build ID",cli:"--ci-build-id"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Run Tag",cli:"--tag"}},V={..._s,...hs};function Ar(){return{apiKey:process.env[V.apiKey.env],debug:!!process.env[V.debug.env]}}var Os=c.extend("config"),ys=["apiKey","projectId"],As=t=>{let{ciBuildId:e,tag:r,branch:o}=t;if(!([e,r,o].filter(Boolean).length===1||r&&o&&!e))throw I('"ciBuildId", "tag", "branch" or a combination of "tag" and "branch" are expected to be provided'),new X("Missing or invalid parameters")},Ie=null;function Ur(t){Ie=M(V,ys,Ar,t,As),Os("Resolved config: %o",xt(Ie))}function Mt(){return Ie}var to=require("fs/promises");var jr=l(require("lodash"));var Br=l(require("axios")),Lr=l(require("axios-retry")),Oe=l(require("lodash"));var Dr=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Sr=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Pr=()=>3e4;var Re=require("axios"),Te=l(require("pretty-ms"));var br=c.extend("http"),vt=t=>[3*1e3,15*1e3,30*1e3][t-1],xr=t=>(br("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,Re.isAxiosError)(t)}),"code"in t&&t.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(t.code)?!0:(0,Re.isAxiosError)(t)?[429,502,503,504].includes(t.response?.status??0):!1),Ft=()=>3;function wr(t,e,r){br("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,Te.default)(vt(t)),t,Ft()),R("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,Te.default)(vt(t)),t,Ft())}var _e=c.extend("http");var he={api:null,restApi:null};function Us(t){let e=t==="api"?Dr():Sr();_e("client base url: %s",e);let r=Br.default.create({baseURL:e,timeout:Pr(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":mt}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let i={...Oe.default.pick(o,"method","url","headers"),baseURL:e,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?_e("network request retry: %o",Nr({...i,baseURL:e,isRetry:!0})):_e("network request: %o",Nr(i)),o}),(0,Lr.default)(r,{retries:Ft(),retryCondition:xr,retryDelay:vt,shouldResetTimeout:!0,onRetry:wr}),r}function Mr(t){return he[t]===null&&(he[t]=Us(t)),he[t]}function Nr(t){return{method:t.method,baseURL:t.baseURL,url:t.url,data:t.isRetry?"<retry>":Ds(t.data),params:t.isRetry?"<retry>":t.params,headers:{...t.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Ds(t){return t?.results?.raw?T({...t,results:{...t.results,raw:"***"}}):Oe.default.isPlainObject(t)?T(t):t}var kr=require("axios"),Gr=l(require("lodash")),S=require("ts-pattern");function Hr(t){(0,S.match)(t).when(kr.isAxiosError,Ss).otherwise(()=>{R("Unexpected error while sending network request: %s",t)})}function Ss(t){return(0,S.match)(t).with({code:"ECONNABORTED"},()=>{R("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{R("Network connection aborted")}).with({code:"ECONNRESET"},()=>{R("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{R("Network connection timeout")}).with({response:S.P.not(S.P.nullish)},e=>{Ps(e,{status:e.response.status,data:e.response.data})}).otherwise(e=>{R(`[currents] Unexpected network error: %s
2
+ "use strict";var ss=Object.create;var fe=Object.defineProperty;var as=Object.getOwnPropertyDescriptor;var cs=Object.getOwnPropertyNames;var ps=Object.getPrototypeOf,ms=Object.prototype.hasOwnProperty;var us=(t,e)=>{for(var r in e)fe(t,r,{get:e[r],enumerable:!0})},ds=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of cs(e))!ms.call(t,n)&&n!==r&&fe(t,n,{get:()=>e[n],enumerable:!(o=as(e,n))||o.enumerable});return t};var l=(t,e,r)=>(r=t!=null?ss(ps(t)):{},ds(e||!t||!t.__esModule?fe(r,"default",{value:t,enumerable:!0}):r,t));var bI=require("source-map-support/register");var os=require("@commander-js/extra-typings");var dr={name:"@currents/cmd",version:"1.11.0-beta.2",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",repository:{type:"git",url:"https://github.com/currents-dev/currents-reporter"},description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^30.4.1","@jest/types":"^30.4.1","@release-it/conventional-changelog":"^12.0.0","release-it":"^21.0.2","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^25.5.0","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14","@types/xxhashjs":"^0.2.4",jest:"^30.4.2",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.9.3",vitest:"^4.1.0"},dependencies:{"@commander-js/extra-typings":"^13.1.0","@currents/commit-info":"1.1.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"1.18.1","axios-retry":"4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^17.4.2",execa:"^9.5.1","fs-extra":"^11.3.4",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^30.2.0","jest-config":"^30.3.0",lodash:"^4.18.1",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.8.5","source-map-support":"^0.5.21",tmp:"^0.2.7","tmp-promise":"^3.0.3","ts-pattern":"^5.8.0",unzipper:"^0.12.3",uuid:"11.1.1",xml2js:"^0.6.2",xxhashjs:"^0.2.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var mt=dr.version;var tr=require("@commander-js/extra-typings");var ls=[];function le(t){ls.push(t)}var D=l(require("chalk")),j=l(require("util"));var ge=require("debug"),gs=l(require("fs-extra")),c=(0,ge.debug)("currents"),Es=null;function fr(){ge.debug.enable("currents,currents:*")}function lr(t){Es=t}var gr=[],Er=[];var St=(...t)=>{let e=j.default.format(...t);le(e),console.log(e)},Cs=(...t)=>{let e=j.default.format(...t);le(e),console.error(e)},O=St,R=(...t)=>{let e=j.default.format(...t);return Er.push(e),c("WARNING: ",e),St(D.default.bgYellow.black(" WARNING "),e)},ot=(...t)=>{let e=j.default.format(...Cr(t));return c("WARNING: ",j.default.format(...t)),St(D.default.bgYellow.black(" WARNING "),e)},Pt=(...t)=>St(D.default.green.bold(j.default.format(...t))),I=(...t)=>{let e=j.default.format(...Cr(t));return gr.push(e),c("ERROR: ",j.default.format(...t)),Cs(D.default.bgRed.white(" ERROR "),e)};var Cr=t=>t.map(e=>e instanceof Error?e.message:e),xt=(t=2)=>console.log(Array(t).fill("").join(`
3
+ `)),jc=D.default.cyan,$c=D.default.blueBright,Vc=D.default.red,Yc=D.default.yellow,Jc=D.default.green,Wc=D.default.gray,qc=D.default.white,Qc=D.default.black,Xc=D.default.magenta,g=D.default.dim,zc=D.default.bold;var Xn=l(require("chalk"));function Ir(t,e){if(!t)return t;let r={...t};return e.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function bt(t){return Ir(t,["apiKey"])}function T(t){return Ir(t,["recordKey","key"])}var X=class extends Error{};var G=l(require("fs-extra")),Tt=require("path"),Rr=require("uuid");async function nt(t){try{return await G.default.readJson(t)}catch(e){throw I("Error while reading JSON file: %s",t,e),I}}async function it(t,e){try{return await G.default.writeFile(t,e,"utf8"),t}catch(r){throw I(`Error writing file at ${t}:`,r),r}}async function _t(t,e){try{try{return await G.default.access(t),t}catch{return await G.default.writeFile(t,e,"utf8"),t}}catch(r){throw I(`Error writing file at ${t}:`,r),r}}async function Tr(t,e){if(e){await G.default.ensureDir(t);return}let r=(0,Tt.dirname)(t);await G.default.ensureDir(r)}function Rs(){let t=new Date().toISOString().replace(/[:.]/g,"-"),e=(0,Rr.v4)();return`${t}-${e}`}async function _r(t,e){let r=Rs(),o=(0,Tt.join)(t,e,r);return st(o)}async function st(t){try{return await G.default.ensureDir(t),c("Folder created",t),t}catch(e){throw I(`Failed to create folder at ${t}:`,e),e}}async function wt(t,e){try{return await G.default.ensureDir((0,Tt.dirname)(e)),await G.default.copy(t,e),c("File copied from %s to %s",t,e),e}catch(r){throw I(`Failed to copy file from ${t} to ${e}:`,r),r}}var hr=l(require("crypto"));function $(t){return hr.createHash("sha256").update(t).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Nt={};us(Nt,{getNanoid:()=>Ts,userFacingNanoid:()=>Ce});var Ee=require("nanoid"),Or="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ts=(t=16)=>(0,Ee.customAlphabet)(Or,t)(),Ce=(0,Ee.customAlphabet)(Or,12);function yr(t){return Object.entries(t??{}).reduce((e,[r,o])=>o===void 0?e:{...e,[r]:o},{})}function Ar(t){if(!(t===void 0||t.trim()===""))return!["false","0","no","off"].includes(t.trim().toLowerCase())}function _(t,e){return"env"in t[e]&&t[e].env?t[e].env:""}function Bt(t,e){return t[e].cli}function Lt(t,e){return t[e].name}function M(t,e,r,o,n){let i={...yr(o),...yr(r())};return e.forEach(s=>{if(!i[s])throw I(`${Lt(t,s)} is required for Currents Reporter. Use the following methods to set the value:
4
+ - as environment variable: ${g(_(t,s))}
5
+ - as CLI flag of the command: ${g(Bt(t,s))}`),new X("Missing required config variable")}),typeof n=="function"&&n(i),i}var _s={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},hs={branch:{name:"Run Branch",cli:"--branch"},output:{name:"Output Path",env:"CURRENTS_OUTPUT",cli:"--output"},ciBuildId:{name:"CI Build ID",cli:"--ci-build-id"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},tag:{name:"Run Tag",cli:"--tag"}},V={..._s,...hs};function Ur(){return{apiKey:process.env[V.apiKey.env],debug:!!process.env[V.debug.env]}}var Os=c.extend("config"),ys=["apiKey","projectId"],As=t=>{let{ciBuildId:e,tag:r,branch:o}=t;if(!([e,r,o].filter(Boolean).length===1||r&&o&&!e))throw I('"ciBuildId", "tag", "branch" or a combination of "tag" and "branch" are expected to be provided'),new X("Missing or invalid parameters")},Ie=null;function Dr(t){Ie=M(V,ys,Ur,t,As),Os("Resolved config: %o",bt(Ie))}function Mt(){return Ie}var eo=require("fs/promises");var $r=l(require("lodash"));var Lr=l(require("axios")),Mr=l(require("axios-retry")),Oe=l(require("lodash"));var Sr=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Pr=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",xr=()=>3e4;var Re=require("axios"),Te=l(require("pretty-ms"));var br=c.extend("http"),vt=t=>[3*1e3,15*1e3,30*1e3][t-1],wr=t=>(br("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,Re.isAxiosError)(t)}),"code"in t&&t.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(t.code)?!0:(0,Re.isAxiosError)(t)?[429,502,503,504].includes(t.response?.status??0):!1),Ft=()=>3;function Nr(t,e,r){br("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,Te.default)(vt(t)),t,Ft()),R("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,e.message,(0,Te.default)(vt(t)),t,Ft())}var _e=c.extend("http");var he={api:null,restApi:null};function Us(t){let e=t==="api"?Sr():Pr();_e("client base url: %s",e);let r=Lr.default.create({baseURL:e,timeout:xr(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":mt}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let i={...Oe.default.pick(o,"method","url","headers"),baseURL:e,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?_e("network request retry: %o",Br({...i,baseURL:e,isRetry:!0})):_e("network request: %o",Br(i)),o}),(0,Mr.default)(r,{retries:Ft(),retryCondition:wr,retryDelay:vt,shouldResetTimeout:!0,onRetry:Nr}),r}function vr(t){return he[t]===null&&(he[t]=Us(t)),he[t]}function Br(t){return{method:t.method,baseURL:t.baseURL,url:t.url,data:t.isRetry?"<retry>":Ds(t.data),params:t.isRetry?"<retry>":t.params,headers:{...t.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Ds(t){return t?.results?.raw?T({...t,results:{...t.results,raw:"***"}}):Oe.default.isPlainObject(t)?T(t):t}var Gr=require("axios"),Hr=l(require("lodash")),S=require("ts-pattern");function Kr(t){(0,S.match)(t).when(Gr.isAxiosError,Ss).otherwise(()=>{R("Unexpected error while sending network request: %s",t)})}function Ss(t){return(0,S.match)(t).with({code:"ECONNABORTED"},()=>{R("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{R("Network connection aborted")}).with({code:"ECONNRESET"},()=>{R("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{R("Network connection timeout")}).with({response:S.P.not(S.P.nullish)},e=>{Ps(e,{status:e.response.status,data:e.response.data})}).otherwise(e=>{R(`[currents] Unexpected network error: %s
6
6
  %O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status,payload:t.response?.config.data})})}function Ps(t,{status:e,data:r}){(0,S.match)(e).with(401,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 400 Bad Request from cloud service:
7
- %o`,r)}).with(404,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 404 Not Found from cloud service`)}).with(429,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{bs(t,r)}).otherwise(()=>{R(`[currents] Unexpected network response: %s
8
- %O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}function bs(t,e){(0,S.match)(e).with({code:vr.MISSING_SUITE,message:S.P.string,errors:S.P.array(S.P.string)},async r=>{let{message:o,errors:n}=r;bt(1),I(...Fr(o,n))}).with({code:vr.RUN_EXPIRED,message:S.P.string},r=>{R(r.message)}).with({message:S.P.string,errors:S.P.array(S.P.string)},r=>{let{message:o,errors:n}=r;bt(1),R(...Fr(o,n)),bt(1)}).otherwise(()=>{R(`[currents] Unexpected network response: %s
9
- %O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}var vr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Fr(t,e){return Gr.default.isString(t)?e?.length===0?[t]:[t,`
7
+ %o`,r)}).with(404,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 404 Not Found from cloud service`)}).with(429,()=>{R(`[currents] ${t.response?.config.method} ${t.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{xs(t,r)}).otherwise(()=>{R(`[currents] Unexpected network response: %s
8
+ %O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}function xs(t,e){(0,S.match)(e).with({code:Fr.MISSING_SUITE,message:S.P.string,errors:S.P.array(S.P.string)},async r=>{let{message:o,errors:n}=r;xt(1),I(...kr(o,n))}).with({code:Fr.RUN_EXPIRED,message:S.P.string},r=>{R(r.message)}).with({message:S.P.string,errors:S.P.array(S.P.string)},r=>{let{message:o,errors:n}=r;xt(1),R(...kr(o,n)),xt(1)}).otherwise(()=>{R(`[currents] Unexpected network response: %s
9
+ %O`,t.message,{method:t.response?.config.method,url:t.response?.config.url,status:t.response?.status})})}var Fr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function kr(t,e){return Hr.default.isString(t)?e?.length===0?[t]:[t,`
10
10
  ${(e??[]).map(r=>` - ${r}`).join(`
11
11
  `)}
12
- `]:["Unexpected network error"]}var Kr=c.extend("http");async function H(t,e,r=Mr){try{let o=await r(t).request(e);return Kr("network response: %o",{...jr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Kr("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}),Hr(n),n}}var ut=c.extend("api");async function $r(t){try{return ut("Request params: %o",T(t)),H("api",{url:"cache/upload",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to create cache:",e),e}}async function Vr(t){try{return ut("Request params: %o",t),H("api",{url:"cache/v2/download",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to retrieve cache:",e),e}}async function Yr(t){try{return ut("Request params: %o",t),H("api",{url:"cache/meta",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to retrieve reference cache meta:",e),e}}var xs=c.extend("api");async function Jr(t){return xs("Cancel params: %o",T(t)),(await H("api",{url:"v1/runs/cancel",method:"POST",data:t})).data}var qr=require("util"),Qr=require("zlib");var Wr=c.extend("api"),ws=(0,qr.promisify)(Qr.gzip);async function Xr(t){try{Wr("Run params: %o",T(t));let e=await Ns(JSON.stringify(t));return H("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:e}).then(r=>r.data)}catch(e){throw Wr("Failed to create the run:",e),e}}async function Ns(t){try{return await ws(t)}catch(e){throw I("Failed to compress run payload:",e),e}}var zr=c.extend("api");async function Zr(t,e){try{return zr("Run params: %o",e),H("restApi",{url:"v1/runs/find",params:e,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}}).then(r=>r.data)}catch(r){throw zr("Failed to obtain run data:",r),r}}async function Ae(){try{let t=Mt();if(!t)throw new Error("Config is missing!");let e=t.ciBuildId?{projectId:t.projectId,ciBuildId:t.ciBuildId,pwLastRun:t.pwLastRun}:{projectId:t.projectId,branch:t.branch,tag:t.tag,pwLastRun:t.pwLastRun},r=await Zr(t.apiKey,e);await Bs(t.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,t)}catch(t){throw c("Failed to get run data"),t}}async function Bs(t,e){let r=JSON.stringify(t,null,2);e.output?(await Rr(e.output),await(0,to.writeFile)(e.output,r,"utf-8"),O(`Successfully written to ${e.output}`)):O(r)}var Go=require("axios"),He=l(require("path"));var P=require("@commander-js/extra-typings");var Ls={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ms={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},path:{name:"Paths to cache",cli:"--path"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue when upload path missing",cli:"--continue"}},vs={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue on cache miss",cli:"--continue"}},z={...Ls,...Ms,...vs};function Ue(){return{recordKey:process.env[z.recordKey.env],debug:process.env[z.debug.env]}}var eo=c.extend("config"),ro=["recordKey"],at;function oo(t){at={type:"SET_COMMAND_CONFIG",values:M(z,ro,Ue,t)},eo("Resolved config: %o",{...at,values:T(at.values)})}function no(t){at={type:"GET_COMMAND_CONFIG",values:M(z,ro,Ue,t)},eo("Resolved config: %o",{...at,values:T(at.values)})}function Z(){return at}function io(t){return{recordKey:t.key,id:t.id,preset:t.preset,outputDir:t.outputDir,presetOutput:t.presetOutput,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}function so(t){return{recordKey:t.key,id:t.id,preset:t.preset,pwOutputDir:t.pwOutputDir,path:t.path,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}var ao=require("@commander-js/extra-typings");function dt(t,e=[]){return t?e.concat(t.split(",").map(r=>r.trim())):e}async function N(t,e){try{e.debug&&dr(),await t(e),process.exit(0)}catch(r){I(r.message);let o=r instanceof ao.CommanderError?r.exitCode:1;process.exit(o)}}var De=new P.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(_(z,"recordKey")),Se=new P.Option("--debug","Enable debug logging").env(_(z,"debug")).default(!1),Pe=new P.Option("--id <id>","The ID the data is saved under in the cache"),co=new P.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(dt),kt=(e=>(e.lastRun="last-run",e))(kt||{}),be=new P.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(kt)),po=new P.Option("--output-dir <dir>","Path to the directory where output will be written"),mo=new P.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ht=".currents_env",uo=new P.Option("--preset-output <path>","Path to the file containing the preset output").default(ht),xe=new P.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(fo),we=new P.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(fo);function fo(t){let e=parseInt(t,10);if(isNaN(e)||e<=0||!Number.isInteger(e))throw new P.InvalidArgumentError("A positive integer is expected.");return e}var lo=new P.Option("--continue","Continue the script execution if the cache is not found").default(!1),go=new P.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var h=require("lodash");var Gt=c.extend("ci"),Fs=(t,...e)=>(0,h.chain)(e).compact().join(t).value(),ks=(t,e)=>(0,h.set)(t,(0,h.camelCase)(e),process.env[e]),A=t=>(0,h.transform)(t,ks,{}),Gs=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Hs=()=>(0,h.some)(process.env,(t,e)=>/^CODEBUILD_/.test(e)),Ks=()=>process.env.bamboo_buildNumber,js=()=>(0,h.some)(process.env,(t,e)=>/^CONCOURSE_/.test(e)),$s=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Vs=()=>!!(process.env.BUILD_ID&&process.env.PROJECT_ID&&process.env.PROJECT_NUMBER||process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT),Ys=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Js={appveyor:"APPVEYOR",azure:Gs,awsCodeBuild:Hs,bamboo:Ks,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",concourse:js,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:$s,goCD:"GO_JOB_NAME",jenkins:Ys,googleCloud:Vs,semaphore:"SEMAPHORE",teamcity:"TEAMCITY_VERSION",travis:"TRAVIS",netlify:"NETLIFY"};function Ws(){let{env:t}=process;return(0,h.findKey)(Js,e=>{if((0,h.isString)(e))return t[e];if((0,h.isFunction)(e))return e()})}var Eo=()=>({appveyor:A(["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:A(["AGENT_BUILDDIRECTORY","AGENT_ID","AGENT_JOBNAME","AGENT_JOBSTATUS","AGENT_MACHINENAME","AGENT_NAME","AGENT_OS","AGENT_OSARCHITECTURE","BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_BUILDURI","BUILD_CONTAINERID","BUILD_CRONSCHEDULE_DISPLAYNAME","BUILD_DEFINITIONNAME","BUILD_DEFINITIONVERSION","BUILD_QUEUEDBY","BUILD_QUEUEDBYID","BUILD_REASON","BUILD_REPOSITORY_ID","BUILD_REPOSITORY_NAME","BUILD_REPOSITORY_PROVIDER","BUILD_REPOSITORY_URI","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILD_SOURCEBRANCH","BUILD_SOURCEBRANCHNAME","BUILD_SOURCESDIRECTORY","BUILD_SOURCEVERSION","BUILD_SOURCEVERSIONAUTHOR","BUILD_SOURCEVERSIONMESSAGE","BUILD_STAGINGDIRECTORY","BUILD_TRIGGEREDBY_BUILDID","BUILD_TRIGGEREDBY_BUILDNUMBER","BUILD_TRIGGEREDBY_DEFINITIONID","BUILD_TRIGGEREDBY_DEFINITIONNAME","BUILD_TRIGGEREDBY_PROJECTID","COMMON_TESTRESULTSDIRECTORY","PIPELINE_WORKSPACE","SYSTEM_COLLECTIONID","SYSTEM_COLLECTIONURI","SYSTEM_DEFAULTWORKINGDIRECTORY","SYSTEM_DEFINITIONID","SYSTEM_HOSTTYPE","SYSTEM_JOBATTEMPT","SYSTEM_JOBDISPLAYNAME","SYSTEM_JOBID","SYSTEM_JOBNAME","SYSTEM_PHASEATTEMPT","SYSTEM_PHASEDISPLAYNAME","SYSTEM_PHASENAME","SYSTEM_PLANID","SYSTEM_PULLREQUEST_ISFORK","SYSTEM_PULLREQUEST_PULLREQUESTID","SYSTEM_PULLREQUEST_PULLREQUESTNUMBER","SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI","SYSTEM_PULLREQUEST_SOURCEBRANCH","SYSTEM_PULLREQUEST_SOURCECOMMITID","SYSTEM_PULLREQUEST_TARGETBRANCH","SYSTEM_PULLREQUEST_TARGETBRANCHNAME","SYSTEM_STAGEATTEMPT","SYSTEM_STAGEDISPLAYNAME","SYSTEM_STAGENAME","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","SYSTEM_TEAMPROJECT","SYSTEM_TEAMPROJECTID","SYSTEM_TIMELINEID"]),awsCodeBuild:A(["AWS_DEFAULT_REGION","AWS_REGION","CODEBUILD_BATCH_BUILD_IDENTIFIER","CODEBUILD_BUILD_ARN","CODEBUILD_BUILD_ID","CODEBUILD_BUILD_IMAGE","CODEBUILD_BUILD_NUMBER","CODEBUILD_BUILD_SUCCEEDING","CODEBUILD_BUILD_URL","CODEBUILD_INITIATOR","CODEBUILD_PROJECT_ARN","CODEBUILD_PUBLIC_BUILD_URL","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION","CODEBUILD_SRC_DIR","CODEBUILD_START_TIME","CODEBUILD_WEBHOOK_ACTOR_ACCOUNT_ID","CODEBUILD_WEBHOOK_BASE_REF","CODEBUILD_WEBHOOK_EVENT","CODEBUILD_WEBHOOK_HEAD_REF","CODEBUILD_WEBHOOK_MERGE_COMMIT","CODEBUILD_WEBHOOK_PREV_COMMIT","CODEBUILD_WEBHOOK_TRIGGER","CODEBUILD_WEBHOOK_LABEL","CODEBUILD_WEBHOOK_RUN_ID","CODEBUILD_WEBHOOK_JOB_ID","CODEBUILD_WEBHOOK_WORKFLOW_NAME","CODEBUILD_RUNNER_OWNER","CODEBUILD_RUNNER_REPO","CODEBUILD_RUNNER_REPO_DOMAIN","CODEBUILD_RUNNER_WITH_BUILDSPEC"]),bamboo:A(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:A(["CI","BITBUCKET_WORKSPACE","BITBUCKET_REPO_SLUG","BITBUCKET_REPO_UUID","BITBUCKET_REPO_FULL_NAME","BITBUCKET_REPO_IS_PRIVATE","BITBUCKET_REPO_OWNER","BITBUCKET_REPO_OWNER_UUID","BITBUCKET_PROJECT_KEY","BITBUCKET_PROJECT_UUID","BITBUCKET_BUILD_NUMBER","BITBUCKET_PIPELINE_UUID","BITBUCKET_STEP_UUID","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_STEP_TRIGGERER_UUID","BITBUCKET_PARALLEL_STEP","BITBUCKET_PARALLEL_STEP_COUNT","BITBUCKET_CLONE_DIR","BITBUCKET_COMMIT","BITBUCKET_BRANCH","BITBUCKET_TAG","BITBUCKET_BOOKMARK","BITBUCKET_GIT_HTTP_ORIGIN","BITBUCKET_GIT_SSH_ORIGIN","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT","BITBUCKET_DEPLOYMENT_ENVIRONMENT","BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID","BITBUCKET_EXIT_CODE"]),buildkite:A(["BUILDKITE_ORGANIZATION_SLUG","BUILDKITE_PIPELINE_ID","BUILDKITE_PIPELINE_NAME","BUILDKITE_PIPELINE_SLUG","BUILDKITE_PIPELINE_DEFAULT_BRANCH","BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_BRANCH","BUILDKITE_TAG","BUILDKITE_COMMIT","BUILDKITE_MESSAGE","BUILDKITE_BUILD_AUTHOR","BUILDKITE_BUILD_AUTHOR_EMAIL","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_LABEL","BUILDKITE_COMMAND","BUILDKITE_STEP_ID","BUILDKITE_STEP_KEY","BUILDKITE_PARALLEL_JOB","BUILDKITE_PARALLEL_JOB_COUNT","BUILDKITE_RETRY_COUNT","BUILDKITE_COMPUTE_TYPE","BUILDKITE_CLUSTER_NAME","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH","BUILDKITE_PULL_REQUEST_DRAFT","BUILDKITE_PULL_REQUEST_LABELS","BUILDKITE_MERGE_QUEUE_BASE_BRANCH","BUILDKITE_MERGE_QUEUE_BASE_COMMIT","BUILDKITE_REBUILT_FROM_BUILD_ID","BUILDKITE_REBUILT_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_ID","BUILDKITE_TRIGGERED_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG"]),circle:A(["CI","CIRCLECI","CIRCLE_BRANCH","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PREVIOUS_BUILD_NUM","CIRCLE_JOB","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_JOB_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PIPELINE_ID","CIRCLE_ORGANIZATION_ID","CIRCLE_PROJECT_ID","CIRCLE_PROJECT_REPONAME","CIRCLE_PROJECT_USERNAME","CIRCLE_REPOSITORY_URL","CIRCLE_WORKING_DIRECTORY","CIRCLE_SHA1","CIRCLE_TAG","CIRCLE_USERNAME","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_PULL_REQUEST","CIRCLE_PULL_REQUESTS","CI_PULL_REQUEST"]),concourse:A(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:A(["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:A(["DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:A(["CI","GITHUB_ACTIONS","GITHUB_WORKFLOW","GITHUB_WORKFLOW_REF","GITHUB_WORKFLOW_SHA","GITHUB_ACTION","GITHUB_ACTION_PATH","GITHUB_ACTION_REPOSITORY","GITHUB_JOB","GITHUB_EVENT_NAME","GITHUB_EVENT_PATH","GITHUB_RUN_ID","GITHUB_RUN_NUMBER","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REPOSITORY_OWNER","GITHUB_REPOSITORY_OWNER_ID","GITHUB_REF","GITHUB_REF_NAME","GITHUB_REF_TYPE","GITHUB_REF_PROTECTED","GITHUB_BASE_REF","GITHUB_HEAD_REF","GITHUB_SHA","GITHUB_ACTOR","GITHUB_ACTOR_ID","GITHUB_TRIGGERING_ACTOR","GITHUB_SERVER_URL","GITHUB_API_URL","GITHUB_GRAPHQL_URL","GITHUB_WORKSPACE","GITHUB_RETENTION_DAYS","RUNNER_OS","RUNNER_ARCH","RUNNER_NAME","RUNNER_ENVIRONMENT","RUNNER_DEBUG"]),gitlab:A(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT","CI_MERGE_REQUEST_IID","CI_MERGE_REQUEST_PROJECT_URL","CI_MERGE_REQUEST_TITLE","CI_MERGE_REQUEST_SOURCE_BRANCH_NAME","CI_MERGE_REQUEST_TARGET_BRANCH_NAME","CI_OPEN_MERGE_REQUESTS"]),goCD:A(["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:A(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:A(["BRANCH_NAME","BUILD_DISPLAY_NAME","BUILD_ID","BUILD_NUMBER","BUILD_TAG","BUILD_URL","CHANGE_AUTHOR","CHANGE_AUTHOR_DISPLAY_NAME","CHANGE_AUTHOR_EMAIL","CHANGE_BRANCH","CHANGE_FORK","CHANGE_ID","CHANGE_TARGET","CHANGE_TITLE","CHANGE_URL","CI","EXECUTOR_NUMBER","JAVA_HOME","JENKINS_HOME","JENKINS_URL","JOB_BASE_NAME","JOB_NAME","JOB_URL","NODE_LABELS","NODE_NAME","RUN_ARTIFACTS_DISPLAY_URL","RUN_CHANGES_DISPLAY_URL","TAG_NAME","WORKSPACE","WORKSPACE_TMP","GIT_AUTHOR_EMAIL","GIT_AUTHOR_NAME","GIT_BRANCH","GIT_COMMIT","GIT_COMMITTER_EMAIL","GIT_COMMITTER_NAME","GIT_LOCAL_BRANCH","GIT_PREVIOUS_COMMIT","GIT_PREVIOUS_SUCCESSFUL_COMMIT","GIT_URL","ghprbActualCommit","ghprbGhRepository","ghprbPullId","ghprbPullLink","ghprbSourceBranch","ghprbTargetBranch","ghprbTriggerAuthorLogin"]),semaphore:A(["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"]),teamcity:null,travis:A(["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"]),netlify:A(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"])}),qs=()=>{let{env:t}=process;return{appveyor:{sha:t.APPVEYOR_REPO_COMMIT,branch:t.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||t.APPVEYOR_REPO_BRANCH,message:Fs(`
13
- `,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},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},snap:null,teamcity:null,travis:{sha:t.TRAVIS_PULL_REQUEST_SHA||t.TRAVIS_COMMIT,branch:t.TRAVIS_PULL_REQUEST_BRANCH||t.TRAVIS_BRANCH,message:t.TRAVIS_COMMIT_MESSAGE},netlify:{sha:t.COMMIT_REF,branch:t.BRANCH,remoteOrigin:t.REPOSITORY_URL}}},Co=t=>{let e=Io();return e?(0,h.chain)(t()).get(e).value():{}};function Qs(){return(0,h.chain)(Eo()).omitBy(h.isNull).keys().value()}function Xs(t){return t&&Qs().includes(t)}function Io(){let t=Ws();return Gt("detected CI provider name: %s",t),t||null}function zs(){return Co(Eo)}function Ro(){return Co(qs)}function ft(t){let e=zs(),r=Io(),o=Zs(t,r);return Gt("detected CI provider: %s",r),Gt("detected CI params: %O",e),Gt("detected CI build ID: %o",o),{params:e,provider:r,ciBuildId:o}}function Zs(t,e){return t?{source:"user",value:t}:Xs(e)?{source:"server",value:null}:{source:"random",value:`auto:${Ce()}`}}var To=l(require("archiver")),_o=l(require("fs-extra")),Ne=l(require("path")),ho=l(require("unzipper"));var ta=50*1024*1024;async function Oo(t,e=ta){return new Promise((r,o)=>{let n=(0,To.default)("zip",{zlib:{level:9}}),i=[],a=0;n.on("data",m=>{i.push(m),a+=m.length,a>e&&o(new Error(`Zip size exceeded the limit of ${e} bytes`))}),n.on("warning",m=>{m.code==="ENOENT"?R(m):o(m)}),n.on("error",m=>o(m)),n.on("end",()=>{let m=Buffer.concat(i);r(m)});let p=async m=>{let f=process.cwd(),d=Ne.default.normalize(m),E=Ne.default.relative(f,d),C=await _o.default.stat(m);C.isDirectory()?n.directory(m,E):n.file(m,{name:E,stats:C})};(async m=>{for(let f of m)await p(f);await n.finalize()})(t).catch(o)})}async function yo(t,e){return ho.default.Open.buffer(t).then(r=>r.extract({path:e,concurrency:3}))}var Po=l(require("async-retry")),bo=require("axios");var Ao=l(require("axios")),Uo=require("https-proxy-agent"),Do=l(require("proxy-from-env"));var ea=c.extend("axios");function Be(t={}){let e=Ao.default.create(t);return e.interceptors.request.use(r=>{let o={...r},n=e.getUri(r),i=Do.default.getProxyForUrl(n);return i&&(ea("Using HTTP proxy %s for %s ",i,n),o.proxy=!1,o.httpsAgent=ra(i)),o}),e}var Ht=null;function ra(t){return Ht||(Ht=new Uo.HttpsProxyAgent(t),Ht)}var jt=c.extend("upload"),Kt=5;async function Le(t,e,r){return jt("Uploading buffer %s",t.name,{buffer:Buffer.byteLength(t.buffer)}),na(t.buffer,t.uploadUrl,e,r)}async function oa(t,e,r,o){return Be().request({method:"put",url:e,data:t,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Me(t,e){try{let r=await Be().get(t,{responseType:"arraybuffer",onDownloadProgress:e});return Buffer.from(r.data)}catch(r){throw(0,bo.isAxiosError)(r)&&jt("Failed to download %s: %s",t,r.message),r}}async function na(...t){await(0,Po.default)(async()=>{await oa(...t)},{retries:Kt,onRetry:(e,r)=>{if(jt("Upload failed %d out of %d attempts: %s",r,Kt,e.message),r===Kt){I(`Cannot upload after ${r} times: ${e.message}`);return}R(`Upload failed ${r} out of ${Kt} attempts: ${e.message}`)}})}var ve=t=>({total:e,loaded:r})=>{};function So(t){return t/1e3/1e3}var Ge=l(require("lodash"));var tt=l(require("path")),ke=l(require("globby"));var xo=require("lodash");function Fe({config:t,cacheId:e,orgId:r,path:o,ci:n,cacheKey:i,metaCacheKey:a}){let p={id:e,orgId:r,config:(0,xo.omit)(t,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString(),cacheKey:i,metaCacheKey:a};return Buffer.from(JSON.stringify(p))}function wo(t,e){t instanceof Error?ot("%s. %s.",e,t.message):ot("%s. %s.",e,"Unknown error")}var No=async t=>{let e=tt.default.resolve(t??"./test-results"),r=[tt.default.posix.join(e.replace(/\\/g,"/"),"**/.last-run.json"),tt.default.posix.join(e.replace(/\\/g,"/"),".last-run.json")];return ke.sync(r)},Bo=async(t=[])=>{let e=ia(t),r=[];return e.length>0&&r.push(...ke.sync(t.map(o=>o.replace(/\\/g,"/")))),r};function ia(t){let e=process.cwd();return t.filter(r=>{let o=tt.default.resolve(r),n=tt.default.relative(e,o);return r.startsWith("..")||tt.default.isAbsolute(n)?(wo(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function $t(t){return t?t.path.some(e=>tt.default.basename(e)===".last-run.json"):!1}async function Lo(t,e){switch(e.provider){case"githubActions":await Fo(t,e);break;case"gitlab":await vo(t,e);break;case"circle":await ko(t,e);break;default:break}}async function Mo(t,e,r){switch(e.provider){case"githubActions":await Fo(t,e,r);break;case"gitlab":await vo(t,e,r);break;case"circle":await ko(t,e,r);break;default:break}}async function vo(t,e,r=null){let o=e.params,n=r?.ci.params,a=(n?lt(n.runAttempt,0):0)+1,p=lt(o.ciNodeIndex,1),u=lt(o.ciNodeTotal,1),m=$t(r),f=a>1&&m,d=f?"--last-failed":"",E="";u>1&&(E=f?"--shard=1/1":`--shard=${p}/${u}`);let C=[d,E].filter(Boolean).join(" ");await it(t.presetOutput??ht,`EXTRA_PW_FLAGS="${C}"
12
+ `]:["Unexpected network error"]}var jr=c.extend("http");async function H(t,e,r=vr){try{let o=await r(t).request(e);return jr("network response: %o",{...$r.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw jr("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}),Kr(n),n}}var ut=c.extend("api");async function Vr(t){try{return ut("Request params: %o",T(t)),H("api",{url:"cache/upload",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to create cache:",e),e}}async function Yr(t){try{return ut("Request params: %o",t),H("api",{url:"cache/v2/download",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to retrieve cache:",e),e}}async function Jr(t){try{return ut("Request params: %o",t),H("api",{url:"cache/meta",method:"POST",data:t}).then(e=>e.data)}catch(e){throw ut("Failed to retrieve reference cache meta:",e),e}}var bs=c.extend("api");async function Wr(t){return bs("Cancel params: %o",T(t)),(await H("api",{url:"v1/runs/cancel",method:"POST",data:t})).data}var Qr=require("util"),Xr=require("zlib");var qr=c.extend("api"),ws=(0,Qr.promisify)(Xr.gzip);async function zr(t){try{qr("Run params: %o",T(t));let e=await Ns(JSON.stringify(t));return H("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:e}).then(r=>r.data)}catch(e){throw qr("Failed to create the run:",e),e}}async function Ns(t){try{return await ws(t)}catch(e){throw I("Failed to compress run payload:",e),e}}var Zr=c.extend("api");async function to(t,e){try{return Zr("Run params: %o",e),H("restApi",{url:"v1/runs/find",params:e,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}}).then(r=>r.data)}catch(r){throw Zr("Failed to obtain run data:",r),r}}async function Ae(){try{let t=Mt();if(!t)throw new Error("Config is missing!");let e=t.ciBuildId?{projectId:t.projectId,ciBuildId:t.ciBuildId,pwLastRun:t.pwLastRun}:{projectId:t.projectId,branch:t.branch,tag:t.tag,pwLastRun:t.pwLastRun},r=await to(t.apiKey,e);await Bs(t.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,t)}catch(t){throw c("Failed to get run data"),t}}async function Bs(t,e){let r=JSON.stringify(t,null,2);e.output?(await Tr(e.output),await(0,eo.writeFile)(e.output,r,"utf-8"),O(`Successfully written to ${e.output}`)):O(r)}var Ho=require("axios"),He=l(require("path"));var P=require("@commander-js/extra-typings");var Ls={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ms={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},path:{name:"Paths to cache",cli:"--path"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue when upload path missing",cli:"--continue"}},vs={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"},continue:{name:"Continue on cache miss",cli:"--continue"}},z={...Ls,...Ms,...vs};function Ue(){return{recordKey:process.env[z.recordKey.env],debug:process.env[z.debug.env]}}var ro=c.extend("config"),oo=["recordKey"],at;function no(t){at={type:"SET_COMMAND_CONFIG",values:M(z,oo,Ue,t)},ro("Resolved config: %o",{...at,values:T(at.values)})}function io(t){at={type:"GET_COMMAND_CONFIG",values:M(z,oo,Ue,t)},ro("Resolved config: %o",{...at,values:T(at.values)})}function Z(){return at}function so(t){return{recordKey:t.key,id:t.id,preset:t.preset,outputDir:t.outputDir,presetOutput:t.presetOutput,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}function ao(t){return{recordKey:t.key,id:t.id,preset:t.preset,pwOutputDir:t.pwOutputDir,path:t.path,debug:t.debug,matrixIndex:t.matrixIndex,matrixTotal:t.matrixTotal,continue:t.continue}}var co=require("@commander-js/extra-typings");function dt(t,e=[]){return t?e.concat(t.split(",").map(r=>r.trim())):e}async function N(t,e){try{e.debug&&fr(),await t(e),process.exit(0)}catch(r){I(r.message);let o=r instanceof co.CommanderError?r.exitCode:1;process.exit(o)}}var De=new P.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(_(z,"recordKey")),Se=new P.Option("--debug","Enable debug logging").env(_(z,"debug")).default(!1),Pe=new P.Option("--id <id>","The ID the data is saved under in the cache"),po=new P.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(dt),kt=(e=>(e.lastRun="last-run",e))(kt||{}),xe=new P.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(kt)),mo=new P.Option("--output-dir <dir>","Path to the directory where output will be written"),uo=new P.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),ht=".currents_env",fo=new P.Option("--preset-output <path>","Path to the file containing the preset output").default(ht),be=new P.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(lo),we=new P.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(lo);function lo(t){let e=parseInt(t,10);if(isNaN(e)||e<=0||!Number.isInteger(e))throw new P.InvalidArgumentError("A positive integer is expected.");return e}var go=new P.Option("--continue","Continue the script execution if the cache is not found").default(!1),Eo=new P.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var h=require("lodash");var Gt=c.extend("ci"),Fs=(t,...e)=>(0,h.chain)(e).compact().join(t).value(),ks=(t,e)=>(0,h.set)(t,(0,h.camelCase)(e),process.env[e]),A=t=>(0,h.transform)(t,ks,{}),Gs=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Hs=()=>(0,h.some)(process.env,(t,e)=>/^CODEBUILD_/.test(e)),Ks=()=>process.env.bamboo_buildNumber,js=()=>(0,h.some)(process.env,(t,e)=>/^CONCOURSE_/.test(e)),$s=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Vs=()=>!!(process.env.BUILD_ID&&process.env.PROJECT_ID&&process.env.PROJECT_NUMBER||process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT),Ys=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Js={appveyor:"APPVEYOR",azure:Gs,awsCodeBuild:Hs,bamboo:Ks,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",concourse:js,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:$s,goCD:"GO_JOB_NAME",jenkins:Ys,googleCloud:Vs,semaphore:"SEMAPHORE",teamcity:"TEAMCITY_VERSION",travis:"TRAVIS",netlify:"NETLIFY"};function Ws(){let{env:t}=process;return(0,h.findKey)(Js,e=>{if((0,h.isString)(e))return t[e];if((0,h.isFunction)(e))return e()})}var Co=()=>({appveyor:A(["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:A(["AGENT_BUILDDIRECTORY","AGENT_ID","AGENT_JOBNAME","AGENT_JOBSTATUS","AGENT_MACHINENAME","AGENT_NAME","AGENT_OS","AGENT_OSARCHITECTURE","BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_BUILDURI","BUILD_CONTAINERID","BUILD_CRONSCHEDULE_DISPLAYNAME","BUILD_DEFINITIONNAME","BUILD_DEFINITIONVERSION","BUILD_QUEUEDBY","BUILD_QUEUEDBYID","BUILD_REASON","BUILD_REPOSITORY_ID","BUILD_REPOSITORY_NAME","BUILD_REPOSITORY_PROVIDER","BUILD_REPOSITORY_URI","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILD_SOURCEBRANCH","BUILD_SOURCEBRANCHNAME","BUILD_SOURCESDIRECTORY","BUILD_SOURCEVERSION","BUILD_SOURCEVERSIONAUTHOR","BUILD_SOURCEVERSIONMESSAGE","BUILD_STAGINGDIRECTORY","BUILD_TRIGGEREDBY_BUILDID","BUILD_TRIGGEREDBY_BUILDNUMBER","BUILD_TRIGGEREDBY_DEFINITIONID","BUILD_TRIGGEREDBY_DEFINITIONNAME","BUILD_TRIGGEREDBY_PROJECTID","COMMON_TESTRESULTSDIRECTORY","PIPELINE_WORKSPACE","SYSTEM_COLLECTIONID","SYSTEM_COLLECTIONURI","SYSTEM_DEFAULTWORKINGDIRECTORY","SYSTEM_DEFINITIONID","SYSTEM_HOSTTYPE","SYSTEM_JOBATTEMPT","SYSTEM_JOBDISPLAYNAME","SYSTEM_JOBID","SYSTEM_JOBNAME","SYSTEM_PHASEATTEMPT","SYSTEM_PHASEDISPLAYNAME","SYSTEM_PHASENAME","SYSTEM_PLANID","SYSTEM_PULLREQUEST_ISFORK","SYSTEM_PULLREQUEST_PULLREQUESTID","SYSTEM_PULLREQUEST_PULLREQUESTNUMBER","SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI","SYSTEM_PULLREQUEST_SOURCEBRANCH","SYSTEM_PULLREQUEST_SOURCECOMMITID","SYSTEM_PULLREQUEST_TARGETBRANCH","SYSTEM_PULLREQUEST_TARGETBRANCHNAME","SYSTEM_STAGEATTEMPT","SYSTEM_STAGEDISPLAYNAME","SYSTEM_STAGENAME","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","SYSTEM_TEAMPROJECT","SYSTEM_TEAMPROJECTID","SYSTEM_TIMELINEID"]),awsCodeBuild:A(["AWS_DEFAULT_REGION","AWS_REGION","CODEBUILD_BATCH_BUILD_IDENTIFIER","CODEBUILD_BUILD_ARN","CODEBUILD_BUILD_ID","CODEBUILD_BUILD_IMAGE","CODEBUILD_BUILD_NUMBER","CODEBUILD_BUILD_SUCCEEDING","CODEBUILD_BUILD_URL","CODEBUILD_INITIATOR","CODEBUILD_PROJECT_ARN","CODEBUILD_PUBLIC_BUILD_URL","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION","CODEBUILD_SRC_DIR","CODEBUILD_START_TIME","CODEBUILD_WEBHOOK_ACTOR_ACCOUNT_ID","CODEBUILD_WEBHOOK_BASE_REF","CODEBUILD_WEBHOOK_EVENT","CODEBUILD_WEBHOOK_HEAD_REF","CODEBUILD_WEBHOOK_MERGE_COMMIT","CODEBUILD_WEBHOOK_PREV_COMMIT","CODEBUILD_WEBHOOK_TRIGGER","CODEBUILD_WEBHOOK_LABEL","CODEBUILD_WEBHOOK_RUN_ID","CODEBUILD_WEBHOOK_JOB_ID","CODEBUILD_WEBHOOK_WORKFLOW_NAME","CODEBUILD_RUNNER_OWNER","CODEBUILD_RUNNER_REPO","CODEBUILD_RUNNER_REPO_DOMAIN","CODEBUILD_RUNNER_WITH_BUILDSPEC"]),bamboo:A(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:A(["CI","BITBUCKET_WORKSPACE","BITBUCKET_REPO_SLUG","BITBUCKET_REPO_UUID","BITBUCKET_REPO_FULL_NAME","BITBUCKET_REPO_IS_PRIVATE","BITBUCKET_REPO_OWNER","BITBUCKET_REPO_OWNER_UUID","BITBUCKET_PROJECT_KEY","BITBUCKET_PROJECT_UUID","BITBUCKET_BUILD_NUMBER","BITBUCKET_PIPELINE_UUID","BITBUCKET_STEP_UUID","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_STEP_TRIGGERER_UUID","BITBUCKET_PARALLEL_STEP","BITBUCKET_PARALLEL_STEP_COUNT","BITBUCKET_CLONE_DIR","BITBUCKET_COMMIT","BITBUCKET_BRANCH","BITBUCKET_TAG","BITBUCKET_BOOKMARK","BITBUCKET_GIT_HTTP_ORIGIN","BITBUCKET_GIT_SSH_ORIGIN","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT","BITBUCKET_DEPLOYMENT_ENVIRONMENT","BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID","BITBUCKET_EXIT_CODE"]),buildkite:A(["BUILDKITE_ORGANIZATION_SLUG","BUILDKITE_PIPELINE_ID","BUILDKITE_PIPELINE_NAME","BUILDKITE_PIPELINE_SLUG","BUILDKITE_PIPELINE_DEFAULT_BRANCH","BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_BRANCH","BUILDKITE_TAG","BUILDKITE_COMMIT","BUILDKITE_MESSAGE","BUILDKITE_BUILD_AUTHOR","BUILDKITE_BUILD_AUTHOR_EMAIL","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_LABEL","BUILDKITE_COMMAND","BUILDKITE_STEP_ID","BUILDKITE_STEP_KEY","BUILDKITE_PARALLEL_JOB","BUILDKITE_PARALLEL_JOB_COUNT","BUILDKITE_RETRY_COUNT","BUILDKITE_COMPUTE_TYPE","BUILDKITE_CLUSTER_NAME","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH","BUILDKITE_PULL_REQUEST_DRAFT","BUILDKITE_PULL_REQUEST_LABELS","BUILDKITE_MERGE_QUEUE_BASE_BRANCH","BUILDKITE_MERGE_QUEUE_BASE_COMMIT","BUILDKITE_REBUILT_FROM_BUILD_ID","BUILDKITE_REBUILT_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_ID","BUILDKITE_TRIGGERED_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG"]),circle:A(["CI","CIRCLECI","CIRCLE_BRANCH","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PREVIOUS_BUILD_NUM","CIRCLE_JOB","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_JOB_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PIPELINE_ID","CIRCLE_ORGANIZATION_ID","CIRCLE_PROJECT_ID","CIRCLE_PROJECT_REPONAME","CIRCLE_PROJECT_USERNAME","CIRCLE_REPOSITORY_URL","CIRCLE_WORKING_DIRECTORY","CIRCLE_SHA1","CIRCLE_TAG","CIRCLE_USERNAME","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_PULL_REQUEST","CIRCLE_PULL_REQUESTS","CI_PULL_REQUEST"]),concourse:A(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:A(["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:A(["DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:A(["CI","GITHUB_ACTIONS","GITHUB_WORKFLOW","GITHUB_WORKFLOW_REF","GITHUB_WORKFLOW_SHA","GITHUB_ACTION","GITHUB_ACTION_PATH","GITHUB_ACTION_REPOSITORY","GITHUB_JOB","GITHUB_EVENT_NAME","GITHUB_EVENT_PATH","GITHUB_RUN_ID","GITHUB_RUN_NUMBER","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REPOSITORY_OWNER","GITHUB_REPOSITORY_OWNER_ID","GITHUB_REF","GITHUB_REF_NAME","GITHUB_REF_TYPE","GITHUB_REF_PROTECTED","GITHUB_BASE_REF","GITHUB_HEAD_REF","GITHUB_SHA","GITHUB_ACTOR","GITHUB_ACTOR_ID","GITHUB_TRIGGERING_ACTOR","GITHUB_SERVER_URL","GITHUB_API_URL","GITHUB_GRAPHQL_URL","GITHUB_WORKSPACE","GITHUB_RETENTION_DAYS","RUNNER_OS","RUNNER_ARCH","RUNNER_NAME","RUNNER_ENVIRONMENT","RUNNER_DEBUG"]),gitlab:A(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT","CI_MERGE_REQUEST_IID","CI_MERGE_REQUEST_PROJECT_URL","CI_MERGE_REQUEST_TITLE","CI_MERGE_REQUEST_SOURCE_BRANCH_NAME","CI_MERGE_REQUEST_TARGET_BRANCH_NAME","CI_OPEN_MERGE_REQUESTS"]),goCD:A(["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:A(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:A(["BRANCH_NAME","BUILD_DISPLAY_NAME","BUILD_ID","BUILD_NUMBER","BUILD_TAG","BUILD_URL","CHANGE_AUTHOR","CHANGE_AUTHOR_DISPLAY_NAME","CHANGE_AUTHOR_EMAIL","CHANGE_BRANCH","CHANGE_FORK","CHANGE_ID","CHANGE_TARGET","CHANGE_TITLE","CHANGE_URL","CI","EXECUTOR_NUMBER","JAVA_HOME","JENKINS_HOME","JENKINS_URL","JOB_BASE_NAME","JOB_NAME","JOB_URL","NODE_LABELS","NODE_NAME","RUN_ARTIFACTS_DISPLAY_URL","RUN_CHANGES_DISPLAY_URL","TAG_NAME","WORKSPACE","WORKSPACE_TMP","GIT_AUTHOR_EMAIL","GIT_AUTHOR_NAME","GIT_BRANCH","GIT_COMMIT","GIT_COMMITTER_EMAIL","GIT_COMMITTER_NAME","GIT_LOCAL_BRANCH","GIT_PREVIOUS_COMMIT","GIT_PREVIOUS_SUCCESSFUL_COMMIT","GIT_URL","ghprbActualCommit","ghprbGhRepository","ghprbPullId","ghprbPullLink","ghprbSourceBranch","ghprbTargetBranch","ghprbTriggerAuthorLogin"]),semaphore:A(["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"]),teamcity:null,travis:A(["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"]),netlify:A(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"])}),qs=()=>{let{env:t}=process;return{appveyor:{sha:t.APPVEYOR_REPO_COMMIT,branch:t.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||t.APPVEYOR_REPO_BRANCH,message:Fs(`
13
+ `,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},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},snap:null,teamcity:null,travis:{sha:t.TRAVIS_PULL_REQUEST_SHA||t.TRAVIS_COMMIT,branch:t.TRAVIS_PULL_REQUEST_BRANCH||t.TRAVIS_BRANCH,message:t.TRAVIS_COMMIT_MESSAGE},netlify:{sha:t.COMMIT_REF,branch:t.BRANCH,remoteOrigin:t.REPOSITORY_URL}}},Io=t=>{let e=Ro();return e?(0,h.chain)(t()).get(e).value():{}};function Qs(){return(0,h.chain)(Co()).omitBy(h.isNull).keys().value()}function Xs(t){return t&&Qs().includes(t)}function Ro(){let t=Ws();return Gt("detected CI provider name: %s",t),t||null}function zs(){return Io(Co)}function To(){return Io(qs)}function ft(t){let e=zs(),r=Ro(),o=Zs(t,r);return Gt("detected CI provider: %s",r),Gt("detected CI params: %O",e),Gt("detected CI build ID: %o",o),{params:e,provider:r,ciBuildId:o}}function Zs(t,e){return t?{source:"user",value:t}:Xs(e)?{source:"server",value:null}:{source:"random",value:`auto:${Ce()}`}}var _o=l(require("archiver")),ho=l(require("fs-extra")),Ne=l(require("path")),Oo=l(require("unzipper"));var ta=50*1024*1024;async function yo(t,e=ta){return new Promise((r,o)=>{let n=(0,_o.default)("zip",{zlib:{level:9}}),i=[],s=0;n.on("data",m=>{i.push(m),s+=m.length,s>e&&o(new Error(`Zip size exceeded the limit of ${e} bytes`))}),n.on("warning",m=>{m.code==="ENOENT"?R(m):o(m)}),n.on("error",m=>o(m)),n.on("end",()=>{let m=Buffer.concat(i);r(m)});let p=async m=>{let f=process.cwd(),d=Ne.default.normalize(m),E=Ne.default.relative(f,d),C=await ho.default.stat(m);C.isDirectory()?n.directory(m,E):n.file(m,{name:E,stats:C})};(async m=>{for(let f of m)await p(f);await n.finalize()})(t).catch(o)})}async function Ao(t,e){return Oo.default.Open.buffer(t).then(r=>r.extract({path:e,concurrency:3}))}var xo=l(require("async-retry")),bo=require("axios");var Uo=l(require("axios")),Do=require("https-proxy-agent"),So=l(require("proxy-from-env"));var ea=c.extend("axios");function Be(t={}){let e=Uo.default.create(t);return e.interceptors.request.use(r=>{let o={...r},n=e.getUri(r),i=So.default.getProxyForUrl(n);return i&&(ea("Using HTTP proxy %s for %s ",i,n),o.proxy=!1,o.httpsAgent=ra(i)),o}),e}var Ht=null;function ra(t){return Ht||(Ht=new Do.HttpsProxyAgent(t),Ht)}var jt=c.extend("upload"),Kt=5;async function Le(t,e,r){return jt("Uploading buffer %s",t.name,{buffer:Buffer.byteLength(t.buffer)}),na(t.buffer,t.uploadUrl,e,r)}async function oa(t,e,r,o){return Be().request({method:"put",url:e,data:t,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function Me(t,e){try{let r=await Be().get(t,{responseType:"arraybuffer",onDownloadProgress:e});return Buffer.from(r.data)}catch(r){throw(0,bo.isAxiosError)(r)&&jt("Failed to download %s: %s",t,r.message),r}}async function na(...t){await(0,xo.default)(async()=>{await oa(...t)},{retries:Kt,onRetry:(e,r)=>{if(jt("Upload failed %d out of %d attempts: %s",r,Kt,e.message),r===Kt){I(`Cannot upload after ${r} times: ${e.message}`);return}R(`Upload failed ${r} out of ${Kt} attempts: ${e.message}`)}})}var ve=t=>({total:e,loaded:r})=>{};function Po(t){return t/1e3/1e3}var Ge=l(require("lodash"));var tt=l(require("path")),ke=l(require("globby"));var wo=require("lodash");function Fe({config:t,cacheId:e,orgId:r,path:o,ci:n,cacheKey:i,metaCacheKey:s}){let p={id:e,orgId:r,config:(0,wo.omit)(t,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString(),cacheKey:i,metaCacheKey:s};return Buffer.from(JSON.stringify(p))}function No(t,e){t instanceof Error?ot("%s. %s.",e,t.message):ot("%s. %s.",e,"Unknown error")}var Bo=async t=>{let e=tt.default.resolve(t??"./test-results"),r=[tt.default.posix.join(e.replace(/\\/g,"/"),"**/.last-run.json"),tt.default.posix.join(e.replace(/\\/g,"/"),".last-run.json")];return ke.sync(r)},Lo=async(t=[])=>{let e=ia(t),r=[];return e.length>0&&r.push(...ke.sync(t.map(o=>o.replace(/\\/g,"/")))),r};function ia(t){let e=process.cwd();return t.filter(r=>{let o=tt.default.resolve(r),n=tt.default.relative(e,o);return r.startsWith("..")||tt.default.isAbsolute(n)?(No(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function $t(t){return t?t.path.some(e=>tt.default.basename(e)===".last-run.json"):!1}async function Mo(t,e){switch(e.provider){case"githubActions":await ko(t,e);break;case"gitlab":await Fo(t,e);break;case"circle":await Go(t,e);break;default:break}}async function vo(t,e,r){switch(e.provider){case"githubActions":await ko(t,e,r);break;case"gitlab":await Fo(t,e,r);break;case"circle":await Go(t,e,r);break;default:break}}async function Fo(t,e,r=null){let o=e.params,n=r?.ci.params,s=(n?lt(n.runAttempt,0):0)+1,p=lt(o.ciNodeIndex,1),u=lt(o.ciNodeTotal,1),m=$t(r),f=s>1&&m,d=f?"--last-failed":"",E="";u>1&&(E=f?"--shard=1/1":`--shard=${p}/${u}`);let C=[d,E].filter(Boolean).join(" ");await it(t.presetOutput??ht,`EXTRA_PW_FLAGS="${C}"
14
14
  EXTRA_PWCP_FLAGS="${d}"
15
- RUN_ATTEMPT=${a}
16
- `)}async function Fo(t,e,r=null){let{matrixIndex:o,matrixTotal:n}=t,i=e.params,a=lt(i.githubRunAttempt,1),p=$t(r),u=a>1&&p,m=u?"--last-failed":"",f="";n>1&&(f=u?"--shard=1/1":`--shard=${o}/${n}`);let d=[m,f].filter(Boolean).join(" "),E=t.presetOutput??ht;await it(E,d),c('Dumped PW config: "%s" for GHA to %s',d,E)}async function ko(t,e,r=null){let o=e.params,n=r?.ci.params,i=n?.circleWorkflowId,a=n?.circleWorkflowWorkspaceId,p=lt(o.circleNodeIndex,0),u=lt(o.circleNodeTotal,1),m=a==o.circleWorkflowWorkspaceId&&i!==o.circleWorkflowId,f=$t(r),d=m&&f,E=d?"--last-failed":"",C="";u>1&&(C=d?"--shard=1/1":`--shard=${p+1}/${u}`);let b=[E,C].filter(Boolean).join(" "),Q=t.presetOutput??ht;await it(Q,b),c('Dumped PW config: "%s" for Circle to %s',b,Q)}var lt=(t,e)=>{let r=Ge.default.toNumber(t);return Ge.default.isNaN(r)?e:r};async function Ke(){let t=Z();if(t.type!=="GET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,matrixIndex:n,matrixTotal:i,continue:a}=t.values,p=t.values.outputDir,u=ft();o==="last-run"&&await Lo(t.values,u);let{cacheId:m,refMetaReadUrl:f}=await Yr({recordKey:e,ci:u,id:r,config:{matrixIndex:n,matrixTotal:i}});try{let d=await ca(f),{readUrl:E}=await Vr({recordKey:e,cacheKey:d.cacheKey}),C=await sa({readUrl:E,outputDir:p});o==="last-run"&&await Mo(t.values,u,d),O(g("- restoring cache to"),C),Pt("Cache restored. Cache ID: %s",m)}catch(d){if((0,Go.isAxiosError)(d)&&(d.response?.status===403||d.response?.status===404)){let E=`Cache with ID "${m}" not found`;if(a){ot(E);return}throw new Error(E)}throw d}}async function sa({readUrl:t,outputDir:e}){let r=await Me(t),o=aa(e);return await yo(r,o),c("Cache downloaded",{readUrl:t,destination:o}),o}function aa(t){let e=t??process.cwd();return He.default.isAbsolute(e)?e:He.default.resolve(process.cwd(),e)}async function ca(t){let e=await Me(t),r=JSON.parse(e.toString("utf-8"));return c("Meta file downloaded: %O",r),r}var Ko=require("lodash");async function je(){let t=Z();if(t.type!=="SET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,pwOutputDir:n,matrixIndex:i,matrixTotal:a,continue:p}=t.values,u=await Bo(t.values.path),m=t.values.path||[],f=ft();if(o==="last-run"&&(m.push(n),u.push(...await No(n))),u.length===0){let Q=`No files available to upload: ${m.filter(Boolean).join(",")}`;if(!p)throw new Error(Q);ot(Q)}let d=await $r({recordKey:e,ci:f,id:r,config:{matrixIndex:i,matrixTotal:a}});c("Cache upload url created",{result:d});let E=ma(f),C=u.length>0?await Oo(u):null,b=[];C&&b.push(pa({archive:C,cacheId:d.cacheId,uploadUrl:d.uploadUrl}).then(()=>{ua(u),c("Cache archive uploaded",{uploadUrl:d.uploadUrl})})),b.push(Ho({meta:Fe({cacheId:d.cacheId,config:t.values,ci:E,orgId:d.orgId,path:u}),cacheId:d.cacheId,uploadUrl:d.metaUploadUrl}).then(()=>c("Meta uploaded",{uploadUrl:d.metaUploadUrl})),Ho({meta:Fe({cacheId:d.cacheId,config:t.values,ci:E,orgId:d.orgId,path:u,cacheKey:d.cacheKey,metaCacheKey:d.metaCacheKey}),cacheId:d.cacheId,uploadUrl:d.refMetaUploadUrl}).then(()=>c("Ref meta uploaded",{uploadUrl:d.refMetaUploadUrl}))),await Promise.all(b),Pt("Cache uploaded. Cache ID: %s",d.cacheId)}async function pa({archive:t,cacheId:e,uploadUrl:r}){try{let o="application/zip";await Le({buffer:t,contentType:o,name:e,uploadUrl:r},o,ve(e)),c("Cache archive uploaded",{cacheId:e})}catch(o){throw c("Failed to upload cache archive",o),o}}async function Ho({meta:t,cacheId:e,uploadUrl:r}){try{let o=`${e}_meta`,n="application/json";await Le({buffer:t,contentType:n,name:o,uploadUrl:r},n,ve(o)),c("Cache meta uploaded",{cacheId:e})}catch(o){throw c("Failed to upload cache meta",o),o}}function ma(t){return t.ciBuildId.source==="server"||t.ciBuildId.source==="random"?(0,Ko.omit)(t,"ciBuildId"):t}function ua(t){O(`Cache upload paths:
15
+ RUN_ATTEMPT=${s}
16
+ `)}async function ko(t,e,r=null){let{matrixIndex:o,matrixTotal:n}=t,i=e.params,s=lt(i.githubRunAttempt,1),p=$t(r),u=s>1&&p,m=u?"--last-failed":"",f="";n>1&&(f=u?"--shard=1/1":`--shard=${o}/${n}`);let d=[m,f].filter(Boolean).join(" "),E=t.presetOutput??ht;await it(E,d),c('Dumped PW config: "%s" for GHA to %s',d,E)}async function Go(t,e,r=null){let o=e.params,n=r?.ci.params,i=n?.circleWorkflowId,s=n?.circleWorkflowWorkspaceId,p=lt(o.circleNodeIndex,0),u=lt(o.circleNodeTotal,1),m=s==o.circleWorkflowWorkspaceId&&i!==o.circleWorkflowId,f=$t(r),d=m&&f,E=d?"--last-failed":"",C="";u>1&&(C=d?"--shard=1/1":`--shard=${p+1}/${u}`);let x=[E,C].filter(Boolean).join(" "),Q=t.presetOutput??ht;await it(Q,x),c('Dumped PW config: "%s" for Circle to %s',x,Q)}var lt=(t,e)=>{let r=Ge.default.toNumber(t);return Ge.default.isNaN(r)?e:r};async function Ke(){let t=Z();if(t.type!=="GET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,matrixIndex:n,matrixTotal:i,continue:s}=t.values,p=t.values.outputDir,u=ft();o==="last-run"&&await Mo(t.values,u);let{cacheId:m,refMetaReadUrl:f}=await Jr({recordKey:e,ci:u,id:r,config:{matrixIndex:n,matrixTotal:i}});try{let d=await ca(f),{readUrl:E}=await Yr({recordKey:e,cacheKey:d.cacheKey}),C=await sa({readUrl:E,outputDir:p});o==="last-run"&&await vo(t.values,u,d),O(g("- restoring cache to"),C),Pt("Cache restored. Cache ID: %s",m)}catch(d){if((0,Ho.isAxiosError)(d)&&(d.response?.status===403||d.response?.status===404)){let E=`Cache with ID "${m}" not found`;if(s){ot(E);return}throw new Error(E)}throw d}}async function sa({readUrl:t,outputDir:e}){let r=await Me(t),o=aa(e);return await Ao(r,o),c("Cache downloaded",{readUrl:t,destination:o}),o}function aa(t){let e=t??process.cwd();return He.default.isAbsolute(e)?e:He.default.resolve(process.cwd(),e)}async function ca(t){let e=await Me(t),r=JSON.parse(e.toString("utf-8"));return c("Meta file downloaded: %O",r),r}var jo=require("lodash");async function je(){let t=Z();if(t.type!=="SET_COMMAND_CONFIG"||!t.values)throw new Error("Config is missing!");let{recordKey:e,id:r,preset:o,pwOutputDir:n,matrixIndex:i,matrixTotal:s,continue:p}=t.values,u=await Lo(t.values.path),m=t.values.path||[],f=ft();if(o==="last-run"&&(m.push(n),u.push(...await Bo(n))),u.length===0){let Q=`No files available to upload: ${m.filter(Boolean).join(",")}`;if(!p)throw new Error(Q);ot(Q)}let d=await Vr({recordKey:e,ci:f,id:r,config:{matrixIndex:i,matrixTotal:s}});c("Cache upload url created",{result:d});let E=ma(f),C=u.length>0?await yo(u):null,x=[];C&&x.push(pa({archive:C,cacheId:d.cacheId,uploadUrl:d.uploadUrl}).then(()=>{ua(u),c("Cache archive uploaded",{uploadUrl:d.uploadUrl})})),x.push(Ko({meta:Fe({cacheId:d.cacheId,config:t.values,ci:E,orgId:d.orgId,path:u}),cacheId:d.cacheId,uploadUrl:d.metaUploadUrl}).then(()=>c("Meta uploaded",{uploadUrl:d.metaUploadUrl})),Ko({meta:Fe({cacheId:d.cacheId,config:t.values,ci:E,orgId:d.orgId,path:u,cacheKey:d.cacheKey,metaCacheKey:d.metaCacheKey}),cacheId:d.cacheId,uploadUrl:d.refMetaUploadUrl}).then(()=>c("Ref meta uploaded",{uploadUrl:d.refMetaUploadUrl}))),await Promise.all(x),Pt("Cache uploaded. Cache ID: %s",d.cacheId)}async function pa({archive:t,cacheId:e,uploadUrl:r}){try{let o="application/zip";await Le({buffer:t,contentType:o,name:e,uploadUrl:r},o,ve(e)),c("Cache archive uploaded",{cacheId:e})}catch(o){throw c("Failed to upload cache archive",o),o}}async function Ko({meta:t,cacheId:e,uploadUrl:r}){try{let o=`${e}_meta`,n="application/json";await Le({buffer:t,contentType:n,name:o,uploadUrl:r},n,ve(o)),c("Cache meta uploaded",{cacheId:e})}catch(o){throw c("Failed to upload cache meta",o),o}}function ma(t){return t.ciBuildId.source==="server"||t.ciBuildId.source==="random"?(0,jo.omit)(t,"ciBuildId"):t}function ua(t){O(`Cache upload paths:
17
17
  `+t.map(e=>`${g("- uploading")} ${e}`).join(`
18
- `))}var y={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},ciBuildId:{name:"CI Build ID",env:"CURRENTS_CI_BUILD_ID",cli:"--ci-build-id"},runId:{name:"Run ID",env:"CURRENTS_RUN_ID",cli:"--run-id"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}};function jo(){return{recordKey:process.env[y.recordKey.env],projectId:process.env[y.projectId.env],ciBuildId:process.env[y.ciBuildId.env],runId:process.env[y.runId.env],debug:yr(process.env[y.debug.env])}}var da=c.extend("config"),fa=["recordKey","projectId"];function la(t){if(!(t.runId||t.ciBuildId))throw I(`${Lt(y,"runId")} or ${Lt(y,"ciBuildId")} is required for Currents Reporter. Use the following methods to set the value:
18
+ `))}var y={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},projectId:{name:"Project ID",env:"CURRENTS_PROJECT_ID",cli:"--project-id"},ciBuildId:{name:"CI Build ID",env:"CURRENTS_CI_BUILD_ID",cli:"--ci-build-id"},runId:{name:"Run ID",env:"CURRENTS_RUN_ID",cli:"--run-id"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}};function $o(){return{recordKey:process.env[y.recordKey.env],projectId:process.env[y.projectId.env],ciBuildId:process.env[y.ciBuildId.env],runId:process.env[y.runId.env],debug:Ar(process.env[y.debug.env])}}var da=c.extend("config"),fa=["recordKey","projectId"];function la(t){if(!(t.runId||t.ciBuildId))throw I(`${Lt(y,"runId")} or ${Lt(y,"ciBuildId")} is required for Currents Reporter. Use the following methods to set the value:
19
19
  - as environment variable: ${g(_(y,"runId"))} or ${g(_(y,"ciBuildId"))}
20
- - as CLI flag of the command: ${g(Bt(y,"runId"))} or ${g(Bt(y,"ciBuildId"))}`),new X("Missing required config variable")}var $e=null;function $o(t){$e=M(y,fa,jo,t,la),da("Resolved config: %o",T($e))}function Vt(){return $e}async function Ve(){let t=Vt();if(!t)throw new Error("Config is missing!");let e=t.runId?`runId: ${t.runId}`:`ciBuildId: ${t.ciBuildId}`;try{let r=await Jr({recordKey:t.recordKey,projectId:t.projectId,ciBuildId:t.ciBuildId,runId:t.runId});return r.data.runId?O('Run "%s" (%s) is cancelled',r.data.runId,e):O('No run to cancel (%s) in project "%s"',e,t.projectId),r}catch(r){throw c("Failed to cancel the run"),r}}var Yo=require("@currents/commit-info"),Jo=require("lodash");var Yt=require("lodash");var Ye=c.extend("ci-git");function Vo(t){Ye("git commit existing info: %O",t);let e=Ro();Ye("commit info from provider environment variables: %O",e);let r=(0,Yt.transform)(t,(o,n,i)=>{let a=n||(e?e[i]:null);return o[i]=(0,Yt.defaultTo)(a,null)});return Ye("combined git and environment variables from provider: %O",r),r}var ga=async()=>{let t=await(0,Yo.commitInfo)();return Vo({branch:t.branch,remoteOrigin:t.remote,authorEmail:t.email,authorName:t.author,message:t.message,sha:t.sha,ghaEventData:t.ghaEventData})},Wo=(0,Jo.memoize)(ga);var qo=l(require("getos")),Qo=require("lodash"),v=require("os"),Xo=require("util"),Ea=async()=>{if((0,v.platform)()==="linux")try{let t=await(0,Xo.promisify)(qo.default)();return"dist"in t&&"release"in t?[t.dist,t.release].join(" - "):(0,v.release)()}catch{return(0,v.release)()}return(0,v.release)()},Ca=async()=>{let t=await Ea();return{osName:(0,v.platform)(),osVersion:t,osCpus:[],osMemory:{free:(0,v.freemem)(),total:(0,v.totalmem)()}}},zo=(0,Qo.memoize)(Ca);var Gn=l(require("axios")),Xe=l(require("fs-extra")),ee=l(require("path")),Hn=l(require("semver"));var U={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},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"},disableTitleTags:{name:"Disable Title Tags",env:"CURRENTS_DISABLE_TITLE_TAGS",cli:"--disable-title-tags"},removeTitleTags:{name:"Remove Title Tags",env:"CURRENTS_REMOVE_TITLE_TAGS",cli:"--remove-title-tags"},machineId:{name:"Machine ID",env:"CURRENTS_MACHINE_ID",cli:"--machine-id"},reportDir:{name:"Report Directory",env:"CURRENTS_REPORT_DIR",cli:"--report-dir"}};function Zo(){return{projectId:process.env[U.projectId.env],recordKey:process.env[U.recordKey.env],ciBuildId:process.env[U.ciBuildId.env],tag:process.env[U.tag.env]?process.env[U.tag.env]?.split(",").map(t=>t.trim()):void 0,disableTitleTags:process.env[U.disableTitleTags.env],removeTitleTags:process.env[U.removeTitleTags.env],debug:process.env[U.debug.env],machineId:process.env[U.machineId.env]}}var Ia=c.extend("config"),Ra=["projectId","recordKey"],Je=null;function tn(t){Je=M(U,Ra,Zo,t),Ia("Resolved Currents config: %o",Je)}function Jt(){return Je}function en(t){return{ciBuildId:t.ciBuildId,projectId:t.projectId,recordKey:t.key,tag:t.tag,removeTitleTags:t.removeTitleTags,disableTitleTags:t.disableTitleTags,debug:t.debug,machineId:t.machineId,reportDir:t.reportDir}}var We=l(require("fs-extra")),Y=require("path");var on=l(require("fs-extra")),nn=require("path"),rn=c.extend("detox"),Ta="detox.json";function sn(t){return[...t].sort((e,r)=>(e.session??0)-(r.session??0)||e.invocations-r.invocations)}async function an(t){let e=(0,nn.join)(t,Ta);try{let r=await on.default.readJson(e);return rn("Detox manifest: %o",r),r}catch{rn("No Detox manifest at %s",e);return}}var Wt=require("path"),_a=c.extend("detox"),cn=255,ha=/[/\\?<>:*|"$\u0000-\u001f]/g,pn=4;function mn(t){return Oa(t)??ya(t)}function Oa({rootDir:t,fullName:e,status:r,invocations:o}){try{let n=require.resolve("detox/src/artifacts/utils/ArtifactPathBuilder",{paths:[process.cwd()]}),i=require(n),a=new i({rootDir:t});return(0,Wt.dirname)(a.buildPathForTestArtifact("test.mp4",{fullName:e,status:r,invocations:o}))}catch(n){_a("Detox path builder is not available: %o",n);return}}function ya({rootDir:t,fullName:e,status:r,invocations:o}){let n=Ua(r),i=o>1?` (${o})`:"",a=e.slice(-cn+n.length+i.length),p=`${n}${a}${i}`.replace(ha,"_");return(0,Wt.join)(t,Aa(p,cn))}function Aa(t,e){let r=Buffer.from(t,"utf8");return r.length<=e?t:r.subarray(0,e).toString("utf8").replace(/\uFFFD$/,"")}function Ua(t){switch(t){case"passed":return"\u2713 ";case"failed":return"\u2717 ";default:return""}}var dn=l(require("fs-extra")),fn=require("path"),un=c.extend("detox"),qt="detox.trace.json",Da="ws-client-invocation";async function ln(t){let e=(0,fn.join)(t,qt),r=new Map,o;try{o=await dn.default.readJson(e)}catch{return un("No Detox trace at %s",e),r}if(!Array.isArray(o))return un("Unexpected Detox trace contents at %s",e),r;let n=Sa(o);return Pa(o).forEach(({pid:a,ts:p,step:u})=>{n.filter(f=>f.pid===a&&p>=f.startTs&&p<=f.endTs).sort((f,d)=>f.startTs-d.startTs).pop()?.steps.push(u)}),n.forEach(({fullName:a,invocations:p,steps:u})=>{let m=r.get(a)??[];m.push({fullName:a,invocations:p,steps:u.sort((f,d)=>+new Date(f.startTime)-+new Date(d.startTime))}),r.set(a,m)}),r}function Sa(t){let e=new Map,r=[];return t.forEach(o=>{let n=`${o.pid}:${o.tid}`;if(o.ph==="B"&&o.args?.context==="test"){let i=o.args?.fullName;if(typeof i!="string")return;e.set(n,{fullName:i,invocations:Number(o.args?.invocations??1),pid:Number(o.pid),startTs:Number(o.ts),endTs:Number.MAX_SAFE_INTEGER,steps:[]});return}if(o.ph==="E"&&e.has(n)){let i=e.get(n);e.delete(n),r.push({...i,endTs:Number(o.ts)})}}),[...r,...e.values()]}function Pa(t){let e=new Map,r=[];return t.forEach(o=>{if(!o.cat?.includes(Da))return;let n=`${o.pid}:${o.tid}`,i=e.get(n)??[];if(o.ph==="B"){i.push({name:o.name??"action",cat:o.cat,ts:Number(o.ts)}),e.set(n,i);return}if(o.ph==="E"){let a=i.pop();if(!a)return;r.push({pid:Number(o.pid),ts:a.ts,step:{title:a.name,category:"detox",startTime:new Date(a.ts/1e3).toISOString(),duration:Math.round((Number(o.ts)-a.ts)/1e3),steps:[]}})}}),r}var Ot=c.extend("detox"),gn="artifacts",ba={".mp4":{type:"video",contentType:"video/mp4"},".png":{type:"screenshot",contentType:"image/png"},".jpg":{type:"screenshot",contentType:"image/jpeg"},".log":{type:"attachment",contentType:"text/plain"},".txt":{type:"attachment",contentType:"text/plain"},".json":{type:"attachment",contentType:"application/json"},".viewhierarchy":{type:"attachment",contentType:"application/xml"}};async function En({instances:t,reportDir:e,manifest:r}){let o=wa(r),n=await ln(r.artifactsRootDir),i=await st((0,Y.join)(e,gn)),a={artifacts:0,steps:0};for(let p of t)for(let u of p.results.tests){let m=o.get(u.testId);if(!m){Ot("No Detox manifest entry for %s",u.testId);continue}await Na({test:u,manifestTest:m,rootDir:r.artifactsRootDir,artifactsDir:i,traceSlices:n.get(m.fullName)??[],result:a})}return a.artifacts+=await xa({instances:t,rootDir:r.artifactsRootDir,artifactsDir:i}),a}async function xa({instances:t,rootDir:e,artifactsDir:r}){if(!await We.default.pathExists((0,Y.join)(e,qt)))return 0;let[o]=await Cn(e,[qt],r),n=t.map(i=>i.results.tests[0]).filter(i=>i!==void 0);return n.forEach(i=>{i.artifacts=[...i.artifacts??[],o]}),n.length}function wa(t){let e=new Map;return t.tests.forEach(r=>{e.set(r.fullName,[...e.get(r.fullName)??[],r.testId])}),new Map(t.tests.filter(r=>{let o=e.get(r.fullName)?.length===1;return o||Ot("Ambiguous Detox test name, skipping: %s",r.fullName),o}).map(r=>[r.testId,r]))}async function Na({test:t,manifestTest:e,rootDir:r,artifactsDir:o,traceSlices:n,result:i}){let a=[...t.attempts].sort((m,f)=>m.attempt-f.attempt),p=sn(e.attempts),u=1;for(let[m,f]of p.entries()){let d=a[m];if(!d){Ot("No reported attempt %d of %s",m,e.fullName);continue}let E=await Ba({fullName:e.fullName,status:f.status,rootDir:r,artifactsDir:o,fromInvocation:u});E&&(u=E.invocation+1,d.artifacts=[...d.artifacts??[],...E.artifacts],i.artifacts+=E.artifacts.length);let C=Ma(n,m,E?.invocation);C.length&&(d.steps=[...d.steps??[],...C],i.steps+=C.length)}}async function Ba({fullName:t,status:e,rootDir:r,artifactsDir:o,fromInvocation:n}){for(let i=n;i<n+pn;i++){let a=mn({rootDir:r,fullName:t,status:e,invocations:i}),p=await La(a);if(p)return{invocation:i,artifacts:await Cn(a,p,o)}}Ot("No Detox artifacts for %s [%s]",t,e)}async function La(t){try{return(await We.default.readdir(t)).sort()}catch{return}}async function Cn(t,e,r){let o=[];for(let n of e){let i=ba[(0,Y.extname)(n)];if(!i){Ot("Skipping unsupported Detox artifact %s",n);continue}let a=(0,Y.join)(t,n),p=`${$(a)}${(0,Y.extname)(n)}`;await wt(a,(0,Y.join)(r,p)),o.push({...i,path:(0,Y.join)(gn,p),name:n})}return o}function Ma(t,e,r){return((r===void 0?void 0:t.find(i=>i.invocations===r))??[...t].sort((i,a)=>i.invocations-a.invocations)[e])?.steps??[]}var et=class{constructor(e){this.config=e}async getFullTestSuite(){return[]}};var Sn=l(require("fs-extra")),Pn=require("jest-cli"),bn=l(require("tmp"));var Un=require("lodash");function In(t){let e=[];for(let[r,o]of Object.entries(t))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&e.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{e.push(`--${r}=${n}`)}):e.push(`--${r}=${o}`));return e.join(" ")}var Rn=require("lodash"),va=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function Tn(t){return(0,Rn.omit)(t,...va)}var On=l(require("fs")),yn=require("jest-config"),qe=require("lodash"),Qe=l(require("path"));function Qt(t,e){return(...r)=>new Promise((o,n)=>{let i=0,a=()=>{i++;try{let p=t(...r);o(p)}catch(p){if(i>=e.length)n(p);else{let u=e[i-1];setTimeout(a,u)}}};a()})}var _n=l(require("fs-extra")),Fa=l(require("path"));async function Xt(t){let e=await _n.default.pathExists(t);if(!e)throw new Error("File does not exist");return e}var hn=c.extend("jest-discovery");async function An(t){try{let{config:e,configPath:r}=await(0,yn.readInitialOptions)(t),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],i=(0,qe.omit)(e,o);if(i.projects&&(i.projects=i.projects.map(u=>typeof u!="string"?(0,qe.omit)(u,n):u)),i.rootDir&&Object.keys(i).length===1)return null;let a=Qe.default.resolve(r?Qe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.cjs`),p=`module.exports=${JSON.stringify(i,null,2)}`;return hn("configFileContent: %O",p),On.default.writeFileSync(a,p),await Qt(Xt,[200,200,200,200,200,1e3])(a),a}catch(e){return I("Failed to recreate the config file"),hn("error %o",e),null}}async function Dn(t){let e="!!##ThisPatternWillNotMatchAnyTestName##!!",r=t.options,o=Tn(r),n=In(o),i=r.config,a=await An(i);return{cliArgs:[n,"--testNamePattern",e,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",a?`--config=${a}`:"",...t.args].filter(u=>!(0,Un.isEmpty)(u)),configFilePath:a}}var ka=c.extend("jest-discovery");async function xn(t,e){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Dn(e);try{let n=bn.default.fileSync({postfix:".json"});return ka("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Pn.run)(r.concat(["--openHandlesTimeout=0"])),await Qt(Xt,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await nt(n.name)}catch(n){return I("Failed to obtain the jest full test suite:",n),[]}finally{o&&Sn.default.unlinkSync(o)}}var zt=class extends et{constructor(e){super(e)}async getFullTestSuite(){return xn(this.config.frameworkConfig,this.config.cliArgs)}};var Nn=l(require("fs-extra"));var wn=l(require("path"));function gt(t){return wn.default.join(t,"fullTestSuite.json")}var Ga=c.extend("junit-discovery");async function Bn(t){console.time(g("@currents/junit:fullTestSuite-ready"));try{Ga("running scanner: %o",t);let e=gt(t);process.env.CURRENTS_DISCOVERY_PATH=e;let r=Nn.default.readFileSync(e,"utf-8");return JSON.parse(r)}catch(e){return I("Failed to obtain the junit full test suite:",e),[]}}var Zt=class extends et{constructor(e,r){super(e),this.reportDir=r}async getFullTestSuite(){return Bn(this.reportDir)}};function Ln(t,e){switch(t.framework){case"jest":return new zt(t);case"junit":return new Zt(t,e);default:return new et(t)}}var Et=l(require("fs-extra")),J=l(require("path"));async function Mn(t){let e=await Ha(t?.reportDir);if(!e)throw new Error("Failed to find the report dir");return{reportDir:e,configFilePath:t?.configFilePath??J.default.join(e,"config.json")}}async function Ha(t){return t?(await te(t),t):Ka((0,J.join)(process.cwd(),".currents"))}async function Ka(t){let e=await Et.default.readdir(t),r=null;for(let o of e){let n=J.default.join(t,o),i=await Et.default.stat(n);i.isDirectory()&&(!r||i.birthtime>r.birthtime)&&(r={name:o,birthtime:i.birthtime})}return r?(0,J.resolve)(t,r.name):null}async function te(t){try{return await Et.default.pathExists(t)}catch{return I("Error checking if path exists:",I),!1}}async function vn(t){let e=J.default.join(t,"instances");return ja(e)}async function ja(t){let e=await Et.default.readdir(t),r=[];for(let o of e){let n=J.default.join(t,o);(await Et.default.stat(n)).isFile()&&r.push(n)}return r}var $a=t=>Buffer.byteLength(JSON.stringify(t),"utf8"),Fn=(t,e=1048576)=>{let r=[],o=[],n=0;for(let i of t){let a=$a(i);n+a>e&&(r.push(o),o=[],n=0),o.push(i),n+=a}return o.length>0&&r.push(o),r};var Va=3e4;async function ze(){let t=Jt();if(!t)throw new Error("Currents config is missing!");let e=await Mn(t);fr(Ja(e.reportDir)),c("Reporter options: %o",e),O("Report directory: %s",e.reportDir);let r=await nt(e.configFilePath);c("Report config: %o",r);let o=await vn(e.reportDir);c("Found %d instance results in the reportDir: %s",o.length,e.reportDir);let n=Ya(e.reportDir),i=await te(n),a=gt(e.reportDir),p=null;if(i){let x=await nt(n);R("Marker file detected. The report was already uploaded: %o",{runUrl:x.response.runUrl,isoDate:x.isoDate})}if(await te(a)&&(p=await nt(a),c("Full test suite file detected: %s",a)),p)c("The discovery stage was skipped");else{if(p=await Ln(r,e.reportDir).getFullTestSuite(),Wa(p))throw new Error("Failed to discover the full test suite!");await it(a,JSON.stringify(p))}let m=p.length===1?p[0].name:null,f={currents:t},d={type:r.framework,version:r.frameworkVersion,clientVersion:mt,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},E=Nt.userFacingNanoid(),C=ft(t.ciBuildId),b={};for await(let x of o){let B=await nt(x);b[B.groupId]||(b[B.groupId]=[]),b[B.groupId].push(B)}let Q=await an(e.reportDir);if(Q){let x=await En({instances:Object.values(b).flat(),reportDir:e.reportDir,manifest:Q});O("[currents] Attached %d Detox artifacts and %d steps",x.artifacts,x.steps)}let Dt=new Map;Object.values(b).forEach(x=>{x.forEach(B=>{B.artifacts?.forEach(L=>{L&&Dt.set(L.path,L.contentType)}),B.results.tests.forEach(L=>{L.artifacts?.forEach(w=>{w&&Dt.set(w.path,w.contentType)}),L.attempts.forEach(w=>{w.artifacts?.forEach(rt=>{rt&&Dt.set(rt.path,rt.contentType)})})})})});for await(let x of Object.keys(b)){let B=b[x],L=x;m&&(c("Default group found: %s, overwriting the group in the results",m),L=m,B=B.map(w=>({...w,groupId:m})));try{let w=Fn(B),rt=await kn({ci:C,group:L,instances:[],fullTestSuite:p,config:f,machineId:E,framework:d});for(let ue=0;ue<w.length;ue++){let de=await kn({ci:C,group:L,instances:w[ue],fullTestSuite:[],config:f,machineId:E,framework:d});de.artifactUploadUrls&&de.artifactUploadUrls.length>0&&await qa(de.artifactUploadUrls,e.reportDir,Dt)}c("Api response: %o",rt),O("[%s] Run created: %s",L,rt.runUrl);let is={response:rt,isoDate:new Date().toISOString()};await it(n,JSON.stringify(is)),c("Marker file %s: %s",i?"overwritten":"created",n)}catch(w){throw c("Failed to upload the results to the dashboard"),w}}}async function kn({ci:t,group:e,instances:r,fullTestSuite:o,config:n,machineId:i,framework:a}){let p=await Wo(),u=await zo(),m={browserName:"node",browserVersion:Hn.default.coerce(process.version)?.version},{currents:f}=n,E={platform:{...m,...u},ci:t,commit:p,group:e,fullTestSuite:o,config:n,projectId:f.projectId,recordKey:f.recordKey,ciBuildId:t.ciBuildId.value??void 0,tags:f.tag??[],machineId:f.machineId??i,framework:a,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return c("Creating run: %o",T(E)),Xr(E)}function Ya(t){return ee.default.join(t,"upload.marker.json")}function Ja(t){return ee.default.join(t,`.debug-${new Date().toISOString()}.log`)}function Wa(t){return t.length===0||t.some(e=>e.tests.length===0)}async function qa(t,e,r){c("Uploading %d artifacts",t.length),await Promise.all(t.map(o=>{let n=ee.default.join(e,o.path),i=r.get(o.path)||"application/octet-stream";return Qa(n,i,o.uploadUrl)}))}var Qa=async(t,e,r)=>{try{if(!await Xe.default.pathExists(t)){R("Artifact file not found: %s",t);return}let o=await Xe.default.readFile(t);await Gn.default.put(r,o,{headers:{"Content-Type":e},timeout:Va})}catch(o){c("Failed to upload artifact %s: %o",t,o)}};var Xa=c.extend("cli");async function Kn(t){await N(async e=>{Ur(e);let r=Mt();Xa("Config: %o",xt(r)),await Ae()},t)}var W=require("@commander-js/extra-typings");var jn=new W.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(_(V,"apiKey")),$n=new W.Option("-o, --output <path>","Path to the file where output will be written").env(_(V,"output")),Vn=new W.Option("--ci-build-id <id>","Unique identifier for the run"),Yn=new W.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(_(V,"projectId")),Jn=new W.Option("-t, --tag <tag>","Filter by comma-separated list of tags").argParser(dt),Wn=new W.Option("--debug","Enable debug logging").env(_(V,"debug")).default(!1),qn=new W.Option("-b, --branch <branch>","Filter by git branch name"),Qn=new W.Option("--pw-last-run",'Create Playwright ".last-run.json" file with the failed test(s) from the run');var re="api",za=t=>`
20
+ - as CLI flag of the command: ${g(Bt(y,"runId"))} or ${g(Bt(y,"ciBuildId"))}`),new X("Missing required config variable")}var $e=null;function Vo(t){$e=M(y,fa,$o,t,la),da("Resolved config: %o",T($e))}function Vt(){return $e}async function Ve(){let t=Vt();if(!t)throw new Error("Config is missing!");let e=t.runId?`runId: ${t.runId}`:`ciBuildId: ${t.ciBuildId}`;try{let r=await Wr({recordKey:t.recordKey,projectId:t.projectId,ciBuildId:t.ciBuildId,runId:t.runId});return r.data.runId?O('Run "%s" (%s) is cancelled',r.data.runId,e):O('No run to cancel (%s) in project "%s"',e,t.projectId),r}catch(r){throw c("Failed to cancel the run"),r}}var Jo=require("@currents/commit-info"),Wo=require("lodash");var Yt=require("lodash");var Ye=c.extend("ci-git");function Yo(t){Ye("git commit existing info: %O",t);let e=To();Ye("commit info from provider environment variables: %O",e);let r=(0,Yt.transform)(t,(o,n,i)=>{let s=n||(e?e[i]:null);return o[i]=(0,Yt.defaultTo)(s,null)});return Ye("combined git and environment variables from provider: %O",r),r}var ga=async()=>{let t=await(0,Jo.commitInfo)();return Yo({branch:t.branch,remoteOrigin:t.remote,authorEmail:t.email,authorName:t.author,message:t.message,sha:t.sha,ghaEventData:t.ghaEventData})},qo=(0,Wo.memoize)(ga);var Qo=l(require("getos")),Xo=require("lodash"),v=require("os"),zo=require("util"),Ea=async()=>{if((0,v.platform)()==="linux")try{let t=await(0,zo.promisify)(Qo.default)();return"dist"in t&&"release"in t?[t.dist,t.release].join(" - "):(0,v.release)()}catch{return(0,v.release)()}return(0,v.release)()},Ca=async()=>{let t=await Ea();return{osName:(0,v.platform)(),osVersion:t,osCpus:[],osMemory:{free:(0,v.freemem)(),total:(0,v.totalmem)()}}},Zo=(0,Xo.memoize)(Ca);var Gn=l(require("axios")),ze=l(require("fs-extra")),ee=l(require("path")),Hn=l(require("semver"));var U={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},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"},disableTitleTags:{name:"Disable Title Tags",env:"CURRENTS_DISABLE_TITLE_TAGS",cli:"--disable-title-tags"},removeTitleTags:{name:"Remove Title Tags",env:"CURRENTS_REMOVE_TITLE_TAGS",cli:"--remove-title-tags"},machineId:{name:"Machine ID",env:"CURRENTS_MACHINE_ID",cli:"--machine-id"},reportDir:{name:"Report Directory",env:"CURRENTS_REPORT_DIR",cli:"--report-dir"}};function tn(){return{projectId:process.env[U.projectId.env],recordKey:process.env[U.recordKey.env],ciBuildId:process.env[U.ciBuildId.env],tag:process.env[U.tag.env]?process.env[U.tag.env]?.split(",").map(t=>t.trim()):void 0,disableTitleTags:process.env[U.disableTitleTags.env],removeTitleTags:process.env[U.removeTitleTags.env],debug:process.env[U.debug.env],machineId:process.env[U.machineId.env]}}var Ia=c.extend("config"),Ra=["projectId","recordKey"],Je=null;function en(t){Je=M(U,Ra,tn,t),Ia("Resolved Currents config: %o",Je)}function Jt(){return Je}function rn(t){return{ciBuildId:t.ciBuildId,projectId:t.projectId,recordKey:t.key,tag:t.tag,removeTitleTags:t.removeTitleTags,disableTitleTags:t.disableTitleTags,debug:t.debug,machineId:t.machineId,reportDir:t.reportDir}}var qe=l(require("fs-extra")),Y=require("path");var on=l(require("fs-extra")),nn=require("path"),We=c.extend("detox"),Ta="detox.json";function sn(t){return[...t].sort((e,r)=>(e.session??0)-(r.session??0)||e.invocations-r.invocations)}async function an(t){let e=(0,nn.join)(t,Ta);try{let r=await on.default.readJson(e);if(typeof r?.artifactsRootDir!="string"||!Array.isArray(r?.tests)){We("Unexpected Detox manifest contents at %s",e);return}return We("Detox manifest: %o",r),r}catch{We("No Detox manifest at %s",e);return}}var Wt=require("path"),_a=c.extend("detox"),cn=255,ha=/[/\\?<>:*|"$\u0000-\u001f]/g,pn=4;function mn(t){return Oa(t)??ya(t)}function Oa({rootDir:t,fullName:e,status:r,invocations:o}){try{let n=require.resolve("detox/src/artifacts/utils/ArtifactPathBuilder",{paths:[process.cwd()]}),i=require(n),s=new i({rootDir:t});return(0,Wt.dirname)(s.buildPathForTestArtifact("test.mp4",{fullName:e,status:r,invocations:o}))}catch(n){_a("Detox path builder is not available: %o",n);return}}function ya({rootDir:t,fullName:e,status:r,invocations:o}){let n=Ua(r),i=o>1?` (${o})`:"",s=e.slice(-cn+n.length+i.length),p=`${n}${s}${i}`.replace(ha,"_");return(0,Wt.join)(t,Aa(p,cn))}function Aa(t,e){let r=Buffer.from(t,"utf8");return r.length<=e?t:r.subarray(0,e).toString("utf8").replace(/\uFFFD$/,"")}function Ua(t){switch(t){case"passed":return"\u2713 ";case"failed":return"\u2717 ";default:return""}}var dn=l(require("fs-extra")),fn=require("path"),un=c.extend("detox"),qt="detox.trace.json",Da="ws-client-invocation";async function ln(t){let e=(0,fn.join)(t,qt),r=new Map,o;try{o=await dn.default.readJson(e)}catch{return un("No Detox trace at %s",e),r}if(!Array.isArray(o))return un("Unexpected Detox trace contents at %s",e),r;let n=Sa(o);return xa(o).forEach(({pid:s,ts:p,step:u})=>{n.filter(f=>f.pid===s&&p>=f.startTs&&p<=f.endTs).sort((f,d)=>f.startTs-d.startTs).pop()?.steps.push(u)}),n.forEach(({fullName:s,invocations:p,steps:u})=>{let m=r.get(s)??[];m.push({fullName:s,invocations:p,steps:u.sort((f,d)=>+new Date(f.startTime)-+new Date(d.startTime))}),r.set(s,m)}),r}function Sa(t){let e=new Map,r=[];t.forEach(n=>{let i=`${n.pid}:${n.tid}`,s=e.get(i)??[];if(e.set(i,s),n.ph==="B"){s.push(Pa(n));return}if(n.ph==="E"){let p=s.pop();p&&r.push({...p,endTs:Number(n.ts)})}});let o=[...e.values()].flatMap(n=>n.filter(i=>i!==void 0));return[...r,...o]}function Pa(t){let e=t.args?.fullName;if(!(t.args?.context!=="test"||typeof e!="string"))return{fullName:e,invocations:Number(t.args?.invocations??1),pid:Number(t.pid),startTs:Number(t.ts),endTs:Number.MAX_SAFE_INTEGER,steps:[]}}function xa(t){let e=new Map,r=[];return t.forEach(o=>{if(!o.cat?.includes(Da))return;let n=`${o.pid}:${o.tid}`,i=e.get(n)??[];if(o.ph==="B"){i.push({name:o.name??"action",cat:o.cat,ts:Number(o.ts)}),e.set(n,i);return}if(o.ph==="E"){let s=i.pop();if(!s)return;r.push({pid:Number(o.pid),ts:s.ts,step:{title:s.name,category:"detox",startTime:new Date(s.ts/1e3).toISOString(),duration:Math.round((Number(o.ts)-s.ts)/1e3),steps:[]}})}}),r}var Ot=c.extend("detox"),gn="artifacts",ba={".mp4":{type:"video",contentType:"video/mp4"},".png":{type:"screenshot",contentType:"image/png"},".jpg":{type:"screenshot",contentType:"image/jpeg"},".log":{type:"attachment",contentType:"text/plain"},".txt":{type:"attachment",contentType:"text/plain"},".json":{type:"attachment",contentType:"application/json"},".viewhierarchy":{type:"attachment",contentType:"application/xml"}};async function En({instances:t,reportDir:e,manifest:r}){let o=Na(r),n=await ln(r.artifactsRootDir),i=await st((0,Y.join)(e,gn)),s={artifacts:0,steps:0};for(let p of t)for(let u of p.results.tests){let m=o.get(u.testId);if(!m){Ot("No Detox manifest entry for %s",u.testId);continue}await Ba({test:u,manifestTest:m,rootDir:r.artifactsRootDir,artifactsDir:i,traceSlices:n.get(m.fullName)??[],result:s})}return s.artifacts+=await wa({instances:t,rootDir:r.artifactsRootDir,artifactsDir:i}),s}async function wa({instances:t,rootDir:e,artifactsDir:r}){if(!await qe.default.pathExists((0,Y.join)(e,qt)))return 0;let[o]=await Cn(e,[qt],r),n=t.map(i=>i.results.tests[0]).filter(i=>i!==void 0);return n.forEach(i=>{i.artifacts=[...i.artifacts??[],o]}),n.length}function Na(t){let e=new Map;return t.tests.forEach(r=>{e.set(r.fullName,[...e.get(r.fullName)??[],r.testId])}),new Map(t.tests.filter(r=>{let o=e.get(r.fullName)?.length===1;return o||Ot("Ambiguous Detox test name, skipping: %s",r.fullName),o}).map(r=>[r.testId,r]))}async function Ba({test:t,manifestTest:e,rootDir:r,artifactsDir:o,traceSlices:n,result:i}){let s=[...t.attempts].sort((m,f)=>m.attempt-f.attempt),p=sn(e.attempts),u=1;for(let[m,f]of p.entries()){let d=s[m];if(!d){Ot("No reported attempt %d of %s",m,e.fullName);continue}let E=await La({fullName:e.fullName,status:f.status,rootDir:r,artifactsDir:o,fromInvocation:u});E&&(u=E.invocation+1,d.artifacts=[...d.artifacts??[],...E.artifacts],i.artifacts+=E.artifacts.length);let C=va(n,m,E?.invocation);C.length&&(d.steps=[...d.steps??[],...C],i.steps+=C.length)}}async function La({fullName:t,status:e,rootDir:r,artifactsDir:o,fromInvocation:n}){for(let i=n;i<n+pn;i++){let s=mn({rootDir:r,fullName:t,status:e,invocations:i}),p=await Ma(s);if(p)return{invocation:i,artifacts:await Cn(s,p,o)}}Ot("No Detox artifacts for %s [%s]",t,e)}async function Ma(t){try{return(await qe.default.readdir(t)).sort()}catch{return}}async function Cn(t,e,r){let o=[];for(let n of e){let i=ba[(0,Y.extname)(n)];if(!i){Ot("Skipping unsupported Detox artifact %s",n);continue}let s=(0,Y.join)(t,n),p=`${$(s)}${(0,Y.extname)(n)}`;await wt(s,(0,Y.join)(r,p)),o.push({...i,path:(0,Y.join)(gn,p),name:n})}return o}function va(t,e,r){return((r===void 0?void 0:t.find(i=>i.invocations===r))??[...t].sort((i,s)=>i.invocations-s.invocations)[e])?.steps??[]}var et=class{constructor(e){this.config=e}async getFullTestSuite(){return[]}};var Sn=l(require("fs-extra")),Pn=require("jest-cli"),xn=l(require("tmp"));var Un=require("lodash");function In(t){let e=[];for(let[r,o]of Object.entries(t))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&e.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{e.push(`--${r}=${n}`)}):e.push(`--${r}=${o}`));return e.join(" ")}var Rn=require("lodash"),Fa=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function Tn(t){return(0,Rn.omit)(t,...Fa)}var On=l(require("fs")),yn=require("jest-config"),Qe=require("lodash"),Xe=l(require("path"));function Qt(t,e){return(...r)=>new Promise((o,n)=>{let i=0,s=()=>{i++;try{let p=t(...r);o(p)}catch(p){if(i>=e.length)n(p);else{let u=e[i-1];setTimeout(s,u)}}};s()})}var _n=l(require("fs-extra")),ka=l(require("path"));async function Xt(t){let e=await _n.default.pathExists(t);if(!e)throw new Error("File does not exist");return e}var hn=c.extend("jest-discovery");async function An(t){try{let{config:e,configPath:r}=await(0,yn.readInitialOptions)(t),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],i=(0,Qe.omit)(e,o);if(i.projects&&(i.projects=i.projects.map(u=>typeof u!="string"?(0,Qe.omit)(u,n):u)),i.rootDir&&Object.keys(i).length===1)return null;let s=Xe.default.resolve(r?Xe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.cjs`),p=`module.exports=${JSON.stringify(i,null,2)}`;return hn("configFileContent: %O",p),On.default.writeFileSync(s,p),await Qt(Xt,[200,200,200,200,200,1e3])(s),s}catch(e){return I("Failed to recreate the config file"),hn("error %o",e),null}}async function Dn(t){let e="!!##ThisPatternWillNotMatchAnyTestName##!!",r=t.options,o=Tn(r),n=In(o),i=r.config,s=await An(i);return{cliArgs:[n,"--testNamePattern",e,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",s?`--config=${s}`:"",...t.args].filter(u=>!(0,Un.isEmpty)(u)),configFilePath:s}}var Ga=c.extend("jest-discovery");async function bn(t,e){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Dn(e);try{let n=xn.default.fileSync({postfix:".json"});return Ga("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Pn.run)(r.concat(["--openHandlesTimeout=0"])),await Qt(Xt,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await nt(n.name)}catch(n){return I("Failed to obtain the jest full test suite:",n),[]}finally{o&&Sn.default.unlinkSync(o)}}var zt=class extends et{constructor(e){super(e)}async getFullTestSuite(){return bn(this.config.frameworkConfig,this.config.cliArgs)}};var Nn=l(require("fs-extra"));var wn=l(require("path"));function gt(t){return wn.default.join(t,"fullTestSuite.json")}var Ha=c.extend("junit-discovery");async function Bn(t){console.time(g("@currents/junit:fullTestSuite-ready"));try{Ha("running scanner: %o",t);let e=gt(t);process.env.CURRENTS_DISCOVERY_PATH=e;let r=Nn.default.readFileSync(e,"utf-8");return JSON.parse(r)}catch(e){return I("Failed to obtain the junit full test suite:",e),[]}}var Zt=class extends et{constructor(e,r){super(e),this.reportDir=r}async getFullTestSuite(){return Bn(this.reportDir)}};function Ln(t,e){switch(t.framework){case"jest":return new zt(t);case"junit":return new Zt(t,e);default:return new et(t)}}var Et=l(require("fs-extra")),J=l(require("path"));async function Mn(t){let e=await Ka(t?.reportDir);if(!e)throw new Error("Failed to find the report dir");return{reportDir:e,configFilePath:t?.configFilePath??J.default.join(e,"config.json")}}async function Ka(t){return t?(await te(t),t):ja((0,J.join)(process.cwd(),".currents"))}async function ja(t){let e=await Et.default.readdir(t),r=null;for(let o of e){let n=J.default.join(t,o),i=await Et.default.stat(n);i.isDirectory()&&(!r||i.birthtime>r.birthtime)&&(r={name:o,birthtime:i.birthtime})}return r?(0,J.resolve)(t,r.name):null}async function te(t){try{return await Et.default.pathExists(t)}catch{return I("Error checking if path exists:",I),!1}}async function vn(t){let e=J.default.join(t,"instances");return $a(e)}async function $a(t){let e=await Et.default.readdir(t),r=[];for(let o of e){let n=J.default.join(t,o);(await Et.default.stat(n)).isFile()&&r.push(n)}return r}var Va=t=>Buffer.byteLength(JSON.stringify(t),"utf8"),Fn=(t,e=1048576)=>{let r=[],o=[],n=0;for(let i of t){let s=Va(i);n+s>e&&(r.push(o),o=[],n=0),o.push(i),n+=s}return o.length>0&&r.push(o),r};var Ya=3e4;async function Ze(){let t=Jt();if(!t)throw new Error("Currents config is missing!");let e=await Mn(t);lr(Wa(e.reportDir)),c("Reporter options: %o",e),O("Report directory: %s",e.reportDir);let r=await nt(e.configFilePath);c("Report config: %o",r);let o=await vn(e.reportDir);c("Found %d instance results in the reportDir: %s",o.length,e.reportDir);let n=Ja(e.reportDir),i=await te(n),s=gt(e.reportDir),p=null;if(i){let b=await nt(n);R("Marker file detected. The report was already uploaded: %o",{runUrl:b.response.runUrl,isoDate:b.isoDate})}if(await te(s)&&(p=await nt(s),c("Full test suite file detected: %s",s)),p)c("The discovery stage was skipped");else{if(p=await Ln(r,e.reportDir).getFullTestSuite(),qa(p))throw new Error("Failed to discover the full test suite!");await it(s,JSON.stringify(p))}let m=p.length===1?p[0].name:null,f={currents:t},d={type:r.framework,version:r.frameworkVersion,clientVersion:mt,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},E=Nt.userFacingNanoid(),C=ft(t.ciBuildId),x={};for await(let b of o){let B=await nt(b);x[B.groupId]||(x[B.groupId]=[]),x[B.groupId].push(B)}let Q=await an(e.reportDir);if(Q){let b=await En({instances:Object.values(x).flat(),reportDir:e.reportDir,manifest:Q});O("[currents] Attached %d Detox artifacts and %d steps",b.artifacts,b.steps)}let Dt=new Map;Object.values(x).forEach(b=>{b.forEach(B=>{B.artifacts?.forEach(L=>{L&&Dt.set(L.path,L.contentType)}),B.results.tests.forEach(L=>{L.artifacts?.forEach(w=>{w&&Dt.set(w.path,w.contentType)}),L.attempts.forEach(w=>{w.artifacts?.forEach(rt=>{rt&&Dt.set(rt.path,rt.contentType)})})})})});for await(let b of Object.keys(x)){let B=x[b],L=b;m&&(c("Default group found: %s, overwriting the group in the results",m),L=m,B=B.map(w=>({...w,groupId:m})));try{let w=Fn(B),rt=await kn({ci:C,group:L,instances:[],fullTestSuite:p,config:f,machineId:E,framework:d});for(let ue=0;ue<w.length;ue++){let de=await kn({ci:C,group:L,instances:w[ue],fullTestSuite:[],config:f,machineId:E,framework:d});de.artifactUploadUrls&&de.artifactUploadUrls.length>0&&await Qa(de.artifactUploadUrls,e.reportDir,Dt)}c("Api response: %o",rt),O("[%s] Run created: %s",L,rt.runUrl);let is={response:rt,isoDate:new Date().toISOString()};await it(n,JSON.stringify(is)),c("Marker file %s: %s",i?"overwritten":"created",n)}catch(w){throw c("Failed to upload the results to the dashboard"),w}}}async function kn({ci:t,group:e,instances:r,fullTestSuite:o,config:n,machineId:i,framework:s}){let p=await qo(),u=await Zo(),m={browserName:"node",browserVersion:Hn.default.coerce(process.version)?.version},{currents:f}=n,E={platform:{...m,...u},ci:t,commit:p,group:e,fullTestSuite:o,config:n,projectId:f.projectId,recordKey:f.recordKey,ciBuildId:t.ciBuildId.value??void 0,tags:f.tag??[],machineId:f.machineId??i,framework:s,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return c("Creating run: %o",T(E)),zr(E)}function Ja(t){return ee.default.join(t,"upload.marker.json")}function Wa(t){return ee.default.join(t,`.debug-${new Date().toISOString()}.log`)}function qa(t){return t.length===0||t.some(e=>e.tests.length===0)}async function Qa(t,e,r){c("Uploading %d artifacts",t.length),await Promise.all(t.map(o=>{let n=ee.default.join(e,o.path),i=r.get(o.path)||"application/octet-stream";return Xa(n,i,o.uploadUrl)}))}var Xa=async(t,e,r)=>{try{if(!await ze.default.pathExists(t)){R("Artifact file not found: %s",t);return}let o=await ze.default.readFile(t);await Gn.default.put(r,o,{headers:{"Content-Type":e},timeout:Ya})}catch(o){c("Failed to upload artifact %s: %o",t,o)}};var za=c.extend("cli");async function Kn(t){await N(async e=>{Dr(e);let r=Mt();za("Config: %o",bt(r)),await Ae()},t)}var W=require("@commander-js/extra-typings");var jn=new W.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(_(V,"apiKey")),$n=new W.Option("-o, --output <path>","Path to the file where output will be written").env(_(V,"output")),Vn=new W.Option("--ci-build-id <id>","Unique identifier for the run"),Yn=new W.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(_(V,"projectId")),Jn=new W.Option("-t, --tag <tag>","Filter by comma-separated list of tags").argParser(dt),Wn=new W.Option("--debug","Enable debug logging").env(_(V,"debug")).default(!1),qn=new W.Option("-b, --branch <branch>","Filter by git branch name"),Qn=new W.Option("--pw-last-run",'Create Playwright ".last-run.json" file with the failed test(s) from the run');var re="api",Za=t=>`
21
21
 
22
22
  ${Xn.default.bold("Examples")}
23
23
 
@@ -30,7 +30,7 @@ ${g(`${t} ${re} get-run --api-key <api-key> --project-id <project-id> --branch <
30
30
  Obtain run data by --ci-build-id, save the failed test in a format compatible with Playwright --last-failed:
31
31
  ${g(`${t} ${re} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
32
32
 
33
- `,zn=t=>new Ze.Command().command(re).description("Interact with the Currents API").showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Za(t)),Za=t=>new Ze.Command().name("get-run").description(`Retrieve run data from Currents API ${za(t)}`).allowUnknownOption().addOption(jn).addOption(Wn).addOption(Vn).addOption(Yn).addOption(qn).addOption(Jn).addOption($n).addOption(Qn).action(Kn);var oe=require("@commander-js/extra-typings");var ei=l(require("chalk"));var tc=c.extend("cli");async function Zn(t){await N(async e=>{no(io(e));let r=Z();tc("Config: %o",T(r.values)),await Ke()},t)}var ec=c.extend("cli");async function ti(t){await N(async e=>{oo(so(e));let r=Z();ec("Config: %o",T(r.values)),await je()},t)}var Ct="cache",rc=t=>`
33
+ `,zn=t=>new tr.Command().command(re).description("Interact with the Currents API").showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(tc(t)),tc=t=>new tr.Command().name("get-run").description(`Retrieve run data from Currents API ${Za(t)}`).allowUnknownOption().addOption(jn).addOption(Wn).addOption(Vn).addOption(Yn).addOption(qn).addOption(Jn).addOption($n).addOption(Qn).action(Kn);var oe=require("@commander-js/extra-typings");var ei=l(require("chalk"));var ec=c.extend("cli");async function Zn(t){await N(async e=>{io(so(e));let r=Z();ec("Config: %o",T(r.values)),await Ke()},t)}var rc=c.extend("cli");async function ti(t){await N(async e=>{no(ao(e));let r=Z();rc("Config: %o",T(r.values)),await je()},t)}var Ct="cache",oc=t=>`
34
34
 
35
35
  ${ei.default.bold("Examples")}
36
36
 
@@ -49,20 +49,20 @@ ${g(`${t} ${Ct} get --key <record-key> --preset last-run`)}
49
49
  Retrieve the last run data from the cache and save it to a custom directory:
50
50
  ${g(`${t} ${Ct} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
51
51
 
52
- `,ri=t=>new oe.Command().command(Ct).description(`Cache data to Currents ${rc(t)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(oc()).addCommand(nc()),oc=()=>new oe.Command().name("set").allowUnknownOption().addOption(De).addOption(Pe).addOption(be).addOption(co).addOption(Se).addOption(mo).addOption(xe).addOption(we).addOption(go).action(ti),nc=()=>new oe.Command().name("get").allowUnknownOption().addOption(De).addOption(Pe).addOption(be).addOption(po).addOption(uo).addOption(Se).addOption(xe).addOption(we).addOption(lo).action(Zn);var pi=require("@commander-js/extra-typings");var mi=l(require("chalk"));var ic=c.extend("cli");async function oi(t){await N(async({key:e,...r})=>{$o({...r,recordKey:e});let o=Vt();ic("Config: %o",T(o??{})),await Ve()},t)}var It=require("@commander-js/extra-typings");var ni=new It.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(y,"recordKey")),ii=new It.Option("-p, --project-id <project>","the project ID the run belongs to").env(_(y,"projectId")),si=new It.Option("--ci-build-id <id>","the unique identifier of the build (run) to cancel").env(_(y,"ciBuildId")),ai=new It.Option("--run-id <id>","the identifier of the run to cancel, as reported when the run was created").env(_(y,"runId")),ci=new It.Option("--debug","enable debug logs").env(_(y,"debug")).default(!1);var tr="cancel",sc=t=>`
52
+ `,ri=t=>new oe.Command().command(Ct).description(`Cache data to Currents ${oc(t)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(nc()).addCommand(ic()),nc=()=>new oe.Command().name("set").allowUnknownOption().addOption(De).addOption(Pe).addOption(xe).addOption(po).addOption(Se).addOption(uo).addOption(be).addOption(we).addOption(Eo).action(ti),ic=()=>new oe.Command().name("get").allowUnknownOption().addOption(De).addOption(Pe).addOption(xe).addOption(mo).addOption(fo).addOption(Se).addOption(be).addOption(we).addOption(go).action(Zn);var pi=require("@commander-js/extra-typings");var mi=l(require("chalk"));var sc=c.extend("cli");async function oi(t){await N(async({key:e,...r})=>{Vo({...r,recordKey:e});let o=Vt();sc("Config: %o",T(o??{})),await Ve()},t)}var It=require("@commander-js/extra-typings");var ni=new It.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(y,"recordKey")),ii=new It.Option("-p, --project-id <project>","the project ID the run belongs to").env(_(y,"projectId")),si=new It.Option("--ci-build-id <id>","the unique identifier of the build (run) to cancel").env(_(y,"ciBuildId")),ai=new It.Option("--run-id <id>","the identifier of the run to cancel, as reported when the run was created").env(_(y,"runId")),ci=new It.Option("--debug","enable debug logs").env(_(y,"debug")).default(!1);var er="cancel",ac=t=>`
53
53
 
54
54
  ${mi.default.bold("Examples")}
55
55
 
56
56
  Cancel the run recorded under a CI build id:
57
- ${g(`${t} ${tr} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
57
+ ${g(`${t} ${er} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
58
58
 
59
59
  Cancel a run by its id, as reported when the run was created:
60
- ${g(`${t} ${tr} --key <record-key> --project-id <id> --run-id <run-id>`)}
60
+ ${g(`${t} ${er} --key <record-key> --project-id <id> --run-id <run-id>`)}
61
61
 
62
62
  Cancel the run when a GitHub Actions workflow is cancelled:
63
63
  ${g("- if: ${{ cancelled() }}\n run: npx currents cancel")}
64
64
 
65
- `,ui=t=>new pi.Command().name(tr).description(`Cancel a run in progress, e.g. when the CI job it belongs to is cancelled ${sc(t)}`).allowUnknownOption().addOption(ni).addOption(ii).addOption(si).addOption(ai).addOption(ci).action(oi);var Ai=require("@commander-js/extra-typings"),Ui=l(require("chalk"));var K=require("@commander-js/extra-typings");var di=new K.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(_(U,"ciBuildId")),fi=new K.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(U,"recordKey")),li=new K.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(_(U,"projectId")),gi=new K.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(dt),Ei=new K.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),Ci=new K.Option("--disable-title-tags","disable parsing tags from test title, e.g. `Test name @smoke` would not be tagged with `smoke` in the dashboard").default(!1),Ii=new K.Option("--machine-id <string>","unique identifier of the machine running the tests. If not provided, it will be generated automatically. See: https://docs.currents.dev/?q=machineId").env(_(U,"machineId")),Ri=new K.Option("--report-dir <string>","explicit path to the report directory").env(_(U,"reportDir")),Ti=new K.Option("--debug","enable debug logs").env(_(U,"debug")).default(!1);var Oi=l(require("fs"));var _i=require("tmp-promise"),hi=async()=>{let{path:t}=await(0,_i.file)();return t};var er=c.extend("cli"),ne=class{constructor(e){this.configFilePath=null;this.cliOptions=e,er("CLI options: %o",T(this.cliOptions)),this.parsedConfig=en(this.cliOptions),er("Parsed config from CLI options: %o",T(this.parsedConfig))}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let e=await hi();return Oi.default.writeFileSync(e,JSON.stringify(this.parsedConfig)),er("CLI options temp file path: %s",e),this.configFilePath=e,e}};async function yi(t){await N(async e=>{let r=new ne(e);tn(r.parsedConfig);let o=Jt();O("Currents config: %o",T(o)),await ze()},t)}var yt="upload",ac=t=>`
65
+ `,ui=t=>new pi.Command().name(er).description(`Cancel a run in progress, e.g. when the CI job it belongs to is cancelled ${ac(t)}`).allowUnknownOption().addOption(ni).addOption(ii).addOption(si).addOption(ai).addOption(ci).action(oi);var Ai=require("@commander-js/extra-typings"),Ui=l(require("chalk"));var K=require("@commander-js/extra-typings");var di=new K.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(_(U,"ciBuildId")),fi=new K.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(U,"recordKey")),li=new K.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(_(U,"projectId")),gi=new K.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(dt),Ei=new K.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),Ci=new K.Option("--disable-title-tags","disable parsing tags from test title, e.g. `Test name @smoke` would not be tagged with `smoke` in the dashboard").default(!1),Ii=new K.Option("--machine-id <string>","unique identifier of the machine running the tests. If not provided, it will be generated automatically. See: https://docs.currents.dev/?q=machineId").env(_(U,"machineId")),Ri=new K.Option("--report-dir <string>","explicit path to the report directory").env(_(U,"reportDir")),Ti=new K.Option("--debug","enable debug logs").env(_(U,"debug")).default(!1);var Oi=l(require("fs"));var _i=require("tmp-promise"),hi=async()=>{let{path:t}=await(0,_i.file)();return t};var rr=c.extend("cli"),ne=class{constructor(e){this.configFilePath=null;this.cliOptions=e,rr("CLI options: %o",T(this.cliOptions)),this.parsedConfig=rn(this.cliOptions),rr("Parsed config from CLI options: %o",T(this.parsedConfig))}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let e=await hi();return Oi.default.writeFileSync(e,JSON.stringify(this.parsedConfig)),rr("CLI options temp file path: %s",e),this.configFilePath=e,e}};async function yi(t){await N(async e=>{let r=new ne(e);en(r.parsedConfig);let o=Jt();O("Currents config: %o",T(o)),await Ze()},t)}var yt="upload",cc=t=>`
66
66
 
67
67
  ${Ui.default.bold("Examples")}
68
68
 
@@ -76,19 +76,19 @@ Provide a custom path to the reports directory:
76
76
  ${g(`${t} ${yt} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
77
77
 
78
78
  `,Di=t=>new Ai.Command().name(yt).command(yt).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
79
- ${ac(t)}`).addOption(di).addOption(fi).addOption(li).addOption(gi).addOption(Ei).addOption(Ci).addOption(Ii).addOption(Ti).addOption(Ri).action(r=>yi(r));var ts=require("@commander-js/extra-typings");var es=l(require("chalk"));var At={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},inputFormat:{name:"Input Format",cli:"--input-format"},inputFiles:{name:"Input File",cli:"--input-file"},outputDir:{name:"Output Dir",cli:"--output-dir"},framework:{name:"Framework",cli:"--framework"},frameworkVersion:{name:"Framework Version",cli:"--framework-version"}};function Si(){return{debug:process.env[At.debug.env]}}var cc=c.extend("config"),pc=["inputFormat","inputFiles","framework"],rr=null;function Pi(t){rr=M(At,pc,Si,t),cc("Resolved config: %o",rr)}function ie(){return rr}function bi(t){return{inputFiles:t.inputFile,inputFormat:t.inputFormat,outputDir:t.outputDir,framework:t.framework,frameworkVersion:t.frameworkVersion,debug:t.debug}}var pt=require("path");var Li=require("lodash"),Mi=l(require("crypto"));var F=require("path"),ae=async(t,e,r,o)=>{if(t)for(let n of t)try{let i=(0,F.resolve)(o,n.path),a=(0,F.relative)(o,i);if(a.startsWith("..")||(0,F.isAbsolute)(a)){c("Skipping artifact outside workspace: %s (resolved: %s)",n.path,i);continue}let p=`${$(e+n.path)}.${(0,F.extname)(n.path).slice(1)||"bin"}`;await wt(i,(0,F.join)(r,p)),n.path=(0,F.join)("artifacts",p)}catch(i){c("Failed to copy artifact %s: %o",n.path,i)}};function wi(t){let e=Bi(t.properties?.property??t.property);return se(e,"currents.artifact.instance.","spec")}function Ni(t){let e=Bi(t.properties?.property),r=se(e,"currents.artifact.test.","test"),o=new Map;mc(e).forEach((a,p)=>{o.has(p)||o.set(p,[]),o.get(p).push(...a)});let i=se(e,"currents.artifact.attempt.","attempt");return i.length>0&&(o.has(0)||o.set(0,[]),o.get(0).push(...i)),{testArtifacts:r,attemptArtifacts:o}}function mc(t){let e=new Map,r=/^currents\.artifact\.attempt\.(\d+)\.(.+)$/,o=new Map;for(let n of t){let i=n.value??n._;if(!n.name||!i)continue;let a=n.name.match(r);if(!a)continue;let[,p,u]=a,m=parseInt(p,10);o.has(m)||o.set(m,[]),o.get(m).push({name:`currents.artifact.attempt.${u}`,value:i})}for(let[n,i]of o.entries()){let a=se(i,"currents.artifact.attempt.","attempt");a.length>0&&e.set(n,a)}return e}function se(t,e,r){let o=[],n={};for(let i of t){let a=i.value??i._;if(!i.name||!a||!i.name.startsWith(e))continue;let p=i.name.slice(e.length);/^\d+\./.test(p)||["path","type","contentType","name"].includes(p)&&(n[p]&&(xi(n)&&o.push({...n,level:r}),n={}),n[p]=a)}return xi(n)&&o.push({...n,level:r}),o}function xi(t){return!!(t.path&&t.type&&t.contentType)}function Bi(t){return t?Array.isArray(t)?t:[t]:[]}function vi(t,e,r,o){let n=ct(t.failure),i=n.length>0,a=e?.timestamp??"",p="skipped"in t,u=p?"pending":i?"failed":"passed",{testArtifacts:m,attemptArtifacts:f}=Ni(t);return{_t:ce(a),testId:sr(Ut(t.name,o).join(", "),o),title:Ut(t.name,o),state:u,isFlaky:uc(),expectedStatus:"passed",timeout:dc(),location:fc(e?.file??""),retries:lc(n),artifacts:m,attempts:gc(t,n,ar(a),r,f,p)}}function sr(t,e){let r=`${t}${e}`;return Mi.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function ce(t){return Fi(t)?new Date(t).getTime():new Date().getTime()}function ar(t){return Fi(t)?new Date(t).toISOString():new Date().toISOString()}function Fi(t){let e=new Date(t);return!isNaN(e.getTime())}function Ut(t,e){return[e,t].filter(Boolean)}function uc(){return!1}function dc(){return 0}function fc(t){return{column:1,file:t,line:1}}function lc(t){let e=0;return t.forEach(r=>{typeof r!="string"&&e++}),e}function gc(t,e,r,o,n,i){let a=t.time?pe(t.time):0;if(i)return[{_s:"pending",attempt:0,startTime:r,steps:[],duration:a,status:"skipped",stdout:or(t?.["system-out"]),stderr:nr(t?.["system-err"]),artifacts:n.get(0),errors:[],error:void 0}];if(e.length===0){let p=[];return n.forEach(u=>{p.push(...u)}),[{_s:"passed",attempt:0,startTime:r,steps:[],duration:a,status:"passed",stdout:or(t?.["system-out"]),stderr:nr(t?.["system-err"]),artifacts:p,errors:[],error:void 0}]}return e.reduce((p,u,m)=>{if(u!=="true"&&u!=="false"){let f=Ec(u);p.push({_s:"failed",attempt:m,startTime:Cc(o,r),steps:[],duration:a,status:"failed",stdout:or(t?.["system-out"]),stderr:nr(t?.["system-err"]),artifacts:n.get(m),errors:f,error:f[0]})}return p},[])}function or(t){return t?[t]:[]}function nr(t){return t?[t]:[]}function Ec(t){return t==="true"||t==="false"?[]:[typeof t=="string"?{message:t}:{message:t.message,stack:t._,value:t.type}]}function Cc(t,e){let r=ce(e)+t;return new Date(r).toISOString()}function ct(t){return t?Array.isArray(t)?t:[t]:[]}function Ic(t){return Math.round(t*1e3)}function pe(t){let e=parseFloat(t);return isNaN(e)?0:Ic(e)}function me(t,e,r){let o=(0,Li.isNumber)(r)&&r>0,n=!!t.id&&ir(e,"id",t.id);if(t.file){let i=ir(e,"file",t.file);return i&&!n?`${t.file} - ${t.id}`:i&&o?`${t.file} - ${r}`:t.file}if(t.name){let i=ir(e,"name",t.name);return i&&!n?`${t.name} - ${t.id}`:i&&o?`${t.name} - ${r}`:t.name}return t.id?n&&o?`${t.id} - ${r}`:t.id:o?`unknown - ${r}`:"unknown"}function ir(t,e,r){return t.filter(n=>n[e]===r).length>1}function ki(t){let e=[];return t.forEach(r=>{let o=ct(r.testsuites?.testsuite),n={name:r.testsuites?.name??"No name",tags:[],tests:[]};o?.forEach(i=>{let a=me(i,o);ct(i?.testcase)?.forEach(u=>{let m={title:Ut(u.name,a),spec:a,tags:[],testId:sr(Ut(u.name,a).join(", "),a)};n.tests.push(m)})}),e.push(n)}),e}var q=require("@commander-js/extra-typings"),Gi=l(require("globby"));var Hi=new q.Option("--debug","Enable debug logging").env(_(At,"debug")).default(!1),cr=(e=>(e.junit="junit",e))(cr||{}),Ki=new q.Option("--input-format <string>","the format of the input test reports").choices(Object.values(cr)),ji=new q.Option("--input-file <patterns>",'comma-separated glob patterns to match report file paths (e.g., "report1.xml,report2.xml")').argParser(Rc),$i=new q.Option("-o, --output-dir <string>","the directory to save the converted test reports"),pr=(n=>(n.postman="postman",n.node="node",n.vitest="vitest",n.wdio="wdio",n))(pr||{}),Vi=new q.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(pr)),Yi=new q.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Rc(t){let e=t.split(",").map(o=>o.trim()),r=Gi.sync(e);if(r.length===0)throw new q.InvalidArgumentError("No files found with the provided patterns");return r}async function k(t){let e=new Map;return t.forEach(r=>{let o=ct(r.testsuites?.testsuite),n=r.testsuites?.name??"No name";o.forEach((i,a)=>{let p=me(i,o,a),u=Tc(i,n,p),m=$(n+p);u.results.tests.length!==0&&e.set(m,u)})}),e}function Tc(t,e,r){let o=ar(t.timestamp??""),n=t.time?pe(t.time):0,i=new Date(ce(t.timestamp??"")+n),a=ct(t.testcase),p=[t["system-out"],t["system-err"],...a.flatMap(C=>[C["system-out"],C["system-err"]])].filter(C=>C).join(`
80
- `),u=0,m=a.filter(C=>"failure"in C).length,f=a.filter(C=>"skipped"in C).length,d=a.length-m-f;return{groupId:e,spec:r,startTime:o,artifacts:wi(t),_stdout:p,results:{stats:{suites:1,tests:a.length,passes:d,pending:f,skipped:0,failures:m,flaky:0,wallClockStartedAt:o,wallClockEndedAt:i.toISOString(),wallClockDuration:n},tests:a?.map(C=>(a[0]?.time&&(u+=pe(a[0].time)),vi(C,t,u,r)))}}}async function Ji({inputFormat:t,framework:e,parsedXMLArray:r}){return t==="junit"?_c(e,r):new Map}async function _c(t,e){switch(t){case"node":return k(e);case"postman":return k(e);case"vitest":return k(e);case"wdio":return k(e);default:return R("Unsupported framework: %s",t),new Map}}var Wi=require("fs-extra"),qi=require("xml2js");async function Qi(t){let e=await Promise.all(t.map(o=>(0,Wi.readFile)(o,"utf-8"))),r=(await Promise.all(e.map(hc))).filter(Boolean);return e.length!==r.length&&R("Some files could not be parsed. Enable debug logging for more details"),r}async function hc(t){let e=t.trim();if(!e)return null;try{return await(0,qi.parseStringPromise)(e,{explicitArray:!1,mergeAttrs:!0})||null}catch(r){return c("Error parsing XML input",r),null}}function Xi(t){return{framework:t.inputFormat,frameworkVersion:t.frameworkVersion??null,frameworkConfig:{originFramework:t.framework,originFrameworkVersion:t.frameworkVersion}}}async function zi(){try{let t=ie();if(!t)throw new Error("Config is missing!");let e=t.outputDir?await st(t.outputDir):await Tr(process.cwd(),".currents"),r=await st((0,pt.join)(e,"instances")),o=Xi(t);c("Report config:",o),O("[currents] Convertion files: %s",t.inputFiles.join(", ")),await _t((0,pt.join)(e,"config.json"),JSON.stringify(o));let n=await Qi(t.inputFiles);if(n.length===0)throw new Error("No valid XML JUnit report was found.");let i=ki(n);await _t(gt(e),JSON.stringify(i));let a=await Ji({inputFormat:t.inputFormat,framework:t.framework,parsedXMLArray:n}),p=await st((0,pt.join)(e,"artifacts")),u=process.cwd();await Promise.all(Array.from(a.values()).map(async m=>{if(await ae(m.artifacts,m.spec,p,u),m._stdout){let f=`${$(m.spec)}.stdout.txt`;await _t((0,pt.join)(p,f),m._stdout),m.artifacts||(m.artifacts=[]),m.artifacts.push({path:(0,pt.join)("artifacts",f),type:"stdout",contentType:"text/plain",level:"spec"}),delete m._stdout}for(let f of m.results.tests){await ae(f.artifacts,f.testId,p,u);for(let d of f.attempts)await ae(d.artifacts,f.testId+d.attempt,p,u)}})),await Promise.all(Array.from(a.entries()).map(([m,f])=>_t((0,pt.join)(r,`${$(m)}.json`),JSON.stringify(f)))),O("[currents] Conversion completed, report saved to: %s",e)}catch(t){throw c("Failed to convert: %o",t),t}}var Oc=c.extend("cli");async function Zi(t){await N(async e=>{Pi(bi(e));let r=ie();Oc("Config: %o",r),await zi()},t)}var mr="convert",yc=t=>`
79
+ ${cc(t)}`).addOption(di).addOption(fi).addOption(li).addOption(gi).addOption(Ei).addOption(Ci).addOption(Ii).addOption(Ti).addOption(Ri).action(r=>yi(r));var ts=require("@commander-js/extra-typings");var es=l(require("chalk"));var At={debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"},inputFormat:{name:"Input Format",cli:"--input-format"},inputFiles:{name:"Input File",cli:"--input-file"},outputDir:{name:"Output Dir",cli:"--output-dir"},framework:{name:"Framework",cli:"--framework"},frameworkVersion:{name:"Framework Version",cli:"--framework-version"}};function Si(){return{debug:process.env[At.debug.env]}}var pc=c.extend("config"),mc=["inputFormat","inputFiles","framework"],or=null;function Pi(t){or=M(At,mc,Si,t),pc("Resolved config: %o",or)}function ie(){return or}function xi(t){return{inputFiles:t.inputFile,inputFormat:t.inputFormat,outputDir:t.outputDir,framework:t.framework,frameworkVersion:t.frameworkVersion,debug:t.debug}}var pt=require("path");var Li=require("lodash"),Mi=l(require("crypto"));var F=require("path"),ae=async(t,e,r,o)=>{if(t)for(let n of t)try{let i=(0,F.resolve)(o,n.path),s=(0,F.relative)(o,i);if(s.startsWith("..")||(0,F.isAbsolute)(s)){c("Skipping artifact outside workspace: %s (resolved: %s)",n.path,i);continue}let p=`${$(e+n.path)}.${(0,F.extname)(n.path).slice(1)||"bin"}`;await wt(i,(0,F.join)(r,p)),n.path=(0,F.join)("artifacts",p)}catch(i){c("Failed to copy artifact %s: %o",n.path,i)}};function wi(t){let e=Bi(t.properties?.property??t.property);return se(e,"currents.artifact.instance.","spec")}function Ni(t){let e=Bi(t.properties?.property),r=se(e,"currents.artifact.test.","test"),o=new Map;uc(e).forEach((s,p)=>{o.has(p)||o.set(p,[]),o.get(p).push(...s)});let i=se(e,"currents.artifact.attempt.","attempt");return i.length>0&&(o.has(0)||o.set(0,[]),o.get(0).push(...i)),{testArtifacts:r,attemptArtifacts:o}}function uc(t){let e=new Map,r=/^currents\.artifact\.attempt\.(\d+)\.(.+)$/,o=new Map;for(let n of t){let i=n.value??n._;if(!n.name||!i)continue;let s=n.name.match(r);if(!s)continue;let[,p,u]=s,m=parseInt(p,10);o.has(m)||o.set(m,[]),o.get(m).push({name:`currents.artifact.attempt.${u}`,value:i})}for(let[n,i]of o.entries()){let s=se(i,"currents.artifact.attempt.","attempt");s.length>0&&e.set(n,s)}return e}function se(t,e,r){let o=[],n={};for(let i of t){let s=i.value??i._;if(!i.name||!s||!i.name.startsWith(e))continue;let p=i.name.slice(e.length);/^\d+\./.test(p)||["path","type","contentType","name"].includes(p)&&(n[p]&&(bi(n)&&o.push({...n,level:r}),n={}),n[p]=s)}return bi(n)&&o.push({...n,level:r}),o}function bi(t){return!!(t.path&&t.type&&t.contentType)}function Bi(t){return t?Array.isArray(t)?t:[t]:[]}function vi(t,e,r,o){let n=ct(t.failure),i=n.length>0,s=e?.timestamp??"",p="skipped"in t,u=p?"pending":i?"failed":"passed",{testArtifacts:m,attemptArtifacts:f}=Ni(t);return{_t:ce(s),testId:ar(Ut(t.name,o).join(", "),o),title:Ut(t.name,o),state:u,isFlaky:dc(),expectedStatus:"passed",timeout:fc(),location:lc(e?.file??""),retries:gc(n),artifacts:m,attempts:Ec(t,n,cr(s),r,f,p)}}function ar(t,e){let r=`${t}${e}`;return Mi.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function ce(t){return Fi(t)?new Date(t).getTime():new Date().getTime()}function cr(t){return Fi(t)?new Date(t).toISOString():new Date().toISOString()}function Fi(t){let e=new Date(t);return!isNaN(e.getTime())}function Ut(t,e){return[e,t].filter(Boolean)}function dc(){return!1}function fc(){return 0}function lc(t){return{column:1,file:t,line:1}}function gc(t){let e=0;return t.forEach(r=>{typeof r!="string"&&e++}),e}function Ec(t,e,r,o,n,i){let s=t.time?pe(t.time):0;if(i)return[{_s:"pending",attempt:0,startTime:r,steps:[],duration:s,status:"skipped",stdout:nr(t?.["system-out"]),stderr:ir(t?.["system-err"]),artifacts:n.get(0),errors:[],error:void 0}];if(e.length===0){let p=[];return n.forEach(u=>{p.push(...u)}),[{_s:"passed",attempt:0,startTime:r,steps:[],duration:s,status:"passed",stdout:nr(t?.["system-out"]),stderr:ir(t?.["system-err"]),artifacts:p,errors:[],error:void 0}]}return e.reduce((p,u,m)=>{if(u!=="true"&&u!=="false"){let f=Cc(u);p.push({_s:"failed",attempt:m,startTime:Ic(o,r),steps:[],duration:s,status:"failed",stdout:nr(t?.["system-out"]),stderr:ir(t?.["system-err"]),artifacts:n.get(m),errors:f,error:f[0]})}return p},[])}function nr(t){return t?[t]:[]}function ir(t){return t?[t]:[]}function Cc(t){return t==="true"||t==="false"?[]:[typeof t=="string"?{message:t}:{message:t.message,stack:t._,value:t.type}]}function Ic(t,e){let r=ce(e)+t;return new Date(r).toISOString()}function ct(t){return t?Array.isArray(t)?t:[t]:[]}function Rc(t){return Math.round(t*1e3)}function pe(t){let e=parseFloat(t);return isNaN(e)?0:Rc(e)}function me(t,e,r){let o=(0,Li.isNumber)(r)&&r>0,n=!!t.id&&sr(e,"id",t.id);if(t.file){let i=sr(e,"file",t.file);return i&&!n?`${t.file} - ${t.id}`:i&&o?`${t.file} - ${r}`:t.file}if(t.name){let i=sr(e,"name",t.name);return i&&!n?`${t.name} - ${t.id}`:i&&o?`${t.name} - ${r}`:t.name}return t.id?n&&o?`${t.id} - ${r}`:t.id:o?`unknown - ${r}`:"unknown"}function sr(t,e,r){return t.filter(n=>n[e]===r).length>1}function ki(t){let e=[];return t.forEach(r=>{let o=ct(r.testsuites?.testsuite),n={name:r.testsuites?.name??"No name",tags:[],tests:[]};o?.forEach(i=>{let s=me(i,o);ct(i?.testcase)?.forEach(u=>{let m={title:Ut(u.name,s),spec:s,tags:[],testId:ar(Ut(u.name,s).join(", "),s)};n.tests.push(m)})}),e.push(n)}),e}var q=require("@commander-js/extra-typings"),Gi=l(require("globby"));var Hi=new q.Option("--debug","Enable debug logging").env(_(At,"debug")).default(!1),pr=(e=>(e.junit="junit",e))(pr||{}),Ki=new q.Option("--input-format <string>","the format of the input test reports").choices(Object.values(pr)),ji=new q.Option("--input-file <patterns>",'comma-separated glob patterns to match report file paths (e.g., "report1.xml,report2.xml")').argParser(Tc),$i=new q.Option("-o, --output-dir <string>","the directory to save the converted test reports"),mr=(n=>(n.postman="postman",n.node="node",n.vitest="vitest",n.wdio="wdio",n))(mr||{}),Vi=new q.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(mr)),Yi=new q.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Tc(t){let e=t.split(",").map(o=>o.trim()),r=Gi.sync(e);if(r.length===0)throw new q.InvalidArgumentError("No files found with the provided patterns");return r}async function k(t){let e=new Map;return t.forEach(r=>{let o=ct(r.testsuites?.testsuite),n=r.testsuites?.name??"No name";o.forEach((i,s)=>{let p=me(i,o,s),u=_c(i,n,p),m=$(n+p);u.results.tests.length!==0&&e.set(m,u)})}),e}function _c(t,e,r){let o=cr(t.timestamp??""),n=t.time?pe(t.time):0,i=new Date(ce(t.timestamp??"")+n),s=ct(t.testcase),p=[t["system-out"],t["system-err"],...s.flatMap(C=>[C["system-out"],C["system-err"]])].filter(C=>C).join(`
80
+ `),u=0,m=s.filter(C=>"failure"in C).length,f=s.filter(C=>"skipped"in C).length,d=s.length-m-f;return{groupId:e,spec:r,startTime:o,artifacts:wi(t),_stdout:p,results:{stats:{suites:1,tests:s.length,passes:d,pending:f,skipped:0,failures:m,flaky:0,wallClockStartedAt:o,wallClockEndedAt:i.toISOString(),wallClockDuration:n},tests:s?.map(C=>(s[0]?.time&&(u+=pe(s[0].time)),vi(C,t,u,r)))}}}async function Ji({inputFormat:t,framework:e,parsedXMLArray:r}){return t==="junit"?hc(e,r):new Map}async function hc(t,e){switch(t){case"node":return k(e);case"postman":return k(e);case"vitest":return k(e);case"wdio":return k(e);default:return R("Unsupported framework: %s",t),new Map}}var Wi=require("fs-extra"),qi=require("xml2js");async function Qi(t){let e=await Promise.all(t.map(o=>(0,Wi.readFile)(o,"utf-8"))),r=(await Promise.all(e.map(Oc))).filter(Boolean);return e.length!==r.length&&R("Some files could not be parsed. Enable debug logging for more details"),r}async function Oc(t){let e=t.trim();if(!e)return null;try{return await(0,qi.parseStringPromise)(e,{explicitArray:!1,mergeAttrs:!0})||null}catch(r){return c("Error parsing XML input",r),null}}function Xi(t){return{framework:t.inputFormat,frameworkVersion:t.frameworkVersion??null,frameworkConfig:{originFramework:t.framework,originFrameworkVersion:t.frameworkVersion}}}async function zi(){try{let t=ie();if(!t)throw new Error("Config is missing!");let e=t.outputDir?await st(t.outputDir):await _r(process.cwd(),".currents"),r=await st((0,pt.join)(e,"instances")),o=Xi(t);c("Report config:",o),O("[currents] Convertion files: %s",t.inputFiles.join(", ")),await _t((0,pt.join)(e,"config.json"),JSON.stringify(o));let n=await Qi(t.inputFiles);if(n.length===0)throw new Error("No valid XML JUnit report was found.");let i=ki(n);await _t(gt(e),JSON.stringify(i));let s=await Ji({inputFormat:t.inputFormat,framework:t.framework,parsedXMLArray:n}),p=await st((0,pt.join)(e,"artifacts")),u=process.cwd();await Promise.all(Array.from(s.values()).map(async m=>{if(await ae(m.artifacts,m.spec,p,u),m._stdout){let f=`${$(m.spec)}.stdout.txt`;await _t((0,pt.join)(p,f),m._stdout),m.artifacts||(m.artifacts=[]),m.artifacts.push({path:(0,pt.join)("artifacts",f),type:"stdout",contentType:"text/plain",level:"spec"}),delete m._stdout}for(let f of m.results.tests){await ae(f.artifacts,f.testId,p,u);for(let d of f.attempts)await ae(d.artifacts,f.testId+d.attempt,p,u)}})),await Promise.all(Array.from(s.entries()).map(([m,f])=>_t((0,pt.join)(r,`${$(m)}.json`),JSON.stringify(f)))),O("[currents] Conversion completed, report saved to: %s",e)}catch(t){throw c("Failed to convert: %o",t),t}}var yc=c.extend("cli");async function Zi(t){await N(async e=>{Pi(xi(e));let r=ie();yc("Config: %o",r),await zi()},t)}var ur="convert",Ac=t=>`
81
81
 
82
82
  ${es.default.bold("Examples")}
83
83
 
84
84
  Convert JUnit test reports to Currents format:
85
- ${g(`${t} ${mr} --input-format junit --input-file ./*.xml --framework postman`)}
86
- `,rs=t=>new ts.Command().name(mr).command(mr).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert reports from various testing frameworks to Currents format
87
- ${yc(t)}`).addOption(Hi).addOption(Ki).addOption(ji).addOption($i).addOption(Vi).addOption(Yi).action(r=>Zi(r));var Ac=`
85
+ ${g(`${t} ${ur} --input-format junit --input-file ./*.xml --framework postman`)}
86
+ `,rs=t=>new ts.Command().name(ur).command(ur).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert reports from various testing frameworks to Currents format
87
+ ${Ac(t)}`).addOption(Hi).addOption(Ki).addOption(ji).addOption($i).addOption(Vi).addOption(Yi).action(r=>Zi(r));var Uc=`
88
88
  ----------------------------------------------------
89
89
  \u{1F4D6} Documentation: https://docs.currents.dev
90
90
  \u{1F919} Support: support@currents.dev
91
91
  ----------------------------------------------------
92
- `,Rt="currents",ns=()=>new os.Command(Rt).version(mt).description(`Currents CLI ${Ac}`).addCommand(Di(Rt),{isDefault:!0}).addCommand(ri(Rt)).addCommand(zn(Rt)).addCommand(ui(Rt)).addCommand(rs(Rt));import("dotenv/config");function Uc(){ns().parse()}Uc();
92
+ `,Rt="currents",ns=()=>new os.Command(Rt).version(mt).description(`Currents CLI ${Uc}`).addCommand(Di(Rt),{isDefault:!0}).addCommand(ri(Rt)).addCommand(zn(Rt)).addCommand(ui(Rt)).addCommand(rs(Rt));import("dotenv/config");function Dc(){ns().parse()}Dc();
93
93
  /*! For license information please see index.js.LEGAL.txt */
94
94
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var ir=Object.create;var K=Object.defineProperty;var ar=Object.getOwnPropertyDescriptor;var cr=Object.getOwnPropertyNames;var Er=Object.getPrototypeOf,ur=Object.prototype.hasOwnProperty;var Ae=(e,t)=>{for(var r in t)K(e,r,{get:t[r],enumerable:!0})},he=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of cr(t))!ur.call(e,n)&&n!==r&&K(e,n,{get:()=>t[n],enumerable:!(o=ar(t,n))||o.enumerable});return e};var u=(e,t,r)=>(r=e!=null?ir(Er(e)):{},he(t||!e||!e.__esModule?K(r,"default",{value:e,enumerable:!0}):r,e)),pr=e=>he(K({},"__esModule",{value:!0}),e);var So={};Ae(So,{handleCurrentsReport:()=>nr});module.exports=pr(So);var Se=require("debug"),mr=u(require("fs-extra")),a=(0,Se.debug)("currents"),_r=null;function Ne(e){_r=e}var j={};Ae(j,{getNanoid:()=>lr,userFacingNanoid:()=>Ee});var ce=require("nanoid"),Be="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",lr=(e=16)=>(0,ce.customAlphabet)(Be,e)(),Ee=(0,ce.customAlphabet)(Be,12);var m=require("lodash");var Y=a.extend("ci"),Ir=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Rr=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),f=e=>(0,m.transform)(e,Rr,{}),fr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Tr=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),gr=()=>process.env.bamboo_buildNumber,dr=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Cr=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Ur=()=>!!(process.env.BUILD_ID&&process.env.PROJECT_ID&&process.env.PROJECT_NUMBER||process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT),Or=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Dr={appveyor:"APPVEYOR",azure:fr,awsCodeBuild:Tr,bamboo:gr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",concourse:dr,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Cr,goCD:"GO_JOB_NAME",jenkins:Or,googleCloud:Ur,semaphore:"SEMAPHORE",teamcity:"TEAMCITY_VERSION",travis:"TRAVIS",netlify:"NETLIFY"};function Ar(){let{env:e}=process;return(0,m.findKey)(Dr,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var Le=()=>({appveyor:f(["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:f(["AGENT_BUILDDIRECTORY","AGENT_ID","AGENT_JOBNAME","AGENT_JOBSTATUS","AGENT_MACHINENAME","AGENT_NAME","AGENT_OS","AGENT_OSARCHITECTURE","BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_BUILDURI","BUILD_CONTAINERID","BUILD_CRONSCHEDULE_DISPLAYNAME","BUILD_DEFINITIONNAME","BUILD_DEFINITIONVERSION","BUILD_QUEUEDBY","BUILD_QUEUEDBYID","BUILD_REASON","BUILD_REPOSITORY_ID","BUILD_REPOSITORY_NAME","BUILD_REPOSITORY_PROVIDER","BUILD_REPOSITORY_URI","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILD_SOURCEBRANCH","BUILD_SOURCEBRANCHNAME","BUILD_SOURCESDIRECTORY","BUILD_SOURCEVERSION","BUILD_SOURCEVERSIONAUTHOR","BUILD_SOURCEVERSIONMESSAGE","BUILD_STAGINGDIRECTORY","BUILD_TRIGGEREDBY_BUILDID","BUILD_TRIGGEREDBY_BUILDNUMBER","BUILD_TRIGGEREDBY_DEFINITIONID","BUILD_TRIGGEREDBY_DEFINITIONNAME","BUILD_TRIGGEREDBY_PROJECTID","COMMON_TESTRESULTSDIRECTORY","PIPELINE_WORKSPACE","SYSTEM_COLLECTIONID","SYSTEM_COLLECTIONURI","SYSTEM_DEFAULTWORKINGDIRECTORY","SYSTEM_DEFINITIONID","SYSTEM_HOSTTYPE","SYSTEM_JOBATTEMPT","SYSTEM_JOBDISPLAYNAME","SYSTEM_JOBID","SYSTEM_JOBNAME","SYSTEM_PHASEATTEMPT","SYSTEM_PHASEDISPLAYNAME","SYSTEM_PHASENAME","SYSTEM_PLANID","SYSTEM_PULLREQUEST_ISFORK","SYSTEM_PULLREQUEST_PULLREQUESTID","SYSTEM_PULLREQUEST_PULLREQUESTNUMBER","SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI","SYSTEM_PULLREQUEST_SOURCEBRANCH","SYSTEM_PULLREQUEST_SOURCECOMMITID","SYSTEM_PULLREQUEST_TARGETBRANCH","SYSTEM_PULLREQUEST_TARGETBRANCHNAME","SYSTEM_STAGEATTEMPT","SYSTEM_STAGEDISPLAYNAME","SYSTEM_STAGENAME","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","SYSTEM_TEAMPROJECT","SYSTEM_TEAMPROJECTID","SYSTEM_TIMELINEID"]),awsCodeBuild:f(["AWS_DEFAULT_REGION","AWS_REGION","CODEBUILD_BATCH_BUILD_IDENTIFIER","CODEBUILD_BUILD_ARN","CODEBUILD_BUILD_ID","CODEBUILD_BUILD_IMAGE","CODEBUILD_BUILD_NUMBER","CODEBUILD_BUILD_SUCCEEDING","CODEBUILD_BUILD_URL","CODEBUILD_INITIATOR","CODEBUILD_PROJECT_ARN","CODEBUILD_PUBLIC_BUILD_URL","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION","CODEBUILD_SRC_DIR","CODEBUILD_START_TIME","CODEBUILD_WEBHOOK_ACTOR_ACCOUNT_ID","CODEBUILD_WEBHOOK_BASE_REF","CODEBUILD_WEBHOOK_EVENT","CODEBUILD_WEBHOOK_HEAD_REF","CODEBUILD_WEBHOOK_MERGE_COMMIT","CODEBUILD_WEBHOOK_PREV_COMMIT","CODEBUILD_WEBHOOK_TRIGGER","CODEBUILD_WEBHOOK_LABEL","CODEBUILD_WEBHOOK_RUN_ID","CODEBUILD_WEBHOOK_JOB_ID","CODEBUILD_WEBHOOK_WORKFLOW_NAME","CODEBUILD_RUNNER_OWNER","CODEBUILD_RUNNER_REPO","CODEBUILD_RUNNER_REPO_DOMAIN","CODEBUILD_RUNNER_WITH_BUILDSPEC"]),bamboo:f(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:f(["CI","BITBUCKET_WORKSPACE","BITBUCKET_REPO_SLUG","BITBUCKET_REPO_UUID","BITBUCKET_REPO_FULL_NAME","BITBUCKET_REPO_IS_PRIVATE","BITBUCKET_REPO_OWNER","BITBUCKET_REPO_OWNER_UUID","BITBUCKET_PROJECT_KEY","BITBUCKET_PROJECT_UUID","BITBUCKET_BUILD_NUMBER","BITBUCKET_PIPELINE_UUID","BITBUCKET_STEP_UUID","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_STEP_TRIGGERER_UUID","BITBUCKET_PARALLEL_STEP","BITBUCKET_PARALLEL_STEP_COUNT","BITBUCKET_CLONE_DIR","BITBUCKET_COMMIT","BITBUCKET_BRANCH","BITBUCKET_TAG","BITBUCKET_BOOKMARK","BITBUCKET_GIT_HTTP_ORIGIN","BITBUCKET_GIT_SSH_ORIGIN","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT","BITBUCKET_DEPLOYMENT_ENVIRONMENT","BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID","BITBUCKET_EXIT_CODE"]),buildkite:f(["BUILDKITE_ORGANIZATION_SLUG","BUILDKITE_PIPELINE_ID","BUILDKITE_PIPELINE_NAME","BUILDKITE_PIPELINE_SLUG","BUILDKITE_PIPELINE_DEFAULT_BRANCH","BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_BRANCH","BUILDKITE_TAG","BUILDKITE_COMMIT","BUILDKITE_MESSAGE","BUILDKITE_BUILD_AUTHOR","BUILDKITE_BUILD_AUTHOR_EMAIL","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_LABEL","BUILDKITE_COMMAND","BUILDKITE_STEP_ID","BUILDKITE_STEP_KEY","BUILDKITE_PARALLEL_JOB","BUILDKITE_PARALLEL_JOB_COUNT","BUILDKITE_RETRY_COUNT","BUILDKITE_COMPUTE_TYPE","BUILDKITE_CLUSTER_NAME","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH","BUILDKITE_PULL_REQUEST_DRAFT","BUILDKITE_PULL_REQUEST_LABELS","BUILDKITE_MERGE_QUEUE_BASE_BRANCH","BUILDKITE_MERGE_QUEUE_BASE_COMMIT","BUILDKITE_REBUILT_FROM_BUILD_ID","BUILDKITE_REBUILT_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_ID","BUILDKITE_TRIGGERED_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG"]),circle:f(["CI","CIRCLECI","CIRCLE_BRANCH","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PREVIOUS_BUILD_NUM","CIRCLE_JOB","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_JOB_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PIPELINE_ID","CIRCLE_ORGANIZATION_ID","CIRCLE_PROJECT_ID","CIRCLE_PROJECT_REPONAME","CIRCLE_PROJECT_USERNAME","CIRCLE_REPOSITORY_URL","CIRCLE_WORKING_DIRECTORY","CIRCLE_SHA1","CIRCLE_TAG","CIRCLE_USERNAME","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_PULL_REQUEST","CIRCLE_PULL_REQUESTS","CI_PULL_REQUEST"]),concourse:f(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:f(["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:f(["DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:f(["CI","GITHUB_ACTIONS","GITHUB_WORKFLOW","GITHUB_WORKFLOW_REF","GITHUB_WORKFLOW_SHA","GITHUB_ACTION","GITHUB_ACTION_PATH","GITHUB_ACTION_REPOSITORY","GITHUB_JOB","GITHUB_EVENT_NAME","GITHUB_EVENT_PATH","GITHUB_RUN_ID","GITHUB_RUN_NUMBER","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REPOSITORY_OWNER","GITHUB_REPOSITORY_OWNER_ID","GITHUB_REF","GITHUB_REF_NAME","GITHUB_REF_TYPE","GITHUB_REF_PROTECTED","GITHUB_BASE_REF","GITHUB_HEAD_REF","GITHUB_SHA","GITHUB_ACTOR","GITHUB_ACTOR_ID","GITHUB_TRIGGERING_ACTOR","GITHUB_SERVER_URL","GITHUB_API_URL","GITHUB_GRAPHQL_URL","GITHUB_WORKSPACE","GITHUB_RETENTION_DAYS","RUNNER_OS","RUNNER_ARCH","RUNNER_NAME","RUNNER_ENVIRONMENT","RUNNER_DEBUG"]),gitlab:f(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT","CI_MERGE_REQUEST_IID","CI_MERGE_REQUEST_PROJECT_URL","CI_MERGE_REQUEST_TITLE","CI_MERGE_REQUEST_SOURCE_BRANCH_NAME","CI_MERGE_REQUEST_TARGET_BRANCH_NAME","CI_OPEN_MERGE_REQUESTS"]),goCD:f(["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:f(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:f(["BRANCH_NAME","BUILD_DISPLAY_NAME","BUILD_ID","BUILD_NUMBER","BUILD_TAG","BUILD_URL","CHANGE_AUTHOR","CHANGE_AUTHOR_DISPLAY_NAME","CHANGE_AUTHOR_EMAIL","CHANGE_BRANCH","CHANGE_FORK","CHANGE_ID","CHANGE_TARGET","CHANGE_TITLE","CHANGE_URL","CI","EXECUTOR_NUMBER","JAVA_HOME","JENKINS_HOME","JENKINS_URL","JOB_BASE_NAME","JOB_NAME","JOB_URL","NODE_LABELS","NODE_NAME","RUN_ARTIFACTS_DISPLAY_URL","RUN_CHANGES_DISPLAY_URL","TAG_NAME","WORKSPACE","WORKSPACE_TMP","GIT_AUTHOR_EMAIL","GIT_AUTHOR_NAME","GIT_BRANCH","GIT_COMMIT","GIT_COMMITTER_EMAIL","GIT_COMMITTER_NAME","GIT_LOCAL_BRANCH","GIT_PREVIOUS_COMMIT","GIT_PREVIOUS_SUCCESSFUL_COMMIT","GIT_URL","ghprbActualCommit","ghprbGhRepository","ghprbPullId","ghprbPullLink","ghprbSourceBranch","ghprbTargetBranch","ghprbTriggerAuthorLogin"]),semaphore:f(["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"]),teamcity:null,travis:f(["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"]),netlify:f(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"])}),hr=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Ir(`
2
- `,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},snap:null,teamcity:null,travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL}}},Pe=e=>{let t=ye();return t?(0,m.chain)(e()).get(t).value():{}};function Sr(){return(0,m.chain)(Le()).omitBy(m.isNull).keys().value()}function Nr(e){return e&&Sr().includes(e)}function ye(){let e=Ar();return Y("detected CI provider name: %s",e),e||null}function Br(){return Pe(Le)}function Me(){return Pe(hr)}function xe(e){let t=Br(),r=ye(),o=Lr(e,r);return Y("detected CI provider: %s",r),Y("detected CI params: %O",t),Y("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Lr(e,t){return e?{source:"user",value:e}:Nr(t)?{source:"server",value:null}:{source:"random",value:`auto:${Ee()}`}}var we=require("@currents/commit-info"),ve=require("lodash");var V=require("lodash");var ue=a.extend("ci-git");function be(e){ue("git commit existing info: %O",e);let t=Me();ue("commit info from provider environment variables: %O",t);let r=(0,V.transform)(e,(o,n,s)=>{let c=n||(t?t[s]:null);return o[s]=(0,V.defaultTo)(c,null)});return ue("combined git and environment variables from provider: %O",r),r}var Pr=async()=>{let e=await(0,we.commitInfo)();return be({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Ge=(0,ve.memoize)(Pr);var Fe=u(require("getos")),He=require("lodash"),h=require("os"),ke=require("util"),yr=async()=>{if((0,h.platform)()==="linux")try{let e=await(0,ke.promisify)(Fe.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,h.release)()}catch{return(0,h.release)()}return(0,h.release)()},Mr=async()=>{let e=await yr();return{osName:(0,h.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,h.freemem)(),total:(0,h.totalmem)()}}},Ke=(0,He.memoize)(Mr);var je={name:"@currents/cmd",version:"1.11.0-beta.0",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",repository:{type:"git",url:"https://github.com/currents-dev/currents-reporter"},description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^30.4.1","@jest/types":"^30.4.1","@release-it/conventional-changelog":"^12.0.0","release-it":"^21.0.2","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^25.5.0","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14","@types/xxhashjs":"^0.2.4",jest:"^30.4.2",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.9.3",vitest:"^4.1.0"},dependencies:{"@commander-js/extra-typings":"^13.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"1.18.1","axios-retry":"4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^17.4.2",execa:"^9.5.1","fs-extra":"^11.3.4",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^30.2.0","jest-config":"^30.3.0",lodash:"^4.18.1",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.8.5","source-map-support":"^0.5.21",tmp:"^0.2.7","tmp-promise":"^3.0.3","ts-pattern":"^5.8.0",unzipper:"^0.12.3",uuid:"11.1.1",xml2js:"^0.6.2",xxhashjs:"^0.2.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var J=je.version;function br(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function S(e){return br(e,["recordKey","key"])}var wr=[];function pe(e){wr.push(e)}var g=u(require("chalk")),b=u(require("util"));var Ye=[],Ve=[];var Je=(...e)=>{let t=b.default.format(...e);pe(t),console.log(t)},vr=(...e)=>{let t=b.default.format(...e);pe(t),console.error(t)},$=Je,l=(...e)=>{let t=b.default.format(...e);return Ve.push(t),a("WARNING: ",t),Je(g.default.bgYellow.black(" WARNING "),t)};var I=(...e)=>{let t=b.default.format(...Gr(e));return Ye.push(t),a("ERROR: ",b.default.format(...e)),vr(g.default.bgRed.white(" ERROR "),t)};var Gr=e=>e.map(t=>t instanceof Error?t.message:t),W=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),un=g.default.cyan,pn=g.default.blueBright,mn=g.default.red,_n=g.default.yellow,ln=g.default.green,In=g.default.gray,Rn=g.default.white,fn=g.default.black,Tn=g.default.magenta,w=g.default.dim,gn=g.default.bold;var v=u(require("fs-extra")),me=require("path"),Hr=require("uuid");async function M(e){try{return await v.default.readJson(e)}catch(t){throw I("Error while reading JSON file: %s",e,t),I}}async function _e(e,t){try{return await v.default.writeFile(e,t,"utf8"),e}catch(r){throw I(`Error writing file at ${e}:`,r),r}}async function $e(e){try{return await v.default.ensureDir(e),a("Folder created",e),e}catch(t){throw I(`Failed to create folder at ${e}:`,t),t}}async function We(e,t){try{return await v.default.ensureDir((0,me.dirname)(t)),await v.default.copy(e,t),a("File copied from %s to %s",e,t),t}catch(r){throw I(`Failed to copy file from ${e} to ${t}:`,r),r}}var Qe=u(require("crypto"));function qe(e){return Qe.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var rr=u(require("axios")),Oe=u(require("fs-extra")),se=u(require("path")),or=u(require("semver"));var _t=u(require("lodash"));var nt=u(require("axios")),st=u(require("axios-retry")),Te=u(require("lodash"));var Xe=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ze=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Ze=()=>3e4;var le=require("axios"),Ie=u(require("pretty-ms"));var et=a.extend("http"),Q=e=>[3*1e3,15*1e3,30*1e3][e-1],tt=e=>(et("isRetriableError: %o",{message:e.message,code:"code"in e?e.code:void 0,status:"response"in e?e.response?.status:void 0,headers:"response"in e?e.response?.headers:void 0,data:"response"in e?e.response?.data:void 0,isAxiosError:(0,le.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,le.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),q=()=>3;function rt(e,t,r){et("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ie.default)(Q(e)),e,q()),l("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ie.default)(Q(e)),e,q())}var Re=a.extend("http");var fe={api:null,restApi:null};function kr(e){let t=e==="api"?Xe():ze();Re("client base url: %s",t);let r=nt.default.create({baseURL:t,timeout:Ze(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":J}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let s={...Te.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?Re("network request retry: %o",ot({...s,baseURL:t,isRetry:!0})):Re("network request: %o",ot(s)),o}),(0,st.default)(r,{retries:q(),retryCondition:tt,retryDelay:Q,shouldResetTimeout:!0,onRetry:rt}),r}function it(e){return fe[e]===null&&(fe[e]=kr(e)),fe[e]}function ot(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Kr(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Kr(e){return e?.results?.raw?S({...e,results:{...e.results,raw:"***"}}):Te.default.isPlainObject(e)?S(e):e}var Et=require("axios"),ut=u(require("lodash")),T=require("ts-pattern");function pt(e){(0,T.match)(e).when(Et.isAxiosError,jr).otherwise(()=>{l("Unexpected error while sending network request: %s",e)})}function jr(e){return(0,T.match)(e).with({code:"ECONNABORTED"},()=>{l("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{l("Network connection aborted")}).with({code:"ECONNRESET"},()=>{l("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{l("Network connection timeout")}).with({response:T.P.not(T.P.nullish)},t=>{Yr(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{l(`[currents] Unexpected network error: %s
1
+ "use strict";var ir=Object.create;var K=Object.defineProperty;var ar=Object.getOwnPropertyDescriptor;var cr=Object.getOwnPropertyNames;var Er=Object.getPrototypeOf,ur=Object.prototype.hasOwnProperty;var he=(e,t)=>{for(var r in t)K(e,r,{get:t[r],enumerable:!0})},Se=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of cr(t))!ur.call(e,n)&&n!==r&&K(e,n,{get:()=>t[n],enumerable:!(o=ar(t,n))||o.enumerable});return e};var u=(e,t,r)=>(r=e!=null?ir(Er(e)):{},Se(t||!e||!e.__esModule?K(r,"default",{value:e,enumerable:!0}):r,e)),pr=e=>Se(K({},"__esModule",{value:!0}),e);var No={};he(No,{handleCurrentsReport:()=>nr});module.exports=pr(No);var Ne=require("debug"),mr=u(require("fs-extra")),c=(0,Ne.debug)("currents"),_r=null;function Be(e){_r=e}var j={};he(j,{getNanoid:()=>lr,userFacingNanoid:()=>Ee});var ce=require("nanoid"),Le="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",lr=(e=16)=>(0,ce.customAlphabet)(Le,e)(),Ee=(0,ce.customAlphabet)(Le,12);var m=require("lodash");var Y=c.extend("ci"),Ir=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Rr=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),f=e=>(0,m.transform)(e,Rr,{}),fr=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Tr=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),dr=()=>process.env.bamboo_buildNumber,gr=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Cr=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Ur=()=>!!(process.env.BUILD_ID&&process.env.PROJECT_ID&&process.env.PROJECT_NUMBER||process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT),Or=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Dr={appveyor:"APPVEYOR",azure:fr,awsCodeBuild:Tr,bamboo:dr,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",concourse:gr,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Cr,goCD:"GO_JOB_NAME",jenkins:Or,googleCloud:Ur,semaphore:"SEMAPHORE",teamcity:"TEAMCITY_VERSION",travis:"TRAVIS",netlify:"NETLIFY"};function Ar(){let{env:e}=process;return(0,m.findKey)(Dr,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var Pe=()=>({appveyor:f(["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:f(["AGENT_BUILDDIRECTORY","AGENT_ID","AGENT_JOBNAME","AGENT_JOBSTATUS","AGENT_MACHINENAME","AGENT_NAME","AGENT_OS","AGENT_OSARCHITECTURE","BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_BUILDURI","BUILD_CONTAINERID","BUILD_CRONSCHEDULE_DISPLAYNAME","BUILD_DEFINITIONNAME","BUILD_DEFINITIONVERSION","BUILD_QUEUEDBY","BUILD_QUEUEDBYID","BUILD_REASON","BUILD_REPOSITORY_ID","BUILD_REPOSITORY_NAME","BUILD_REPOSITORY_PROVIDER","BUILD_REPOSITORY_URI","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILD_SOURCEBRANCH","BUILD_SOURCEBRANCHNAME","BUILD_SOURCESDIRECTORY","BUILD_SOURCEVERSION","BUILD_SOURCEVERSIONAUTHOR","BUILD_SOURCEVERSIONMESSAGE","BUILD_STAGINGDIRECTORY","BUILD_TRIGGEREDBY_BUILDID","BUILD_TRIGGEREDBY_BUILDNUMBER","BUILD_TRIGGEREDBY_DEFINITIONID","BUILD_TRIGGEREDBY_DEFINITIONNAME","BUILD_TRIGGEREDBY_PROJECTID","COMMON_TESTRESULTSDIRECTORY","PIPELINE_WORKSPACE","SYSTEM_COLLECTIONID","SYSTEM_COLLECTIONURI","SYSTEM_DEFAULTWORKINGDIRECTORY","SYSTEM_DEFINITIONID","SYSTEM_HOSTTYPE","SYSTEM_JOBATTEMPT","SYSTEM_JOBDISPLAYNAME","SYSTEM_JOBID","SYSTEM_JOBNAME","SYSTEM_PHASEATTEMPT","SYSTEM_PHASEDISPLAYNAME","SYSTEM_PHASENAME","SYSTEM_PLANID","SYSTEM_PULLREQUEST_ISFORK","SYSTEM_PULLREQUEST_PULLREQUESTID","SYSTEM_PULLREQUEST_PULLREQUESTNUMBER","SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI","SYSTEM_PULLREQUEST_SOURCEBRANCH","SYSTEM_PULLREQUEST_SOURCECOMMITID","SYSTEM_PULLREQUEST_TARGETBRANCH","SYSTEM_PULLREQUEST_TARGETBRANCHNAME","SYSTEM_STAGEATTEMPT","SYSTEM_STAGEDISPLAYNAME","SYSTEM_STAGENAME","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI","SYSTEM_TEAMPROJECT","SYSTEM_TEAMPROJECTID","SYSTEM_TIMELINEID"]),awsCodeBuild:f(["AWS_DEFAULT_REGION","AWS_REGION","CODEBUILD_BATCH_BUILD_IDENTIFIER","CODEBUILD_BUILD_ARN","CODEBUILD_BUILD_ID","CODEBUILD_BUILD_IMAGE","CODEBUILD_BUILD_NUMBER","CODEBUILD_BUILD_SUCCEEDING","CODEBUILD_BUILD_URL","CODEBUILD_INITIATOR","CODEBUILD_PROJECT_ARN","CODEBUILD_PUBLIC_BUILD_URL","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION","CODEBUILD_SRC_DIR","CODEBUILD_START_TIME","CODEBUILD_WEBHOOK_ACTOR_ACCOUNT_ID","CODEBUILD_WEBHOOK_BASE_REF","CODEBUILD_WEBHOOK_EVENT","CODEBUILD_WEBHOOK_HEAD_REF","CODEBUILD_WEBHOOK_MERGE_COMMIT","CODEBUILD_WEBHOOK_PREV_COMMIT","CODEBUILD_WEBHOOK_TRIGGER","CODEBUILD_WEBHOOK_LABEL","CODEBUILD_WEBHOOK_RUN_ID","CODEBUILD_WEBHOOK_JOB_ID","CODEBUILD_WEBHOOK_WORKFLOW_NAME","CODEBUILD_RUNNER_OWNER","CODEBUILD_RUNNER_REPO","CODEBUILD_RUNNER_REPO_DOMAIN","CODEBUILD_RUNNER_WITH_BUILDSPEC"]),bamboo:f(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:f(["CI","BITBUCKET_WORKSPACE","BITBUCKET_REPO_SLUG","BITBUCKET_REPO_UUID","BITBUCKET_REPO_FULL_NAME","BITBUCKET_REPO_IS_PRIVATE","BITBUCKET_REPO_OWNER","BITBUCKET_REPO_OWNER_UUID","BITBUCKET_PROJECT_KEY","BITBUCKET_PROJECT_UUID","BITBUCKET_BUILD_NUMBER","BITBUCKET_PIPELINE_UUID","BITBUCKET_STEP_UUID","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_STEP_TRIGGERER_UUID","BITBUCKET_PARALLEL_STEP","BITBUCKET_PARALLEL_STEP_COUNT","BITBUCKET_CLONE_DIR","BITBUCKET_COMMIT","BITBUCKET_BRANCH","BITBUCKET_TAG","BITBUCKET_BOOKMARK","BITBUCKET_GIT_HTTP_ORIGIN","BITBUCKET_GIT_SSH_ORIGIN","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT","BITBUCKET_DEPLOYMENT_ENVIRONMENT","BITBUCKET_DEPLOYMENT_ENVIRONMENT_UUID","BITBUCKET_EXIT_CODE"]),buildkite:f(["BUILDKITE_ORGANIZATION_SLUG","BUILDKITE_PIPELINE_ID","BUILDKITE_PIPELINE_NAME","BUILDKITE_PIPELINE_SLUG","BUILDKITE_PIPELINE_DEFAULT_BRANCH","BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_BRANCH","BUILDKITE_TAG","BUILDKITE_COMMIT","BUILDKITE_MESSAGE","BUILDKITE_BUILD_AUTHOR","BUILDKITE_BUILD_AUTHOR_EMAIL","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_LABEL","BUILDKITE_COMMAND","BUILDKITE_STEP_ID","BUILDKITE_STEP_KEY","BUILDKITE_PARALLEL_JOB","BUILDKITE_PARALLEL_JOB_COUNT","BUILDKITE_RETRY_COUNT","BUILDKITE_COMPUTE_TYPE","BUILDKITE_CLUSTER_NAME","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH","BUILDKITE_PULL_REQUEST_DRAFT","BUILDKITE_PULL_REQUEST_LABELS","BUILDKITE_MERGE_QUEUE_BASE_BRANCH","BUILDKITE_MERGE_QUEUE_BASE_COMMIT","BUILDKITE_REBUILT_FROM_BUILD_ID","BUILDKITE_REBUILT_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_ID","BUILDKITE_TRIGGERED_FROM_BUILD_NUMBER","BUILDKITE_TRIGGERED_FROM_BUILD_PIPELINE_SLUG"]),circle:f(["CI","CIRCLECI","CIRCLE_BRANCH","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PREVIOUS_BUILD_NUM","CIRCLE_JOB","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_JOB_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PIPELINE_ID","CIRCLE_ORGANIZATION_ID","CIRCLE_PROJECT_ID","CIRCLE_PROJECT_REPONAME","CIRCLE_PROJECT_USERNAME","CIRCLE_REPOSITORY_URL","CIRCLE_WORKING_DIRECTORY","CIRCLE_SHA1","CIRCLE_TAG","CIRCLE_USERNAME","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_PULL_REQUEST","CIRCLE_PULL_REQUESTS","CI_PULL_REQUEST"]),concourse:f(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:f(["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:f(["DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:f(["CI","GITHUB_ACTIONS","GITHUB_WORKFLOW","GITHUB_WORKFLOW_REF","GITHUB_WORKFLOW_SHA","GITHUB_ACTION","GITHUB_ACTION_PATH","GITHUB_ACTION_REPOSITORY","GITHUB_JOB","GITHUB_EVENT_NAME","GITHUB_EVENT_PATH","GITHUB_RUN_ID","GITHUB_RUN_NUMBER","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REPOSITORY_OWNER","GITHUB_REPOSITORY_OWNER_ID","GITHUB_REF","GITHUB_REF_NAME","GITHUB_REF_TYPE","GITHUB_REF_PROTECTED","GITHUB_BASE_REF","GITHUB_HEAD_REF","GITHUB_SHA","GITHUB_ACTOR","GITHUB_ACTOR_ID","GITHUB_TRIGGERING_ACTOR","GITHUB_SERVER_URL","GITHUB_API_URL","GITHUB_GRAPHQL_URL","GITHUB_WORKSPACE","GITHUB_RETENTION_DAYS","RUNNER_OS","RUNNER_ARCH","RUNNER_NAME","RUNNER_ENVIRONMENT","RUNNER_DEBUG"]),gitlab:f(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT","CI_MERGE_REQUEST_IID","CI_MERGE_REQUEST_PROJECT_URL","CI_MERGE_REQUEST_TITLE","CI_MERGE_REQUEST_SOURCE_BRANCH_NAME","CI_MERGE_REQUEST_TARGET_BRANCH_NAME","CI_OPEN_MERGE_REQUESTS"]),goCD:f(["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:f(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:f(["BRANCH_NAME","BUILD_DISPLAY_NAME","BUILD_ID","BUILD_NUMBER","BUILD_TAG","BUILD_URL","CHANGE_AUTHOR","CHANGE_AUTHOR_DISPLAY_NAME","CHANGE_AUTHOR_EMAIL","CHANGE_BRANCH","CHANGE_FORK","CHANGE_ID","CHANGE_TARGET","CHANGE_TITLE","CHANGE_URL","CI","EXECUTOR_NUMBER","JAVA_HOME","JENKINS_HOME","JENKINS_URL","JOB_BASE_NAME","JOB_NAME","JOB_URL","NODE_LABELS","NODE_NAME","RUN_ARTIFACTS_DISPLAY_URL","RUN_CHANGES_DISPLAY_URL","TAG_NAME","WORKSPACE","WORKSPACE_TMP","GIT_AUTHOR_EMAIL","GIT_AUTHOR_NAME","GIT_BRANCH","GIT_COMMIT","GIT_COMMITTER_EMAIL","GIT_COMMITTER_NAME","GIT_LOCAL_BRANCH","GIT_PREVIOUS_COMMIT","GIT_PREVIOUS_SUCCESSFUL_COMMIT","GIT_URL","ghprbActualCommit","ghprbGhRepository","ghprbPullId","ghprbPullLink","ghprbSourceBranch","ghprbTargetBranch","ghprbTriggerAuthorLogin"]),semaphore:f(["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"]),teamcity:null,travis:f(["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"]),netlify:f(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"])}),hr=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Ir(`
2
+ `,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},snap:null,teamcity:null,travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL}}},ye=e=>{let t=Me();return t?(0,m.chain)(e()).get(t).value():{}};function Sr(){return(0,m.chain)(Pe()).omitBy(m.isNull).keys().value()}function Nr(e){return e&&Sr().includes(e)}function Me(){let e=Ar();return Y("detected CI provider name: %s",e),e||null}function Br(){return ye(Pe)}function xe(){return ye(hr)}function be(e){let t=Br(),r=Me(),o=Lr(e,r);return Y("detected CI provider: %s",r),Y("detected CI params: %O",t),Y("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Lr(e,t){return e?{source:"user",value:e}:Nr(t)?{source:"server",value:null}:{source:"random",value:`auto:${Ee()}`}}var ve=require("@currents/commit-info"),Ge=require("lodash");var V=require("lodash");var ue=c.extend("ci-git");function we(e){ue("git commit existing info: %O",e);let t=xe();ue("commit info from provider environment variables: %O",t);let r=(0,V.transform)(e,(o,n,s)=>{let i=n||(t?t[s]:null);return o[s]=(0,V.defaultTo)(i,null)});return ue("combined git and environment variables from provider: %O",r),r}var Pr=async()=>{let e=await(0,ve.commitInfo)();return we({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Fe=(0,Ge.memoize)(Pr);var He=u(require("getos")),ke=require("lodash"),h=require("os"),Ke=require("util"),yr=async()=>{if((0,h.platform)()==="linux")try{let e=await(0,Ke.promisify)(He.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,h.release)()}catch{return(0,h.release)()}return(0,h.release)()},Mr=async()=>{let e=await yr();return{osName:(0,h.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,h.freemem)(),total:(0,h.totalmem)()}}},je=(0,ke.memoize)(Mr);var Ye={name:"@currents/cmd",version:"1.11.0-beta.2",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",repository:{type:"git",url:"https://github.com/currents-dev/currents-reporter"},description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',types:"tsc --noEmit",build:"tsup-node --minify --dts",dev:"tsup-node --watch --dts",release:"release-it","publish:npm":"npm run rm && npm run build && ./publish.js"},devDependencies:{"@jest/reporters":"^30.4.1","@jest/types":"^30.4.1","@release-it/conventional-changelog":"^12.0.0","release-it":"^21.0.2","@types/archiver":"^6.0.3","@types/async-retry":"^1.4.9","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.16","@types/node":"^25.5.0","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.11","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14","@types/xxhashjs":"^0.2.4",jest:"^30.4.2",rimraf:"^6.0.1",tsup:"^8.3.5",typescript:"^5.9.3",vitest:"^4.1.0"},dependencies:{"@commander-js/extra-typings":"^13.1.0","@currents/commit-info":"1.1.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"1.18.1","axios-retry":"4.5.0",chalk:"^4.1.2",commander:"^13.1.0",debug:"^4.4.0",dotenv:"^17.4.2",execa:"^9.5.1","fs-extra":"^11.3.4",getos:"^3.2.1",globby:"^11.1.0","https-proxy-agent":"^7.0.4","jest-cli":"^30.2.0","jest-config":"^30.3.0",lodash:"^4.18.1",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.8.5","source-map-support":"^0.5.21",tmp:"^0.2.7","tmp-promise":"^3.0.3","ts-pattern":"^5.8.0",unzipper:"^0.12.3",uuid:"11.1.1",xml2js:"^0.6.2",xxhashjs:"^0.2.2"},bin:{currents:"./dist/bin/index.js","currents-cli":"./dist/bin/index.js"},files:["dist","!**/*.map","!**/*/*.map"],keywords:["cloud test dashboard","test reporter","test results","currents","currents dashboard","ci"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js",types:"./dist/index.d.ts"},"./discovery/jest":{import:"./dist/services/upload/discovery/jest/reporter.js",require:"./dist/services/upload/discovery/jest/reporter.js",types:"./dist/services/upload/discovery/jest/reporter.d.ts"},"./package.json":"./package.json"},"release-it":{npm:{publish:!1},github:{release:!0,releaseName:"${npm.name} v${version}"},plugins:{"@release-it/conventional-changelog":{preset:"angular",header:"# Changelog",ignoreVersion:!0,infile:"./CHANGELOG.md"}},git:{commitMessage:"chore: release ${npm.name} v${version}",tagName:"${npm.name}-v${version}"}}};var J=Ye.version;function br(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function S(e){return br(e,["recordKey","key"])}var wr=[];function pe(e){wr.push(e)}var d=u(require("chalk")),b=u(require("util"));var Ve=[],Je=[];var $e=(...e)=>{let t=b.default.format(...e);pe(t),console.log(t)},vr=(...e)=>{let t=b.default.format(...e);pe(t),console.error(t)},$=$e,l=(...e)=>{let t=b.default.format(...e);return Je.push(t),c("WARNING: ",t),$e(d.default.bgYellow.black(" WARNING "),t)};var I=(...e)=>{let t=b.default.format(...Gr(e));return Ve.push(t),c("ERROR: ",b.default.format(...e)),vr(d.default.bgRed.white(" ERROR "),t)};var Gr=e=>e.map(t=>t instanceof Error?t.message:t),W=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),pn=d.default.cyan,mn=d.default.blueBright,_n=d.default.red,ln=d.default.yellow,In=d.default.green,Rn=d.default.gray,fn=d.default.white,Tn=d.default.black,dn=d.default.magenta,w=d.default.dim,gn=d.default.bold;var v=u(require("fs-extra")),me=require("path"),Hr=require("uuid");async function M(e){try{return await v.default.readJson(e)}catch(t){throw I("Error while reading JSON file: %s",e,t),I}}async function _e(e,t){try{return await v.default.writeFile(e,t,"utf8"),e}catch(r){throw I(`Error writing file at ${e}:`,r),r}}async function We(e){try{return await v.default.ensureDir(e),c("Folder created",e),e}catch(t){throw I(`Failed to create folder at ${e}:`,t),t}}async function Qe(e,t){try{return await v.default.ensureDir((0,me.dirname)(t)),await v.default.copy(e,t),c("File copied from %s to %s",e,t),t}catch(r){throw I(`Failed to copy file from ${e} to ${t}:`,r),r}}var qe=u(require("crypto"));function Xe(e){return qe.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var rr=u(require("axios")),De=u(require("fs-extra")),se=u(require("path")),or=u(require("semver"));var lt=u(require("lodash"));var st=u(require("axios")),it=u(require("axios-retry")),Te=u(require("lodash"));var ze=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Ze=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",et=()=>3e4;var le=require("axios"),Ie=u(require("pretty-ms"));var tt=c.extend("http"),Q=e=>[3*1e3,15*1e3,30*1e3][e-1],rt=e=>(tt("isRetriableError: %o",{message:e.message,code:"code"in e?e.code:void 0,status:"response"in e?e.response?.status:void 0,headers:"response"in e?e.response?.headers:void 0,data:"response"in e?e.response?.data:void 0,isAxiosError:(0,le.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,le.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),q=()=>3;function ot(e,t,r){tt("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ie.default)(Q(e)),e,q()),l("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ie.default)(Q(e)),e,q())}var Re=c.extend("http");var fe={api:null,restApi:null};function kr(e){let t=e==="api"?ze():Ze();Re("client base url: %s",t);let r=st.default.create({baseURL:t,timeout:et(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.set({"x-cmd-version":J}),o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let s={...Te.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?Re("network request retry: %o",nt({...s,baseURL:t,isRetry:!0})):Re("network request: %o",nt(s)),o}),(0,it.default)(r,{retries:q(),retryCondition:rt,retryDelay:Q,shouldResetTimeout:!0,onRetry:ot}),r}function at(e){return fe[e]===null&&(fe[e]=kr(e)),fe[e]}function nt(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Kr(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Kr(e){return e?.results?.raw?S({...e,results:{...e.results,raw:"***"}}):Te.default.isPlainObject(e)?S(e):e}var ut=require("axios"),pt=u(require("lodash")),T=require("ts-pattern");function mt(e){(0,T.match)(e).when(ut.isAxiosError,jr).otherwise(()=>{l("Unexpected error while sending network request: %s",e)})}function jr(e){return(0,T.match)(e).with({code:"ECONNABORTED"},()=>{l("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{l("Network connection aborted")}).with({code:"ECONNRESET"},()=>{l("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{l("Network connection timeout")}).with({response:T.P.not(T.P.nullish)},t=>{Yr(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{l(`[currents] Unexpected network error: %s
4
4
  %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function Yr(e,{status:t,data:r}){(0,T.match)(t).with(401,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
5
5
  %o`,r)}).with(404,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 404 Not Found from cloud service`)}).with(429,()=>{l(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Vr(e,r)}).otherwise(()=>{l(`[currents] Unexpected network response: %s
6
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Vr(e,t){(0,T.match)(t).with({code:at.MISSING_SUITE,message:T.P.string,errors:T.P.array(T.P.string)},async r=>{let{message:o,errors:n}=r;W(1),I(...ct(o,n))}).with({code:at.RUN_EXPIRED,message:T.P.string},r=>{l(r.message)}).with({message:T.P.string,errors:T.P.array(T.P.string)},r=>{let{message:o,errors:n}=r;W(1),l(...ct(o,n)),W(1)}).otherwise(()=>{l(`[currents] Unexpected network response: %s
7
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var at={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function ct(e,t){return ut.default.isString(e)?t?.length===0?[e]:[e,`
6
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Vr(e,t){(0,T.match)(t).with({code:ct.MISSING_SUITE,message:T.P.string,errors:T.P.array(T.P.string)},async r=>{let{message:o,errors:n}=r;W(1),I(...Et(o,n))}).with({code:ct.RUN_EXPIRED,message:T.P.string},r=>{l(r.message)}).with({message:T.P.string,errors:T.P.array(T.P.string)},r=>{let{message:o,errors:n}=r;W(1),l(...Et(o,n)),W(1)}).otherwise(()=>{l(`[currents] Unexpected network response: %s
7
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var ct={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Et(e,t){return pt.default.isString(e)?t?.length===0?[e]:[e,`
8
8
  ${(t??[]).map(r=>` - ${r}`).join(`
9
9
  `)}
10
- `]:["Unexpected network error"]}var mt=a.extend("http");async function F(e,t,r=it){try{let o=await r(e).request(t);return mt("network response: %o",{..._t.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw mt("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}),pt(n),n}}var Rs=a.extend("api");var Os=a.extend("api");var It=require("util"),Rt=require("zlib");var lt=a.extend("api"),Jr=(0,It.promisify)(Rt.gzip);async function ft(e){try{lt("Run params: %o",S(e));let t=await $r(JSON.stringify(e));return F("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw lt("Failed to create the run:",t),t}}async function $r(e){try{return await Jr(e)}catch(t){throw I("Failed to compress run payload:",t),t}}var ws=a.extend("api");var ni=a.extend("config");var Wr=null;function Tt(){return Wr}var de=u(require("fs-extra")),N=require("path");var dt=u(require("fs-extra")),Ct=require("path"),gt=a.extend("detox"),Qr="detox.json";function Ut(e){return[...e].sort((t,r)=>(t.session??0)-(r.session??0)||t.invocations-r.invocations)}async function Ot(e){let t=(0,Ct.join)(e,Qr);try{let r=await dt.default.readJson(t);return gt("Detox manifest: %o",r),r}catch{gt("No Detox manifest at %s",t);return}}var X=require("path"),qr=a.extend("detox"),Dt=255,Xr=/[/\\?<>:*|"$\u0000-\u001f]/g,At=4;function ht(e){return zr(e)??Zr(e)}function zr({rootDir:e,fullName:t,status:r,invocations:o}){try{let n=require.resolve("detox/src/artifacts/utils/ArtifactPathBuilder",{paths:[process.cwd()]}),s=require(n),c=new s({rootDir:e});return(0,X.dirname)(c.buildPathForTestArtifact("test.mp4",{fullName:t,status:r,invocations:o}))}catch(n){qr("Detox path builder is not available: %o",n);return}}function Zr({rootDir:e,fullName:t,status:r,invocations:o}){let n=to(r),s=o>1?` (${o})`:"",c=t.slice(-Dt+n.length+s.length),E=`${n}${c}${s}`.replace(Xr,"_");return(0,X.join)(e,eo(E,Dt))}function eo(e,t){let r=Buffer.from(e,"utf8");return r.length<=t?e:r.subarray(0,t).toString("utf8").replace(/\uFFFD$/,"")}function to(e){switch(e){case"passed":return"\u2713 ";case"failed":return"\u2717 ";default:return""}}var Nt=u(require("fs-extra")),Bt=require("path"),St=a.extend("detox"),z="detox.trace.json",ro="ws-client-invocation";async function Lt(e){let t=(0,Bt.join)(e,z),r=new Map,o;try{o=await Nt.default.readJson(t)}catch{return St("No Detox trace at %s",t),r}if(!Array.isArray(o))return St("Unexpected Detox trace contents at %s",t),r;let n=oo(o);return no(o).forEach(({pid:c,ts:E,step:p})=>{n.filter(R=>R.pid===c&&E>=R.startTs&&E<=R.endTs).sort((R,d)=>R.startTs-d.startTs).pop()?.steps.push(p)}),n.forEach(({fullName:c,invocations:E,steps:p})=>{let _=r.get(c)??[];_.push({fullName:c,invocations:E,steps:p.sort((R,d)=>+new Date(R.startTime)-+new Date(d.startTime))}),r.set(c,_)}),r}function oo(e){let t=new Map,r=[];return e.forEach(o=>{let n=`${o.pid}:${o.tid}`;if(o.ph==="B"&&o.args?.context==="test"){let s=o.args?.fullName;if(typeof s!="string")return;t.set(n,{fullName:s,invocations:Number(o.args?.invocations??1),pid:Number(o.pid),startTs:Number(o.ts),endTs:Number.MAX_SAFE_INTEGER,steps:[]});return}if(o.ph==="E"&&t.has(n)){let s=t.get(n);t.delete(n),r.push({...s,endTs:Number(o.ts)})}}),[...r,...t.values()]}function no(e){let t=new Map,r=[];return e.forEach(o=>{if(!o.cat?.includes(ro))return;let n=`${o.pid}:${o.tid}`,s=t.get(n)??[];if(o.ph==="B"){s.push({name:o.name??"action",cat:o.cat,ts:Number(o.ts)}),t.set(n,s);return}if(o.ph==="E"){let c=s.pop();if(!c)return;r.push({pid:Number(o.pid),ts:c.ts,step:{title:c.name,category:"detox",startTime:new Date(c.ts/1e3).toISOString(),duration:Math.round((Number(o.ts)-c.ts)/1e3),steps:[]}})}}),r}var H=a.extend("detox"),Pt="artifacts",so={".mp4":{type:"video",contentType:"video/mp4"},".png":{type:"screenshot",contentType:"image/png"},".jpg":{type:"screenshot",contentType:"image/jpeg"},".log":{type:"attachment",contentType:"text/plain"},".txt":{type:"attachment",contentType:"text/plain"},".json":{type:"attachment",contentType:"application/json"},".viewhierarchy":{type:"attachment",contentType:"application/xml"}};async function yt({instances:e,reportDir:t,manifest:r}){let o=ao(r),n=await Lt(r.artifactsRootDir),s=await $e((0,N.join)(t,Pt)),c={artifacts:0,steps:0};for(let E of e)for(let p of E.results.tests){let _=o.get(p.testId);if(!_){H("No Detox manifest entry for %s",p.testId);continue}await co({test:p,manifestTest:_,rootDir:r.artifactsRootDir,artifactsDir:s,traceSlices:n.get(_.fullName)??[],result:c})}return c.artifacts+=await io({instances:e,rootDir:r.artifactsRootDir,artifactsDir:s}),c}async function io({instances:e,rootDir:t,artifactsDir:r}){if(!await de.default.pathExists((0,N.join)(t,z)))return 0;let[o]=await Mt(t,[z],r),n=e.map(s=>s.results.tests[0]).filter(s=>s!==void 0);return n.forEach(s=>{s.artifacts=[...s.artifacts??[],o]}),n.length}function ao(e){let t=new Map;return e.tests.forEach(r=>{t.set(r.fullName,[...t.get(r.fullName)??[],r.testId])}),new Map(e.tests.filter(r=>{let o=t.get(r.fullName)?.length===1;return o||H("Ambiguous Detox test name, skipping: %s",r.fullName),o}).map(r=>[r.testId,r]))}async function co({test:e,manifestTest:t,rootDir:r,artifactsDir:o,traceSlices:n,result:s}){let c=[...e.attempts].sort((_,R)=>_.attempt-R.attempt),E=Ut(t.attempts),p=1;for(let[_,R]of E.entries()){let d=c[_];if(!d){H("No reported attempt %d of %s",_,t.fullName);continue}let O=await Eo({fullName:t.fullName,status:R.status,rootDir:r,artifactsDir:o,fromInvocation:p});O&&(p=O.invocation+1,d.artifacts=[...d.artifacts??[],...O.artifacts],s.artifacts+=O.artifacts.length);let x=po(n,_,O?.invocation);x.length&&(d.steps=[...d.steps??[],...x],s.steps+=x.length)}}async function Eo({fullName:e,status:t,rootDir:r,artifactsDir:o,fromInvocation:n}){for(let s=n;s<n+At;s++){let c=ht({rootDir:r,fullName:e,status:t,invocations:s}),E=await uo(c);if(E)return{invocation:s,artifacts:await Mt(c,E,o)}}H("No Detox artifacts for %s [%s]",e,t)}async function uo(e){try{return(await de.default.readdir(e)).sort()}catch{return}}async function Mt(e,t,r){let o=[];for(let n of t){let s=so[(0,N.extname)(n)];if(!s){H("Skipping unsupported Detox artifact %s",n);continue}let c=(0,N.join)(e,n),E=`${qe(c)}${(0,N.extname)(n)}`;await We(c,(0,N.join)(r,E)),o.push({...s,path:(0,N.join)(Pt,E),name:n})}return o}function po(e,t,r){return((r===void 0?void 0:e.find(s=>s.invocations===r))??[...e].sort((s,c)=>s.invocations-c.invocations)[t])?.steps??[]}var L=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Yt=u(require("fs-extra")),Vt=require("jest-cli"),Jt=u(require("tmp"));var Kt=require("lodash");function xt(e){let t=[];for(let[r,o]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&t.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{t.push(`--${r}=${n}`)}):t.push(`--${r}=${o}`));return t.join(" ")}var bt=require("lodash"),mo=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function wt(e){return(0,bt.omit)(e,...mo)}var Ft=u(require("fs")),Ht=require("jest-config"),Ce=require("lodash"),Ue=u(require("path"));function Z(e,t){return(...r)=>new Promise((o,n)=>{let s=0,c=()=>{s++;try{let E=e(...r);o(E)}catch(E){if(s>=t.length)n(E);else{let p=t[s-1];setTimeout(c,p)}}};c()})}var vt=u(require("fs-extra")),_o=u(require("path"));async function ee(e){let t=await vt.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Gt=a.extend("jest-discovery");async function kt(e){try{let{config:t,configPath:r}=await(0,Ht.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,Ce.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(p=>typeof p!="string"?(0,Ce.omit)(p,n):p)),s.rootDir&&Object.keys(s).length===1)return null;let c=Ue.default.resolve(r?Ue.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.cjs`),E=`module.exports=${JSON.stringify(s,null,2)}`;return Gt("configFileContent: %O",E),Ft.default.writeFileSync(c,E),await Z(ee,[200,200,200,200,200,1e3])(c),c}catch(t){return I("Failed to recreate the config file"),Gt("error %o",t),null}}async function jt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=wt(r),n=xt(o),s=r.config,c=await kt(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(p=>!(0,Kt.isEmpty)(p)),configFilePath:c}}var lo=a.extend("jest-discovery");async function $t(e,t){console.time(w("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await jt(t);try{let n=Jt.default.fileSync({postfix:".json"});return lo("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Vt.run)(r.concat(["--openHandlesTimeout=0"])),await Z(ee,Array.from({length:300},()=>100))(n.name),console.timeEnd(w("@currents/jest:fullTestSuite-ready")),await M(n.name)}catch(n){return I("Failed to obtain the jest full test suite:",n),[]}finally{o&&Yt.default.unlinkSync(o)}}var te=class extends L{constructor(t){super(t)}async getFullTestSuite(){return $t(this.config.frameworkConfig,this.config.cliArgs)}};var Qt=u(require("fs-extra"));var Wt=u(require("path"));function re(e){return Wt.default.join(e,"fullTestSuite.json")}var Io=a.extend("junit-discovery");async function qt(e){console.time(w("@currents/junit:fullTestSuite-ready"));try{Io("running scanner: %o",e);let t=re(e);process.env.CURRENTS_DISCOVERY_PATH=t;let r=Qt.default.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return I("Failed to obtain the junit full test suite:",t),[]}}var oe=class extends L{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return qt(this.reportDir)}};function Xt(e,t){switch(e.framework){case"jest":return new te(e);case"junit":return new oe(e,t);default:return new L(e)}}var G=u(require("fs-extra")),B=u(require("path"));async function zt(e){let t=await Ro(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??B.default.join(t,"config.json")}}async function Ro(e){return e?(await ne(e),e):fo((0,B.join)(process.cwd(),".currents"))}async function fo(e){let t=await G.default.readdir(e),r=null;for(let o of t){let n=B.default.join(e,o),s=await G.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,B.resolve)(e,r.name):null}async function ne(e){try{return await G.default.pathExists(e)}catch{return I("Error checking if path exists:",I),!1}}async function Zt(e){let t=B.default.join(e,"instances");return To(t)}async function To(e){let t=await G.default.readdir(e),r=[];for(let o of t){let n=B.default.join(e,o);(await G.default.stat(n)).isFile()&&r.push(n)}return r}var go=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),er=(e,t=1048576)=>{let r=[],o=[],n=0;for(let s of e){let c=go(s);n+c>t&&(r.push(o),o=[],n=0),o.push(s),n+=c}return o.length>0&&r.push(o),r};var Co=3e4;async function nr(){let e=Tt();if(!e)throw new Error("Currents config is missing!");let t=await zt(e);Ne(Oo(t.reportDir)),a("Reporter options: %o",t),$("Report directory: %s",t.reportDir);let r=await M(t.configFilePath);a("Report config: %o",r);let o=await Zt(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Uo(t.reportDir),s=await ne(n),c=re(t.reportDir),E=null;if(s){let C=await M(n);l("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate})}if(await ne(c)&&(E=await M(c),a("Full test suite file detected: %s",c)),E)a("The discovery stage was skipped");else{if(E=await Xt(r,t.reportDir).getFullTestSuite(),Do(E))throw new Error("Failed to discover the full test suite!");await _e(c,JSON.stringify(E))}let _=E.length===1?E[0].name:null,R={currents:e},d={type:r.framework,version:r.frameworkVersion,clientVersion:J,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},O=j.userFacingNanoid(),x=xe(e.ciBuildId),P={};for await(let C of o){let D=await M(C);P[D.groupId]||(P[D.groupId]=[]),P[D.groupId].push(D)}let De=await Ot(t.reportDir);if(De){let C=await yt({instances:Object.values(P).flat(),reportDir:t.reportDir,manifest:De});$("[currents] Attached %d Detox artifacts and %d steps",C.artifacts,C.steps)}let k=new Map;Object.values(P).forEach(C=>{C.forEach(D=>{D.artifacts?.forEach(A=>{A&&k.set(A.path,A.contentType)}),D.results.tests.forEach(A=>{A.artifacts?.forEach(U=>{U&&k.set(U.path,U.contentType)}),A.attempts.forEach(U=>{U.artifacts?.forEach(y=>{y&&k.set(y.path,y.contentType)})})})})});for await(let C of Object.keys(P)){let D=P[C],A=C;_&&(a("Default group found: %s, overwriting the group in the results",_),A=_,D=D.map(U=>({...U,groupId:_})));try{let U=er(D),y=await tr({ci:x,group:A,instances:[],fullTestSuite:E,config:R,machineId:O,framework:d});for(let ie=0;ie<U.length;ie++){let ae=await tr({ci:x,group:A,instances:U[ie],fullTestSuite:[],config:R,machineId:O,framework:d});ae.artifactUploadUrls&&ae.artifactUploadUrls.length>0&&await Ao(ae.artifactUploadUrls,t.reportDir,k)}a("Api response: %o",y),$("[%s] Run created: %s",A,y.runUrl);let sr={response:y,isoDate:new Date().toISOString()};await _e(n,JSON.stringify(sr)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(U){throw a("Failed to upload the results to the dashboard"),U}}}async function tr({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:c}){let E=await Ge(),p=await Ke(),_={browserName:"node",browserVersion:or.default.coerce(process.version)?.version},{currents:R}=n,O={platform:{..._,...p},ci:e,commit:E,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??s,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",S(O)),ft(O)}function Uo(e){return se.default.join(e,"upload.marker.json")}function Oo(e){return se.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Do(e){return e.length===0||e.some(t=>t.tests.length===0)}async function Ao(e,t,r){a("Uploading %d artifacts",e.length),await Promise.all(e.map(o=>{let n=se.default.join(t,o.path),s=r.get(o.path)||"application/octet-stream";return ho(n,s,o.uploadUrl)}))}var ho=async(e,t,r)=>{try{if(!await Oe.default.pathExists(e)){l("Artifact file not found: %s",e);return}let o=await Oe.default.readFile(e);await rr.default.put(r,o,{headers:{"Content-Type":t},timeout:Co})}catch(o){a("Failed to upload artifact %s: %o",e,o)}};0&&(module.exports={handleCurrentsReport});
10
+ `]:["Unexpected network error"]}var _t=c.extend("http");async function F(e,t,r=at){try{let o=await r(e).request(t);return _t("network response: %o",{...lt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw _t("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}),mt(n),n}}var fs=c.extend("api");var Ds=c.extend("api");var Rt=require("util"),ft=require("zlib");var It=c.extend("api"),Jr=(0,Rt.promisify)(ft.gzip);async function Tt(e){try{It("Run params: %o",S(e));let t=await $r(JSON.stringify(e));return F("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw It("Failed to create the run:",t),t}}async function $r(e){try{return await Jr(e)}catch(t){throw I("Failed to compress run payload:",t),t}}var vs=c.extend("api");var si=c.extend("config");var Wr=null;function dt(){return Wr}var Ce=u(require("fs-extra")),N=require("path");var gt=u(require("fs-extra")),Ct=require("path"),ge=c.extend("detox"),Qr="detox.json";function Ut(e){return[...e].sort((t,r)=>(t.session??0)-(r.session??0)||t.invocations-r.invocations)}async function Ot(e){let t=(0,Ct.join)(e,Qr);try{let r=await gt.default.readJson(t);if(typeof r?.artifactsRootDir!="string"||!Array.isArray(r?.tests)){ge("Unexpected Detox manifest contents at %s",t);return}return ge("Detox manifest: %o",r),r}catch{ge("No Detox manifest at %s",t);return}}var X=require("path"),qr=c.extend("detox"),Dt=255,Xr=/[/\\?<>:*|"$\u0000-\u001f]/g,At=4;function ht(e){return zr(e)??Zr(e)}function zr({rootDir:e,fullName:t,status:r,invocations:o}){try{let n=require.resolve("detox/src/artifacts/utils/ArtifactPathBuilder",{paths:[process.cwd()]}),s=require(n),i=new s({rootDir:e});return(0,X.dirname)(i.buildPathForTestArtifact("test.mp4",{fullName:t,status:r,invocations:o}))}catch(n){qr("Detox path builder is not available: %o",n);return}}function Zr({rootDir:e,fullName:t,status:r,invocations:o}){let n=to(r),s=o>1?` (${o})`:"",i=t.slice(-Dt+n.length+s.length),E=`${n}${i}${s}`.replace(Xr,"_");return(0,X.join)(e,eo(E,Dt))}function eo(e,t){let r=Buffer.from(e,"utf8");return r.length<=t?e:r.subarray(0,t).toString("utf8").replace(/\uFFFD$/,"")}function to(e){switch(e){case"passed":return"\u2713 ";case"failed":return"\u2717 ";default:return""}}var Nt=u(require("fs-extra")),Bt=require("path"),St=c.extend("detox"),z="detox.trace.json",ro="ws-client-invocation";async function Lt(e){let t=(0,Bt.join)(e,z),r=new Map,o;try{o=await Nt.default.readJson(t)}catch{return St("No Detox trace at %s",t),r}if(!Array.isArray(o))return St("Unexpected Detox trace contents at %s",t),r;let n=oo(o);return so(o).forEach(({pid:i,ts:E,step:p})=>{n.filter(R=>R.pid===i&&E>=R.startTs&&E<=R.endTs).sort((R,g)=>R.startTs-g.startTs).pop()?.steps.push(p)}),n.forEach(({fullName:i,invocations:E,steps:p})=>{let _=r.get(i)??[];_.push({fullName:i,invocations:E,steps:p.sort((R,g)=>+new Date(R.startTime)-+new Date(g.startTime))}),r.set(i,_)}),r}function oo(e){let t=new Map,r=[];e.forEach(n=>{let s=`${n.pid}:${n.tid}`,i=t.get(s)??[];if(t.set(s,i),n.ph==="B"){i.push(no(n));return}if(n.ph==="E"){let E=i.pop();E&&r.push({...E,endTs:Number(n.ts)})}});let o=[...t.values()].flatMap(n=>n.filter(s=>s!==void 0));return[...r,...o]}function no(e){let t=e.args?.fullName;if(!(e.args?.context!=="test"||typeof t!="string"))return{fullName:t,invocations:Number(e.args?.invocations??1),pid:Number(e.pid),startTs:Number(e.ts),endTs:Number.MAX_SAFE_INTEGER,steps:[]}}function so(e){let t=new Map,r=[];return e.forEach(o=>{if(!o.cat?.includes(ro))return;let n=`${o.pid}:${o.tid}`,s=t.get(n)??[];if(o.ph==="B"){s.push({name:o.name??"action",cat:o.cat,ts:Number(o.ts)}),t.set(n,s);return}if(o.ph==="E"){let i=s.pop();if(!i)return;r.push({pid:Number(o.pid),ts:i.ts,step:{title:i.name,category:"detox",startTime:new Date(i.ts/1e3).toISOString(),duration:Math.round((Number(o.ts)-i.ts)/1e3),steps:[]}})}}),r}var H=c.extend("detox"),Pt="artifacts",io={".mp4":{type:"video",contentType:"video/mp4"},".png":{type:"screenshot",contentType:"image/png"},".jpg":{type:"screenshot",contentType:"image/jpeg"},".log":{type:"attachment",contentType:"text/plain"},".txt":{type:"attachment",contentType:"text/plain"},".json":{type:"attachment",contentType:"application/json"},".viewhierarchy":{type:"attachment",contentType:"application/xml"}};async function yt({instances:e,reportDir:t,manifest:r}){let o=co(r),n=await Lt(r.artifactsRootDir),s=await We((0,N.join)(t,Pt)),i={artifacts:0,steps:0};for(let E of e)for(let p of E.results.tests){let _=o.get(p.testId);if(!_){H("No Detox manifest entry for %s",p.testId);continue}await Eo({test:p,manifestTest:_,rootDir:r.artifactsRootDir,artifactsDir:s,traceSlices:n.get(_.fullName)??[],result:i})}return i.artifacts+=await ao({instances:e,rootDir:r.artifactsRootDir,artifactsDir:s}),i}async function ao({instances:e,rootDir:t,artifactsDir:r}){if(!await Ce.default.pathExists((0,N.join)(t,z)))return 0;let[o]=await Mt(t,[z],r),n=e.map(s=>s.results.tests[0]).filter(s=>s!==void 0);return n.forEach(s=>{s.artifacts=[...s.artifacts??[],o]}),n.length}function co(e){let t=new Map;return e.tests.forEach(r=>{t.set(r.fullName,[...t.get(r.fullName)??[],r.testId])}),new Map(e.tests.filter(r=>{let o=t.get(r.fullName)?.length===1;return o||H("Ambiguous Detox test name, skipping: %s",r.fullName),o}).map(r=>[r.testId,r]))}async function Eo({test:e,manifestTest:t,rootDir:r,artifactsDir:o,traceSlices:n,result:s}){let i=[...e.attempts].sort((_,R)=>_.attempt-R.attempt),E=Ut(t.attempts),p=1;for(let[_,R]of E.entries()){let g=i[_];if(!g){H("No reported attempt %d of %s",_,t.fullName);continue}let O=await uo({fullName:t.fullName,status:R.status,rootDir:r,artifactsDir:o,fromInvocation:p});O&&(p=O.invocation+1,g.artifacts=[...g.artifacts??[],...O.artifacts],s.artifacts+=O.artifacts.length);let x=mo(n,_,O?.invocation);x.length&&(g.steps=[...g.steps??[],...x],s.steps+=x.length)}}async function uo({fullName:e,status:t,rootDir:r,artifactsDir:o,fromInvocation:n}){for(let s=n;s<n+At;s++){let i=ht({rootDir:r,fullName:e,status:t,invocations:s}),E=await po(i);if(E)return{invocation:s,artifacts:await Mt(i,E,o)}}H("No Detox artifacts for %s [%s]",e,t)}async function po(e){try{return(await Ce.default.readdir(e)).sort()}catch{return}}async function Mt(e,t,r){let o=[];for(let n of t){let s=io[(0,N.extname)(n)];if(!s){H("Skipping unsupported Detox artifact %s",n);continue}let i=(0,N.join)(e,n),E=`${Xe(i)}${(0,N.extname)(n)}`;await Qe(i,(0,N.join)(r,E)),o.push({...s,path:(0,N.join)(Pt,E),name:n})}return o}function mo(e,t,r){return((r===void 0?void 0:e.find(s=>s.invocations===r))??[...e].sort((s,i)=>s.invocations-i.invocations)[t])?.steps??[]}var L=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Yt=u(require("fs-extra")),Vt=require("jest-cli"),Jt=u(require("tmp"));var Kt=require("lodash");function xt(e){let t=[];for(let[r,o]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof o=="boolean"?o&&t.push(`--${r}`):Array.isArray(o)?o.forEach(n=>{t.push(`--${r}=${n}`)}):t.push(`--${r}=${o}`));return t.join(" ")}var bt=require("lodash"),_o=["bail","clearCache","collectCoverage","collectCoverageFrom","color","colors","config","coverage","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","debug","detectLeaks","detectOpenHandles","errorOnDeprecated","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","notify","notifyMode","openHandlesTimeout","outputFile","reporters","runner","shard","showConfig","showSeed","silent","testNamePattern","verbose","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll","watchPathIgnorePatterns","watchman"];function wt(e){return(0,bt.omit)(e,..._o)}var Ft=u(require("fs")),Ht=require("jest-config"),Ue=require("lodash"),Oe=u(require("path"));function Z(e,t){return(...r)=>new Promise((o,n)=>{let s=0,i=()=>{s++;try{let E=e(...r);o(E)}catch(E){if(s>=t.length)n(E);else{let p=t[s-1];setTimeout(i,p)}}};i()})}var vt=u(require("fs-extra")),lo=u(require("path"));async function ee(e){let t=await vt.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Gt=c.extend("jest-discovery");async function kt(e){try{let{config:t,configPath:r}=await(0,Ht.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,Ue.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(p=>typeof p!="string"?(0,Ue.omit)(p,n):p)),s.rootDir&&Object.keys(s).length===1)return null;let i=Oe.default.resolve(r?Oe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.cjs`),E=`module.exports=${JSON.stringify(s,null,2)}`;return Gt("configFileContent: %O",E),Ft.default.writeFileSync(i,E),await Z(ee,[200,200,200,200,200,1e3])(i),i}catch(t){return I("Failed to recreate the config file"),Gt("error %o",t),null}}async function jt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=wt(r),n=xt(o),s=r.config,i=await kt(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",i?`--config=${i}`:"",...e.args].filter(p=>!(0,Kt.isEmpty)(p)),configFilePath:i}}var Io=c.extend("jest-discovery");async function $t(e,t){console.time(w("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await jt(t);try{let n=Jt.default.fileSync({postfix:".json"});return Io("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Vt.run)(r.concat(["--openHandlesTimeout=0"])),await Z(ee,Array.from({length:300},()=>100))(n.name),console.timeEnd(w("@currents/jest:fullTestSuite-ready")),await M(n.name)}catch(n){return I("Failed to obtain the jest full test suite:",n),[]}finally{o&&Yt.default.unlinkSync(o)}}var te=class extends L{constructor(t){super(t)}async getFullTestSuite(){return $t(this.config.frameworkConfig,this.config.cliArgs)}};var Qt=u(require("fs-extra"));var Wt=u(require("path"));function re(e){return Wt.default.join(e,"fullTestSuite.json")}var Ro=c.extend("junit-discovery");async function qt(e){console.time(w("@currents/junit:fullTestSuite-ready"));try{Ro("running scanner: %o",e);let t=re(e);process.env.CURRENTS_DISCOVERY_PATH=t;let r=Qt.default.readFileSync(t,"utf-8");return JSON.parse(r)}catch(t){return I("Failed to obtain the junit full test suite:",t),[]}}var oe=class extends L{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return qt(this.reportDir)}};function Xt(e,t){switch(e.framework){case"jest":return new te(e);case"junit":return new oe(e,t);default:return new L(e)}}var G=u(require("fs-extra")),B=u(require("path"));async function zt(e){let t=await fo(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??B.default.join(t,"config.json")}}async function fo(e){return e?(await ne(e),e):To((0,B.join)(process.cwd(),".currents"))}async function To(e){let t=await G.default.readdir(e),r=null;for(let o of t){let n=B.default.join(e,o),s=await G.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,B.resolve)(e,r.name):null}async function ne(e){try{return await G.default.pathExists(e)}catch{return I("Error checking if path exists:",I),!1}}async function Zt(e){let t=B.default.join(e,"instances");return go(t)}async function go(e){let t=await G.default.readdir(e),r=[];for(let o of t){let n=B.default.join(e,o);(await G.default.stat(n)).isFile()&&r.push(n)}return r}var Co=e=>Buffer.byteLength(JSON.stringify(e),"utf8"),er=(e,t=1048576)=>{let r=[],o=[],n=0;for(let s of e){let i=Co(s);n+i>t&&(r.push(o),o=[],n=0),o.push(s),n+=i}return o.length>0&&r.push(o),r};var Uo=3e4;async function nr(){let e=dt();if(!e)throw new Error("Currents config is missing!");let t=await zt(e);Be(Do(t.reportDir)),c("Reporter options: %o",t),$("Report directory: %s",t.reportDir);let r=await M(t.configFilePath);c("Report config: %o",r);let o=await Zt(t.reportDir);c("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Oo(t.reportDir),s=await ne(n),i=re(t.reportDir),E=null;if(s){let C=await M(n);l("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate})}if(await ne(i)&&(E=await M(i),c("Full test suite file detected: %s",i)),E)c("The discovery stage was skipped");else{if(E=await Xt(r,t.reportDir).getFullTestSuite(),Ao(E))throw new Error("Failed to discover the full test suite!");await _e(i,JSON.stringify(E))}let _=E.length===1?E[0].name:null,R={currents:e},g={type:r.framework,version:r.frameworkVersion,clientVersion:J,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},O=j.userFacingNanoid(),x=be(e.ciBuildId),P={};for await(let C of o){let D=await M(C);P[D.groupId]||(P[D.groupId]=[]),P[D.groupId].push(D)}let Ae=await Ot(t.reportDir);if(Ae){let C=await yt({instances:Object.values(P).flat(),reportDir:t.reportDir,manifest:Ae});$("[currents] Attached %d Detox artifacts and %d steps",C.artifacts,C.steps)}let k=new Map;Object.values(P).forEach(C=>{C.forEach(D=>{D.artifacts?.forEach(A=>{A&&k.set(A.path,A.contentType)}),D.results.tests.forEach(A=>{A.artifacts?.forEach(U=>{U&&k.set(U.path,U.contentType)}),A.attempts.forEach(U=>{U.artifacts?.forEach(y=>{y&&k.set(y.path,y.contentType)})})})})});for await(let C of Object.keys(P)){let D=P[C],A=C;_&&(c("Default group found: %s, overwriting the group in the results",_),A=_,D=D.map(U=>({...U,groupId:_})));try{let U=er(D),y=await tr({ci:x,group:A,instances:[],fullTestSuite:E,config:R,machineId:O,framework:g});for(let ie=0;ie<U.length;ie++){let ae=await tr({ci:x,group:A,instances:U[ie],fullTestSuite:[],config:R,machineId:O,framework:g});ae.artifactUploadUrls&&ae.artifactUploadUrls.length>0&&await ho(ae.artifactUploadUrls,t.reportDir,k)}c("Api response: %o",y),$("[%s] Run created: %s",A,y.runUrl);let sr={response:y,isoDate:new Date().toISOString()};await _e(n,JSON.stringify(sr)),c("Marker file %s: %s",s?"overwritten":"created",n)}catch(U){throw c("Failed to upload the results to the dashboard"),U}}}async function tr({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:i}){let E=await Fe(),p=await je(),_={browserName:"node",browserVersion:or.default.coerce(process.version)?.version},{currents:R}=n,O={platform:{..._,...p},ci:e,commit:E,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??s,framework:i,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return c("Creating run: %o",S(O)),Tt(O)}function Oo(e){return se.default.join(e,"upload.marker.json")}function Do(e){return se.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Ao(e){return e.length===0||e.some(t=>t.tests.length===0)}async function ho(e,t,r){c("Uploading %d artifacts",e.length),await Promise.all(e.map(o=>{let n=se.default.join(t,o.path),s=r.get(o.path)||"application/octet-stream";return So(n,s,o.uploadUrl)}))}var So=async(e,t,r)=>{try{if(!await De.default.pathExists(e)){l("Artifact file not found: %s",e);return}let o=await De.default.readFile(e);await rr.default.put(r,o,{headers:{"Content-Type":t},timeout:Uo})}catch(o){c("Failed to upload artifact %s: %o",e,o)}};0&&(module.exports={handleCurrentsReport});
11
11
  /*! For license information please see index.js.LEGAL.txt */
12
12
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@currents/cmd",
3
- "version": "1.11.0-beta.0",
3
+ "version": "1.11.0-beta.2",
4
4
  "main": "./dist/index.js",
5
5
  "author": {
6
6
  "name": "Currents Software Inc",
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@commander-js/extra-typings": "^13.1.0",
52
- "@currents/commit-info": "1.0.1-beta.0",
52
+ "@currents/commit-info": "1.1.0",
53
53
  "archiver": "^7.0.1",
54
54
  "async-retry": "^1.3.3",
55
55
  "axios": "1.18.1",