@currents/cmd 1.6.10 → 1.7.0

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