@currents/cmd 1.6.3 → 1.6.5

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,77 +1,77 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var Wn=Object.create;var Ke=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var Qn=Object.getOwnPropertyNames;var zn=Object.getPrototypeOf,Xn=Object.prototype.hasOwnProperty;var Zn=(e,t)=>{for(var r in t)Ke(e,r,{get:t[r],enumerable:!0})},ei=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Qn(t))!Xn.call(e,n)&&n!==r&&Ke(e,n,{get:()=>t[n],enumerable:!(o=Yn(t,n))||o.enumerable});return e};var d=(e,t,r)=>(r=e!=null?Wn(zn(e)):{},ei(t||!e||!e.__esModule?Ke(r,"default",{value:e,enumerable:!0}):r,e));var jf=require("source-map-support/register");var Vn=require("@commander-js/extra-typings");var St={name:"@currents/cmd",version:"1.6.3",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",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":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@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.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^5.4.1",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^9.2.0","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.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 ae=St.version;var yt=require("@commander-js/extra-typings");var ri=[];function $e(e){ri.push(e)}var O=d(require("chalk")),N=d(require("util"));var Ve=require("debug"),oi=d(require("fs-extra")),a=(0,Ve.debug)("currents"),ni=null;function Ut(){Ve.debug.enable("currents,currents:*")}function vt(e){ni=e}var Dt=[],Nt=[];var ce=(...e)=>{let t=N.default.format(...e);$e(t),console.log(t)},ii=(...e)=>{let t=N.default.format(...e);$e(t),console.error(t)},b=ce,h=(...e)=>{let t=N.default.format(...e);return Nt.push(t),a("WARNING: ",t),ce(O.default.bgYellow.black(" WARNING "),t)},V=(...e)=>{let t=N.default.format(...Lt(e));return a("WARNING: ",N.default.format(...e)),ce(O.default.bgYellow.black(" WARNING "),t)},me=(...e)=>ce(O.default.green.bold(N.default.format(...e))),C=(...e)=>{let t=N.default.format(...Lt(e));return Dt.push(t),a("ERROR: ",N.default.format(...e)),ii(O.default.bgRed.white(" ERROR "),t)};var Lt=e=>e.map(t=>t instanceof Error?t.message:t),pe=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),da=O.default.cyan,la=O.default.blueBright,fa=O.default.red,ga=O.default.yellow,Ca=O.default.green,ha=O.default.gray,Ea=O.default.white,Ra=O.default.black,Ia=O.default.magenta,f=O.default.dim,_a=O.default.bold;var Xo=d(require("chalk"));var ue=class extends Error{};function Mt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function _(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function ai(e,t){return e[t].cli}function ci(e,t){return e[t].name}function L(e,t,r,o){let n={...Mt(o),...Mt(r())};return t.forEach(s=>{if(!n[s])throw C(`${ci(e,s)} is required for Currents Reporter. Use the following methods to set the value:
4
- - as environment variable: ${f(_(e,s))}
5
- - as CLI flag of the command: ${f(ai(e,s))}`),new ue("Missing required config variable")}),n}var mi={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},pi={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"}},M={...mi,...pi};function Bt(){return{apiKey:process.env[M.apiKey.env],debug:!!process.env[M.debug.env]}}var ui=a.extend("config"),di=["apiKey","projectId"],Je=null;function Ft(e){Je=L(M,di,Bt,e),ui("Resolved config: %o",Je)}function de(){return Je}var Y=d(require("fs-extra")),le=require("path"),kt=require("uuid");async function J(e){try{return await Y.default.readJson(e)}catch(t){throw C("Error while reading JSON file: %s",e,t),C}}async function S(e,t){try{return await Y.default.writeFile(e,t,"utf8"),e}catch(r){throw C(`Error writing file at ${e}:`,r),r}}async function Gt(e,t){if(t){await Y.default.ensureDir(e);return}let r=(0,le.dirname)(e);await Y.default.ensureDir(r)}function li(){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=(0,kt.v4)();return`${e}-${t}`}async function Ht(e,t){let r=li(),o=(0,le.join)(e,t,r);return fe(o)}async function fe(e){try{return await Y.default.ensureDir(e),a("Folder created",e),e}catch(t){throw C(`Failed to create folder at ${e}:`,t),t}}var jt=d(require("crypto"));function ge(e){return jt.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var Ce={};Zn(Ce,{getNanoid:()=>fi,userFacingNanoid:()=>We});var qe=require("nanoid"),Kt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",fi=(e=16)=>(0,qe.customAlphabet)(Kt,e)(),We=(0,qe.customAlphabet)(Kt,12);var hr=require("fs/promises");var ar=d(require("lodash"));var zt=d(require("axios")),Xt=d(require("axios-retry")),Zt=d(require("lodash"));var Ye=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",$t=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Vt=()=>3e4;var Qe=require("axios"),ze=d(require("pretty-ms"));var Jt=a.extend("http"),he=e=>[3*1e3,15*1e3,30*1e3][e-1],qt=e=>(Jt("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,Qe.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Qe.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),Ee=()=>3;function Wt(e,t,r){Jt("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,ze.default)(he(e)),e,Ee()),h("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,ze.default)(he(e)),e,Ee())}var Yt=a.extend("http");var Xe={api:null,restApi:null};function gi(e){let t=zt.default.create({baseURL:e==="api"?Ye():$t(),timeout:Vt(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let o=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let n={...Zt.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?Yt("network request retry: %o",Qt({...n,isRetry:!0})):Yt("network request: %o",Qt(n)),r}),(0,Xt.default)(t,{retries:Ee(),retryCondition:qt,retryDelay:he,shouldResetTimeout:!0,onRetry:Wt}),t}function er(e){return Xe[e]===null&&(Xe[e]=gi(e)),Xe[e]}function Qt(e){return{method:e.method,baseUrl:Ye(),url:e.url,data:e.isRetry?"<retry>":Ci(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function Ci(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var or=require("axios"),nr=d(require("lodash")),w=require("ts-pattern");function ir(e){(0,w.match)(e).when(or.isAxiosError,hi).otherwise(()=>{h("Unexpected error while sending network request: %s",e)})}function hi(e){return(0,w.match)(e).with({code:"ECONNABORTED"},()=>{h("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{h("Network connection aborted")}).with({code:"ECONNRESET"},()=>{h("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{h("Network connection timeout")}).with({response:w.P.not(w.P.nullish)},t=>{Ei(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{h(`[currents] Unexpected network error: %s
6
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function Ei(e,{status:t,data:r}){(0,w.match)(t).with(401,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
7
- %o`,r)}).with(429,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Ri(e,r)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
8
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Ri(e,t){(0,w.match)(t).with({code:tr.MISSING_SUITE,message:w.P.string,errors:w.P.array(w.P.string)},async r=>{let{message:o,errors:n}=r;pe(1),C(...rr(o,n))}).with({code:tr.RUN_EXPIRED,message:w.P.string},r=>{h(r.message)}).with({message:w.P.string,errors:w.P.array(w.P.string)},r=>{let{message:o,errors:n}=r;pe(1),h(...rr(o,n)),pe(1)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
9
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var tr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function rr(e,t){return nr.default.isString(e)?t?.length===0?[e]:[e,`
2
+ "use strict";var Zn=Object.create;var Je=Object.defineProperty;var ei=Object.getOwnPropertyDescriptor;var ti=Object.getOwnPropertyNames;var ri=Object.getPrototypeOf,oi=Object.prototype.hasOwnProperty;var ni=(e,t)=>{for(var r in t)Je(e,r,{get:t[r],enumerable:!0})},ii=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ti(t))!oi.call(e,n)&&n!==r&&Je(e,n,{get:()=>t[n],enumerable:!(o=ei(t,n))||o.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Zn(ri(e)):{},ii(t||!e||!e.__esModule?Je(r,"default",{value:e,enumerable:!0}):r,e));var og=require("source-map-support/register");var zn=require("@commander-js/extra-typings");var Nt={name:"@currents/cmd",version:"1.6.5",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",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":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@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.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.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 ce=Nt.version;var bt=require("@commander-js/extra-typings");var ai=[];function qe(e){ai.push(e)}var y=u(require("chalk")),L=u(require("util"));var We=require("debug"),ci=u(require("fs-extra")),a=(0,We.debug)("currents"),mi=null;function Lt(){We.debug.enable("currents,currents:*")}function Mt(e){mi=e}var Bt=[],kt=[];var me=(...e)=>{let t=L.default.format(...e);qe(t),console.log(t)},pi=(...e)=>{let t=L.default.format(...e);qe(t),console.error(t)},x=me,h=(...e)=>{let t=L.default.format(...e);return kt.push(t),a("WARNING: ",t),me(y.default.bgYellow.black(" WARNING "),t)},J=(...e)=>{let t=L.default.format(...Ft(e));return a("WARNING: ",L.default.format(...e)),me(y.default.bgYellow.black(" WARNING "),t)},pe=(...e)=>me(y.default.green.bold(L.default.format(...e))),C=(...e)=>{let t=L.default.format(...Ft(e));return Bt.push(t),a("ERROR: ",L.default.format(...e)),pi(y.default.bgRed.white(" ERROR "),t)};var Ft=e=>e.map(t=>t instanceof Error?t.message:t),ue=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),ga=y.default.cyan,Ca=y.default.blueBright,ha=y.default.red,Ea=y.default.yellow,Ra=y.default.green,Ia=y.default.gray,_a=y.default.white,Ta=y.default.black,Oa=y.default.magenta,g=y.default.dim,ya=y.default.bold;var on=u(require("chalk"));function Gt(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function de(e){return Gt(e,["apiKey"])}function _(e){return Gt(e,["recordKey","key"])}var le=class extends Error{};var Q=u(require("fs-extra")),fe=require("path"),Ht=require("uuid");async function q(e){try{return await Q.default.readJson(e)}catch(t){throw C("Error while reading JSON file: %s",e,t),C}}async function S(e,t){try{return await Q.default.writeFile(e,t,"utf8"),e}catch(r){throw C(`Error writing file at ${e}:`,r),r}}async function jt(e,t){if(t){await Q.default.ensureDir(e);return}let r=(0,fe.dirname)(e);await Q.default.ensureDir(r)}function di(){let e=new Date().toISOString().replace(/[:.]/g,"-"),t=(0,Ht.v4)();return`${e}-${t}`}async function Kt(e,t){let r=di(),o=(0,fe.join)(e,t,r);return ge(o)}async function ge(e){try{return await Q.default.ensureDir(e),a("Folder created",e),e}catch(t){throw C(`Failed to create folder at ${e}:`,t),t}}var $t=u(require("crypto"));function Ce(e){return $t.createHash("sha256").update(e).digest("base64").slice(0,8).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var he={};ni(he,{getNanoid:()=>li,userFacingNanoid:()=>ze});var Ye=require("nanoid"),Vt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",li=(e=16)=>(0,Ye.customAlphabet)(Vt,e)(),ze=(0,Ye.customAlphabet)(Vt,12);function Jt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function T(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function fi(e,t){return e[t].cli}function gi(e,t){return e[t].name}function M(e,t,r,o){let n={...Jt(o),...Jt(r())};return t.forEach(s=>{if(!n[s])throw C(`${gi(e,s)} is required for Currents Reporter. Use the following methods to set the value:
4
+ - as environment variable: ${g(T(e,s))}
5
+ - as CLI flag of the command: ${g(fi(e,s))}`),new le("Missing required config variable")}),n}var Ci={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},hi={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"}},B={...Ci,...hi};function qt(){return{apiKey:process.env[B.apiKey.env],debug:!!process.env[B.debug.env]}}var Ei=a.extend("config"),Ri=["apiKey","projectId"],Qe=null;function Wt(e){Qe=M(B,Ri,qt,e),Ei("Resolved config: %o",de(Qe))}function Ee(){return Qe}var Tr=require("fs/promises");var dr=u(require("lodash"));var rr=u(require("axios")),or=u(require("axios-retry")),nr=u(require("lodash"));var Yt=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",zt=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Qt=()=>3e4;var Xe=require("axios"),Ze=u(require("pretty-ms"));var Xt=a.extend("http"),Re=e=>[3*1e3,15*1e3,30*1e3][e-1],Zt=e=>(Xt("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,Xe.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Xe.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),Ie=()=>3;function er(e,t,r){Xt("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ze.default)(Re(e)),e,Ie()),h("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ze.default)(Re(e)),e,Ie())}var et=a.extend("http");var tt={api:null,restApi:null};function Ii(e){let t=e==="api"?Yt():zt();et("client base url: %s",t);let r=rr.default.create({baseURL:t,timeout:Qt(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let s={...nr.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?et("network request retry: %o",tr({...s,baseURL:t,isRetry:!0})):et("network request: %o",tr(s)),o}),(0,or.default)(r,{retries:Ie(),retryCondition:Zt,retryDelay:Re,shouldResetTimeout:!0,onRetry:er}),r}function ir(e){return tt[e]===null&&(tt[e]=Ii(e)),tt[e]}function tr(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":_i(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function _i(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var cr=require("axios"),mr=u(require("lodash")),P=require("ts-pattern");function pr(e){(0,P.match)(e).when(cr.isAxiosError,Ti).otherwise(()=>{h("Unexpected error while sending network request: %s",e)})}function Ti(e){return(0,P.match)(e).with({code:"ECONNABORTED"},()=>{h("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{h("Network connection aborted")}).with({code:"ECONNRESET"},()=>{h("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{h("Network connection timeout")}).with({response:P.P.not(P.P.nullish)},t=>{Oi(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{h(`[currents] Unexpected network error: %s
6
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function Oi(e,{status:t,data:r}){(0,P.match)(t).with(401,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
7
+ %o`,r)}).with(429,()=>{h(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{yi(e,r)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
8
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function yi(e,t){(0,P.match)(t).with({code:sr.MISSING_SUITE,message:P.P.string,errors:P.P.array(P.P.string)},async r=>{let{message:o,errors:n}=r;ue(1),C(...ar(o,n))}).with({code:sr.RUN_EXPIRED,message:P.P.string},r=>{h(r.message)}).with({message:P.P.string,errors:P.P.array(P.P.string)},r=>{let{message:o,errors:n}=r;ue(1),h(...ar(o,n)),ue(1)}).otherwise(()=>{h(`[currents] Unexpected network response: %s
9
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var sr={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function ar(e,t){return mr.default.isString(e)?t?.length===0?[e]:[e,`
10
10
  ${(t??[]).map(r=>` - ${r}`).join(`
11
11
  `)}
12
- `]:["Unexpected network error"]}var sr=a.extend("http");async function q(e,t,r=er){try{let o=await r(e).request(t);return sr("network response: %o",{...ar.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw sr("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}),ir(n),n}}var Re=a.extend("api");async function mr(e){try{return Re("Request params: %o",e),q("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw Re("Failed to create cache:",t),t}}async function pr(e){try{return Re("Request params: %o",e),q("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw Re("Failed to retrieve cache:",t),t}}var dr=require("util"),lr=require("zlib");var ur=a.extend("api"),Ii=(0,dr.promisify)(lr.gzip);async function fr(e){try{ur("Run params: %o",e);let t=await _i(JSON.stringify(e));return q("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw ur("Failed to create the run:",t),t}}async function _i(e){try{return await Ii(e)}catch(t){throw C("Failed to compress run payload:",t),t}}var gr=a.extend("api");async function Cr(e,t){try{return gr("Run params: %o",t),q("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw gr("Failed to obtain run data:",r),r}}async function Ze(){try{let e=de();if(!e)throw new Error("Config is missing!");let t=e.ciBuildId?{projectId:e.projectId,ciBuildId:e.ciBuildId,pwLastRun:e.pwLastRun}:{projectId:e.projectId,branch:e.branch,tag:e.tag,pwLastRun:e.pwLastRun},r=await Cr(e.apiKey,t);await Ti(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function Ti(e,t){let r=JSON.stringify(e,null,2);t.output?(await Gt(t.output),await(0,hr.writeFile)(t.output,r,"utf-8")):b(r)}var oo=require("axios"),ft=d(require("path"));var P=require("@commander-js/extra-typings");var Oi={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},yi={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"}},wi={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"}},G={...Oi,...yi,...wi};function et(){return{recordKey:process.env[G.recordKey.env],debug:process.env[G.debug.env]}}var Er=a.extend("config"),Rr=["recordKey"],te;function Ir(e){te={type:"SET_COMMAND_CONFIG",values:L(G,Rr,et,e)},Er("Resolved config: %o",te)}function _r(e){te={type:"GET_COMMAND_CONFIG",values:L(G,Rr,et,e)},Er("Resolved config: %o",te)}function H(){return te}function Tr(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}function Or(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,path:e.path,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}var yr=require("@commander-js/extra-typings");function Q(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function v(e,t){try{t.debug&&Ut(),await e(t),process.exit(0)}catch(r){C(r.message);let o=r instanceof yr.CommanderError?r.exitCode:1;process.exit(o)}}var tt=new P.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(_(G,"recordKey")),rt=new P.Option("--debug","Enable debug logging").env(_(G,"debug")).default(!1),ot=new P.Option("--id <id>","The ID the data is saved under in the cache"),wr=new P.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(Q),Ie=(t=>(t.lastRun="last-run",t))(Ie||{}),nt=new P.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(Ie)),Pr=new P.Option("--output-dir <dir>","Path to the directory where output will be written"),br=new P.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),re=".currents_env",xr=new P.Option("--preset-output <path>","Path to the file containing the preset output").default(re),it=new P.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Ar),st=new P.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Ar);function Ar(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new P.InvalidArgumentError("A positive integer is expected.");return t}var Sr=new P.Option("--continue","Continue the script execution if the cache is not found").default(!1),Ur=new P.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var R=require("lodash");var _e=a.extend("ci"),Pi=(e,...t)=>(0,R.chain)(t).compact().join(e).value(),bi=(e,t)=>(0,R.set)(e,(0,R.camelCase)(t),process.env[t]),E=e=>(0,R.transform)(e,bi,{}),xi=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Ai=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Si=()=>(0,R.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Ui=()=>process.env.bamboo_buildNumber,vi=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Di=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Ni=()=>(0,R.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Li=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Mi=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Bi=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Fi=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,ki={appveyor:"APPVEYOR",azure:Ai,awsCodeBuild:Si,bamboo:Ui,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:vi,codeshipPro:Di,concourse:Ni,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Li,goCD:"GO_JOB_NAME",googleCloud:Mi,jenkins:Bi,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:xi,travis:"TRAVIS",wercker:Fi,netlify:"NETLIFY",layerci:"LAYERCI"};function Gi(){let{env:e}=process;return(0,R.findKey)(ki,t=>{if((0,R.isString)(t))return e[t];if((0,R.isFunction)(t))return t()})}var vr=()=>({appveyor:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:E(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:E(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:E(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:E(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:E(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:E(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:E(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:E(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:E(["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:E(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:E(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:E(["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"]),goCD:E(["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:E(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:E(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:E(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:E(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:E(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:E(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:E(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Hi=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Pi(`
13
- `,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},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},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},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},Dr=e=>{let t=Nr();return t?(0,R.chain)(e()).get(t).value():{}};function ji(){return(0,R.chain)(vr()).omitBy(R.isNull).keys().value()}function Ki(e){return e&&ji().includes(e)}function Nr(){let e=Gi();return _e("detected CI provider name: %s",e),e||null}function $i(){return Dr(vr)}function Lr(){return Dr(Hi)}function z(e){let t=$i(),r=Nr(),o=Vi(e,r);return _e("detected CI provider: %s",r),_e("detected CI params: %O",t),_e("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Vi(e,t){return e?{source:"user",value:e}:Ki(t)?{source:"server",value:null}:{source:"random",value:`auto:${We()}`}}var Mr=d(require("archiver")),Br=d(require("fs-extra")),at=d(require("path")),Fr=d(require("unzipper"));var Ji=50*1024*1024;async function kr(e,t=Ji){return new Promise((r,o)=>{let n=(0,Mr.default)("zip",{zlib:{level:9}}),s=[],c=0;n.on("data",u=>{s.push(u),c+=u.length,c>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",u=>{u.code==="ENOENT"?h(u):o(u)}),n.on("error",u=>o(u)),n.on("end",()=>{let u=Buffer.concat(s);r(u)});let p=async u=>{let l=process.cwd(),g=at.default.normalize(u),I=at.default.relative(l,g),y=await Br.default.stat(u);y.isDirectory()?n.directory(u,I):n.file(u,{name:I,stats:y})};(async u=>{for(let l of u)await p(l);await n.finalize()})(e).catch(o)})}async function Gr(e,t){return Fr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}var Vr=d(require("async-retry")),Jr=require("axios");var Hr=d(require("axios")),jr=require("https-proxy-agent"),Kr=d(require("proxy-from-env"));var qi=a.extend("axios");function ct(e={}){let t=Hr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),s=Kr.default.getProxyForUrl(n);return s&&(qi("Using HTTP proxy %s for %s ",s,n),o.proxy=!1,o.httpsAgent=Wi(s)),o}),t}var Te=null;function Wi(e){return Te||(Te=new jr.HttpsProxyAgent(e),Te)}var ye=a.extend("upload"),Oe=5;async function mt(e,t,r){return ye("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),Qi(e.buffer,e.uploadUrl,t,r)}async function Yi(e,t,r,o){return ct().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function pt(e,t){try{let r=await ct().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,Jr.isAxiosError)(r)&&ye("Failed to download %s: %s",e,r.message),r}}async function Qi(...e){await(0,Vr.default)(async()=>{await Yi(...e)},{retries:Oe,onRetry:(t,r)=>{if(ye("Upload failed %d out of %d attempts: %s",r,Oe,t.message),r===Oe){C(`Cannot upload after ${r} times: ${t.message}`);return}h(`Upload failed ${r} out of ${Oe} attempts: ${t.message}`)}})}var ut=e=>({total:t,loaded:r})=>{};function $r(e){return e/1e3/1e3}var lt=d(require("lodash"));var j=d(require("path")),dt=require("glob");var qr=require("lodash");function Wr({config:e,cacheId:t,orgId:r,path:o,ci:n}){let s={id:t,orgId:r,config:(0,qr.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}function Yr(e,t){e instanceof Error?V("%s. %s.",t,e.message):V("%s. %s.",t,"Unknown error")}var Qr=async e=>{let t=j.default.resolve(e??"./test-results"),r=[j.default.resolve(t,"**/.last-run.json"),j.default.resolve(t,".last-run.json")];return(0,dt.glob)(r)},zr=async(e=[])=>{let t=zi(e),r=[];return t.length>0&&r.push(...await(0,dt.glob)(e)),r};function zi(e){let t=process.cwd();return e.filter(r=>{let o=j.default.resolve(r),n=j.default.relative(t,o);return r.startsWith("..")||j.default.isAbsolute(n)?(Yr(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function we(e){return e?e.path.some(t=>j.default.basename(t)===".last-run.json"):!1}async function Xr(e,t){switch(t.provider){case"githubActions":await to(e,t);break;case"gitlab":await eo(e,t);break;case"circle":await ro(e,t);break;default:break}}async function Zr(e,t,r){switch(t.provider){case"githubActions":await to(e,t,r);break;case"gitlab":await eo(e,t,r);break;case"circle":await ro(e,t,r);break;default:break}}async function eo(e,t,r=null){let o=t.params,n=r?.ci.params,c=(n?X(n.runAttempt,0):0)+1,p=X(o.ciNodeIndex,1),m=X(o.ciNodeTotal,1),u=we(r),l=c>1&&u,g=l?"--last-failed":"",I="";m>1&&(I=l?"--shard=1/1":`--shard=${p}/${m}`);let y=[g,I].filter(Boolean).join(" ");await S(e.presetOutput??re,`EXTRA_PW_FLAGS="${y}"
14
- EXTRA_PWCP_FLAGS="${g}"
12
+ `]:["Unexpected network error"]}var ur=a.extend("http");async function W(e,t,r=ir){try{let o=await r(e).request(t);return ur("network response: %o",{...dr.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw ur("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}),pr(n),n}}var _e=a.extend("api");async function fr(e){try{return _e("Request params: %o",_(e)),W("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw _e("Failed to create cache:",t),t}}async function gr(e){try{return _e("Request params: %o",e),W("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw _e("Failed to retrieve cache:",t),t}}var hr=require("util"),Er=require("zlib");var Cr=a.extend("api"),Pi=(0,hr.promisify)(Er.gzip);async function Rr(e){try{Cr("Run params: %o",_(e));let t=await wi(JSON.stringify(e));return W("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Cr("Failed to create the run:",t),t}}async function wi(e){try{return await Pi(e)}catch(t){throw C("Failed to compress run payload:",t),t}}var Ir=a.extend("api");async function _r(e,t){try{return Ir("Run params: %o",t),W("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw Ir("Failed to obtain run data:",r),r}}async function rt(){try{let e=Ee();if(!e)throw new Error("Config is missing!");let t=e.ciBuildId?{projectId:e.projectId,ciBuildId:e.ciBuildId,pwLastRun:e.pwLastRun}:{projectId:e.projectId,branch:e.branch,tag:e.tag,pwLastRun:e.pwLastRun},r=await _r(e.apiKey,t);await xi(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function xi(e,t){let r=JSON.stringify(e,null,2);t.output?(await jt(t.output),await(0,Tr.writeFile)(t.output,r,"utf-8")):x(r)}var co=require("axios"),ht=u(require("path"));var w=require("@commander-js/extra-typings");var bi={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ai={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"}},Si={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"}},H={...bi,...Ai,...Si};function ot(){return{recordKey:process.env[H.recordKey.env],debug:process.env[H.debug.env]}}var Or=a.extend("config"),yr=["recordKey"],Y;function Pr(e){Y={type:"SET_COMMAND_CONFIG",values:M(H,yr,ot,e)},Or("Resolved config: %o",{...Y,values:_(Y.values)})}function wr(e){Y={type:"GET_COMMAND_CONFIG",values:M(H,yr,ot,e)},Or("Resolved config: %o",{...Y,values:_(Y.values)})}function j(){return Y}function xr(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}function br(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,path:e.path,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal,continue:e.continue}}var Ar=require("@commander-js/extra-typings");function X(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function D(e,t){try{t.debug&&Lt(),await e(t),process.exit(0)}catch(r){C(r.message);let o=r instanceof Ar.CommanderError?r.exitCode:1;process.exit(o)}}var nt=new w.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(T(H,"recordKey")),it=new w.Option("--debug","Enable debug logging").env(T(H,"debug")).default(!1),st=new w.Option("--id <id>","The ID the data is saved under in the cache"),Sr=new w.Option("--path <path>",'Comma-separated list of paths to cache, enquote for globs e.g. "dist/**/*"').argParser(X),Te=(t=>(t.lastRun="last-run",t))(Te||{}),at=new w.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(Te)),Ur=new w.Option("--output-dir <dir>","Path to the directory where output will be written"),vr=new w.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),oe=".currents_env",Dr=new w.Option("--preset-output <path>","Path to the file containing the preset output").default(oe),ct=new w.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(Nr),mt=new w.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(Nr);function Nr(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new w.InvalidArgumentError("A positive integer is expected.");return t}var Lr=new w.Option("--continue","Continue the script execution if the cache is not found").default(!1),Mr=new w.Option("--continue","Continue the script execution if upload paths are not found").default(!1);var R=require("lodash");var Oe=a.extend("ci"),Ui=(e,...t)=>(0,R.chain)(t).compact().join(e).value(),vi=(e,t)=>(0,R.set)(e,(0,R.camelCase)(t),process.env[t]),E=e=>(0,R.transform)(e,vi,{}),Di=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,Ni=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Li=()=>(0,R.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Mi=()=>process.env.bamboo_buildNumber,Bi=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,ki=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Fi=()=>(0,R.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Gi=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Hi=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,ji=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Ki=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,$i={appveyor:"APPVEYOR",azure:Ni,awsCodeBuild:Li,bamboo:Mi,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Bi,codeshipPro:ki,concourse:Fi,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Gi,goCD:"GO_JOB_NAME",googleCloud:Hi,jenkins:ji,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Di,travis:"TRAVIS",wercker:Ki,netlify:"NETLIFY",layerci:"LAYERCI"};function Vi(){let{env:e}=process;return(0,R.findKey)($i,t=>{if((0,R.isString)(t))return e[t];if((0,R.isFunction)(t))return t()})}var Br=()=>({appveyor:E(["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:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:E(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:E(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:E(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:E(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:E(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:E(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:E(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:E(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:E(["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:E(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:E(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:E(["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"]),goCD:E(["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:E(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:E(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:E(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:E(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:E(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:E(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:E(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:E(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Ji=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Ui(`
13
+ `,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},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},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},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},kr=e=>{let t=Fr();return t?(0,R.chain)(e()).get(t).value():{}};function qi(){return(0,R.chain)(Br()).omitBy(R.isNull).keys().value()}function Wi(e){return e&&qi().includes(e)}function Fr(){let e=Vi();return Oe("detected CI provider name: %s",e),e||null}function Yi(){return kr(Br)}function Gr(){return kr(Ji)}function Z(e){let t=Yi(),r=Fr(),o=zi(e,r);return Oe("detected CI provider: %s",r),Oe("detected CI params: %O",t),Oe("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function zi(e,t){return e?{source:"user",value:e}:Wi(t)?{source:"server",value:null}:{source:"random",value:`auto:${ze()}`}}var Hr=u(require("archiver")),jr=u(require("fs-extra")),pt=u(require("path")),Kr=u(require("unzipper"));var Qi=50*1024*1024;async function $r(e,t=Qi){return new Promise((r,o)=>{let n=(0,Hr.default)("zip",{zlib:{level:9}}),s=[],c=0;n.on("data",d=>{s.push(d),c+=d.length,c>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",d=>{d.code==="ENOENT"?h(d):o(d)}),n.on("error",d=>o(d)),n.on("end",()=>{let d=Buffer.concat(s);r(d)});let p=async d=>{let f=process.cwd(),l=pt.default.normalize(d),I=pt.default.relative(f,l),b=await jr.default.stat(d);b.isDirectory()?n.directory(d,I):n.file(d,{name:I,stats:b})};(async d=>{for(let f of d)await p(f);await n.finalize()})(e).catch(o)})}async function Vr(e,t){return Kr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}var zr=u(require("async-retry")),Qr=require("axios");var Jr=u(require("axios")),qr=require("https-proxy-agent"),Wr=u(require("proxy-from-env"));var Xi=a.extend("axios");function ut(e={}){let t=Jr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),s=Wr.default.getProxyForUrl(n);return s&&(Xi("Using HTTP proxy %s for %s ",s,n),o.proxy=!1,o.httpsAgent=Zi(s)),o}),t}var ye=null;function Zi(e){return ye||(ye=new qr.HttpsProxyAgent(e),ye)}var we=a.extend("upload"),Pe=5;async function dt(e,t,r){return we("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),ts(e.buffer,e.uploadUrl,t,r)}async function es(e,t,r,o){return ut().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function lt(e,t){try{let r=await ut().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,Qr.isAxiosError)(r)&&we("Failed to download %s: %s",e,r.message),r}}async function ts(...e){await(0,zr.default)(async()=>{await es(...e)},{retries:Pe,onRetry:(t,r)=>{if(we("Upload failed %d out of %d attempts: %s",r,Pe,t.message),r===Pe){C(`Cannot upload after ${r} times: ${t.message}`);return}h(`Upload failed ${r} out of ${Pe} attempts: ${t.message}`)}})}var ft=e=>({total:t,loaded:r})=>{};function Yr(e){return e/1e3/1e3}var Ct=u(require("lodash"));var K=u(require("path")),gt=require("glob");var Xr=require("lodash");function Zr({config:e,cacheId:t,orgId:r,path:o,ci:n}){let s={id:t,orgId:r,config:(0,Xr.omit)(e,"recordKey"),path:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}function eo(e,t){e instanceof Error?J("%s. %s.",t,e.message):J("%s. %s.",t,"Unknown error")}var to=async e=>{let t=K.default.resolve(e??"./test-results"),r=[K.default.resolve(t,"**/.last-run.json"),K.default.resolve(t,".last-run.json")];return(0,gt.glob)(r)},ro=async(e=[])=>{let t=rs(e),r=[];return t.length>0&&r.push(...await(0,gt.glob)(e)),r};function rs(e){let t=process.cwd();return e.filter(r=>{let o=K.default.resolve(r),n=K.default.relative(t,o);return r.startsWith("..")||K.default.isAbsolute(n)?(eo(null,`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}function xe(e){return e?e.path.some(t=>K.default.basename(t)===".last-run.json"):!1}async function oo(e,t){switch(t.provider){case"githubActions":await so(e,t);break;case"gitlab":await io(e,t);break;case"circle":await ao(e,t);break;default:break}}async function no(e,t,r){switch(t.provider){case"githubActions":await so(e,t,r);break;case"gitlab":await io(e,t,r);break;case"circle":await ao(e,t,r);break;default:break}}async function io(e,t,r=null){let o=t.params,n=r?.ci.params,c=(n?ee(n.runAttempt,0):0)+1,p=ee(o.ciNodeIndex,1),m=ee(o.ciNodeTotal,1),d=xe(r),f=c>1&&d,l=f?"--last-failed":"",I="";m>1&&(I=f?"--shard=1/1":`--shard=${p}/${m}`);let b=[l,I].filter(Boolean).join(" ");await S(e.presetOutput??oe,`EXTRA_PW_FLAGS="${b}"
14
+ EXTRA_PWCP_FLAGS="${l}"
15
15
  RUN_ATTEMPT="${c}"
16
- `)}async function to(e,t,r=null){let{matrixIndex:o,matrixTotal:n}=e,s=t.params,c=X(s.githubRunAttempt,1),p=we(r),m=c>1&&p,u=m?"--last-failed":"",l="";n>1&&(l=m?"--shard=1/1":`--shard=${o}/${n}`);let g=[u,l].filter(Boolean).join(" "),I=e.presetOutput??re;await S(I,g),a('Dumped PW config: "%s" for GHA to %s',g,I)}async function ro(e,t,r=null){let o=t.params,n=r?.ci.params,s=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=X(o.circleNodeIndex,0),m=X(o.circleNodeTotal,1),u=c==o.circleWorkflowWorkspaceId&&s!==o.circleWorkflowId,l=we(r),g=u&&l,I=g?"--last-failed":"",y="";m>1&&(y=g?"--shard=1/1":`--shard=${p+1}/${m}`);let x=[I,y].filter(Boolean).join(" "),A=e.presetOutput??re;await S(A,x),a('Dumped PW config: "%s" for Circle to %s',x,A)}var X=(e,t)=>{let r=lt.default.toNumber(e);return lt.default.isNaN(r)?t:r};async function gt(){let e=H();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s,continue:c}=e.values,p=e.values.outputDir,m=z();o==="last-run"&&await Xr(e.values,m);let u=await pr({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});try{let l=await Xi({readUrl:u.readUrl,outputDir:p}),g=await es(u.metaReadUrl);o==="last-run"&&await Zr(e.values,m,g),b(f("- restoring cache to"),l),me("Cache restored. Cache ID: %s",u.cacheId)}catch(l){if((0,oo.isAxiosError)(l)&&(l.response?.status===403||l.response?.status===404)){let g=`Cache with ID "${u.cacheId}" not found`;if(c){V(g);return}throw new Error(g)}throw l}}async function Xi({readUrl:e,outputDir:t}){let r=await pt(e),o=Zi(t);return await Gr(r,o),a("Cache downloaded"),o}function Zi(e){let t=e??process.cwd();return ft.default.isAbsolute(t)?t:ft.default.resolve(process.cwd(),t)}async function es(e){let t=await pt(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}async function Ct(){let e=H();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:s,matrixTotal:c,continue:p}=e.values,m=await zr(e.values.path),u=e.values.path||[],l=z();if(o==="last-run"&&(u.push(n),m.push(...await Qr(n))),m.length===0){let I=`No files available to upload: ${u.filter(Boolean).join(",")}`;if(!p)throw new Error(I);V(I)}let g=await mr({recordKey:t,ci:l,id:r,config:{matrixIndex:s,matrixTotal:c}});a("Cache upload url created",{result:g}),m.length>0&&(await ts({archive:await kr(m),cacheId:g.cacheId,uploadUrl:g.uploadUrl}),b(m.map(I=>`${f("- uploading")} ${I}`).join(`
17
- `))),await rs({meta:Wr({cacheId:g.cacheId,config:e.values,ci:l,orgId:g.orgId,path:m}),cacheId:g.cacheId,uploadUrl:g.metaUploadUrl}),me("Cache uploaded. Cache ID: %s",g.cacheId)}async function ts({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await mt({buffer:e,contentType:o,name:t,uploadUrl:r},o,ut(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function rs({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await mt({buffer:e,contentType:n,name:o,uploadUrl:r},n,ut(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var io=require("@currents/commit-info"),so=require("lodash");var Pe=require("lodash");var ht=a.extend("ci-git");function no(e){ht("git commit existing info: %O",e);let t=Lr();ht("commit info from provider environment variables: %O",t);let r=(0,Pe.transform)(e,(o,n,s)=>{let c=n||(t?t[s]:null);return o[s]=(0,Pe.defaultTo)(c,null)});return ht("combined git and environment variables from provider: %O",r),r}var os=async()=>{let e=await(0,io.commitInfo)();return no({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},ao=(0,so.memoize)(os);var co=d(require("getos")),mo=require("lodash"),U=require("os"),po=require("util"),ns=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,po.promisify)(co.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},is=async()=>{let e=await ns();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},uo=(0,mo.memoize)(is);var Ho=require("lodash"),Le=d(require("path")),jo=d(require("semver"));var T={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 lo(){return{projectId:process.env[T.projectId.env],recordKey:process.env[T.recordKey.env],ciBuildId:process.env[T.ciBuildId.env],tag:process.env[T.tag.env]?process.env[T.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[T.disableTitleTags.env],removeTitleTags:process.env[T.removeTitleTags.env],debug:process.env[T.debug.env],machineId:process.env[T.machineId.env]}}var ss=a.extend("config"),as=["projectId","recordKey"],Et=null;function fo(e){Et=L(T,as,lo,e),ss("Resolved Currents config: %o",Et)}function be(){return Et}function go(e){return{ciBuildId:e.ciBuildId,projectId:e.projectId,recordKey:e.key,tag:e.tag,removeTitleTags:e.removeTitleTags,disableTitleTags:e.disableTitleTags,debug:e.debug,machineId:e.machineId,reportDir:e.reportDir}}var K=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Po=d(require("fs-extra")),bo=require("jest-cli"),xo=d(require("tmp"));var yo=require("lodash");function Co(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 ho=require("lodash"),cs=["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 Eo(e){return(0,ho.omit)(e,...cs)}var _o=d(require("fs")),To=require("jest-config"),Rt=require("lodash"),It=d(require("path"));function xe(e,t){return(...r)=>new Promise((o,n)=>{let s=0,c=()=>{s++;try{let p=e(...r);o(p)}catch(p){if(s>=t.length)n(p);else{let m=t[s-1];setTimeout(c,m)}}};c()})}var Ro=d(require("fs-extra")),ms=d(require("path"));async function Ae(e){let t=await Ro.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Io=a.extend("jest-discovery");async function Oo(e){try{let{config:t,configPath:r}=await(0,To.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,Rt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(m=>typeof m!="string"?(0,Rt.omit)(m,n):m)),s.rootDir&&Object.keys(s).length===1)return null;let c=It.default.resolve(r?It.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(s,null,2)}`;return Io("configFileContent: %O",p),_o.default.writeFileSync(c,p),await xe(Ae,[200,200,200,200,200,1e3])(c),c}catch(t){return C("Failed to recreate the config file"),Io("error %o",t),null}}async function wo(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Eo(r),n=Co(o),s=r.config,c=await Oo(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,yo.isEmpty)(m)),configFilePath:c}}var ps=a.extend("jest-discovery");async function Ao(e,t){console.time(f("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await wo(t);try{let n=xo.default.fileSync({postfix:".json"});return ps("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,bo.run)(r.concat(["--openHandlesTimeout=0"])),await xe(Ae,Array.from({length:300},()=>100))(n.name),console.timeEnd(f("@currents/jest:fullTestSuite-ready")),await J(n.name)}catch(n){return C("Failed to obtain the jest full test suite:",n),[]}finally{o&&Po.default.unlinkSync(o)}}var Se=class extends K{constructor(t){super(t)}async getFullTestSuite(){return Ao(this.config.frameworkConfig,this.config.cliArgs)}};var No=d(require("fs-extra"));var Lo=require("path"),Mo=require("xml2js");var Uo=d(require("crypto")),vo=require("lodash");function Do(e,t,r,o){let n=W(e.failure),s=n.length>0;return{_t:us(t?.timestamp??""),testId:Tt(oe(e.name,o).join(", "),o),title:oe(e.name,o),state:s?"failed":"passed",isFlaky:ls(),expectedStatus:s?"skipped":"passed",timeout:fs(),location:gs(t?.file??""),retries:Cs(n),attempts:hs(e,n,t.timestamp??"",r)}}function Tt(e,t){let r=`${e}${t}`;return Uo.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function us(e){return ds(e)?new Date(e).getTime():0}function ds(e){let t=new Date(e);return!isNaN(t.getTime())}function oe(e,t){return[t,e].filter(Boolean)}function ls(){return!1}function fs(){return 0}function gs(e){return{column:1,file:e,line:1}}function Cs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function hs(e,t,r,o){let n=Ue(e.time);return t.length===0?[{_s:"passed",attempt:0,workerIndex:1,parallelIndex:1,startTime:r,steps:[],duration:n,status:"passed",stdout:So(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((s,c,p)=>{if(c!=="true"&&c!=="false"){let m=Rs(c);s.push({_s:"failed",attempt:p,workerIndex:1,parallelIndex:1,startTime:Is(o,r),steps:[],duration:n,status:"passed",stdout:So(e?.["system-out"]),stderr:Es(e?.["system-err"]),errors:m,error:m?m[0]:void 0})}return s},[])}function So(e){return e?[e]:[]}function Es(e){return e?[e]:[]}function Rs(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function Is(e,t){let r=new Date(t).getTime()+e;return new Date(r).toISOString()}function W(e){return e?Array.isArray(e)?e:[e]:[]}function _s(e){return Math.round(e*1e3)}function Ue(e){return _s(parseFloat(e??"0"))}function ve(e,t,r){let o=(0,vo.isNumber)(r)&&r>0,n=!!e.id&&_t(t,"id",e.id);if(e.file){let s=_t(t,"file",e.file);return s&&!n?`${e.file} - ${e.id}`:s&&o?`${e.file} - ${r}`:e.file}if(e.name){let s=_t(t,"name",e.name);return s&&!n?`${e.name} - ${e.id}`:s&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function _t(e,t,r){return e.filter(n=>n[t]===r).length>1}var Ts=a.extend("junit-discovery");async function Bo(e){console.time(f("@currents/junit:fullTestSuite-ready"));try{Ts("running scanner: %o",e);let t=(0,Lo.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=No.default.readFileSync(t,"utf-8"),o=await(0,Mo.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return Os(o)}catch(t){return C("Failed to obtain the junit full test suite:",t),[]}}function Os(e){let t=[],r=W(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let s=ve(n,r);W(n?.testcase)?.forEach(p=>{let m={title:oe(p.name,s),spec:s,tags:[],testId:Tt(oe(p.name,s).join(", "),s)};o.tests.push(m)})}),t.push(o),t}var De=class extends K{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Bo(this.reportDir)}};function Fo(e,t){switch(e.framework){case"jest":return new Se(e);case"junit":return new De(e,t);default:return new K(e)}}var Z=d(require("fs-extra")),B=d(require("path"));async function ko(e){let t=await ys(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 ys(e){return e?(await Ne(e),e):ws((0,B.join)(process.cwd(),".currents"))}async function ws(e){let t=await Z.default.readdir(e),r=null;for(let o of t){let n=B.default.join(e,o),s=await Z.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 Z.default.pathExists(e)}catch{return C("Error checking if path exists:",C),!1}}async function Go(e){let t=B.default.join(e,"instances");return Ps(t)}async function Ps(e){let t=await Z.default.readdir(e),r=[];for(let o of t){let n=B.default.join(e,o);(await Z.default.stat(n)).isFile()&&r.push(n)}return r}async function Ot(){let e=be();if(!e)throw new Error("Currents config is missing!");let t=await ko(e);vt(Ss(t.reportDir)),a("Reporter options: %o",t),b("Report directory: %s",t.reportDir);let r=await J(t.configFilePath);a("Report config: %o",r);let o=await Go(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=xs(t.reportDir),s=await Ne(n),c=As(t.reportDir),p=null;if(s){let x=await J(n);h("Marker file detected. The report was already uploaded: %o",{runUrl:x.response.runUrl,isoDate:x.isoDate}),await Ne(c)&&(p=await J(c),a("Full test suite file detected: %s",c))}if(p)a("The discovery stage was skipped");else{if(p=await Fo(r,t.reportDir).getFullTestSuite(),Us(p))throw new Error("Failed to discover the full test suite!");await S(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,u={currents:e},l={type:r.framework,version:r.frameworkVersion,clientVersion:ae,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},g=Ce.userFacingNanoid(),I=z(e.ciBuildId),y={};for await(let x of o){let A=await J(x);y[A.groupId]||(y[A.groupId]=[]),y[A.groupId].push(A)}for await(let x of Object.keys(y)){let A=y[x],je=x;m&&(a("Default group found: %s, overwriting the group in the results",m),je=m,A=A.map($=>({...$,groupId:m})));try{let $=await bs({ci:I,group:je,instances:A,fullTestSuite:p,config:u,machineId:g,framework:l});a("Api response: %o",$),b("[%s] Run created: %s",je,$.runUrl);let qn={response:$,isoDate:new Date().toISOString()};await S(n,JSON.stringify(qn)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch($){throw a("Failed to upload the results to the dashboard"),$}}}async function bs({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:c}){let p=await ao(),m=await uo(),u={browserName:"node",browserVersion:jo.default.coerce(process.version)?.version},{currents:l}=n,I={platform:{...u,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:l.projectId,recordKey:l.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:l.tag??[],machineId:l.machineId??s,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",(0,Ho.mapValues)(I,(y,x)=>x==="recordKey"?"******":y)),fr(I)}function xs(e){return Le.default.join(e,"upload.marker.json")}function As(e){return Le.default.join(e,"fullTestSuite.json")}function Ss(e){return Le.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Us(e){return e.length===0||e.some(t=>t.tests.length===0)}var vs=a.extend("cli");async function Ko(e){await v(async t=>{Ft(t);let r=de();vs("Config: %o",r),await Ze()},e)}var F=require("@commander-js/extra-typings");var $o=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(_(M,"apiKey")),Vo=new F.Option("-o, --output <path>","Path to the file where output will be written").env(_(M,"output")),Jo=new F.Option("--ci-build-id <id>","Unique identifier for the run"),qo=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(_(M,"projectId")),Wo=new F.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(Q),Yo=new F.Option("--debug","Enable debug logging").env(_(M,"debug")).default(!1),Qo=new F.Option("-b, --branch <branch>","Branch name for the recorded run"),zo=new F.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Me="api",Ds=e=>`
16
+ `)}async function so(e,t,r=null){let{matrixIndex:o,matrixTotal:n}=e,s=t.params,c=ee(s.githubRunAttempt,1),p=xe(r),m=c>1&&p,d=m?"--last-failed":"",f="";n>1&&(f=m?"--shard=1/1":`--shard=${o}/${n}`);let l=[d,f].filter(Boolean).join(" "),I=e.presetOutput??oe;await S(I,l),a('Dumped PW config: "%s" for GHA to %s',l,I)}async function ao(e,t,r=null){let o=t.params,n=r?.ci.params,s=n?.circleWorkflowId,c=n?.circleWorkflowWorkspaceId,p=ee(o.circleNodeIndex,0),m=ee(o.circleNodeTotal,1),d=c==o.circleWorkflowWorkspaceId&&s!==o.circleWorkflowId,f=xe(r),l=d&&f,I=l?"--last-failed":"",b="";m>1&&(b=l?"--shard=1/1":`--shard=${p+1}/${m}`);let U=[I,b].filter(Boolean).join(" "),A=e.presetOutput??oe;await S(A,U),a('Dumped PW config: "%s" for Circle to %s',U,A)}var ee=(e,t)=>{let r=Ct.default.toNumber(e);return Ct.default.isNaN(r)?t:r};async function Et(){let e=j();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s,continue:c}=e.values,p=e.values.outputDir,m=Z();o==="last-run"&&await oo(e.values,m);let d=await gr({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});try{let f=await os({readUrl:d.readUrl,outputDir:p}),l=await is(d.metaReadUrl);o==="last-run"&&await no(e.values,m,l),x(g("- restoring cache to"),f),pe("Cache restored. Cache ID: %s",d.cacheId)}catch(f){if((0,co.isAxiosError)(f)&&(f.response?.status===403||f.response?.status===404)){let l=`Cache with ID "${d.cacheId}" not found`;if(c){J(l);return}throw new Error(l)}throw f}}async function os({readUrl:e,outputDir:t}){let r=await lt(e),o=ns(t);return await Vr(r,o),a("Cache downloaded"),o}function ns(e){let t=e??process.cwd();return ht.default.isAbsolute(t)?t:ht.default.resolve(process.cwd(),t)}async function is(e){let t=await lt(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}async function Rt(){let e=j();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,pwOutputDir:n,matrixIndex:s,matrixTotal:c,continue:p}=e.values,m=await ro(e.values.path),d=e.values.path||[],f=Z();if(o==="last-run"&&(d.push(n),m.push(...await to(n))),m.length===0){let I=`No files available to upload: ${d.filter(Boolean).join(",")}`;if(!p)throw new Error(I);J(I)}let l=await fr({recordKey:t,ci:f,id:r,config:{matrixIndex:s,matrixTotal:c}});a("Cache upload url created",{result:l}),m.length>0&&(await ss({archive:await $r(m),cacheId:l.cacheId,uploadUrl:l.uploadUrl}),x(m.map(I=>`${g("- uploading")} ${I}`).join(`
17
+ `))),await as({meta:Zr({cacheId:l.cacheId,config:e.values,ci:f,orgId:l.orgId,path:m}),cacheId:l.cacheId,uploadUrl:l.metaUploadUrl}),pe("Cache uploaded. Cache ID: %s",l.cacheId)}async function ss({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await dt({buffer:e,contentType:o,name:t,uploadUrl:r},o,ft(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function as({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await dt({buffer:e,contentType:n,name:o,uploadUrl:r},n,ft(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var po=require("@currents/commit-info"),uo=require("lodash");var be=require("lodash");var It=a.extend("ci-git");function mo(e){It("git commit existing info: %O",e);let t=Gr();It("commit info from provider environment variables: %O",t);let r=(0,be.transform)(e,(o,n,s)=>{let c=n||(t?t[s]:null);return o[s]=(0,be.defaultTo)(c,null)});return It("combined git and environment variables from provider: %O",r),r}var cs=async()=>{let e=await(0,po.commitInfo)();return mo({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},lo=(0,uo.memoize)(cs);var fo=u(require("getos")),go=require("lodash"),v=require("os"),Co=require("util"),ms=async()=>{if((0,v.platform)()==="linux")try{let e=await(0,Co.promisify)(fo.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,v.release)()}catch{return(0,v.release)()}return(0,v.release)()},ps=async()=>{let e=await ms();return{osName:(0,v.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,v.freemem)(),total:(0,v.totalmem)()}}},ho=(0,go.memoize)(ps);var ke=u(require("path")),qo=u(require("semver"));var O={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 Eo(){return{projectId:process.env[O.projectId.env],recordKey:process.env[O.recordKey.env],ciBuildId:process.env[O.ciBuildId.env],tag:process.env[O.tag.env]?process.env[O.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:process.env[O.disableTitleTags.env],removeTitleTags:process.env[O.removeTitleTags.env],debug:process.env[O.debug.env],machineId:process.env[O.machineId.env]}}var us=a.extend("config"),ds=["projectId","recordKey"],_t=null;function Ro(e){_t=M(O,ds,Eo,e),us("Resolved Currents config: %o",_t)}function Ae(){return _t}function Io(e){return{ciBuildId:e.ciBuildId,projectId:e.projectId,recordKey:e.key,tag:e.tag,removeTitleTags:e.removeTitleTags,disableTitleTags:e.disableTitleTags,debug:e.debug,machineId:e.machineId,reportDir:e.reportDir}}var $=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Uo=u(require("fs-extra")),vo=require("jest-cli"),Do=u(require("tmp"));var Ao=require("lodash");function _o(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 To=require("lodash"),ls=["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 Oo(e){return(0,To.omit)(e,...ls)}var wo=u(require("fs")),xo=require("jest-config"),Tt=require("lodash"),Ot=u(require("path"));function Se(e,t){return(...r)=>new Promise((o,n)=>{let s=0,c=()=>{s++;try{let p=e(...r);o(p)}catch(p){if(s>=t.length)n(p);else{let m=t[s-1];setTimeout(c,m)}}};c()})}var yo=u(require("fs-extra")),fs=u(require("path"));async function Ue(e){let t=await yo.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Po=a.extend("jest-discovery");async function bo(e){try{let{config:t,configPath:r}=await(0,xo.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,Tt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(m=>typeof m!="string"?(0,Tt.omit)(m,n):m)),s.rootDir&&Object.keys(s).length===1)return null;let c=Ot.default.resolve(r?Ot.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),p=`module.exports=${JSON.stringify(s,null,2)}`;return Po("configFileContent: %O",p),wo.default.writeFileSync(c,p),await Se(Ue,[200,200,200,200,200,1e3])(c),c}catch(t){return C("Failed to recreate the config file"),Po("error %o",t),null}}async function So(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Oo(r),n=_o(o),s=r.config,c=await bo(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",c?`--config=${c}`:"",...e.args].filter(m=>!(0,Ao.isEmpty)(m)),configFilePath:c}}var gs=a.extend("jest-discovery");async function No(e,t){console.time(g("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await So(t);try{let n=Do.default.fileSync({postfix:".json"});return gs("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,vo.run)(r.concat(["--openHandlesTimeout=0"])),await Se(Ue,Array.from({length:300},()=>100))(n.name),console.timeEnd(g("@currents/jest:fullTestSuite-ready")),await q(n.name)}catch(n){return C("Failed to obtain the jest full test suite:",n),[]}finally{o&&Uo.default.unlinkSync(o)}}var ve=class extends ${constructor(t){super(t)}async getFullTestSuite(){return No(this.config.frameworkConfig,this.config.cliArgs)}};var Go=u(require("fs-extra"));var Ho=require("path"),jo=require("xml2js");var Mo=require("lodash"),Bo=u(require("crypto"));function ko(e,t,r,o){let n=z(e.failure),s=n.length>0,c=t?.timestamp??"";return{_t:De(c),testId:Pt(ne(e.name,o).join(", "),o),title:ne(e.name,o),state:s?"failed":"passed",isFlaky:Cs(),expectedStatus:s?"skipped":"passed",timeout:hs(),location:Es(t?.file??""),retries:Rs(n),attempts:Is(e,n,wt(c),r)}}function Pt(e,t){let r=`${e}${t}`;return Bo.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function De(e){return Fo(e)?new Date(e).getTime():new Date().getTime()}function wt(e){return Fo(e)?new Date(e).toISOString():new Date().toISOString()}function Fo(e){let t=new Date(e);return!isNaN(t.getTime())}function ne(e,t){return[t,e].filter(Boolean)}function Cs(){return!1}function hs(){return 0}function Es(e){return{column:1,file:e,line:1}}function Rs(e){let t=0;return e.forEach(r=>{typeof r!="string"&&t++}),t}function Is(e,t,r,o){let n=e.time?Ne(e.time):0;return t.length===0?[{_s:"passed",attempt:0,workerIndex:1,parallelIndex:1,startTime:r,steps:[],duration:n,status:"passed",stdout:Lo(e?.["system-out"]),stderr:[],errors:[],error:void 0}]:t.reduce((s,c,p)=>{if(c!=="true"&&c!=="false"){let m=Ts(c);s.push({_s:"failed",attempt:p,workerIndex:1,parallelIndex:1,startTime:Os(o,r),steps:[],duration:n,status:"passed",stdout:Lo(e?.["system-out"]),stderr:_s(e?.["system-err"]),errors:m,error:m[0]})}return s},[])}function Lo(e){return e?[e]:[]}function _s(e){return e?[e]:[]}function Ts(e){return e==="true"||e==="false"?[]:[typeof e=="string"?{message:e}:{message:e.message,stack:e._,value:e.type}]}function Os(e,t){let r=De(t)+e;return new Date(r).toISOString()}function z(e){return e?Array.isArray(e)?e:[e]:[]}function ys(e){return Math.round(e*1e3)}function Ne(e){let t=parseFloat(e);return isNaN(t)?0:ys(t)}function Le(e,t,r){let o=(0,Mo.isNumber)(r)&&r>0,n=!!e.id&&yt(t,"id",e.id);if(e.file){let s=yt(t,"file",e.file);return s&&!n?`${e.file} - ${e.id}`:s&&o?`${e.file} - ${r}`:e.file}if(e.name){let s=yt(t,"name",e.name);return s&&!n?`${e.name} - ${e.id}`:s&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function yt(e,t,r){return e.filter(n=>n[t]===r).length>1}var Ps=a.extend("junit-discovery");async function Ko(e){console.time(g("@currents/junit:fullTestSuite-ready"));try{Ps("running scanner: %o",e);let t=(0,Ho.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=Go.default.readFileSync(t,"utf-8"),o=await(0,jo.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return ws(o)}catch(t){return C("Failed to obtain the junit full test suite:",t),[]}}function ws(e){let t=[],r=z(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let s=Le(n,r);z(n?.testcase)?.forEach(p=>{let m={title:ne(p.name,s),spec:s,tags:[],testId:Pt(ne(p.name,s).join(", "),s)};o.tests.push(m)})}),t.push(o),t}var Me=class extends ${constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ko(this.reportDir)}};function $o(e,t){switch(e.framework){case"jest":return new ve(e);case"junit":return new Me(e,t);default:return new $(e)}}var te=u(require("fs-extra")),k=u(require("path"));async function Vo(e){let t=await xs(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??k.default.join(t,"config.json")}}async function xs(e){return e?(await Be(e),e):bs((0,k.join)(process.cwd(),".currents"))}async function bs(e){let t=await te.default.readdir(e),r=null;for(let o of t){let n=k.default.join(e,o),s=await te.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,k.resolve)(e,r.name):null}async function Be(e){try{return await te.default.pathExists(e)}catch{return C("Error checking if path exists:",C),!1}}async function Jo(e){let t=k.default.join(e,"instances");return As(t)}async function As(e){let t=await te.default.readdir(e),r=[];for(let o of t){let n=k.default.join(e,o);(await te.default.stat(n)).isFile()&&r.push(n)}return r}async function xt(){let e=Ae();if(!e)throw new Error("Currents config is missing!");let t=await Vo(e);Mt(Ds(t.reportDir)),a("Reporter options: %o",t),x("Report directory: %s",t.reportDir);let r=await q(t.configFilePath);a("Report config: %o",r);let o=await Jo(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Us(t.reportDir),s=await Be(n),c=vs(t.reportDir),p=null;if(s){let U=await q(n);h("Marker file detected. The report was already uploaded: %o",{runUrl:U.response.runUrl,isoDate:U.isoDate}),await Be(c)&&(p=await q(c),a("Full test suite file detected: %s",c))}if(p)a("The discovery stage was skipped");else{if(p=await $o(r,t.reportDir).getFullTestSuite(),Ns(p))throw new Error("Failed to discover the full test suite!");await S(c,JSON.stringify(p))}let m=p.length===1?p[0].name:null,d={currents:e},f={type:r.framework,version:r.frameworkVersion,clientVersion:ce,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},l=he.userFacingNanoid(),I=Z(e.ciBuildId),b={};for await(let U of o){let A=await q(U);b[A.groupId]||(b[A.groupId]=[]),b[A.groupId].push(A)}for await(let U of Object.keys(b)){let A=b[U],Ve=U;m&&(a("Default group found: %s, overwriting the group in the results",m),Ve=m,A=A.map(V=>({...V,groupId:m})));try{let V=await Ss({ci:I,group:Ve,instances:A,fullTestSuite:p,config:d,machineId:l,framework:f});a("Api response: %o",V),x("[%s] Run created: %s",Ve,V.runUrl);let Xn={response:V,isoDate:new Date().toISOString()};await S(n,JSON.stringify(Xn)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(V){throw a("Failed to upload the results to the dashboard"),V}}}async function Ss({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:c}){let p=await lo(),m=await ho(),d={browserName:"node",browserVersion:qo.default.coerce(process.version)?.version},{currents:f}=n,I={platform:{...d,...m},ci:e,commit:p,group:t,fullTestSuite:o,config:n,projectId:f.projectId,recordKey:f.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:f.tag??[],machineId:f.machineId??s,framework:c,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",_(I)),Rr(I)}function Us(e){return ke.default.join(e,"upload.marker.json")}function vs(e){return ke.default.join(e,"fullTestSuite.json")}function Ds(e){return ke.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Ns(e){return e.length===0||e.some(t=>t.tests.length===0)}var Ls=a.extend("cli");async function Wo(e){await D(async t=>{Wt(t);let r=Ee();Ls("Config: %o",de(r)),await rt()},e)}var F=require("@commander-js/extra-typings");var Yo=new F.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(T(B,"apiKey")),zo=new F.Option("-o, --output <path>","Path to the file where output will be written").env(T(B,"output")),Qo=new F.Option("--ci-build-id <id>","Unique identifier for the run"),Xo=new F.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(T(B,"projectId")),Zo=new F.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(X),en=new F.Option("--debug","Enable debug logging").env(T(B,"debug")).default(!1),tn=new F.Option("-b, --branch <branch>","Branch name for the recorded run"),rn=new F.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Fe="api",Ms=e=>`
18
18
 
19
- ${Xo.default.bold("Examples")}
19
+ ${on.default.bold("Examples")}
20
20
 
21
21
  Obtain run data by --ci-build-id:
22
- ${f(`${e} ${Me} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
22
+ ${g(`${e} ${Fe} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
23
23
 
24
24
  Obtain most recent run data by filters:
25
- ${f(`${e} ${Me} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
25
+ ${g(`${e} ${Fe} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
26
26
 
27
27
  Obtain last run data that matches the Playwright "test-results/.last-run.json":
28
- ${f(`${e} ${Me} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
28
+ ${g(`${e} ${Fe} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
29
29
 
30
- `,Zo=e=>new yt.Command().command(Me).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Ns(e)),Ns=e=>new yt.Command().name("get-run").description(`Receive information from Currents API ${Ds(e)}`).allowUnknownOption().addOption($o).addOption(Yo).addOption(Jo).addOption(qo).addOption(Qo).addOption(Wo).addOption(Vo).addOption(zo).action(Ko);var Be=require("@commander-js/extra-typings");var rn=d(require("chalk"));var Ls=a.extend("cli");async function en(e){await v(async t=>{_r(Tr(t));let r=H();Ls("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await gt()},e)}var Ms=a.extend("cli");async function tn(e){await v(async t=>{Ir(Or(t));let r=H();Ms("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await Ct()},e)}var ee="cache",Bs=e=>`
30
+ `,nn=e=>new bt.Command().command(Fe).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Bs(e)),Bs=e=>new bt.Command().name("get-run").description(`Receive information from Currents API ${Ms(e)}`).allowUnknownOption().addOption(Yo).addOption(en).addOption(Qo).addOption(Xo).addOption(tn).addOption(Zo).addOption(zo).addOption(rn).action(Wo);var Ge=require("@commander-js/extra-typings");var cn=u(require("chalk"));var ks=a.extend("cli");async function sn(e){await D(async t=>{wr(xr(t));let r=j();ks("Config: %o",_(r.values)),await Et()},e)}var Fs=a.extend("cli");async function an(e){await D(async t=>{Pr(br(t));let r=j();Fs("Config: %o",_(r.values)),await Rt()},e)}var re="cache",Gs=e=>`
31
31
 
32
- ${rn.default.bold("Examples")}
32
+ ${cn.default.bold("Examples")}
33
33
 
34
34
  Save files to the cache under a specific ID:
35
- ${f(`${e} ${ee} set --key <record-key> --id <id> --path <path-1,path-2,...path-n>`)}
35
+ ${g(`${e} ${re} set --key <record-key> --id <id> --path <path-1,path-2,...path-n>`)}
36
36
 
37
37
  Retrieve files from the cache saved under a specific ID:
38
- ${f(`${e} ${ee} get --key <record-key> --id <id>`)}
38
+ ${g(`${e} ${re} get --key <record-key> --id <id>`)}
39
39
 
40
40
  Store the last run data in the cache:
41
- ${f(`${e} ${ee} set --key <record-key> --preset last-run`)}
41
+ ${g(`${e} ${re} set --key <record-key> --preset last-run`)}
42
42
 
43
43
  Retrieve the last run data from the cache:
44
- ${f(`${e} ${ee} get --key <record-key> --preset last-run`)}
44
+ ${g(`${e} ${re} get --key <record-key> --preset last-run`)}
45
45
 
46
46
  Retrieve the last run data from the cache and save it to a custom directory:
47
- ${f(`${e} ${ee} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
47
+ ${g(`${e} ${re} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
48
48
 
49
- `,on=e=>new Be.Command().command(ee).description(`Cache data to Currents ${Bs(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Fs()).addCommand(ks()),Fs=()=>new Be.Command().name("set").allowUnknownOption().addOption(tt).addOption(ot).addOption(nt).addOption(wr).addOption(rt).addOption(br).addOption(it).addOption(st).addOption(Ur).action(tn),ks=()=>new Be.Command().name("get").allowUnknownOption().addOption(tt).addOption(ot).addOption(nt).addOption(Pr).addOption(xr).addOption(rt).addOption(it).addOption(st).addOption(Sr).action(en);var En=require("@commander-js/extra-typings"),Rn=d(require("chalk"));var D=require("@commander-js/extra-typings");var nn=new D.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(_(T,"ciBuildId")),sn=new D.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(T,"recordKey")),an=new D.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(_(T,"projectId")),cn=new D.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(Q),mn=new D.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),pn=new D.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),un=new D.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(_(T,"machineId")),dn=new D.Option("--report-dir <string>","explicit path to the report directory").env(_(T,"reportDir")),ln=new D.Option("--debug","enable debug logs").env(_(T,"debug")).default(!1);var Cn=d(require("fs"));var fn=require("tmp-promise"),gn=async()=>{let{path:e}=await(0,fn.file)();return e};var wt=a.extend("cli"),Fe=class{constructor(t){this.configFilePath=null;this.cliOptions=t,wt("CLI options: %o",this.cliOptions),this.parsedConfig=go(this.cliOptions),wt("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await gn();return Cn.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),wt("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function hn(e){await v(async t=>{let r=new Fe(t);fo(r.parsedConfig);let o=be();b("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await Ot()},e)}var ne="upload",Gs=e=>`
49
+ `,mn=e=>new Ge.Command().command(re).description(`Cache data to Currents ${Gs(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Hs()).addCommand(js()),Hs=()=>new Ge.Command().name("set").allowUnknownOption().addOption(nt).addOption(st).addOption(at).addOption(Sr).addOption(it).addOption(vr).addOption(ct).addOption(mt).addOption(Mr).action(an),js=()=>new Ge.Command().name("get").allowUnknownOption().addOption(nt).addOption(st).addOption(at).addOption(Ur).addOption(Dr).addOption(it).addOption(ct).addOption(mt).addOption(Lr).action(sn);var On=require("@commander-js/extra-typings"),yn=u(require("chalk"));var N=require("@commander-js/extra-typings");var pn=new N.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(T(O,"ciBuildId")),un=new N.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(T(O,"recordKey")),dn=new N.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(T(O,"projectId")),ln=new N.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(X),fn=new N.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),gn=new N.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),Cn=new N.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(T(O,"machineId")),hn=new N.Option("--report-dir <string>","explicit path to the report directory").env(T(O,"reportDir")),En=new N.Option("--debug","enable debug logs").env(T(O,"debug")).default(!1);var _n=u(require("fs"));var Rn=require("tmp-promise"),In=async()=>{let{path:e}=await(0,Rn.file)();return e};var At=a.extend("cli"),He=class{constructor(t){this.configFilePath=null;this.cliOptions=t,At("CLI options: %o",_(this.cliOptions)),this.parsedConfig=Io(this.cliOptions),At("Parsed config from CLI options: %o",_(this.parsedConfig))}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await In();return _n.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),At("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function Tn(e){await D(async t=>{let r=new He(t);Ro(r.parsedConfig);let o=Ae();x("Currents config: %o",_(o)),await xt()},e)}var ie="upload",Ks=e=>`
50
50
 
51
- ${Rn.default.bold("Examples")}
51
+ ${yn.default.bold("Examples")}
52
52
 
53
53
  Upload test results to Currents:
54
- ${f(`${e} ${ne} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
54
+ ${g(`${e} ${ie} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
55
55
 
56
56
  Upload test results to Currents, add tags "tagA", "tagB" to the recorded run:
57
- ${f(`${e} ${ne} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
57
+ ${g(`${e} ${ie} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
58
58
 
59
59
  Provide a custom path to the reports directory:
60
- ${f(`${e} ${ne} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
60
+ ${g(`${e} ${ie} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
61
61
 
62
- `,In=e=>new En.Command().name(ne).command(ne).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
63
- ${Gs(e)}`).addOption(nn).addOption(sn).addOption(an).addOption(cn).addOption(mn).addOption(pn).addOption(un).addOption(ln).addOption(dn).action(r=>hn(r));var jn=require("@commander-js/extra-typings");var Kn=d(require("chalk"));var ie={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 _n(){return{debug:process.env[ie.debug.env]}}var Hs=a.extend("config"),js=["inputFormat","inputFiles","framework"],Pt=null;function Tn(e){Pt=L(ie,js,_n,e),Hs("Resolved config: %o",Pt)}function ke(){return Pt}function On(e){return{inputFiles:e.inputFile,inputFormat:e.inputFormat,outputDir:e.outputDir,framework:e.framework,frameworkVersion:e.frameworkVersion,debug:e.debug}}var He=require("path");var Bn=require("fs-extra");var k=require("@commander-js/extra-typings"),yn=require("glob");var wn=new k.Option("--debug","Enable debug logging").env(_(ie,"debug")).default(!1),bt=(t=>(t.junit="junit",t))(bt||{}),Pn=new k.Option("--input-format <string>","the format of the input test reports").choices(Object.values(bt)),bn=new k.Option("--input-file <pattern>","the pattern to search for test reports").argParser(Ks),xn=new k.Option("-o, --output-dir <string>","the directory to save the converted test reports"),An=(r=>(r.postman="postman",r.vitest="vitest",r))(An||{}),Sn=new k.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(An)),Un=new k.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Ks(e){let t=yn.glob.globSync(e);if(t.length===0)throw new k.InvalidArgumentError("No files found with the provided pattern");return t}var vn=require("fs-extra"),Dn=require("path"),Ge=d(require("xml2js"));async function Nn(e){let t={testsuites:{testsuite:[]}},r=new Ge.Parser({explicitArray:!1,mergeAttrs:!0});for(let n of e){let s=await(0,vn.readFile)(n,"utf-8"),c=await r.parseStringPromise(s);if(c.testsuites?.testsuite){let p=await $s(c.testsuites.testsuite);t.testsuites={testsuite:[...t.testsuites?.testsuite||[],...p]}}}return new Ge.Builder().buildObject(t)}async function Ln(e,t){return S((0,Dn.join)(e,"currents.results.xml"),t)}async function $s(e){return e.reduce((t,r,o)=>{let n=e[o+1];return r.name==="Root Suite"&&n?(r.file&&(n.file=r.file),t.push(n)):r.name!=="Root Suite"&&t.push(r),t},[])}var Mn=require("xml2js");async function xt(e){let t=new Map,r=await(0,Mn.parseStringPromise)(e,{explicitArray:!1,mergeAttrs:!0});if(!r)return C("Failed to parse XML input"),new Map;let o=W(r.testsuites?.testsuite),n=r.testsuites.name;return o.forEach((s,c)=>{let p=ve(s,o,c),m=Vs(s,n,p),u=ge(p);m.results.tests.length!==0&&t.set(u,m)}),t}function Vs(e,t,r){let o=new Date(e?.timestamp??""),n=Ue(e?.time),s=new Date(o.getTime()+n),c=W(e.testcase),p=0;return{groupId:t,spec:r,worker:{workerIndex:1,parallelIndex:1},startTime:o.toISOString(),results:{stats:{suites:1,tests:parseInt(e.tests??"0"),passes:c?.filter(u=>!u?.failure).length,pending:0,skipped:0,failures:c?.filter(u=>u?.failure).length,flaky:0,wallClockStartedAt:o.toISOString(),wallClockEndedAt:s.toISOString(),wallClockDuration:n},tests:c?.map(u=>(p+=Ue(c[0]?.time),Do(u,e,p,r)))}}}async function Fn({inputFormat:e,inputFiles:t,outputDir:r,framework:o}){if(e==="junit"){let n="";t.length>1?n=await Nn(t):t.length===1&&(n=await(0,Bn.readFile)(t[0],"utf-8"));let s=n.trim();if(s)return await Ln(r,s),Js(o,s)}return new Map}async function Js(e,t){switch(e){case"postman":return xt(t);case"vitest":return xt(t);default:return h("Unsupported framework: %s",e),new Map}}function kn(e){return{framework:e.inputFormat,frameworkVersion:e.frameworkVersion??null,cliArgs:{},frameworkConfig:{originFramework:e.framework,originFrameworkVersion:e.frameworkVersion}}}async function Gn(){try{let e=ke();if(!e)throw new Error("Config is missing!");let t=e.outputDir?await fe(e.outputDir):await Ht(process.cwd(),".currents"),r=await fe((0,He.join)(t,"instances")),o=kn(e);a("Report config:",o),b("[currents] Convertion files: %s",e.inputFiles.join(", ")),await S((0,He.join)(t,"config.json"),JSON.stringify(o));let n=await Fn({inputFormat:e.inputFormat,inputFiles:e.inputFiles,framework:e.framework,outputDir:t});await Promise.all(Array.from(n.entries()).map(([s,c])=>S((0,He.join)(r,`${ge(s)}.json`),JSON.stringify(c)))),b("[currents] Conversion completed, report saved to: %s",t)}catch(e){throw a("Failed to convert: %o",e),e}}var qs=a.extend("cli");async function Hn(e){await v(async t=>{Tn(On(t));let r=ke();qs("Config: %o",r),await Gn()},e)}var At="convert",Ws=e=>`
62
+ `,Pn=e=>new On.Command().name(ie).command(ie).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
63
+ ${Ks(e)}`).addOption(pn).addOption(un).addOption(dn).addOption(ln).addOption(fn).addOption(gn).addOption(Cn).addOption(En).addOption(hn).action(r=>Tn(r));var qn=require("@commander-js/extra-typings");var Wn=u(require("chalk"));var se={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 wn(){return{debug:process.env[se.debug.env]}}var $s=a.extend("config"),Vs=["inputFormat","inputFiles","framework"],St=null;function xn(e){St=M(se,Vs,wn,e),$s("Resolved config: %o",St)}function je(){return St}function bn(e){return{inputFiles:e.inputFile,inputFormat:e.inputFormat,outputDir:e.outputDir,framework:e.framework,frameworkVersion:e.frameworkVersion,debug:e.debug}}var $e=require("path");var jn=require("fs-extra");var G=require("@commander-js/extra-typings"),An=require("glob");var Sn=new G.Option("--debug","Enable debug logging").env(T(se,"debug")).default(!1),Ut=(t=>(t.junit="junit",t))(Ut||{}),Un=new G.Option("--input-format <string>","the format of the input test reports").choices(Object.values(Ut)),vn=new G.Option("--input-file <pattern>","the pattern to search for test reports").argParser(Js),Dn=new G.Option("-o, --output-dir <string>","the directory to save the converted test reports"),Nn=(r=>(r.postman="postman",r.vitest="vitest",r))(Nn||{}),Ln=new G.Option("--framework <string>","the testing framework used to generate the test reports").choices(Object.values(Nn)),Mn=new G.Option("--framework-version <string>","the version of the testing framework used to generate the test reports");function Js(e){let t=An.glob.globSync(e);if(t.length===0)throw new G.InvalidArgumentError("No files found with the provided pattern");return t}var Bn=require("fs-extra"),kn=require("path"),Ke=u(require("xml2js"));async function Fn(e){let t={testsuites:{testsuite:[]}},r=new Ke.Parser({explicitArray:!1,mergeAttrs:!0});for(let n of e){let s=await(0,Bn.readFile)(n,"utf-8"),c=await r.parseStringPromise(s);if(c.testsuites?.testsuite){let p=await qs(c.testsuites.testsuite);t.testsuites={testsuite:[...t.testsuites?.testsuite||[],...p]}}}return new Ke.Builder().buildObject(t)}async function Gn(e,t){return S((0,kn.join)(e,"currents.results.xml"),t)}async function qs(e){return e.reduce((t,r,o)=>{let n=e[o+1];return r.name==="Root Suite"&&n?(r.file&&(n.file=r.file),t.push(n)):r.name!=="Root Suite"&&t.push(r),t},[])}var Hn=require("xml2js");async function vt(e){let t=new Map,r=await(0,Hn.parseStringPromise)(e,{explicitArray:!1,mergeAttrs:!0});if(!r)return C("Failed to parse XML input"),new Map;let o=z(r.testsuites?.testsuite),n=r.testsuites.name;return o.forEach((s,c)=>{let p=Le(s,o,c),m=Ws(s,n,p),d=Ce(p);m.results.tests.length!==0&&t.set(d,m)}),t}function Ws(e,t,r){let o=wt(e.timestamp??""),n=e.time?Ne(e.time):0,s=new Date(De(e.timestamp??"")+n),c=z(e.testcase),p=0,m=c.filter(l=>(l.failure??[]).length===0).length,d=c.filter(l=>(l.failure??[]).length>0).length;return{groupId:t,spec:r,worker:{workerIndex:1,parallelIndex:1},startTime:o,results:{stats:{suites:1,tests:e.tests?parseInt(e.tests):0,passes:m,pending:0,skipped:0,failures:d,flaky:0,wallClockStartedAt:o,wallClockEndedAt:s.toISOString(),wallClockDuration:n},tests:c?.map(l=>(c[0]?.time&&(p+=Ne(c[0].time)),ko(l,e,p,r)))}}}async function Kn({inputFormat:e,inputFiles:t,outputDir:r,framework:o}){if(e==="junit"){let n="";t.length>1?n=await Fn(t):t.length===1&&(n=await(0,jn.readFile)(t[0],"utf-8"));let s=n.trim();if(s)return await Gn(r,s),Ys(o,s)}return new Map}async function Ys(e,t){switch(e){case"postman":return vt(t);case"vitest":return vt(t);default:return h("Unsupported framework: %s",e),new Map}}function $n(e){return{framework:e.inputFormat,frameworkVersion:e.frameworkVersion??null,cliArgs:{},frameworkConfig:{originFramework:e.framework,originFrameworkVersion:e.frameworkVersion}}}async function Vn(){try{let e=je();if(!e)throw new Error("Config is missing!");let t=e.outputDir?await ge(e.outputDir):await Kt(process.cwd(),".currents"),r=await ge((0,$e.join)(t,"instances")),o=$n(e);a("Report config:",o),x("[currents] Convertion files: %s",e.inputFiles.join(", ")),await S((0,$e.join)(t,"config.json"),JSON.stringify(o));let n=await Kn({inputFormat:e.inputFormat,inputFiles:e.inputFiles,framework:e.framework,outputDir:t});await Promise.all(Array.from(n.entries()).map(([s,c])=>S((0,$e.join)(r,`${Ce(s)}.json`),JSON.stringify(c)))),x("[currents] Conversion completed, report saved to: %s",t)}catch(e){throw a("Failed to convert: %o",e),e}}var zs=a.extend("cli");async function Jn(e){await D(async t=>{xn(bn(t));let r=je();zs("Config: %o",r),await Vn()},e)}var Dt="convert",Qs=e=>`
64
64
 
65
- ${Kn.default.bold("Examples")}
65
+ ${Wn.default.bold("Examples")}
66
66
 
67
67
  Convert JUnit test reports to Currents format:
68
- ${f(`${e} ${At} --input-format junit --input-file ./*.xml --framework postman`)}
69
- `,$n=e=>new jn.Command().name(At).command(At).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert test reports to Currents format
70
- ${Ws(e)}`).addOption(wn).addOption(Pn).addOption(bn).addOption(xn).addOption(Sn).addOption(Un).action(r=>Hn(r));var Ys=`
68
+ ${g(`${e} ${Dt} --input-format junit --input-file ./*.xml --framework postman`)}
69
+ `,Yn=e=>new qn.Command().name(Dt).command(Dt).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Convert test reports to Currents format
70
+ ${Qs(e)}`).addOption(Sn).addOption(Un).addOption(vn).addOption(Dn).addOption(Ln).addOption(Mn).action(r=>Jn(r));var Xs=`
71
71
  ----------------------------------------------------
72
72
  \u{1F4D6} Documentation: https://docs.currents.dev
73
73
  \u{1F919} Support: support@currents.dev
74
74
  ----------------------------------------------------
75
- `,se="currents",Jn=()=>new Vn.Command(se).version(ae).description(`Currents CLI ${Ys}`).addCommand(In(se),{isDefault:!0}).addCommand(on(se)).addCommand(Zo(se)).addCommand($n(se));import("dotenv/config");function Qs(){Jn().parse()}Qs();
75
+ `,ae="currents",Qn=()=>new zn.Command(ae).version(ce).description(`Currents CLI ${Xs}`).addCommand(Pn(ae),{isDefault:!0}).addCommand(mn(ae)).addCommand(nn(ae)).addCommand(Yn(ae));import("dotenv/config");function Zs(){Qn().parse()}Zs();
76
76
  /*! For license information please see index.js.LEGAL.txt */
77
77
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var bt=Object.create;var y=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var me=(e,t)=>{for(var r in t)y(e,r,{get:t[r],enumerable:!0})},pe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vt(t))!wt.call(e,o)&&o!==r&&y(e,o,{get:()=>t[o],enumerable:!(n=xt(t,o))||n.enumerable});return e};var c=(e,t,r)=>(r=e!=null?bt(Mt(e)):{},pe(t||!e||!e.__esModule?y(r,"default",{value:e,enumerable:!0}):r,e)),Ft=e=>pe(y({},"__esModule",{value:!0}),e);var Hr={};me(Hr,{handleCurrentsReport:()=>yt});module.exports=Ft(Hr);var le=require("debug"),Ht=c(require("fs-extra")),i=(0,le.debug)("currents"),kt=null;function ge(e){kt=e}var B={};me(B,{getNanoid:()=>Gt,userFacingNanoid:()=>q});var Y=require("nanoid"),de="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Gt=(e=16)=>(0,Y.customAlphabet)(de,e)(),q=(0,Y.customAlphabet)(de,12);var p=require("lodash");var b=i.extend("ci"),jt=(e,...t)=>(0,p.chain)(t).compact().join(e).value(),Vt=(e,t)=>(0,p.set)(e,(0,p.camelCase)(t),process.env[t]),u=e=>(0,p.transform)(e,Vt,{}),Kt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,$t=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Jt=()=>(0,p.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Yt=()=>process.env.bamboo_buildNumber,qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Wt=()=>(0,p.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),zt=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Xt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Zt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,er=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,tr={appveyor:"APPVEYOR",azure:$t,awsCodeBuild:Jt,bamboo:Yt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:qt,codeshipPro:Qt,concourse:Wt,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:zt,goCD:"GO_JOB_NAME",googleCloud:Xt,jenkins:Zt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Kt,travis:"TRAVIS",wercker:er,netlify:"NETLIFY",layerci:"LAYERCI"};function rr(){let{env:e}=process;return(0,p.findKey)(tr,t=>{if((0,p.isString)(t))return e[t];if((0,p.isFunction)(t))return t()})}var Ee=()=>({appveyor:u(["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:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:u(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:u(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:u(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:u(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:u(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:u(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:u(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:u(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:u(["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:u(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:u(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:u(["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"]),goCD:u(["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:u(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:u(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:u(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:u(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:u(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:u(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:u(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),or=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:jt(`
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},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},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},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},fe=e=>{let t=_e();return t?(0,p.chain)(e()).get(t).value():{}};function nr(){return(0,p.chain)(Ee()).omitBy(p.isNull).keys().value()}function sr(e){return e&&nr().includes(e)}function _e(){let e=rr();return b("detected CI provider name: %s",e),e||null}function ir(){return fe(Ee)}function Re(){return fe(or)}function Ie(e){let t=ir(),r=_e(),n=ar(e,r);return b("detected CI provider: %s",r),b("detected CI params: %O",t),b("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function ar(e,t){return e?{source:"user",value:e}:sr(t)?{source:"server",value:null}:{source:"random",value:`auto:${q()}`}}var Ce=require("@currents/commit-info"),he=require("lodash");var x=require("lodash");var Q=i.extend("ci-git");function Te(e){Q("git commit existing info: %O",e);let t=Re();Q("commit info from provider environment variables: %O",t);let r=(0,x.transform)(e,(n,o,a)=>{let l=o||(t?t[a]:null);return n[a]=(0,x.defaultTo)(l,null)});return Q("combined git and environment variables from provider: %O",r),r}var cr=async()=>{let e=await(0,Ce.commitInfo)();return Te({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Oe=(0,he.memoize)(cr);var Se=c(require("getos")),Pe=require("lodash"),R=require("os"),Ue=require("util"),ur=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,Ue.promisify)(Se.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},mr=async()=>{let e=await ur();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},Ae=(0,Pe.memoize)(mr);var De={name:"@currents/cmd",version:"1.6.3",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",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":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@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.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^5.4.1",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^9.2.0","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.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 Ne=De.version;var lr=[];function W(e){lr.push(e)}var _=c(require("chalk")),A=c(require("util"));var Le=[],ye=[];var Be=(...e)=>{let t=A.default.format(...e);W(t),console.log(t)},gr=(...e)=>{let t=A.default.format(...e);W(t),console.error(t)},z=Be,g=(...e)=>{let t=A.default.format(...e);return ye.push(t),i("WARNING: ",t),Be(_.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=A.default.format(...dr(e));return Le.push(t),i("ERROR: ",A.default.format(...e)),gr(_.default.bgRed.white(" ERROR "),t)};var dr=e=>e.map(t=>t instanceof Error?t.message:t),v=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),To=_.default.cyan,Co=_.default.blueBright,ho=_.default.red,Oo=_.default.yellow,So=_.default.green,Po=_.default.gray,Uo=_.default.white,Ao=_.default.black,Do=_.default.magenta,D=_.default.dim,No=_.default.bold;var X=c(require("fs-extra")),be=require("path"),fr=require("uuid");async function P(e){try{return await X.default.readJson(e)}catch(t){throw d("Error while reading JSON file: %s",e,t),d}}async function Z(e,t){try{return await X.default.writeFile(e,t,"utf8"),e}catch(r){throw d(`Error writing file at ${e}:`,r),r}}var _r=c(require("crypto"));var Nt=require("lodash"),K=c(require("path")),Lt=c(require("semver"));var ze=c(require("lodash"));var Ge=c(require("axios")),je=c(require("axios-retry")),Ve=c(require("lodash"));var ee=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",xe=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",ve=()=>3e4;var te=require("axios"),re=c(require("pretty-ms"));var Me=i.extend("http"),M=e=>[3*1e3,15*1e3,30*1e3][e-1],we=e=>(Me("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,te.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,te.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),w=()=>3;function Fe(e,t,r){Me("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(M(e)),e,w()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(M(e)),e,w())}var He=i.extend("http");var oe={api:null,restApi:null};function Rr(e){let t=Ge.default.create({baseURL:e==="api"?ee():xe(),timeout:ve(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let n=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let o={...Ve.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return n?He("network request retry: %o",ke({...o,isRetry:!0})):He("network request: %o",ke(o)),r}),(0,je.default)(t,{retries:w(),retryCondition:we,retryDelay:M,shouldResetTimeout:!0,onRetry:Fe}),t}function Ke(e){return oe[e]===null&&(oe[e]=Rr(e)),oe[e]}function ke(e){return{method:e.method,baseUrl:ee(),url:e.url,data:e.isRetry?"<retry>":Ir(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function Ir(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Ye=require("axios"),qe=c(require("lodash")),f=require("ts-pattern");function Qe(e){(0,f.match)(e).when(Ye.isAxiosError,Tr).otherwise(()=>{g("Unexpected error while sending network request: %s",e)})}function Tr(e){return(0,f.match)(e).with({code:"ECONNABORTED"},()=>{g("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{g("Network connection aborted")}).with({code:"ECONNRESET"},()=>{g("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{g("Network connection timeout")}).with({response:f.P.not(f.P.nullish)},t=>{Cr(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{g(`[currents] Unexpected network error: %s
4
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function Cr(e,{status:t,data:r}){(0,f.match)(t).with(401,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
5
- %o`,r)}).with(429,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{hr(e,r)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
6
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function hr(e,t){(0,f.match)(t).with({code:$e.MISSING_SUITE,message:f.P.string,errors:f.P.array(f.P.string)},async r=>{let{message:n,errors:o}=r;v(1),d(...Je(n,o))}).with({code:$e.RUN_EXPIRED,message:f.P.string},r=>{g(r.message)}).with({message:f.P.string,errors:f.P.array(f.P.string)},r=>{let{message:n,errors:o}=r;v(1),g(...Je(n,o)),v(1)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
7
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var $e={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Je(e,t){return qe.default.isString(e)?t?.length===0?[e]:[e,`
1
+ "use strict";var bt=Object.create;var B=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,wt=Object.prototype.hasOwnProperty;var pe=(e,t)=>{for(var r in t)B(e,r,{get:t[r],enumerable:!0})},le=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vt(t))!wt.call(e,n)&&n!==r&&B(e,n,{get:()=>t[n],enumerable:!(o=xt(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?bt(Mt(e)):{},le(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e)),Ft=e=>le(B({},"__esModule",{value:!0}),e);var Hr={};pe(Hr,{handleCurrentsReport:()=>Lt});module.exports=Ft(Hr);var ge=require("debug"),kt=c(require("fs-extra")),a=(0,ge.debug)("currents"),Ht=null;function de(e){Ht=e}var b={};pe(b,{getNanoid:()=>Gt,userFacingNanoid:()=>Q});var q=require("nanoid"),Ee="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Gt=(e=16)=>(0,q.customAlphabet)(Ee,e)(),Q=(0,q.customAlphabet)(Ee,12);var p=require("lodash");var x=a.extend("ci"),jt=(e,...t)=>(0,p.chain)(t).compact().join(e).value(),Vt=(e,t)=>(0,p.set)(e,(0,p.camelCase)(t),process.env[t]),u=e=>(0,p.transform)(e,Vt,{}),Kt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,$t=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Jt=()=>(0,p.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Yt=()=>process.env.bamboo_buildNumber,qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,Qt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Wt=()=>(0,p.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),zt=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Xt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Zt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,er=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,tr={appveyor:"APPVEYOR",azure:$t,awsCodeBuild:Jt,bamboo:Yt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:qt,codeshipPro:Qt,concourse:Wt,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:zt,goCD:"GO_JOB_NAME",googleCloud:Xt,jenkins:Zt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:Kt,travis:"TRAVIS",wercker:er,netlify:"NETLIFY",layerci:"LAYERCI"};function rr(){let{env:e}=process;return(0,p.findKey)(tr,t=>{if((0,p.isString)(t))return e[t];if((0,p.isFunction)(t))return t()})}var fe=()=>({appveyor:u(["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:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:u(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:u(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:u(["BITBUCKET_REPO_SLUG","BITBUCKET_REPO_OWNER","BITBUCKET_BUILD_NUMBER","BITBUCKET_PARALLEL_STEP","BITBUCKET_STEP_RUN_NUMBER","BITBUCKET_PR_ID","BITBUCKET_PR_DESTINATION_BRANCH","BITBUCKET_PR_DESTINATION_COMMIT"]),buildkite:u(["BUILDKITE_REPO","BUILDKITE_SOURCE","BUILDKITE_JOB_ID","BUILDKITE_BUILD_ID","BUILDKITE_BUILD_URL","BUILDKITE_BUILD_NUMBER","BUILDKITE_PULL_REQUEST","BUILDKITE_PULL_REQUEST_REPO","BUILDKITE_PULL_REQUEST_BASE_BRANCH"]),circle:u(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_WORKFLOW_WORKSPACE_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST","CIRCLE_NODE_INDEX","CIRCLE_NODE_TOTAL"]),codeshipBasic:u(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:u(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:u(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:u(["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:u(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:u(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:u(["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"]),goCD:u(["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:u(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:u(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:u(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:u(["SHIPPABLE_BUILD_ID","SHIPPABLE_BUILD_NUMBER","SHIPPABLE_COMMIT_RANGE","SHIPPABLE_CONTAINER_NAME","SHIPPABLE_JOB_ID","SHIPPABLE_JOB_NUMBER","SHIPPABLE_REPO_SLUG","IS_FORK","IS_GIT_TAG","IS_PRERELEASE","IS_RELEASE","REPOSITORY_URL","REPO_FULL_NAME","REPO_NAME","BUILD_URL","BASE_BRANCH","HEAD_BRANCH","IS_PULL_REQUEST","PULL_REQUEST","PULL_REQUEST_BASE_BRANCH","PULL_REQUEST_REPO_FULL_NAME"]),teamcity:null,teamfoundation:u(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:u(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:u(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:u(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),or=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:jt(`
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},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},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},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},_e=e=>{let t=Re();return t?(0,p.chain)(e()).get(t).value():{}};function nr(){return(0,p.chain)(fe()).omitBy(p.isNull).keys().value()}function sr(e){return e&&nr().includes(e)}function Re(){let e=rr();return x("detected CI provider name: %s",e),e||null}function ir(){return _e(fe)}function Ie(){return _e(or)}function Te(e){let t=ir(),r=Re(),o=ar(e,r);return x("detected CI provider: %s",r),x("detected CI params: %O",t),x("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function ar(e,t){return e?{source:"user",value:e}:sr(t)?{source:"server",value:null}:{source:"random",value:`auto:${Q()}`}}var he=require("@currents/commit-info"),Oe=require("lodash");var v=require("lodash");var W=a.extend("ci-git");function Ce(e){W("git commit existing info: %O",e);let t=Ie();W("commit info from provider environment variables: %O",t);let r=(0,v.transform)(e,(o,n,i)=>{let l=n||(t?t[i]:null);return o[i]=(0,v.defaultTo)(l,null)});return W("combined git and environment variables from provider: %O",r),r}var cr=async()=>{let e=await(0,he.commitInfo)();return Ce({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Se=(0,Oe.memoize)(cr);var Pe=c(require("getos")),Ue=require("lodash"),R=require("os"),Ae=require("util"),ur=async()=>{if((0,R.platform)()==="linux")try{let e=await(0,Ae.promisify)(Pe.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,R.release)()}catch{return(0,R.release)()}return(0,R.release)()},mr=async()=>{let e=await ur();return{osName:(0,R.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,R.freemem)(),total:(0,R.totalmem)()}}},De=(0,Ue.memoize)(mr);var Ne={name:"@currents/cmd",version:"1.6.5",main:"./dist/index.js",author:{name:"Currents Software Inc",email:"hello@currents.dev"},license:"MIT",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":"^29.7.0","@jest/types":"^29.6.3","@release-it/conventional-changelog":"^9.0.3","@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.13","@types/node":"^22.10.2","@types/proxy-from-env":"^1.0.4","@types/semver":"^7.5.8","@types/tmp":"^0.2.6","@types/unzipper":"^0.10.10","@types/uuid":"^10.0.0","@types/xml2js":"^0.4.14",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.3.5",typescript:"^5.7.2",vitest:"^2.1.8"},dependencies:{"@commander-js/extra-typings":"^12.1.0","@currents/commit-info":"1.0.1-beta.0",archiver:"^7.0.1","async-retry":"^1.3.3",axios:"^1.7.9","axios-retry":"^4.5.0",chalk:"^4.1.2",commander:"^12.1.0",debug:"^4.4.0",dotenv:"^16.4.7",execa:"^9.5.1","fs-extra":"^11.2.0",getos:"^3.2.1",glob:"^11.0.0","https-proxy-agent":"^7.0.4","jest-cli":"^29.7.0","jest-config":"^29.7.0",lodash:"^4.17.21",nanoid:"^3.3.8","pretty-ms":"^7.0.1","proxy-from-env":"^1.1.0",semver:"^7.6.0","source-map-support":"^0.5.21",tmp:"^0.2.3","tmp-promise":"^3.0.3","ts-pattern":"^5.6.0",unzipper:"^0.12.3",uuid:"^11.0.3",xml2js:"^0.6.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 ye=Ne.version;function lr(e,t){if(!e)return e;let r={...e};return t.forEach(o=>{r.hasOwnProperty(o)&&(r[o]="*****")}),r}function y(e){return lr(e,["recordKey","key"])}var gr=[];function z(e){gr.push(e)}var _=c(require("chalk")),U=c(require("util"));var Le=[],Be=[];var be=(...e)=>{let t=U.default.format(...e);z(t),console.log(t)},dr=(...e)=>{let t=U.default.format(...e);z(t),console.error(t)},X=be,g=(...e)=>{let t=U.default.format(...e);return Be.push(t),a("WARNING: ",t),be(_.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=U.default.format(...Er(e));return Le.push(t),a("ERROR: ",U.default.format(...e)),dr(_.default.bgRed.white(" ERROR "),t)};var Er=e=>e.map(t=>t instanceof Error?t.message:t),M=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),Oo=_.default.cyan,So=_.default.blueBright,Po=_.default.red,Uo=_.default.yellow,Ao=_.default.green,Do=_.default.gray,No=_.default.white,yo=_.default.black,Lo=_.default.magenta,A=_.default.dim,Bo=_.default.bold;var Z=c(require("fs-extra")),xe=require("path"),_r=require("uuid");async function S(e){try{return await Z.default.readJson(e)}catch(t){throw d("Error while reading JSON file: %s",e,t),d}}async function ee(e,t){try{return await Z.default.writeFile(e,t,"utf8"),e}catch(r){throw d(`Error writing file at ${e}:`,r),r}}var Rr=c(require("crypto"));var $=c(require("path")),yt=c(require("semver"));var Xe=c(require("lodash"));var je=c(require("axios")),Ve=c(require("axios-retry")),Ke=c(require("lodash"));var ve=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",Me=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",we=()=>3e4;var te=require("axios"),re=c(require("pretty-ms"));var Fe=a.extend("http"),w=e=>[3*1e3,15*1e3,30*1e3][e-1],ke=e=>(Fe("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,te.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,te.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),F=()=>3;function He(e,t,r){Fe("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(w(e)),e,F()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(w(e)),e,F())}var oe=a.extend("http");var ne={api:null,restApi:null};function Ir(e){let t=e==="api"?ve():Me();oe("client base url: %s",t);let r=je.default.create({baseURL:t,timeout:we(),transitional:{clarifyTimeoutError:!0}});return r.interceptors.request.use(o=>{let n=o["axios-retry"]?.retryCount??0;o.headers.get("Content-Type")||o.headers.set("Content-Type","application/json");let i={...Ke.default.pick(o,"method","url","headers"),baseURL:t,data:Buffer.isBuffer(o.data)?"buffer":o.data,params:o.params};return n?oe("network request retry: %o",Ge({...i,baseURL:t,isRetry:!0})):oe("network request: %o",Ge(i)),o}),(0,Ve.default)(r,{retries:F(),retryCondition:ke,retryDelay:w,shouldResetTimeout:!0,onRetry:He}),r}function $e(e){return ne[e]===null&&(ne[e]=Ir(e)),ne[e]}function Ge(e){return{method:e.method,baseURL:e.baseURL,url:e.url,data:e.isRetry?"<retry>":Tr(e.data),params:e.isRetry?"<retry>":e.params,headers:{...e.headers,Authorization:"Bearer ***","x-currents-key":"***"}}}function Tr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var qe=require("axios"),Qe=c(require("lodash")),f=require("ts-pattern");function We(e){(0,f.match)(e).when(qe.isAxiosError,Cr).otherwise(()=>{g("Unexpected error while sending network request: %s",e)})}function Cr(e){return(0,f.match)(e).with({code:"ECONNABORTED"},()=>{g("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{g("Network connection aborted")}).with({code:"ECONNRESET"},()=>{g("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{g("Network connection timeout")}).with({response:f.P.not(f.P.nullish)},t=>{hr(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{g(`[currents] Unexpected network error: %s
4
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function hr(e,{status:t,data:r}){(0,f.match)(t).with(401,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
5
+ %o`,r)}).with(429,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{Or(e,r)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
6
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function Or(e,t){(0,f.match)(t).with({code:Je.MISSING_SUITE,message:f.P.string,errors:f.P.array(f.P.string)},async r=>{let{message:o,errors:n}=r;M(1),d(...Ye(o,n))}).with({code:Je.RUN_EXPIRED,message:f.P.string},r=>{g(r.message)}).with({message:f.P.string,errors:f.P.array(f.P.string)},r=>{let{message:o,errors:n}=r;M(1),g(...Ye(o,n)),M(1)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
7
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var Je={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Ye(e,t){return Qe.default.isString(e)?t?.length===0?[e]:[e,`
8
8
  ${(t??[]).map(r=>` - ${r}`).join(`
9
9
  `)}
10
- `]:["Unexpected network error"]}var We=i.extend("http");async function F(e,t,r=Ke){try{let n=await r(e).request(t);return We("network response: %o",{...ze.default.omit(n,"request","config"),url:n.config.url,method:n.config.method}),n}catch(n){let o=n;throw We("network error: %o",{code:o.code,message:o.message,url:o.config?.url,method:o.config?.method,status:o.response?.status,headers:o.response?.headers,data:o.response?.data}),Qe(o),o}}var On=i.extend("api");var et=require("util"),tt=require("zlib");var Ze=i.extend("api"),Or=(0,et.promisify)(tt.gzip);async function rt(e){try{Ze("Run params: %o",e);let t=await Sr(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 Ze("Failed to create the run:",t),t}}async function Sr(e){try{return await Or(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var vn=i.extend("api");var rs=i.extend("config");var Pr=null;function ot(){return Pr}var h=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var dt=c(require("fs-extra")),Et=require("jest-cli"),ft=c(require("tmp"));var lt=require("lodash");function nt(e){let t=[];for(let[r,n]of Object.entries(e))r==="_"||r==="$0"||r.includes("-")||(typeof n=="boolean"?n&&t.push(`--${r}`):Array.isArray(n)?n.forEach(o=>{t.push(`--${r}=${o}`)}):t.push(`--${r}=${n}`));return t.join(" ")}var st=require("lodash"),Ur=["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 it(e){return(0,st.omit)(e,...Ur)}var ut=c(require("fs")),mt=require("jest-config"),ne=require("lodash"),se=c(require("path"));function H(e,t){return(...r)=>new Promise((n,o)=>{let a=0,l=()=>{a++;try{let m=e(...r);n(m)}catch(m){if(a>=t.length)o(m);else{let E=t[a-1];setTimeout(l,E)}}};l()})}var at=c(require("fs-extra")),Ar=c(require("path"));async function k(e){let t=await at.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var ct=i.extend("jest-discovery");async function pt(e){try{let{config:t,configPath:r}=await(0,mt.readInitialOptions)(e),n=["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"],o=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],a=(0,ne.omit)(t,n);if(a.projects&&(a.projects=a.projects.map(E=>typeof E!="string"?(0,ne.omit)(E,o):E)),a.rootDir&&Object.keys(a).length===1)return null;let l=se.default.resolve(r?se.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(a,null,2)}`;return ct("configFileContent: %O",m),ut.default.writeFileSync(l,m),await H(k,[200,200,200,200,200,1e3])(l),l}catch(t){return d("Failed to recreate the config file"),ct("error %o",t),null}}async function gt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,n=it(r),o=nt(n),a=r.config,l=await pt(a);return{cliArgs:[o,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(E=>!(0,lt.isEmpty)(E)),configFilePath:l}}var Dr=i.extend("jest-discovery");async function _t(e,t){console.time(D("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:n}=await gt(t);try{let o=ft.default.fileSync({postfix:".json"});return Dr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=o.name,await(0,Et.run)(r.concat(["--openHandlesTimeout=0"])),await H(k,Array.from({length:300},()=>100))(o.name),console.timeEnd(D("@currents/jest:fullTestSuite-ready")),await P(o.name)}catch(o){return d("Failed to obtain the jest full test suite:",o),[]}finally{n&&dt.default.unlinkSync(n)}}var G=class extends h{constructor(t){super(t)}async getFullTestSuite(){return _t(this.config.frameworkConfig,this.config.cliArgs)}};var ht=c(require("fs-extra"));var Ot=require("path"),St=require("xml2js");var Rt=c(require("crypto")),It=require("lodash");function Tt(e,t){let r=`${e}${t}`;return Rt.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function ae(e,t){return[t,e].filter(Boolean)}function ce(e){return e?Array.isArray(e)?e:[e]:[]}function Ct(e,t,r){let n=(0,It.isNumber)(r)&&r>0,o=!!e.id&&ie(t,"id",e.id);if(e.file){let a=ie(t,"file",e.file);return a&&!o?`${e.file} - ${e.id}`:a&&n?`${e.file} - ${r}`:e.file}if(e.name){let a=ie(t,"name",e.name);return a&&!o?`${e.name} - ${e.id}`:a&&n?`${e.name} - ${r}`:e.name}return e.id?o&&n?`${e.id} - ${r}`:e.id:n?`unknown - ${r}`:"unknown"}function ie(e,t,r){return e.filter(o=>o[t]===r).length>1}var Nr=i.extend("junit-discovery");async function Pt(e){console.time(D("@currents/junit:fullTestSuite-ready"));try{Nr("running scanner: %o",e);let t=(0,Ot.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=ht.default.readFileSync(t,"utf-8"),n=await(0,St.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return Lr(n)}catch(t){return d("Failed to obtain the junit full test suite:",t),[]}}function Lr(e){let t=[],r=ce(e.testsuites?.testsuite),n={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(o=>{let a=Ct(o,r);ce(o?.testcase)?.forEach(m=>{let E={title:ae(m.name,a),spec:a,tags:[],testId:Tt(ae(m.name,a).join(", "),a)};n.tests.push(E)})}),t.push(n),t}var j=class extends h{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Pt(this.reportDir)}};function Ut(e,t){switch(e.framework){case"jest":return new G(e);case"junit":return new j(e,t);default:return new h(e)}}var N=c(require("fs-extra")),C=c(require("path"));async function At(e){let t=await yr(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??C.default.join(t,"config.json")}}async function yr(e){return e?(await V(e),e):Br((0,C.join)(process.cwd(),".currents"))}async function Br(e){let t=await N.default.readdir(e),r=null;for(let n of t){let o=C.default.join(e,n),a=await N.default.stat(o);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:n,birthtime:a.birthtime})}return r?(0,C.resolve)(e,r.name):null}async function V(e){try{return await N.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function Dt(e){let t=C.default.join(e,"instances");return br(t)}async function br(e){let t=await N.default.readdir(e),r=[];for(let n of t){let o=C.default.join(e,n);(await N.default.stat(o)).isFile()&&r.push(o)}return r}async function yt(){let e=ot();if(!e)throw new Error("Currents config is missing!");let t=await At(e);ge(wr(t.reportDir)),i("Reporter options: %o",t),z("Report directory: %s",t.reportDir);let r=await P(t.configFilePath);i("Report config: %o",r);let n=await Dt(t.reportDir);i("Found %d instance results in the reportDir: %s",n.length,t.reportDir);let o=vr(t.reportDir),a=await V(o),l=Mr(t.reportDir),m=null;if(a){let I=await P(o);g("Marker file detected. The report was already uploaded: %o",{runUrl:I.response.runUrl,isoDate:I.isoDate}),await V(l)&&(m=await P(l),i("Full test suite file detected: %s",l))}if(m)i("The discovery stage was skipped");else{if(m=await Ut(r,t.reportDir).getFullTestSuite(),Fr(m))throw new Error("Failed to discover the full test suite!");await Z(l,JSON.stringify(m))}let E=m.length===1?m[0].name:null,$={currents:e},U={type:r.framework,version:r.frameworkVersion,clientVersion:Ne,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},ue=B.userFacingNanoid(),L=Ie(e.ciBuildId),O={};for await(let I of n){let T=await P(I);O[T.groupId]||(O[T.groupId]=[]),O[T.groupId].push(T)}for await(let I of Object.keys(O)){let T=O[I],J=I;E&&(i("Default group found: %s, overwriting the group in the results",E),J=E,T=T.map(S=>({...S,groupId:E})));try{let S=await xr({ci:L,group:J,instances:T,fullTestSuite:m,config:$,machineId:ue,framework:U});i("Api response: %o",S),z("[%s] Run created: %s",J,S.runUrl);let Bt={response:S,isoDate:new Date().toISOString()};await Z(o,JSON.stringify(Bt)),i("Marker file %s: %s",a?"overwritten":"created",o)}catch(S){throw i("Failed to upload the results to the dashboard"),S}}}async function xr({ci:e,group:t,instances:r,fullTestSuite:n,config:o,machineId:a,framework:l}){let m=await Oe(),E=await Ae(),$={browserName:"node",browserVersion:Lt.default.coerce(process.version)?.version},{currents:U}=o,L={platform:{...$,...E},ci:e,commit:m,group:t,fullTestSuite:n,config:o,projectId:U.projectId,recordKey:U.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:U.tag??[],machineId:U.machineId??a,framework:l,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return i("Creating run: %o",(0,Nt.mapValues)(L,(O,I)=>I==="recordKey"?"******":O)),rt(L)}function vr(e){return K.default.join(e,"upload.marker.json")}function Mr(e){return K.default.join(e,"fullTestSuite.json")}function wr(e){return K.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Fr(e){return e.length===0||e.some(t=>t.tests.length===0)}0&&(module.exports={handleCurrentsReport});
10
+ `]:["Unexpected network error"]}var ze=a.extend("http");async function k(e,t,r=$e){try{let o=await r(e).request(t);return ze("network response: %o",{...Xe.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw ze("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}),We(n),n}}var Dn=a.extend("api");var tt=require("util"),rt=require("zlib");var et=a.extend("api"),Sr=(0,tt.promisify)(rt.gzip);async function ot(e){try{et("Run params: %o",y(e));let t=await Pr(JSON.stringify(e));return k("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw et("Failed to create the run:",t),t}}async function Pr(e){try{return await Sr(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var Gn=a.extend("api");var cs=a.extend("config");var Ur=null;function nt(){return Ur}var h=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Et=c(require("fs-extra")),ft=require("jest-cli"),_t=c(require("tmp"));var gt=require("lodash");function st(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 it=require("lodash"),Ar=["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 at(e){return(0,it.omit)(e,...Ar)}var mt=c(require("fs")),pt=require("jest-config"),se=require("lodash"),ie=c(require("path"));function H(e,t){return(...r)=>new Promise((o,n)=>{let i=0,l=()=>{i++;try{let m=e(...r);o(m)}catch(m){if(i>=t.length)n(m);else{let E=t[i-1];setTimeout(l,E)}}};l()})}var ct=c(require("fs-extra")),Dr=c(require("path"));async function G(e){let t=await ct.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var ut=a.extend("jest-discovery");async function lt(e){try{let{config:t,configPath:r}=await(0,pt.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"],i=(0,se.omit)(t,o);if(i.projects&&(i.projects=i.projects.map(E=>typeof E!="string"?(0,se.omit)(E,n):E)),i.rootDir&&Object.keys(i).length===1)return null;let l=ie.default.resolve(r?ie.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(i,null,2)}`;return ut("configFileContent: %O",m),mt.default.writeFileSync(l,m),await H(G,[200,200,200,200,200,1e3])(l),l}catch(t){return d("Failed to recreate the config file"),ut("error %o",t),null}}async function dt(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=at(r),n=st(o),i=r.config,l=await lt(i);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",l?`--config=${l}`:"",...e.args].filter(E=>!(0,gt.isEmpty)(E)),configFilePath:l}}var Nr=a.extend("jest-discovery");async function Rt(e,t){console.time(A("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await dt(t);try{let n=_t.default.fileSync({postfix:".json"});return Nr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,ft.run)(r.concat(["--openHandlesTimeout=0"])),await H(G,Array.from({length:300},()=>100))(n.name),console.timeEnd(A("@currents/jest:fullTestSuite-ready")),await S(n.name)}catch(n){return d("Failed to obtain the jest full test suite:",n),[]}finally{o&&Et.default.unlinkSync(o)}}var j=class extends h{constructor(t){super(t)}async getFullTestSuite(){return Rt(this.config.frameworkConfig,this.config.cliArgs)}};var Ot=c(require("fs-extra"));var St=require("path"),Pt=require("xml2js");var It=require("lodash"),Tt=c(require("crypto"));function Ct(e,t){let r=`${e}${t}`;return Tt.default.createHash("sha256").update(r).digest("hex").substring(0,16)}function ce(e,t){return[t,e].filter(Boolean)}function ue(e){return e?Array.isArray(e)?e:[e]:[]}function ht(e,t,r){let o=(0,It.isNumber)(r)&&r>0,n=!!e.id&&ae(t,"id",e.id);if(e.file){let i=ae(t,"file",e.file);return i&&!n?`${e.file} - ${e.id}`:i&&o?`${e.file} - ${r}`:e.file}if(e.name){let i=ae(t,"name",e.name);return i&&!n?`${e.name} - ${e.id}`:i&&o?`${e.name} - ${r}`:e.name}return e.id?n&&o?`${e.id} - ${r}`:e.id:o?`unknown - ${r}`:"unknown"}function ae(e,t,r){return e.filter(n=>n[t]===r).length>1}var yr=a.extend("junit-discovery");async function Ut(e){console.time(A("@currents/junit:fullTestSuite-ready"));try{yr("running scanner: %o",e);let t=(0,St.join)(e,"currents.results.xml");process.env.CURRENTS_DISCOVERY_PATH=t;let r=Ot.default.readFileSync(t,"utf-8"),o=await(0,Pt.parseStringPromise)(r,{explicitArray:!1,mergeAttrs:!0});return Lr(o)}catch(t){return d("Failed to obtain the junit full test suite:",t),[]}}function Lr(e){let t=[],r=ue(e.testsuites?.testsuite),o={name:e.testsuites?.name??"No name",tags:[],tests:[]};return r?.forEach(n=>{let i=ht(n,r);ue(n?.testcase)?.forEach(m=>{let E={title:ce(m.name,i),spec:i,tags:[],testId:Ct(ce(m.name,i).join(", "),i)};o.tests.push(E)})}),t.push(o),t}var V=class extends h{constructor(t,r){super(t),this.reportDir=r}async getFullTestSuite(){return Ut(this.reportDir)}};function At(e,t){switch(e.framework){case"jest":return new j(e);case"junit":return new V(e,t);default:return new h(e)}}var D=c(require("fs-extra")),T=c(require("path"));async function Dt(e){let t=await Br(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??T.default.join(t,"config.json")}}async function Br(e){return e?(await K(e),e):br((0,T.join)(process.cwd(),".currents"))}async function br(e){let t=await D.default.readdir(e),r=null;for(let o of t){let n=T.default.join(e,o),i=await D.default.stat(n);i.isDirectory()&&(!r||i.birthtime>r.birthtime)&&(r={name:o,birthtime:i.birthtime})}return r?(0,T.resolve)(e,r.name):null}async function K(e){try{return await D.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function Nt(e){let t=T.default.join(e,"instances");return xr(t)}async function xr(e){let t=await D.default.readdir(e),r=[];for(let o of t){let n=T.default.join(e,o);(await D.default.stat(n)).isFile()&&r.push(n)}return r}async function Lt(){let e=nt();if(!e)throw new Error("Currents config is missing!");let t=await Dt(e);de(Fr(t.reportDir)),a("Reporter options: %o",t),X("Report directory: %s",t.reportDir);let r=await S(t.configFilePath);a("Report config: %o",r);let o=await Nt(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Mr(t.reportDir),i=await K(n),l=wr(t.reportDir),m=null;if(i){let C=await S(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:C.response.runUrl,isoDate:C.isoDate}),await K(l)&&(m=await S(l),a("Full test suite file detected: %s",l))}if(m)a("The discovery stage was skipped");else{if(m=await At(r,t.reportDir).getFullTestSuite(),kr(m))throw new Error("Failed to discover the full test suite!");await ee(l,JSON.stringify(m))}let E=m.length===1?m[0].name:null,J={currents:e},P={type:r.framework,version:r.frameworkVersion,clientVersion:ye,frameworkConfig:{originFramework:r.frameworkConfig?.originFramework,originFrameworkVersion:r.frameworkConfig?.originFrameworkVersion}},me=b.userFacingNanoid(),L=Te(e.ciBuildId),N={};for await(let C of o){let I=await S(C);N[I.groupId]||(N[I.groupId]=[]),N[I.groupId].push(I)}for await(let C of Object.keys(N)){let I=N[C],Y=C;E&&(a("Default group found: %s, overwriting the group in the results",E),Y=E,I=I.map(O=>({...O,groupId:E})));try{let O=await vr({ci:L,group:Y,instances:I,fullTestSuite:m,config:J,machineId:me,framework:P});a("Api response: %o",O),X("[%s] Run created: %s",Y,O.runUrl);let Bt={response:O,isoDate:new Date().toISOString()};await ee(n,JSON.stringify(Bt)),a("Marker file %s: %s",i?"overwritten":"created",n)}catch(O){throw a("Failed to upload the results to the dashboard"),O}}}async function vr({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:i,framework:l}){let m=await Se(),E=await De(),J={browserName:"node",browserVersion:yt.default.coerce(process.version)?.version},{currents:P}=n,L={platform:{...J,...E},ci:e,commit:m,group:t,fullTestSuite:o,config:n,projectId:P.projectId,recordKey:P.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:P.tag??[],machineId:P.machineId??i,framework:l,instances:r,previousCiBuildId:process.env.CURRENTS_PREVIOUS_CI_BUILD_ID};return a("Creating run: %o",y(L)),ot(L)}function Mr(e){return $.default.join(e,"upload.marker.json")}function wr(e){return $.default.join(e,"fullTestSuite.json")}function Fr(e){return $.default.join(e,`.debug-${new Date().toISOString()}.log`)}function kr(e){return e.length===0||e.some(t=>t.tests.length===0)}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.6.3",
3
+ "version": "1.6.5",
4
4
  "main": "./dist/index.js",
5
5
  "author": {
6
6
  "name": "Currents Software Inc",
@@ -48,7 +48,7 @@
48
48
  "async-retry": "^1.3.3",
49
49
  "axios": "^1.7.9",
50
50
  "axios-retry": "^4.5.0",
51
- "chalk": "^5.4.1",
51
+ "chalk": "^4.1.2",
52
52
  "commander": "^12.1.0",
53
53
  "debug": "^4.4.0",
54
54
  "dotenv": "^16.4.7",
@@ -61,7 +61,7 @@
61
61
  "jest-config": "^29.7.0",
62
62
  "lodash": "^4.17.21",
63
63
  "nanoid": "^3.3.8",
64
- "pretty-ms": "^9.2.0",
64
+ "pretty-ms": "^7.0.1",
65
65
  "proxy-from-env": "^1.1.0",
66
66
  "semver": "^7.6.0",
67
67
  "source-map-support": "^0.5.21",