@currents/cmd 1.6.1 → 1.6.2

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