@currents/cmd 1.6.6 → 1.6.7

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