@currents/cmd 1.1.0-beta.4 → 1.1.0-beta.6

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,66 +1,66 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var Po=Object.create;var Te=Object.defineProperty;var bo=Object.getOwnPropertyDescriptor;var Ao=Object.getOwnPropertyNames;var Uo=Object.getPrototypeOf,So=Object.prototype.hasOwnProperty;var xo=(e,t)=>{for(var r in t)Te(e,r,{get:t[r],enumerable:!0})},wo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ao(t))!So.call(e,n)&&n!==r&&Te(e,n,{get:()=>t[n],enumerable:!(o=bo(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Po(Uo(e)):{},wo(t||!e||!e.__esModule?Te(r,"default",{value:e,enumerable:!0}):r,e));var lm=require("source-map-support/register");var To=require("@commander-js/extra-typings");var tt={name:"@currents/cmd",version:"1.1.0-beta.4",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@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",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.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.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","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.2.0",unzipper:"^0.12.3"},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 W=tt.version;var Xe=require("@commander-js/extra-typings");var No=[];function Oe(e){No.push(e)}var I=c(require("chalk")),Y=c(require("util"));var ye=require("debug"),Lo=c(require("fs-extra")),s=(0,ye.debug)("currents"),vo=null;function S(){ye.debug.enable("currents,currents:*")}function rt(e){vo=e}var ot=[],nt=[];var it=(...e)=>{let t=Y.default.format(...e);Oe(t),console.log(t)},Bo=(...e)=>{let t=Y.default.format(...e);Oe(t),console.error(t)},M=it,f=(...e)=>{let t=Y.default.format(...e);return nt.push(t),s("WARNING: ",t),it(I.default.bgYellow.black(" WARNING "),t)};var l=(...e)=>{let t=Y.default.format(...e);return ot.push(t),s("ERROR: ",t),Bo(I.default.bgRed.white(" ERROR "),t)};var X=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),_i=I.default.cyan,Ii=I.default.blueBright,Ti=I.default.red,Oi=I.default.yellow,yi=I.default.green,Pi=I.default.gray,bi=I.default.white,Ai=I.default.black,Ui=I.default.magenta,E=I.default.dim,Si=I.default.bold;var Zr=c(require("chalk"));var H=class extends Error{};function st(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function R(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function Fo(e,t){return e[t].cli}function ko(e,t){return e[t].name}function F(e,t,r,o){let n={...st(o),...st(r())};return t.forEach(a=>{if(!n[a])throw l(`${ko(e,a)} is required for Currents Reporter. Use the following methods to set the value:
2
+ "use strict";var No=Object.create;var Pe=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var Lo=Object.getOwnPropertyNames;var Bo=Object.getPrototypeOf,Mo=Object.prototype.hasOwnProperty;var Go=(e,t)=>{for(var r in t)Pe(e,r,{get:t[r],enumerable:!0})},Fo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Lo(t))!Mo.call(e,n)&&n!==r&&Pe(e,n,{get:()=>t[n],enumerable:!(o=vo(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?No(Bo(e)):{},Fo(t||!e||!e.__esModule?Pe(r,"default",{value:e,enumerable:!0}):r,e));var wd=require("source-map-support/register");var So=require("@commander-js/extra-typings");var ct={name:"@currents/cmd",version:"1.1.0-beta.6",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@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",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.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.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","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.2.0",unzipper:"^0.12.3"},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 ee=ct.version;var st=require("@commander-js/extra-typings");var Ho=[];function be(e){Ho.push(e)}var I=c(require("chalk")),$=c(require("util"));var Ae=require("debug"),jo=c(require("fs-extra")),s=(0,Ae.debug)("currents"),Ko=null;function N(){Ae.debug.enable("currents,currents:*")}function pt(e){Ko=e}var mt=[],dt=[];var Ue=(...e)=>{let t=$.default.format(...e);be(t),console.log(t)},$o=(...e)=>{let t=$.default.format(...e);be(t),console.error(t)},F=Ue,g=(...e)=>{let t=$.default.format(...e);return dt.push(t),s("WARNING: ",t),Ue(I.default.bgYellow.black(" WARNING "),t)},we=(...e)=>{let t=$.default.format(...e);return s("WARNING: ",t),Ue(I.default.bgYellow.black(" WARNING "),t)};var u=(...e)=>{let t=$.default.format(...e);return mt.push(t),s("ERROR: ",t),$o(I.default.bgRed.white(" ERROR "),t)};var te=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),wi=I.default.cyan,Si=I.default.blueBright,xi=I.default.red,Di=I.default.yellow,Ni=I.default.green,vi=I.default.gray,Li=I.default.white,Bi=I.default.black,Mi=I.default.magenta,E=I.default.dim,Gi=I.default.bold;var ao=c(require("chalk"));var V=class extends Error{};function ut(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function R(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function Jo(e,t){return e[t].cli}function Yo(e,t){return e[t].name}function k(e,t,r,o){let n={...ut(o),...ut(r())};return t.forEach(a=>{if(!n[a])throw u(`${Yo(e,a)} is required for Currents Reporter. Use the following methods to set the value:
4
4
  - as environment variable: ${E(R(e,a))}
5
- - as CLI flag of the command: ${E(Fo(e,a))}`),new H("Missing required config variable")}),n}var Go={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Ho={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",cli:"--project-id"},tag:{name:"Run Tag",cli:"--tag"}},x={...Go,...Ho};function at(){return{apiKey:process.env[x.apiKey.env],debug:!!process.env[x.debug.env]}}var Ko=s.extend("config"),jo=["apiKey"],Pe=null;function ct(e){Pe=F(x,jo,at,e),Ko("Resolved config: %o",Pe)}function Z(){return Pe}var ee=c(require("fs-extra")),dt=require("path");async function k(e){try{return await ee.default.readJson(e)}catch(t){throw l("Error while reading JSON file: %s",e,t),l}}async function be(e,t){try{return await ee.default.writeFile(e,t,"utf8"),e}catch(r){throw l(`Error writing file at ${e}:`,r),r}}async function te(e){let t=(0,dt.dirname)(e);await ee.default.ensureDir(t)}var re={};xo(re,{getNanoid:()=>$o,userFacingNanoid:()=>Ue});var Ae=require("nanoid"),pt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",$o=(e=16)=>(0,Ae.customAlphabet)(pt,e)(),Ue=(0,Ae.customAlphabet)(pt,12);var Ft=require("fs/promises");var Ut=c(require("lodash"));var ht=c(require("axios")),Rt=c(require("axios-retry")),_t=c(require("lodash"));var Se=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",mt=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",ut=()=>3e4;var xe=require("axios"),we=c(require("pretty-ms"));var lt=s.extend("http"),oe=e=>[3*1e3,15*1e3,30*1e3][e-1],gt=e=>(lt("isRetriableError: %o",{message:e.message,code:"code"in e?e.code:void 0,status:"response"in e?e.response?.status:void 0,headers:"response"in e?e.response?.headers:void 0,data:"response"in e?e.response?.data:void 0,isAxiosError:(0,xe.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,xe.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),ne=()=>3;function ft(e,t,r){lt("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,we.default)(oe(e)),e,ne()),f("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,we.default)(oe(e)),e,ne())}var Ct=s.extend("http");var De={api:null,restApi:null};function Vo(e){let t=ht.default.create({baseURL:e==="api"?Se():mt(),timeout:ut(),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={..._t.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?Ct("network request retry: %o",Et({...n,isRetry:!0})):Ct("network request: %o",Et(n)),r}),(0,Rt.default)(t,{retries:ne(),retryCondition:gt,retryDelay:oe,shouldResetTimeout:!0,onRetry:ft}),t}function It(e){return De[e]===null&&(De[e]=Vo(e)),De[e]}function Et(e){return{method:e.method,baseUrl:Se(),url:e.url,data:e.isRetry?"<retry>":Jo(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function Jo(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var yt=require("axios"),Pt=c(require("lodash")),_=require("ts-pattern");function bt(e){(0,_.match)(e).when(yt.isAxiosError,Yo).otherwise(()=>{f("Unexpected error while sending network request: %s",e)})}function Yo(e){return(0,_.match)(e).with({code:"ECONNABORTED"},()=>{f("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{f("Network connection aborted")}).with({code:"ECONNRESET"},()=>{f("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{f("Network connection timeout")}).with({response:_.P.not(_.P.nullish)},t=>{qo(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{f(`[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 qo(e,{status:t,data:r}){(0,_.match)(t).with(401,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
7
- %o`,r)}).with(429,()=>{f(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{zo(e,r)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
8
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function zo(e,t){(0,_.match)(t).with({code:Tt.MISSING_SUITE,message:_.P.string,errors:_.P.array(_.P.string)},async r=>{let{message:o,errors:n}=r;X(1),l(...Ot(o,n))}).with({code:Tt.RUN_EXPIRED,message:_.P.string},r=>{f(r.message)}).with({message:_.P.string,errors:_.P.array(_.P.string)},r=>{let{message:o,errors:n}=r;X(1),f(...Ot(o,n)),X(1)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
9
- %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var Tt={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function Ot(e,t){return Pt.default.isString(e)?t?.length===0?[e]:[e,`
5
+ - as CLI flag of the command: ${E(Jo(e,a))}`),new V("Missing required config variable")}),n}var qo={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Wo={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"}},S={...qo,...Wo};function lt(){return{apiKey:process.env[S.apiKey.env],debug:!!process.env[S.debug.env]}}var Qo=s.extend("config"),zo=["apiKey","projectId"],Se=null;function gt(e){Se=k(S,zo,lt,e),Qo("Resolved config: %o",Se)}function re(){return Se}var oe=c(require("fs-extra")),ft=require("path");async function H(e){try{return await oe.default.readJson(e)}catch(t){throw u("Error while reading JSON file: %s",e,t),u}}async function z(e,t){try{return await oe.default.writeFile(e,t,"utf8"),e}catch(r){throw u(`Error writing file at ${e}:`,r),r}}async function Ct(e){let t=(0,ft.dirname)(e);await oe.default.ensureDir(t)}var ne={};Go(ne,{getNanoid:()=>Xo,userFacingNanoid:()=>De});var xe=require("nanoid"),Et="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Xo=(e=16)=>(0,xe.customAlphabet)(Et,e)(),De=(0,xe.customAlphabet)(Et,12);var Vt=require("fs/promises");var Lt=c(require("lodash"));var Pt=c(require("axios")),bt=c(require("axios-retry")),At=c(require("lodash"));var Ne=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ht=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Rt=()=>3e4;var ve=require("axios"),Le=c(require("pretty-ms"));var _t=s.extend("http"),ie=e=>[3*1e3,15*1e3,30*1e3][e-1],It=e=>(_t("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,ve.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,ve.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),se=()=>3;function Tt(e,t,r){_t("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Le.default)(ie(e)),e,se()),g("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Le.default)(ie(e)),e,se())}var Ot=s.extend("http");var Be={api:null,restApi:null};function Zo(e){let t=Pt.default.create({baseURL:e==="api"?Ne():ht(),timeout:Rt(),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={...At.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?Ot("network request retry: %o",yt({...n,isRetry:!0})):Ot("network request: %o",yt(n)),r}),(0,bt.default)(t,{retries:se(),retryCondition:It,retryDelay:ie,shouldResetTimeout:!0,onRetry:Tt}),t}function Ut(e){return Be[e]===null&&(Be[e]=Zo(e)),Be[e]}function yt(e){return{method:e.method,baseUrl:Ne(),url:e.url,data:e.isRetry?"<retry>":en(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function en(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var xt=require("axios"),Dt=c(require("lodash")),T=require("ts-pattern");function Nt(e){(0,T.match)(e).when(xt.isAxiosError,tn).otherwise(()=>{g("Unexpected error while sending network request: %s",e)})}function tn(e){return(0,T.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:T.P.not(T.P.nullish)},t=>{rn(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{g(`[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 rn(e,{status:t,data:r}){(0,T.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:
7
+ %o`,r)}).with(429,()=>{g(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{on(e,r)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
8
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function on(e,t){(0,T.match)(t).with({code:wt.MISSING_SUITE,message:T.P.string,errors:T.P.array(T.P.string)},async r=>{let{message:o,errors:n}=r;te(1),u(...St(o,n))}).with({code:wt.RUN_EXPIRED,message:T.P.string},r=>{g(r.message)}).with({message:T.P.string,errors:T.P.array(T.P.string)},r=>{let{message:o,errors:n}=r;te(1),g(...St(o,n)),te(1)}).otherwise(()=>{g(`[currents] Unexpected network response: %s
9
+ %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var wt={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function St(e,t){return Dt.default.isString(e)?t?.length===0?[e]:[e,`
10
10
  ${(t??[]).map(r=>` - ${r}`).join(`
11
11
  `)}
12
- `]:["Unexpected network error"]}var At=s.extend("http");async function G(e,t,r=It){try{let o=await r(e).request(t);return At("network response: %o",{...Ut.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw At("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}),bt(n),n}}var ie=s.extend("api");async function xt(e){try{return ie("Request params: %o",e),G("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ie("Failed to create cache:",t),t}}async function wt(e){try{return ie("Request params: %o",e),G("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ie("Failed to retrieve cache:",t),t}}var Nt=require("util"),Lt=require("zlib");var Dt=s.extend("api"),Qo=(0,Nt.promisify)(Lt.gzip);async function vt(e){try{Dt("Run params: %o",e);let t=await Wo(JSON.stringify(e));return G("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Dt("Failed to create the run:",t),t}}async function Wo(e){try{return await Qo(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var Bt=s.extend("api");async function Mt(e,t){try{return Bt("Run params: %o",t),G("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw Bt("Failed to obtain run data:",r),r}}async function Ne(){try{let e=Z();if(!e)throw new Error("Config is missing!");e.debug&&S();let t=e.ciBuildId?{ciBuildId:e.ciBuildId,pwLastFailed:e.pwLastFailed}:{projectId:e.projectId,branch:e.branch,tag:e.tag,pwLastFailed:e.pwLastFailed},r=await Mt(e.apiKey,t);await Xo(e.pwLastFailed&&r.data.pwLastFailed?r.data.pwLastFailed:r.data,e)}catch(e){throw s("Failed to get run data"),e}}async function Xo(e,t){let r=JSON.stringify(e,null,2);t.output?(await te(t.output),await(0,Ft.writeFile)(t.output,r,"utf-8")):M(r)}var Zo={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},en={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},paths:{name:"Paths to cache",cli:"--paths"}},tn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"}},w={...Zo,...en,...tn};function Le(){return{recordKey:process.env[w.recordKey.env],debug:!!process.env[w.debug.env]}}var kt=s.extend("config"),Gt=["recordKey"],q;function Ht(e){q={type:"SET_COMMAND_CONFIG",values:F(w,Gt,Le,e)},kt("Resolved config: %o",q)}function Kt(e){q={type:"GET_COMMAND_CONFIG",values:F(w,Gt,Le,e)},kt("Resolved config: %o",q)}function D(){return q}function jt(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,debug:e.debug}}function $t(e){return{recordKey:e.key,id:e.id,preset:e.preset,paths:e.paths,includeHidden:e.includeHidden,debug:e.debug}}var C=require("lodash");var se=s.extend("ci"),rn=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),on=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),g=e=>(0,C.transform)(e,on,{}),nn=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,sn=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,an=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),cn=()=>process.env.bamboo_buildNumber,dn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,pn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,mn=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),un=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),ln=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,gn=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,fn=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Cn={appveyor:"APPVEYOR",azure:sn,awsCodeBuild:an,bamboo:cn,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:dn,codeshipPro:pn,concourse:mn,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:un,goCD:"GO_JOB_NAME",googleCloud:ln,jenkins:gn,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:nn,travis:"TRAVIS",wercker:fn,netlify:"NETLIFY",layerci:"LAYERCI"};function En(){let{env:e}=process;return(0,C.findKey)(Cn,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var Vt=()=>({appveyor:g(["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:g(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:g(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:g(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:g(["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:g(["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:g(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:g(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:g(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:g(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:g(["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:g(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:g(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:g(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:g(["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:g(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:g(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:g(["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:g(["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:g(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:g(["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:g(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:g(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),hn=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:rn(`
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}}},Jt=e=>{let t=Yt();return t?(0,C.chain)(e()).get(t).value():{}};function Rn(){return(0,C.chain)(Vt()).omitBy(C.isNull).keys().value()}function _n(e){return e&&Rn().includes(e)}function Yt(){let e=En();return se("detected CI provider name: %s",e),e||null}function In(){return Jt(Vt)}function qt(){return Jt(hn)}function K(e){let t=In(),r=Yt(),o=Tn(e,r);return se("detected CI provider: %s",r),se("detected CI params: %O",t),se("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Tn(e,t){return e?{source:"user",value:e}:_n(t)?{source:"server",value:null}:{source:"random",value:`auto:${Ue()}`}}var zt=c(require("archiver")),ve=c(require("fs-extra")),ae=c(require("path")),Qt=c(require("stream")),Wt=c(require("unzipper"));var On=50*1024*1024;async function Xt(e,t={},r=On){return new Promise((o,n)=>{let a=(0,zt.default)("zip",{zlib:{level:9}}),p=[],d=0;a.on("data",m=>{p.push(m),d+=m.length,d>r&&n(new Error(`Zip size exceeded the limit of ${r} bytes`))}),a.on("warning",m=>{m.code==="ENOENT"?f(m):n(m)}),a.on("error",m=>n(m)),a.on("end",()=>{let m=Buffer.concat(p);o(m)}),(async()=>{for(let m of e)(await ve.default.stat(m)).isDirectory()?a.directory(m,ae.default.basename(m)):a.file(m,{name:ae.default.basename(m)});a.finalize()})().catch(n)})}async function Zt(e){return new Promise((t,r)=>{let o={},n=new Qt.default.Readable;n.push(e),n.push(null),n.pipe(Wt.default.Parse()).on("entry",a=>{let p=a.path,d=[];a.on("data",u=>d.push(u)),a.on("end",()=>{o[p]=Buffer.concat(d)})}).on("finish",()=>{t(o)}).on("error",a=>{r(a)})})}async function er(e,t){console.log(e);for(let[r,o]of Object.entries(e)){let n=t?ae.default.join(t,r):r;await te(n),await ve.default.writeFile(n,o)}}var ir=c(require("async-retry"));var tr=c(require("axios")),rr=require("https-proxy-agent"),or=c(require("proxy-from-env"));var yn=s.extend("axios");function Be(e={}){let t=tr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),a=or.default.getProxyForUrl(n);return a&&(yn("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=Pn(a)),o}),t}var ce=null;function Pn(e){return ce||(ce=new rr.HttpsProxyAgent(e),ce)}var Me=s.extend("upload"),de=5;async function Fe(e,t,r){return Me("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),An(e.buffer,e.uploadUrl,t,r)}async function bn(e,t,r,o){return Be().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function ke(e,t){let r=await Be().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}async function An(...e){await(0,ir.default)(async()=>{await bn(...e)},{retries:de,onRetry:(t,r)=>{if(Me("Upload failed %d out of %d attempts: %s",r,de,t.message),r===de){l(`Cannot upload after ${r} times: ${t.message}`);return}f(`Upload failed ${r} out of ${de} attempts: ${t.message}`)}})}var Ge=e=>({total:t,loaded:r})=>{};function nr(e){return e/1e3/1e3}async function He(){try{let e=D();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,outputDir:o}=e.values;e.values.debug&&S();let n=K(),a=await wt({recordKey:t,ci:n,id:r});await Un({readUrl:a.readUrl,outputDir:o}),await Sn(a.metaReadUrl)}catch(e){throw s("Failed to obtain cache"),e}}async function Un({readUrl:e,outputDir:t}){try{let r=await ke(e),o=await Zt(r);await er(o,t),s("Cache downloaded")}catch(r){throw s("Failed to recreate chache from archive"),r}}async function Sn(e){try{let t=await ke(e),r=JSON.parse(t.toString("utf-8"));console.log(r),s("Meta file: %O",r)}catch(t){throw s("Failed to handle the meta"),t}}var L=require("@commander-js/extra-typings");var sr=require("@commander-js/extra-typings");var ar=require("axios");function j(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function N(e,t){try{await e(t),process.exit(0)}catch(r){r instanceof sr.CommanderError&&(l(r.message),process.exit(r.exitCode)),r instanceof H&&(l(r.message),process.exit(1)),(0,ar.isAxiosError)(r)&&(l(r.message),process.exit(1)),l("Script execution failed: %o",r),process.exit(1)}}var Ke=new L.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(R(w,"recordKey")),je=new L.Option("--debug","Enable debug logging").env(R(w,"debug")).default(!1),$e=new L.Option("--id <id>","The ID the data is saved under in the cache"),cr=new L.Option("--paths <paths>","Comma-separated list of paths to cache").argParser(j);var Ve=new L.Option("--preset <preset-name>",'A set of predefined options. Use "last-failed-sharding" to get the last failed run data').choices(["last-failed-sharding","last-failed-or8n"]),dr=new L.Option("--output-dir <dir>","Path to the directory where output will be written"),pr=new L.Option("--include-hidden","Include hidden files in the cache").default(!1);var mr=c(require("path"));function ur({config:e,cacheId:t,orgId:r,paths:o,ci:n}){let a={id:t,orgId:r,config:e,paths:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(a))}var lr=()=>mr.default.resolve(process.cwd(),"test-results",".last-run.json");async function Je(){try{let e=D();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,paths:o,debug:n,preset:a,includeHidden:p}=e.values;n&&S();let d=K(),u=await xt({recordKey:t,ci:d,id:r}),m=[];if(o&&o.length>0)m.push(...o);else if(a==="last-failed-sharding"||a==="last-failed-or8n"){let P=lr();m.push(P)}await xn({archive:await Xt(m,{includeHidden:p}),cacheId:u.cacheId,uploadUrl:u.uploadUrl}),await wn({meta:ur({cacheId:u.cacheId,config:e.values,ci:d,orgId:u.orgId,paths:m}),cacheId:u.cacheId,uploadUrl:u.metaUploadUrl})}catch(e){throw s("Failed to save cache"),e}}async function xn({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await Fe({buffer:e,contentType:o,name:t,uploadUrl:r},o,Ge(t)),s("Cache archive uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache archive",o),o}}async function wn({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await Fe({buffer:e,contentType:n,name:o,uploadUrl:r},n,Ge(o)),s("Cache meta uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache meta",o),o}}var fr=require("@currents/commit-info"),Cr=require("lodash");var pe=require("lodash");var Ye=s.extend("ci-git");function gr(e){Ye("git commit existing info: %O",e);let t=qt();Ye("commit info from provider environment variables: %O",t);let r=(0,pe.transform)(e,(o,n,a)=>{let p=n||(t?t[a]:null);return o[a]=(0,pe.defaultTo)(p,null)});return Ye("combined git and environment variables from provider: %O",r),r}var Dn=async()=>{let e=await(0,fr.commitInfo)();return gr({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Er=(0,Cr.memoize)(Dn);var hr=c(require("getos")),Rr=require("lodash"),T=require("os"),_r=require("util"),Nn=async()=>{if((0,T.platform)()==="linux")try{let e=await(0,_r.promisify)(hr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,T.release)()}catch{return(0,T.release)()}return(0,T.release)()},Ln=async()=>{let e=await Nn();return{osName:(0,T.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,T.freemem)(),total:(0,T.totalmem)()}}},Ir=(0,Rr.memoize)(Ln);var Kr=require("lodash"),Ce=c(require("path")),jr=c(require("semver"));var h={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 Tr(){return{projectId:process.env[h.projectId.env],recordKey:process.env[h.recordKey.env],ciBuildId:process.env[h.ciBuildId.env],tag:process.env[h.tag.env]?process.env[h.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:!!process.env[h.disableTitleTags.env],removeTitleTags:!!process.env[h.removeTitleTags.env],debug:!!process.env[h.debug.env],machineId:process.env[h.machineId.env]}}var vn=s.extend("config"),Bn=["projectId","recordKey"],qe=null;function Or(e){qe=F(h,Bn,Tr,e),vn("Resolved Currents config: %o",qe)}function me(){return qe}function yr(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 vr=c(require("fs-extra")),Br=require("jest-cli"),Mr=c(require("tmp"));var Nr=require("lodash");var Pr=require("lodash"),Mn=["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 br(e){return(0,Pr.omit)(e,...Mn)}function Ar(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 xr=c(require("fs")),wr=require("jest-config"),ze=require("lodash"),Qe=c(require("path"));function ue(e,t){return(...r)=>new Promise((o,n)=>{let a=0,p=()=>{a++;try{let d=e(...r);o(d)}catch(d){if(a>=t.length)n(d);else{let u=t[a-1];setTimeout(p,u)}}};p()})}var Ur=c(require("fs-extra")),Fn=c(require("path"));async function le(e){let t=await Ur.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Sr=s.extend("jest-discovery");async function Dr(e){try{let{config:t,configPath:r}=await(0,wr.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,ze.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(u=>typeof u!="string"?(0,ze.omit)(u,n):u)),a.rootDir&&Object.keys(a).length===1)return null;let p=Qe.default.resolve(r?Qe.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),d=`module.exports=${JSON.stringify(a,null,2)}`;return Sr("configFileContent: %O",d),xr.default.writeFileSync(p,d),await ue(le,[200,200,200,200,200,1e3])(p),p}catch(t){return l("Failed to recreate the config file"),Sr("error %o",t),null}}async function Lr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=br(r),n=Ar(o),a=r.config,p=await Dr(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(u=>!(0,Nr.isEmpty)(u)),configFilePath:p}}var kn=s.extend("jest-discovery");async function Fr(e,t){console.time(E("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Lr(t);try{let n=Mr.default.fileSync({postfix:".json"});return kn("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Br.run)(r.concat(["--openHandlesTimeout=0"])),await ue(le,Array.from({length:300},()=>100))(n.name),console.timeEnd(E("@currents/jest:fullTestSuite-ready")),await k(n.name)}catch(n){return l("Failed to obtain the jest full test suite:",n),[]}finally{o&&vr.default.unlinkSync(o)}}var $=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var ge=class extends ${constructor(t){super(t)}async getFullTestSuite(){return Fr(this.config.frameworkConfig,this.config.cliArgs)}};function kr(e){switch(e.framework){case"jest":return new ge(e);default:return new $(e)}}var V=c(require("fs-extra")),A=c(require("path"));async function Gr(e){let t=await Gn(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??A.default.join(t,"config.json")}}async function Gn(e){return e?(await fe(e),e):Hn((0,A.join)(process.cwd(),".currents"))}async function Hn(e){let t=await V.default.readdir(e),r=null;for(let o of t){let n=A.default.join(e,o),a=await V.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,A.resolve)(e,r.name):null}async function fe(e){try{return await V.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function Hr(e){let t=A.default.join(e,"instances");return Kn(t)}async function Kn(e){let t=await V.default.readdir(e),r=[];for(let o of t){let n=A.default.join(e,o);(await V.default.stat(n)).isFile()&&r.push(n)}return r}async function We(){let e=me();if(!e)throw new Error("Currents config is missing!");e.debug&&S();let t=await Gr(e);rt(Jn(t.reportDir)),s("Reporter options: %o",t),M("Report directory: %s",t.reportDir);let r=await k(t.configFilePath);s("Report config: %o",r);let o=await Hr(t.reportDir);s("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=$n(t.reportDir),a=await fe(n),p=Vn(t.reportDir),d=null;if(a){let O=await k(n);f("Marker file detected. The report was already uploaded: %o",{runUrl:O.response.runUrl,isoDate:O.isoDate}),await fe(p)&&(d=await k(p),s("Full test suite file detected: %s",p))}if(d)s("The discovery stage was skipped");else{if(d=await kr(r).getFullTestSuite(),Yn(d))throw new Error("Failed to discover the full test suite!");await be(p,JSON.stringify(d))}let u=d.length===1?d[0].name:null,m={currents:e},P={type:r.framework,version:r.frameworkVersion,clientVersion:W},et=re.userFacingNanoid(),Q=K(e.ciBuildId),v={};for await(let O of o){let b=await k(O);v[b.groupId]||(v[b.groupId]=[]),v[b.groupId].push(b)}for await(let O of Object.keys(v)){let b=v[O],Ie=O;u&&(s("Default group found: %s, overwriting the group in the results",u),Ie=u,b=b.map(B=>({...B,groupId:u})));try{let B=await jn({ci:Q,group:Ie,instances:b,fullTestSuite:d,config:m,machineId:et,framework:P});s("Api response: %o",B),M("[%s] Run created: %s",Ie,B.runUrl);let yo={response:B,isoDate:new Date().toISOString()};await be(n,JSON.stringify(yo)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(B){throw s("Failed to upload the results to the dashboard"),B}}}async function jn({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:a,framework:p}){let d=await Er(),u=await Ir(),m={browserName:"node",browserVersion:jr.default.coerce(process.version)?.version},{currents:P}=n,Q={platform:{...m,...u},ci:e,commit:d,group:t,fullTestSuite:o,config:n,projectId:P.projectId,recordKey:P.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:P.tag??[],machineId:P.machineId??a,framework:p,instances:r};return s("Creating run: %o",(0,Kr.mapValues)(Q,(v,O)=>O==="recordKey"?"******":v)),vt(Q)}function $n(e){return Ce.default.join(e,"upload.marker.json")}function Vn(e){return Ce.default.join(e,"fullTestSuite.json")}function Jn(e){return Ce.default.join(e,`.debug-${new Date().toISOString()}.log`)}function Yn(e){return e.length===0||e.some(t=>t.tests.length===0)}var qn=s.extend("cli");async function $r(e){await N(async t=>{ct(t);let r=Z();qn("Config: %o",r),await Ne()},e)}var U=require("@commander-js/extra-typings");var Vr=new U.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(R(x,"apiKey")),Jr=new U.Option("-o, --output <path>","Path to the file where output will be written").env(R(x,"output")),Yr=new U.Option("--ci-build-id <id>","Unique identifier for the run"),qr=new U.Option("-p, --project-id <project>","Project ID from Currents associated with the run"),zr=new U.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(j),Qr=new U.Option("--debug","Enable debug logging").env(R(x,"debug")).default(!1),Wr=new U.Option("-b, --branch <branch>","Branch name for the recorded run"),Xr=new U.Option("--pw-last-failed",'Generate output formatted for Playwright ".last-run.json"');var Ee="api",zn=e=>`
12
+ `]:["Unexpected network error"]}var vt=s.extend("http");async function j(e,t,r=Ut){try{let o=await r(e).request(t);return vt("network response: %o",{...Lt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw vt("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}),Nt(n),n}}var ae=s.extend("api");async function Mt(e){try{return ae("Request params: %o",e),j("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ae("Failed to create cache:",t),t}}async function Gt(e){try{return ae("Request params: %o",e),j("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ae("Failed to retrieve cache:",t),t}}var kt=require("util"),Ht=require("zlib");var Ft=s.extend("api"),nn=(0,kt.promisify)(Ht.gzip);async function jt(e){try{Ft("Run params: %o",e);let t=await sn(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 Ft("Failed to create the run:",t),t}}async function sn(e){try{return await nn(e)}catch(t){throw u("Failed to compress run payload:",t),t}}var Kt=s.extend("api");async function $t(e,t){try{return Kt("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 Kt("Failed to obtain run data:",r),r}}async function Me(){try{let e=re();if(!e)throw new Error("Config is missing!");e.debug&&N();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 $t(e.apiKey,t);await an(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw s("Failed to get run data"),e}}async function an(e,t){let r=JSON.stringify(e,null,2);t.output?(await Ct(t.output),await(0,Vt.writeFile)(t.output,r,"utf-8")):F(r)}var A=require("@commander-js/extra-typings");var cn={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},pn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},pwConfigDump:{name:"Playwright config dump",cli:"--pw-config-dump"},paths:{name:"Paths to cache",cli:"--paths"}},mn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"}},v={...cn,...pn,...mn};function Ge(){return{recordKey:process.env[v.recordKey.env],debug:!!process.env[v.debug.env]}}var Jt=s.extend("config"),Yt=["recordKey"],X;function qt(e){X={type:"SET_COMMAND_CONFIG",values:k(v,Yt,Ge,e)},Jt("Resolved config: %o",X)}function Wt(e){X={type:"GET_COMMAND_CONFIG",values:k(v,Yt,Ge,e)},Jt("Resolved config: %o",X)}function L(){return X}function Qt(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,debug:e.debug}}function zt(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,pwConfigDump:e.pwConfigDump,paths:e.paths,includeHidden:e.includeHidden,debug:e.debug}}var Xt=require("@commander-js/extra-typings");var Zt=require("axios");function J(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function B(e,t){try{await e(t),process.exit(0)}catch(r){r instanceof Xt.CommanderError&&(u(r.message),process.exit(r.exitCode)),r instanceof V&&(u(r.message),process.exit(1)),(0,Zt.isAxiosError)(r)&&(u(r.message),process.exit(1)),u("Script execution failed: %o",r),process.exit(1)}}var Fe=new A.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(R(v,"recordKey")),ke=new A.Option("--debug","Enable debug logging").env(R(v,"debug")).default(!1),He=new A.Option("--id <id>","The ID the data is saved under in the cache"),er=new A.Option("--paths <paths>","Comma-separated list of paths to cache").argParser(J),ce=(t=>(t.lastRun="last-run",t))(ce||{}),je=new A.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(ce)),tr=new A.Option("--output-dir <dir>","Path to the directory where output will be written"),Ke=new A.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),rr=new A.Option("--include-hidden","Include hidden files in the cache").hideHelp().default(!1),$e=".currents_env",or=new A.Option("--pw-config-dump <path>","Path to the file containing the Playwright configuration dump").default($e);var C=require("lodash");var pe=s.extend("ci"),dn=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),un=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),f=e=>(0,C.transform)(e,un,{}),ln=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,gn=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,fn=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Cn=()=>process.env.bamboo_buildNumber,En=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,hn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Rn=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),_n=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),In=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Tn=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,On=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,yn={appveyor:"APPVEYOR",azure:gn,awsCodeBuild:fn,bamboo:Cn,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:En,codeshipPro:hn,concourse:Rn,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:_n,goCD:"GO_JOB_NAME",googleCloud:In,jenkins:Tn,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:ln,travis:"TRAVIS",wercker:On,netlify:"NETLIFY",layerci:"LAYERCI"};function Pn(){let{env:e}=process;return(0,C.findKey)(yn,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var nr=()=>({appveyor:f(["APPVEYOR_JOB_ID","APPVEYOR_ACCOUNT_NAME","APPVEYOR_PROJECT_SLUG","APPVEYOR_BUILD_NUMBER","APPVEYOR_BUILD_VERSION","APPVEYOR_PULL_REQUEST_NUMBER","APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH"]),azure:f(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:f(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:f(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:f(["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:f(["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:f(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:f(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:f(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:f(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:f(["CF_BUILD_ID","CF_BUILD_URL","CF_CURRENT_ATTEMPT","CF_STEP_NAME","CF_PIPELINE_NAME","CF_PIPELINE_TRIGGER_ID","CF_PULL_REQUEST_ID","CF_PULL_REQUEST_IS_FORK","CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_TARGET"]),drone:f(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:f(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:f(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:f(["GO_SERVER_URL","GO_ENVIRONMENT_NAME","GO_PIPELINE_NAME","GO_PIPELINE_COUNTER","GO_PIPELINE_LABEL","GO_STAGE_NAME","GO_STAGE_COUNTER","GO_JOB_NAME","GO_TRIGGER_USER","GO_REVISION","GO_TO_REVISION","GO_FROM_REVISION","GO_MATERIAL_HAS_CHANGED"]),googleCloud:f(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:f(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:f(["SEMAPHORE_BRANCH_ID","SEMAPHORE_BUILD_NUMBER","SEMAPHORE_CURRENT_JOB","SEMAPHORE_CURRENT_THREAD","SEMAPHORE_EXECUTABLE_UUID","SEMAPHORE_GIT_BRANCH","SEMAPHORE_GIT_DIR","SEMAPHORE_GIT_REF","SEMAPHORE_GIT_REF_TYPE","SEMAPHORE_GIT_REPO_SLUG","SEMAPHORE_GIT_SHA","SEMAPHORE_GIT_URL","SEMAPHORE_JOB_COUNT","SEMAPHORE_JOB_ID","SEMAPHORE_JOB_NAME","SEMAPHORE_JOB_UUID","SEMAPHORE_PIPELINE_ID","SEMAPHORE_PLATFORM","SEMAPHORE_PROJECT_DIR","SEMAPHORE_PROJECT_HASH_ID","SEMAPHORE_PROJECT_ID","SEMAPHORE_PROJECT_NAME","SEMAPHORE_PROJECT_UUID","SEMAPHORE_REPO_SLUG","SEMAPHORE_TRIGGER_SOURCE","SEMAPHORE_WORKFLOW_ID","PULL_REQUEST_NUMBER"]),shippable:f(["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:f(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:f(["TRAVIS_JOB_ID","TRAVIS_BUILD_ID","TRAVIS_BUILD_WEB_URL","TRAVIS_REPO_SLUG","TRAVIS_JOB_NUMBER","TRAVIS_EVENT_TYPE","TRAVIS_COMMIT_RANGE","TRAVIS_BUILD_NUMBER","TRAVIS_PULL_REQUEST","TRAVIS_PULL_REQUEST_BRANCH","TRAVIS_PULL_REQUEST_SHA"]),wercker:null,netlify:f(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:f(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),bn=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:dn(`
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}}},ir=e=>{let t=sr();return t?(0,C.chain)(e()).get(t).value():{}};function An(){return(0,C.chain)(nr()).omitBy(C.isNull).keys().value()}function Un(e){return e&&An().includes(e)}function sr(){let e=Pn();return pe("detected CI provider name: %s",e),e||null}function wn(){return ir(nr)}function ar(){return ir(bn)}function Y(e){let t=wn(),r=sr(),o=Sn(e,r);return pe("detected CI provider: %s",r),pe("detected CI params: %O",t),pe("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Sn(e,t){return e?{source:"user",value:e}:Un(t)?{source:"server",value:null}:{source:"random",value:`auto:${De()}`}}var cr=c(require("archiver")),Ve=c(require("fs-extra")),K=c(require("path")),pr=c(require("unzipper"));var xn=50*1024*1024;async function mr(e,t={},r=xn){return new Promise((o,n)=>{let a=(0,cr.default)("zip",{zlib:{level:9}}),p=[],d=0;a.on("data",m=>{p.push(m),d+=m.length,d>r&&n(new Error(`Zip size exceeded the limit of ${r} bytes`))}),a.on("warning",m=>{m.code==="ENOENT"?g(m):n(m)}),a.on("error",m=>n(m)),a.on("end",()=>{let m=Buffer.concat(p);o(m)});let l=async m=>{let _=K.default.normalize(m),b=await Ve.default.stat(_),O=K.default.dirname(_),y=O==="."?void 0:O;b.isDirectory()?a.directory(_,_,{prefix:y,stats:b}):a.file(_,{name:K.default.relative(O,_),prefix:y,stats:b})};(async m=>{for(let _ of m)if(_==="."){let b=await Ve.default.readdir(_);for(let O of b)await l(O)}else await l(_);a.finalize()})(e).catch(n)})}async function dr(e,t){return pr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}function ur(e){let t=process.cwd();return e.filter(r=>{let o=K.default.resolve(r),n=K.default.relative(t,o);return r.startsWith("..")||K.default.isAbsolute(n)?(g(`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}var lr=c(require("path"));function gr({config:e,cacheId:t,orgId:r,paths:o,ci:n}){let a={id:t,orgId:r,config:e,paths:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(a))}var fr=e=>lr.default.resolve(e??"test-results",".last-run.json");function me(e,t){e instanceof Error?we("%s. %s.",t,e.message):we("%s. %s.",t,"Unknown error")}var _r=c(require("async-retry"));var Cr=c(require("axios")),Er=require("https-proxy-agent"),hr=c(require("proxy-from-env"));var Dn=s.extend("axios");function Je(e={}){let t=Cr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),a=hr.default.getProxyForUrl(n);return a&&(Dn("Using HTTP proxy %s for %s ",a,n),o.proxy=!1,o.httpsAgent=Nn(a)),o}),t}var de=null;function Nn(e){return de||(de=new Er.HttpsProxyAgent(e),de)}var Ye=s.extend("upload"),ue=5;async function qe(e,t,r){return Ye("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),Ln(e.buffer,e.uploadUrl,t,r)}async function vn(e,t,r,o){return Je().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function We(e,t){let r=await Je().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}async function Ln(...e){await(0,_r.default)(async()=>{await vn(...e)},{retries:ue,onRetry:(t,r)=>{if(Ye("Upload failed %d out of %d attempts: %s",r,ue,t.message),r===ue){u(`Cannot upload after ${r} times: ${t.message}`);return}g(`Upload failed ${r} out of ${ue} attempts: ${t.message}`)}})}var Qe=e=>({total:t,loaded:r})=>{};function Rr(e){return e/1e3/1e3}var Xe=c(require("lodash"));async function Ir(e,t){switch(t.provider){case"GITHUB_ACTIONS":await Bn(e,t);break;default:break}}async function Bn(e,t){let r=ze(t.params.GITHUB_RUN_ATTEMPT,1),o=ze(process.env.GH_STRATEGY_NODE_INDEX,1),n=ze(process.env.GH_STRATEGY_JOB_TOTAL,1),a=r>1?"--last-failed":"",p="";n>1&&(p=r>1?"--shard=1/1":`--shard=${o}/${n}`);let d=[a,p].filter(Boolean).join(" ");await z(e.pwConfigDump??$e,d)}var ze=(e,t)=>{let r=Xe.default.toNumber(e);return Xe.default.isNaN(r)?t:r};async function Ze(){try{let e=L();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o}=e.values,n=e.values.outputDir??e.values.pwOutputDir;e.values.debug&&N();let a=Y();o==="last-run"&&await Ir(e.values,a);let p=await Gt({recordKey:t,ci:a,id:r});await Mn({readUrl:p.readUrl,outputDir:n}),await Gn(p.metaReadUrl)}catch(e){me(e,"Failed to obtain cache")}}async function Mn({readUrl:e,outputDir:t}){try{let r=await We(e);await dr(r,t||"."),s("Cache downloaded")}catch(r){throw s("Failed to recreate chache from archive"),r}}async function Gn(e){try{let t=await We(e),r=JSON.parse(t.toString("utf-8"));console.log(r),s("Meta file: %O",r)}catch(t){throw s("Failed to handle the meta"),t}}async function et(){try{let e=L();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,debug:o,preset:n,pwOutputDir:a,includeHidden:p}=e.values;o&&N();let d=e.values.paths?ur(e.values.paths):[],l=[];d&&d.length>0&&l.push(...d);let M=Y();if(n==="last-run"){let _=fr(a);l.push(_)}if(l.length===0)throw new Error("No paths available to upload");let m=await Mt({recordKey:t,ci:M,id:r});await Fn({archive:await mr(l,{includeHidden:p}),cacheId:m.cacheId,uploadUrl:m.uploadUrl}),await kn({meta:gr({cacheId:m.cacheId,config:e.values,ci:M,orgId:m.orgId,paths:l}),cacheId:m.cacheId,uploadUrl:m.metaUploadUrl})}catch(e){me(e,"Failed to save cache")}}async function Fn({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await qe({buffer:e,contentType:o,name:t,uploadUrl:r},o,Qe(t)),s("Cache archive uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache archive",o),o}}async function kn({meta:e,cacheId:t,uploadUrl:r}){try{let o=`${t}_meta`,n="application/json";await qe({buffer:e,contentType:n,name:o,uploadUrl:r},n,Qe(o)),s("Cache meta uploaded",{cacheId:t})}catch(o){throw s("Failed to upload cache meta",o),o}}var Or=require("@currents/commit-info"),yr=require("lodash");var le=require("lodash");var tt=s.extend("ci-git");function Tr(e){tt("git commit existing info: %O",e);let t=ar();tt("commit info from provider environment variables: %O",t);let r=(0,le.transform)(e,(o,n,a)=>{let p=n||(t?t[a]:null);return o[a]=(0,le.defaultTo)(p,null)});return tt("combined git and environment variables from provider: %O",r),r}var Hn=async()=>{let e=await(0,Or.commitInfo)();return Tr({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Pr=(0,yr.memoize)(Hn);var br=c(require("getos")),Ar=require("lodash"),P=require("os"),Ur=require("util"),jn=async()=>{if((0,P.platform)()==="linux")try{let e=await(0,Ur.promisify)(br.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,P.release)()}catch{return(0,P.release)()}return(0,P.release)()},Kn=async()=>{let e=await jn();return{osName:(0,P.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,P.freemem)(),total:(0,P.totalmem)()}}},wr=(0,Ar.memoize)(Kn);var Qr=require("lodash"),Re=c(require("path")),zr=c(require("semver"));var h={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 Sr(){return{projectId:process.env[h.projectId.env],recordKey:process.env[h.recordKey.env],ciBuildId:process.env[h.ciBuildId.env],tag:process.env[h.tag.env]?process.env[h.tag.env]?.split(",").map(e=>e.trim()):void 0,disableTitleTags:!!process.env[h.disableTitleTags.env],removeTitleTags:!!process.env[h.removeTitleTags.env],debug:!!process.env[h.debug.env],machineId:process.env[h.machineId.env]}}var $n=s.extend("config"),Vn=["projectId","recordKey"],rt=null;function xr(e){rt=k(h,Vn,Sr,e),$n("Resolved Currents config: %o",rt)}function ge(){return rt}function Dr(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 Kr=c(require("fs-extra")),$r=require("jest-cli"),Vr=c(require("tmp"));var Hr=require("lodash");var Nr=require("lodash"),Jn=["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 vr(e){return(0,Nr.omit)(e,...Jn)}function Lr(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 Gr=c(require("fs")),Fr=require("jest-config"),ot=require("lodash"),nt=c(require("path"));function fe(e,t){return(...r)=>new Promise((o,n)=>{let a=0,p=()=>{a++;try{let d=e(...r);o(d)}catch(d){if(a>=t.length)n(d);else{let l=t[a-1];setTimeout(p,l)}}};p()})}var Br=c(require("fs-extra")),Yn=c(require("path"));async function Ce(e){let t=await Br.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Mr=s.extend("jest-discovery");async function kr(e){try{let{config:t,configPath:r}=await(0,Fr.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,ot.omit)(t,o);if(a.projects&&(a.projects=a.projects.map(l=>typeof l!="string"?(0,ot.omit)(l,n):l)),a.rootDir&&Object.keys(a).length===1)return null;let p=nt.default.resolve(r?nt.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),d=`module.exports=${JSON.stringify(a,null,2)}`;return Mr("configFileContent: %O",d),Gr.default.writeFileSync(p,d),await fe(Ce,[200,200,200,200,200,1e3])(p),p}catch(t){return u("Failed to recreate the config file"),Mr("error %o",t),null}}async function jr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=vr(r),n=Lr(o),a=r.config,p=await kr(a);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(l=>!(0,Hr.isEmpty)(l)),configFilePath:p}}var qn=s.extend("jest-discovery");async function Jr(e,t){console.time(E("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await jr(t);try{let n=Vr.default.fileSync({postfix:".json"});return qn("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,$r.run)(r.concat(["--openHandlesTimeout=0"])),await fe(Ce,Array.from({length:300},()=>100))(n.name),console.timeEnd(E("@currents/jest:fullTestSuite-ready")),await H(n.name)}catch(n){return u("Failed to obtain the jest full test suite:",n),[]}finally{o&&Kr.default.unlinkSync(o)}}var q=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var Ee=class extends q{constructor(t){super(t)}async getFullTestSuite(){return Jr(this.config.frameworkConfig,this.config.cliArgs)}};function Yr(e){switch(e.framework){case"jest":return new Ee(e);default:return new q(e)}}var W=c(require("fs-extra")),x=c(require("path"));async function qr(e){let t=await Wn(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??x.default.join(t,"config.json")}}async function Wn(e){return e?(await he(e),e):Qn((0,x.join)(process.cwd(),".currents"))}async function Qn(e){let t=await W.default.readdir(e),r=null;for(let o of t){let n=x.default.join(e,o),a=await W.default.stat(n);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:o,birthtime:a.birthtime})}return r?(0,x.resolve)(e,r.name):null}async function he(e){try{return await W.default.pathExists(e)}catch{return u("Error checking if path exists:",u),!1}}async function Wr(e){let t=x.default.join(e,"instances");return zn(t)}async function zn(e){let t=await W.default.readdir(e),r=[];for(let o of t){let n=x.default.join(e,o);(await W.default.stat(n)).isFile()&&r.push(n)}return r}async function it(){let e=ge();if(!e)throw new Error("Currents config is missing!");e.debug&&N();let t=await qr(e);pt(ti(t.reportDir)),s("Reporter options: %o",t),F("Report directory: %s",t.reportDir);let r=await H(t.configFilePath);s("Report config: %o",r);let o=await Wr(t.reportDir);s("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=Zn(t.reportDir),a=await he(n),p=ei(t.reportDir),d=null;if(a){let y=await H(n);g("Marker file detected. The report was already uploaded: %o",{runUrl:y.response.runUrl,isoDate:y.isoDate}),await he(p)&&(d=await H(p),s("Full test suite file detected: %s",p))}if(d)s("The discovery stage was skipped");else{if(d=await Yr(r).getFullTestSuite(),ri(d))throw new Error("Failed to discover the full test suite!");await z(p,JSON.stringify(d))}let l=d.length===1?d[0].name:null,M={currents:e},m={type:r.framework,version:r.frameworkVersion,clientVersion:ee},_=ne.userFacingNanoid(),b=Y(e.ciBuildId),O={};for await(let y of o){let w=await H(y);O[w.groupId]||(O[w.groupId]=[]),O[w.groupId].push(w)}for await(let y of Object.keys(O)){let w=O[y],ye=y;l&&(s("Default group found: %s, overwriting the group in the results",l),ye=l,w=w.map(G=>({...G,groupId:l})));try{let G=await Xn({ci:b,group:ye,instances:w,fullTestSuite:d,config:M,machineId:_,framework:m});s("Api response: %o",G),F("[%s] Run created: %s",ye,G.runUrl);let Do={response:G,isoDate:new Date().toISOString()};await z(n,JSON.stringify(Do)),s("Marker file %s: %s",a?"overwritten":"created",n)}catch(G){throw s("Failed to upload the results to the dashboard"),G}}}async function Xn({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:a,framework:p}){let d=await Pr(),l=await wr(),M={browserName:"node",browserVersion:zr.default.coerce(process.version)?.version},{currents:m}=n,b={platform:{...M,...l},ci:e,commit:d,group:t,fullTestSuite:o,config:n,projectId:m.projectId,recordKey:m.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:m.tag??[],machineId:m.machineId??a,framework:p,instances:r};return s("Creating run: %o",(0,Qr.mapValues)(b,(O,y)=>y==="recordKey"?"******":O)),jt(b)}function Zn(e){return Re.default.join(e,"upload.marker.json")}function ei(e){return Re.default.join(e,"fullTestSuite.json")}function ti(e){return Re.default.join(e,`.debug-${new Date().toISOString()}.log`)}function ri(e){return e.length===0||e.some(t=>t.tests.length===0)}var oi=s.extend("cli");async function Xr(e){await B(async t=>{gt(t);let r=re();oi("Config: %o",r),await Me()},e)}var D=require("@commander-js/extra-typings");var Zr=new D.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(R(S,"apiKey")),eo=new D.Option("-o, --output <path>","Path to the file where output will be written").env(R(S,"output")),to=new D.Option("--ci-build-id <id>","Unique identifier for the run"),ro=new D.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(R(S,"projectId")),oo=new D.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(J),no=new D.Option("--debug","Enable debug logging").env(R(S,"debug")).default(!1),io=new D.Option("-b, --branch <branch>","Branch name for the recorded run"),so=new D.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var _e="api",ni=e=>`
14
14
 
15
- ${Zr.default.bold("Examples")}
15
+ ${ao.default.bold("Examples")}
16
16
 
17
17
  Obtain run data by --ci-build-id:
18
- ${E(`${e} ${Ee} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
18
+ ${E(`${e} ${_e} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
19
19
 
20
20
  Obtain most recent run data by filters:
21
- ${E(`${e} ${Ee} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
21
+ ${E(`${e} ${_e} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
22
22
 
23
23
  Obtain last run data that matches the Playwright "test-results/.last-run.json":
24
- ${E(`${e} ${Ee} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-failed --output <output-path>`)}
24
+ ${E(`${e} ${_e} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
25
25
 
26
- `,eo=e=>new Xe.Command().command(Ee).description(`Receive information from Currents API ${zn(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Qn()),Qn=()=>new Xe.Command().name("get-run").allowUnknownOption().addOption(Vr).addOption(Qr).addOption(Yr).addOption(qr).addOption(Wr).addOption(zr).addOption(Jr).addOption(Xr).action($r);var he=require("@commander-js/extra-typings");var oo=c(require("chalk"));var Wn=s.extend("cli");async function to(e){await N(async t=>{Kt(jt(t));let r=D();Wn("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await He()},e)}var Xn=s.extend("cli");async function ro(e){await N(async t=>{Ht($t(t));let r=D();Xn("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await Je()},e)}var J="cache",Zn=e=>`
26
+ `,co=e=>new st.Command().command(_e).description(`Receive information from Currents API ${ni(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(ii()),ii=()=>new st.Command().name("get-run").allowUnknownOption().addOption(Zr).addOption(no).addOption(to).addOption(ro).addOption(io).addOption(oo).addOption(eo).addOption(so).action(Xr);var Ie=require("@commander-js/extra-typings");var uo=c(require("chalk"));var si=s.extend("cli");async function po(e){await B(async t=>{Wt(Qt(t));let r=L();si("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await Ze()},e)}var ai=s.extend("cli");async function mo(e){await B(async t=>{qt(zt(t));let r=L();ai("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await et()},e)}var Q="cache",ci=e=>`
27
27
 
28
- ${oo.default.bold("Examples")}
28
+ ${uo.default.bold("Examples")}
29
29
 
30
30
  Save files to the cache under a specific ID:
31
- ${E(`${e} ${J} set --key <record-key> --id <id> --paths <path-1,path-2,...path-n>`)}
31
+ ${E(`${e} ${Q} set --key <record-key> --id <id> --paths <path-1,path-2,...path-n>`)}
32
32
 
33
33
  Retrieve files from the cache saved under a specific ID:
34
- ${E(`${e} ${J} get --key <record-key> --id <id>`)}
34
+ ${E(`${e} ${Q} get --key <record-key> --id <id>`)}
35
35
 
36
36
  Store the last run data in the cache:
37
- ${E(`${e} ${J} set --key <record-key> --preset last-failed-sharding`)}
37
+ ${E(`${e} ${Q} set --key <record-key> --preset last-failed-sharding`)}
38
38
 
39
39
  Retrieve the last run data from the cache:
40
- ${E(`${e} ${J} get --key <record-key> --preset last-failed-sharding`)}
40
+ ${E(`${e} ${Q} get --key <record-key> --preset last-failed-sharding`)}
41
41
 
42
42
  Retrieve the last run data from the cache and save it to a custom directory:
43
- ${E(`${e} ${J} get --key <record-key> --preset last-failed-sharding --outputDir <outputDir>`)}
43
+ ${E(`${e} ${Q} get --key <record-key> --preset last-failed-sharding --outputDir <outputDir>`)}
44
44
 
45
- `,no=e=>new he.Command().command(J).description(`Cache data to Currents ${Zn(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(ei()).addCommand(ti()),ei=()=>new he.Command().name("set").allowUnknownOption().addOption(Ke).addOption($e).addOption(Ve.conflicts(["id","paths"])).addOption(cr).addOption(pr).addOption(je).action(ro),ti=()=>new he.Command().name("get").allowUnknownOption().addOption(Ke).addOption($e).addOption(Ve.conflicts("id")).addOption(dr).addOption(je).action(to);var Ro=require("@commander-js/extra-typings"),_o=c(require("chalk"));var y=require("@commander-js/extra-typings");var io=new y.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(R(h,"ciBuildId")),so=new y.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(R(h,"recordKey")),ao=new y.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(R(h,"projectId")),co=new y.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(j),po=new y.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),mo=new y.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),uo=new y.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(R(h,"machineId")),lo=new y.Option("--report-dir <string>","explicit path to the report directory").env(R(h,"reportDir")),go=new y.Option("--debug","enable debug logs").env(R(h,"debug")).default(!1);var Eo=c(require("fs"));var fo=require("tmp-promise"),Co=async()=>{let{path:e}=await(0,fo.file)();return e};var Ze=s.extend("cli"),Re=class{constructor(t){this.configFilePath=null;this.cliOptions=t,Ze("CLI options: %o",this.cliOptions),this.parsedConfig=yr(this.cliOptions),Ze("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await Co();return Eo.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),Ze("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function ho(e){await N(async t=>{let r=new Re(t);Or(r.parsedConfig);let o=me();M("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await We()},e)}var z="upload",ri=e=>`
45
+ `,lo=e=>new Ie.Command().command(Q).description(`Cache data to Currents ${ci(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(pi()).addCommand(mi()),pi=()=>new Ie.Command().name("set").allowUnknownOption().addOption(Fe).addOption(He).addOption(je).addOption(er).addOption(rr).addOption(ke).addOption(Ke).action(mo),mi=()=>new Ie.Command().name("get").allowUnknownOption().addOption(Fe).addOption(He).addOption(je).addOption(tr).addOption(Ke.conflicts("output-dir")).addOption(or).addOption(ke).action(po);var Ao=require("@commander-js/extra-typings"),Uo=c(require("chalk"));var U=require("@commander-js/extra-typings");var go=new U.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(R(h,"ciBuildId")),fo=new U.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(R(h,"recordKey")),Co=new U.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(R(h,"projectId")),Eo=new U.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(J),ho=new U.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),Ro=new U.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),_o=new U.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(R(h,"machineId")),Io=new U.Option("--report-dir <string>","explicit path to the report directory").env(R(h,"reportDir")),To=new U.Option("--debug","enable debug logs").env(R(h,"debug")).default(!1);var Po=c(require("fs"));var Oo=require("tmp-promise"),yo=async()=>{let{path:e}=await(0,Oo.file)();return e};var at=s.extend("cli"),Te=class{constructor(t){this.configFilePath=null;this.cliOptions=t,at("CLI options: %o",this.cliOptions),this.parsedConfig=Dr(this.cliOptions),at("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await yo();return Po.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),at("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function bo(e){await B(async t=>{let r=new Te(t);xr(r.parsedConfig);let o=ge();F("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await it()},e)}var Z="upload",di=e=>`
46
46
 
47
- ${_o.default.bold("Examples")}
47
+ ${Uo.default.bold("Examples")}
48
48
 
49
49
  Upload test results to Currents:
50
- ${E(`${e} ${z} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
50
+ ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
51
51
 
52
52
  Upload test results to Currents, add tags "tagA", "tagB" to the recorded run:
53
- ${E(`${e} ${z} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
53
+ ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
54
54
 
55
55
  Provide a custom path to the reports directory:
56
- ${E(`${e} ${z} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
56
+ ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
57
57
 
58
- `,Io=e=>new Ro.Command().name(z).command(z).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
59
- ${ri(e)}`).addOption(io).addOption(so).addOption(ao).addOption(co).addOption(po).addOption(mo).addOption(uo).addOption(go).addOption(lo).action(r=>ho(r));var oi=`
58
+ `,wo=e=>new Ao.Command().name(Z).command(Z).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
59
+ ${di(e)}`).addOption(go).addOption(fo).addOption(Co).addOption(Eo).addOption(ho).addOption(Ro).addOption(_o).addOption(To).addOption(Io).action(r=>bo(r));var ui=`
60
60
  ----------------------------------------------------
61
61
  \u{1F4D6} Documentation: https://docs.currents.dev
62
62
  \u{1F919} Support: support@currents.dev
63
63
  ----------------------------------------------------
64
- `,_e="currents",Oo=()=>new To.Command(_e).version(W).description(`Currents CLI ${oi}`).addCommand(Io(_e),{isDefault:!0}).addCommand(no(_e)).addCommand(eo(_e));import("dotenv/config");function ni(){Oo().parse()}ni();
64
+ `,Oe="currents",xo=()=>new So.Command(Oe).version(ee).description(`Currents CLI ${ui}`).addCommand(wo(Oe),{isDefault:!0}).addCommand(lo(Oe)).addCommand(co(Oe));import("dotenv/config");function li(){xo().parse()}li();
65
65
  /*! For license information please see index.js.LEGAL.txt */
66
66
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var Tt=Object.create;var D=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,Ut=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ot(t))!Ut.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Tt(Pt(e)):{},ce(t||!e||!e.__esModule?D(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>ce(D({},"__esModule",{value:!0}),e);var Or={};ae(Or,{handleCurrentsReport:()=>ft});module.exports=At(Or);var Y=require("debug"),St=u(require("fs-extra")),i=(0,Y.debug)("currents"),Lt=null;function ue(){Y.debug.enable("currents,currents:*")}function me(e){Lt=e}var B={};ae(B,{getNanoid:()=>Nt,userFacingNanoid:()=>q});var $=require("nanoid"),pe="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Nt=(e=16)=>(0,$.customAlphabet)(pe,e)(),q=(0,$.customAlphabet)(pe,12);var m=require("lodash");var y=i.extend("ci"),Dt=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Bt=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),c=e=>(0,m.transform)(e,Bt,{}),yt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,bt=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,vt=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Mt=()=>process.env.bamboo_buildNumber,xt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,wt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Ft=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ht=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Gt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,kt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,jt=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Vt={appveyor:"APPVEYOR",azure:bt,awsCodeBuild:vt,bamboo:Mt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:xt,codeshipPro:wt,concourse:Ft,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ht,goCD:"GO_JOB_NAME",googleCloud:Gt,jenkins:kt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:yt,travis:"TRAVIS",wercker:jt,netlify:"NETLIFY",layerci:"LAYERCI"};function Kt(){let{env:e}=process;return(0,m.findKey)(Vt,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var le=()=>({appveyor:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:c(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:c(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:c(["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:c(["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:c(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:c(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:c(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:c(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:c(["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:c(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:c(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:c(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:c(["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:c(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:c(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:c(["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:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:c(["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:c(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:c(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Jt=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Dt(`
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}}},Ee=e=>{let t=de();return t?(0,m.chain)(e()).get(t).value():{}};function Yt(){return(0,m.chain)(le()).omitBy(m.isNull).keys().value()}function $t(e){return e&&Yt().includes(e)}function de(){let e=Kt();return y("detected CI provider name: %s",e),e||null}function qt(){return Ee(le)}function ge(){return Ee(Jt)}function _e(e){let t=qt(),r=de(),n=Qt(e,r);return y("detected CI provider: %s",r),y("detected CI params: %O",t),y("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function Qt(e,t){return e?{source:"user",value:e}:$t(t)?{source:"server",value:null}:{source:"random",value:`auto:${q()}`}}var Ie=require("@currents/commit-info"),fe=require("lodash");var b=require("lodash");var Q=i.extend("ci-git");function Re(e){Q("git commit existing info: %O",e);let t=ge();Q("commit info from provider environment variables: %O",t);let r=(0,b.transform)(e,(n,o,a)=>{let p=o||(t?t[a]:null);return n[a]=(0,b.defaultTo)(p,null)});return Q("combined git and environment variables from provider: %O",r),r}var Wt=async()=>{let e=await(0,Ie.commitInfo)();return Re({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Ce=(0,fe.memoize)(Wt);var Te=u(require("getos")),he=require("lodash"),I=require("os"),Oe=require("util"),zt=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,Oe.promisify)(Te.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,I.release)()}catch{return(0,I.release)()}return(0,I.release)()},Xt=async()=>{let e=await zt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Pe=(0,he.memoize)(Xt);var Ue={name:"@currents/cmd",version:"1.1.0-beta.4",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@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",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.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.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","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.2.0",unzipper:"^0.12.3"},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=Ue.version;var er=[];function W(e){er.push(e)}var R=u(require("chalk")),L=u(require("util"));var Se=[],Le=[];var Ne=(...e)=>{let t=L.default.format(...e);W(t),console.log(t)},tr=(...e)=>{let t=L.default.format(...e);W(t),console.error(t)},z=Ne,E=(...e)=>{let t=L.default.format(...e);return Le.push(t),i("WARNING: ",t),Ne(R.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=L.default.format(...e);return Se.push(t),i("ERROR: ",t),tr(R.default.bgRed.white(" ERROR "),t)};var v=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),oo=R.default.cyan,no=R.default.blueBright,so=R.default.red,io=R.default.yellow,ao=R.default.green,co=R.default.gray,uo=R.default.white,mo=R.default.black,po=R.default.magenta,M=R.default.dim,lo=R.default.bold;var X=u(require("fs-extra")),or=require("path");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 Rt=require("lodash"),V=u(require("path")),It=u(require("semver"));var $e=u(require("lodash"));var we=u(require("axios")),Fe=u(require("axios-retry")),He=u(require("lodash"));var ee=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",De=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Be=()=>3e4;var te=require("axios"),re=u(require("pretty-ms"));var ye=i.extend("http"),x=e=>[3*1e3,15*1e3,30*1e3][e-1],be=e=>(ye("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 ve(e,t,r){ye("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(x(e)),e,w()),E("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(x(e)),e,w())}var Me=i.extend("http");var oe={api:null,restApi:null};function nr(e){let t=we.default.create({baseURL:e==="api"?ee():De(),timeout:Be(),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={...He.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return n?Me("network request retry: %o",xe({...o,isRetry:!0})):Me("network request: %o",xe(o)),r}),(0,Fe.default)(t,{retries:w(),retryCondition:be,retryDelay:x,shouldResetTimeout:!0,onRetry:ve}),t}function Ge(e){return oe[e]===null&&(oe[e]=nr(e)),oe[e]}function xe(e){return{method:e.method,baseUrl:ee(),url:e.url,data:e.isRetry?"<retry>":sr(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function sr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Ve=require("axios"),Ke=u(require("lodash")),g=require("ts-pattern");function Je(e){(0,g.match)(e).when(Ve.isAxiosError,ir).otherwise(()=>{E("Unexpected error while sending network request: %s",e)})}function ir(e){return(0,g.match)(e).with({code:"ECONNABORTED"},()=>{E("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{E("Network connection aborted")}).with({code:"ECONNRESET"},()=>{E("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{E("Network connection timeout")}).with({response:g.P.not(g.P.nullish)},t=>{ar(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{E(`[currents] Unexpected network error: %s
1
+ "use strict";var Tt=Object.create;var D=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,Ut=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ot(t))!Ut.call(e,o)&&o!==r&&D(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var u=(e,t,r)=>(r=e!=null?Tt(Pt(e)):{},ce(t||!e||!e.__esModule?D(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>ce(D({},"__esModule",{value:!0}),e);var Or={};ae(Or,{handleCurrentsReport:()=>ft});module.exports=At(Or);var Y=require("debug"),St=u(require("fs-extra")),i=(0,Y.debug)("currents"),Lt=null;function ue(){Y.debug.enable("currents,currents:*")}function me(e){Lt=e}var B={};ae(B,{getNanoid:()=>Nt,userFacingNanoid:()=>q});var $=require("nanoid"),pe="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Nt=(e=16)=>(0,$.customAlphabet)(pe,e)(),q=(0,$.customAlphabet)(pe,12);var m=require("lodash");var y=i.extend("ci"),Dt=(e,...t)=>(0,m.chain)(t).compact().join(e).value(),Bt=(e,t)=>(0,m.set)(e,(0,m.camelCase)(t),process.env[t]),c=e=>(0,m.transform)(e,Bt,{}),yt=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,bt=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,vt=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Mt=()=>process.env.bamboo_buildNumber,xt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,wt=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,Ht=()=>(0,m.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),Ft=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),Gt=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,kt=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,jt=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Vt={appveyor:"APPVEYOR",azure:bt,awsCodeBuild:vt,bamboo:Mt,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:xt,codeshipPro:wt,concourse:Ht,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:Ft,goCD:"GO_JOB_NAME",googleCloud:Gt,jenkins:kt,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:yt,travis:"TRAVIS",wercker:jt,netlify:"NETLIFY",layerci:"LAYERCI"};function Kt(){let{env:e}=process;return(0,m.findKey)(Vt,t=>{if((0,m.isString)(t))return e[t];if((0,m.isFunction)(t))return t()})}var le=()=>({appveyor:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID","BUILD_REPOSITORY_URI","SYSTEM_TEAMPROJECT","SYSTEM_COLLECTIONURI"]),awsCodeBuild:c(["CODEBUILD_BUILD_ID","CODEBUILD_BUILD_NUMBER","CODEBUILD_RESOLVED_SOURCE_VERSION","CODEBUILD_SOURCE_REPO_URL","CODEBUILD_SOURCE_VERSION"]),bamboo:c(["bamboo_buildNumber","bamboo_buildResultsUrl","bamboo_planRepository_repositoryUrl","bamboo_buildKey"]),bitbucket:c(["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:c(["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:c(["CIRCLE_JOB","CIRCLE_BUILD_NUM","CIRCLE_BUILD_URL","CIRCLE_PR_NUMBER","CIRCLE_PR_REPONAME","CIRCLE_PR_USERNAME","CIRCLE_COMPARE_URL","CIRCLE_WORKFLOW_ID","CIRCLE_PULL_REQUEST","CIRCLE_REPOSITORY_URL","CI_PULL_REQUEST"]),codeshipBasic:c(["CI_BUILD_ID","CI_REPO_NAME","CI_BUILD_URL","CI_PROJECT_ID","CI_BUILD_NUMBER","CI_PULL_REQUEST"]),codeshipPro:c(["CI_BUILD_ID","CI_REPO_NAME","CI_PROJECT_ID"]),concourse:c(["BUILD_ID","BUILD_NAME","BUILD_JOB_NAME","BUILD_PIPELINE_NAME","BUILD_TEAM_NAME","ATC_EXTERNAL_URL"]),codeFresh:c(["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:c(["DRONE_JOB_NUMBER","DRONE_BUILD_LINK","DRONE_BUILD_NUMBER","DRONE_PULL_REQUEST"]),githubActions:c(["GITHUB_WORKFLOW","GITHUB_ACTION","GITHUB_EVENT_NAME","GITHUB_RUN_ID","GITHUB_RUN_ATTEMPT","GITHUB_REPOSITORY"]),gitlab:c(["CI_PIPELINE_ID","CI_PIPELINE_URL","CI_BUILD_ID","CI_JOB_ID","CI_JOB_URL","CI_JOB_NAME","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH"]),goCD:c(["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:c(["BUILD_ID","PROJECT_ID","REPO_NAME","BRANCH_NAME","TAG_NAME","COMMIT_SHA","SHORT_SHA"]),jenkins:c(["BUILD_ID","BUILD_URL","BUILD_NUMBER","ghprbPullId"]),semaphore:c(["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:c(["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:c(["BUILD_BUILDID","BUILD_BUILDNUMBER","BUILD_CONTAINERID"]),travis:c(["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:c(["BUILD_ID","CONTEXT","URL","DEPLOY_URL","DEPLOY_PRIME_URL","DEPLOY_ID"]),layerci:c(["LAYERCI_JOB_ID","LAYERCI_RUNNER_ID","RETRY_INDEX","LAYERCI_PULL_REQUEST","LAYERCI_REPO_NAME","LAYERCI_REPO_OWNER","LAYERCI_BRANCH","GIT_TAG"])}),Jt=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:Dt(`
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}}},Ee=e=>{let t=de();return t?(0,m.chain)(e()).get(t).value():{}};function Yt(){return(0,m.chain)(le()).omitBy(m.isNull).keys().value()}function $t(e){return e&&Yt().includes(e)}function de(){let e=Kt();return y("detected CI provider name: %s",e),e||null}function qt(){return Ee(le)}function ge(){return Ee(Jt)}function _e(e){let t=qt(),r=de(),n=Qt(e,r);return y("detected CI provider: %s",r),y("detected CI params: %O",t),y("detected CI build ID: %o",n),{params:t,provider:r,ciBuildId:n}}function Qt(e,t){return e?{source:"user",value:e}:$t(t)?{source:"server",value:null}:{source:"random",value:`auto:${q()}`}}var Ie=require("@currents/commit-info"),fe=require("lodash");var b=require("lodash");var Q=i.extend("ci-git");function Re(e){Q("git commit existing info: %O",e);let t=ge();Q("commit info from provider environment variables: %O",t);let r=(0,b.transform)(e,(n,o,a)=>{let p=o||(t?t[a]:null);return n[a]=(0,b.defaultTo)(p,null)});return Q("combined git and environment variables from provider: %O",r),r}var Wt=async()=>{let e=await(0,Ie.commitInfo)();return Re({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Ce=(0,fe.memoize)(Wt);var Te=u(require("getos")),he=require("lodash"),I=require("os"),Oe=require("util"),zt=async()=>{if((0,I.platform)()==="linux")try{let e=await(0,Oe.promisify)(Te.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,I.release)()}catch{return(0,I.release)()}return(0,I.release)()},Xt=async()=>{let e=await zt();return{osName:(0,I.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,I.freemem)(),total:(0,I.totalmem)()}}},Pe=(0,he.memoize)(Xt);var Ue={name:"@currents/cmd",version:"1.1.0-beta.6",main:"./dist/index.js",author:"Currents Software Inc",license:"GPL-3.0-or-later",description:"Currents CLI tools",scripts:{test:"vitest",rm:"rimraf dist",lint:'TIMING=1 eslint "**/*.ts*"',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.2","@types/async-retry":"^1.4.8","@types/debug":"^4.1.12","@types/fs-extra":"^11.0.4","@types/getos":"^3.0.4","@types/lodash":"^4.17.5","@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",jest:"^29.7.0",rimraf:"^5.0.7",tsup:"^8.1.0",typescript:"^5.4.5",vitest:"^1.3.0"},dependencies:{"@commander-js/extra-typings":"^11.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.4.0",commander:"^11.1.0",debug:"^4.3.5",dotenv:"^16.0.3",execa:"^8.0.1","fs-extra":"^11.2.0",getos:"^3.2.1","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.2.0",unzipper:"^0.12.3"},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=Ue.version;var er=[];function W(e){er.push(e)}var R=u(require("chalk")),L=u(require("util"));var Se=[],Le=[];var Ne=(...e)=>{let t=L.default.format(...e);W(t),console.log(t)},tr=(...e)=>{let t=L.default.format(...e);W(t),console.error(t)},z=Ne,E=(...e)=>{let t=L.default.format(...e);return Le.push(t),i("WARNING: ",t),Ne(R.default.bgYellow.black(" WARNING "),t)};var d=(...e)=>{let t=L.default.format(...e);return Se.push(t),i("ERROR: ",t),tr(R.default.bgRed.white(" ERROR "),t)};var v=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),oo=R.default.cyan,no=R.default.blueBright,so=R.default.red,io=R.default.yellow,ao=R.default.green,co=R.default.gray,uo=R.default.white,mo=R.default.black,po=R.default.magenta,M=R.default.dim,lo=R.default.bold;var X=u(require("fs-extra")),or=require("path");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 Rt=require("lodash"),V=u(require("path")),It=u(require("semver"));var $e=u(require("lodash"));var we=u(require("axios")),He=u(require("axios-retry")),Fe=u(require("lodash"));var ee=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",De=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",Be=()=>3e4;var te=require("axios"),re=u(require("pretty-ms"));var ye=i.extend("http"),x=e=>[3*1e3,15*1e3,30*1e3][e-1],be=e=>(ye("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 ve(e,t,r){ye("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(x(e)),e,w()),E("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,re.default)(x(e)),e,w())}var Me=i.extend("http");var oe={api:null,restApi:null};function nr(e){let t=we.default.create({baseURL:e==="api"?ee():De(),timeout:Be(),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={...Fe.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return n?Me("network request retry: %o",xe({...o,isRetry:!0})):Me("network request: %o",xe(o)),r}),(0,He.default)(t,{retries:w(),retryCondition:be,retryDelay:x,shouldResetTimeout:!0,onRetry:ve}),t}function Ge(e){return oe[e]===null&&(oe[e]=nr(e)),oe[e]}function xe(e){return{method:e.method,baseUrl:ee(),url:e.url,data:e.isRetry?"<retry>":sr(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function sr(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Ve=require("axios"),Ke=u(require("lodash")),g=require("ts-pattern");function Je(e){(0,g.match)(e).when(Ve.isAxiosError,ir).otherwise(()=>{E("Unexpected error while sending network request: %s",e)})}function ir(e){return(0,g.match)(e).with({code:"ECONNABORTED"},()=>{E("Network connection aborted")}).with({code:"ECONNREFUSED"},()=>{E("Network connection aborted")}).with({code:"ECONNRESET"},()=>{E("Network connection reset")}).with({code:"ETIMEDOUT"},()=>{E("Network connection timeout")}).with({response:g.P.not(g.P.nullish)},t=>{ar(t,{status:t.response.status,data:t.response.data})}).otherwise(t=>{E(`[currents] Unexpected network error: %s
4
4
  %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status,payload:e.response?.config.data})})}function ar(e,{status:t,data:r}){(0,g.match)(t).with(401,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url}} - 401 Unauthorized Request from cloud service`)}).with(400,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 400 Bad Request from cloud service:
5
5
  %o`,r)}).with(429,()=>{E(`[currents] ${e.response?.config.method} ${e.response?.config.url} - 429 Too Many Requests from cloud service`)}).with(422,()=>{cr(e,r)}).otherwise(()=>{E(`[currents] Unexpected network response: %s
6
6
  %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}function cr(e,t){(0,g.match)(t).with({code:ke.MISSING_SUITE,message:g.P.string,errors:g.P.array(g.P.string)},async r=>{let{message:n,errors:o}=r;v(1),d(...je(n,o))}).with({code:ke.RUN_EXPIRED,message:g.P.string},r=>{E(r.message)}).with({message:g.P.string,errors:g.P.array(g.P.string)},r=>{let{message:n,errors:o}=r;v(1),E(...je(n,o)),v(1)}).otherwise(()=>{E(`[currents] Unexpected network response: %s
7
7
  %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var ke={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function je(e,t){return Ke.default.isString(e)?t?.length===0?[e]:[e,`
8
8
  ${(t??[]).map(r=>` - ${r}`).join(`
9
9
  `)}
10
- `]:["Unexpected network error"]}var Ye=i.extend("http");async function F(e,t,r=Ge){try{let n=await r(e).request(t);return Ye("network response: %o",{...$e.default.omit(n,"request","config"),url:n.config.url,method:n.config.method}),n}catch(n){let o=n;throw Ye("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}),Je(o),o}}var rn=i.extend("api");var We=require("util"),ze=require("zlib");var Qe=i.extend("api"),ur=(0,We.promisify)(ze.gzip);async function Xe(e){try{Qe("Run params: %o",e);let t=await mr(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 Qe("Failed to create the run:",t),t}}async function mr(e){try{return await ur(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var gn=i.extend("api");var xn=i.extend("config");var pr=null;function Ze(){return pr}var mt=u(require("fs-extra")),pt=require("jest-cli"),lt=u(require("tmp"));var ct=require("lodash");var et=require("lodash"),lr=["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 tt(e){return(0,et.omit)(e,...lr)}function rt(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=u(require("fs")),it=require("jest-config"),ne=require("lodash"),se=u(require("path"));function H(e,t){return(...r)=>new Promise((n,o)=>{let a=0,p=()=>{a++;try{let l=e(...r);n(l)}catch(l){if(a>=t.length)o(l);else{let _=t[a-1];setTimeout(p,_)}}};p()})}var ot=u(require("fs-extra")),Er=u(require("path"));async function G(e){let t=await ot.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var nt=i.extend("jest-discovery");async function at(e){try{let{config:t,configPath:r}=await(0,it.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(_=>typeof _!="string"?(0,ne.omit)(_,o):_)),a.rootDir&&Object.keys(a).length===1)return null;let p=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 nt("configFileContent: %O",l),st.default.writeFileSync(p,l),await H(G,[200,200,200,200,200,1e3])(p),p}catch(t){return d("Failed to recreate the config file"),nt("error %o",t),null}}async function ut(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,n=tt(r),o=rt(n),a=r.config,p=await at(a);return{cliArgs:[o,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(_=>!(0,ct.isEmpty)(_)),configFilePath:p}}var dr=i.extend("jest-discovery");async function Et(e,t){console.time(M("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:n}=await ut(t);try{let o=lt.default.fileSync({postfix:".json"});return dr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=o.name,await(0,pt.run)(r.concat(["--openHandlesTimeout=0"])),await H(G,Array.from({length:300},()=>100))(o.name),console.timeEnd(M("@currents/jest:fullTestSuite-ready")),await P(o.name)}catch(o){return d("Failed to obtain the jest full test suite:",o),[]}finally{n&&mt.default.unlinkSync(n)}}var A=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var k=class extends A{constructor(t){super(t)}async getFullTestSuite(){return Et(this.config.frameworkConfig,this.config.cliArgs)}};function dt(e){switch(e.framework){case"jest":return new k(e);default:return new A(e)}}var S=u(require("fs-extra")),T=u(require("path"));async function gt(e){let t=await gr(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??T.default.join(t,"config.json")}}async function gr(e){return e?(await j(e),e):_r((0,T.join)(process.cwd(),".currents"))}async function _r(e){let t=await S.default.readdir(e),r=null;for(let n of t){let o=T.default.join(e,n),a=await S.default.stat(o);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:n,birthtime:a.birthtime})}return r?(0,T.resolve)(e,r.name):null}async function j(e){try{return await S.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function _t(e){let t=T.default.join(e,"instances");return Rr(t)}async function Rr(e){let t=await S.default.readdir(e),r=[];for(let n of t){let o=T.default.join(e,n);(await S.default.stat(o)).isFile()&&r.push(o)}return r}async function ft(){let e=Ze();if(!e)throw new Error("Currents config is missing!");e.debug&&ue();let t=await gt(e);me(Tr(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 _t(t.reportDir);i("Found %d instance results in the reportDir: %s",n.length,t.reportDir);let o=fr(t.reportDir),a=await j(o),p=Cr(t.reportDir),l=null;if(a){let f=await P(o);E("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await j(p)&&(l=await P(p),i("Full test suite file detected: %s",p))}if(l)i("The discovery stage was skipped");else{if(l=await dt(r).getFullTestSuite(),hr(l))throw new Error("Failed to discover the full test suite!");await Z(p,JSON.stringify(l))}let _=l.length===1?l[0].name:null,K={currents:e},U={type:r.framework,version:r.frameworkVersion,clientVersion:Ae},ie=B.userFacingNanoid(),N=_e(e.ciBuildId),h={};for await(let f of n){let C=await P(f);h[C.groupId]||(h[C.groupId]=[]),h[C.groupId].push(C)}for await(let f of Object.keys(h)){let C=h[f],J=f;_&&(i("Default group found: %s, overwriting the group in the results",_),J=_,C=C.map(O=>({...O,groupId:_})));try{let O=await Ir({ci:N,group:J,instances:C,fullTestSuite:l,config:K,machineId:ie,framework:U});i("Api response: %o",O),z("[%s] Run created: %s",J,O.runUrl);let Ct={response:O,isoDate:new Date().toISOString()};await Z(o,JSON.stringify(Ct)),i("Marker file %s: %s",a?"overwritten":"created",o)}catch(O){throw i("Failed to upload the results to the dashboard"),O}}}async function Ir({ci:e,group:t,instances:r,fullTestSuite:n,config:o,machineId:a,framework:p}){let l=await Ce(),_=await Pe(),K={browserName:"node",browserVersion:It.default.coerce(process.version)?.version},{currents:U}=o,N={platform:{...K,..._},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:p,instances:r};return i("Creating run: %o",(0,Rt.mapValues)(N,(h,f)=>f==="recordKey"?"******":h)),Xe(N)}function fr(e){return V.default.join(e,"upload.marker.json")}function Cr(e){return V.default.join(e,"fullTestSuite.json")}function Tr(e){return V.default.join(e,`.debug-${new Date().toISOString()}.log`)}function hr(e){return e.length===0||e.some(t=>t.tests.length===0)}0&&(module.exports={handleCurrentsReport});
10
+ `]:["Unexpected network error"]}var Ye=i.extend("http");async function H(e,t,r=Ge){try{let n=await r(e).request(t);return Ye("network response: %o",{...$e.default.omit(n,"request","config"),url:n.config.url,method:n.config.method}),n}catch(n){let o=n;throw Ye("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}),Je(o),o}}var rn=i.extend("api");var We=require("util"),ze=require("zlib");var Qe=i.extend("api"),ur=(0,We.promisify)(ze.gzip);async function Xe(e){try{Qe("Run params: %o",e);let t=await mr(JSON.stringify(e));return H("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw Qe("Failed to create the run:",t),t}}async function mr(e){try{return await ur(e)}catch(t){throw d("Failed to compress run payload:",t),t}}var gn=i.extend("api");var xn=i.extend("config");var pr=null;function Ze(){return pr}var mt=u(require("fs-extra")),pt=require("jest-cli"),lt=u(require("tmp"));var ct=require("lodash");var et=require("lodash"),lr=["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 tt(e){return(0,et.omit)(e,...lr)}function rt(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=u(require("fs")),it=require("jest-config"),ne=require("lodash"),se=u(require("path"));function F(e,t){return(...r)=>new Promise((n,o)=>{let a=0,p=()=>{a++;try{let l=e(...r);n(l)}catch(l){if(a>=t.length)o(l);else{let _=t[a-1];setTimeout(p,_)}}};p()})}var ot=u(require("fs-extra")),Er=u(require("path"));async function G(e){let t=await ot.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var nt=i.extend("jest-discovery");async function at(e){try{let{config:t,configPath:r}=await(0,it.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(_=>typeof _!="string"?(0,ne.omit)(_,o):_)),a.rootDir&&Object.keys(a).length===1)return null;let p=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 nt("configFileContent: %O",l),st.default.writeFileSync(p,l),await F(G,[200,200,200,200,200,1e3])(p),p}catch(t){return d("Failed to recreate the config file"),nt("error %o",t),null}}async function ut(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,n=tt(r),o=rt(n),a=r.config,p=await at(a);return{cliArgs:[o,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(_=>!(0,ct.isEmpty)(_)),configFilePath:p}}var dr=i.extend("jest-discovery");async function Et(e,t){console.time(M("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:n}=await ut(t);try{let o=lt.default.fileSync({postfix:".json"});return dr("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=o.name,await(0,pt.run)(r.concat(["--openHandlesTimeout=0"])),await F(G,Array.from({length:300},()=>100))(o.name),console.timeEnd(M("@currents/jest:fullTestSuite-ready")),await P(o.name)}catch(o){return d("Failed to obtain the jest full test suite:",o),[]}finally{n&&mt.default.unlinkSync(n)}}var A=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var k=class extends A{constructor(t){super(t)}async getFullTestSuite(){return Et(this.config.frameworkConfig,this.config.cliArgs)}};function dt(e){switch(e.framework){case"jest":return new k(e);default:return new A(e)}}var S=u(require("fs-extra")),T=u(require("path"));async function gt(e){let t=await gr(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??T.default.join(t,"config.json")}}async function gr(e){return e?(await j(e),e):_r((0,T.join)(process.cwd(),".currents"))}async function _r(e){let t=await S.default.readdir(e),r=null;for(let n of t){let o=T.default.join(e,n),a=await S.default.stat(o);a.isDirectory()&&(!r||a.birthtime>r.birthtime)&&(r={name:n,birthtime:a.birthtime})}return r?(0,T.resolve)(e,r.name):null}async function j(e){try{return await S.default.pathExists(e)}catch{return d("Error checking if path exists:",d),!1}}async function _t(e){let t=T.default.join(e,"instances");return Rr(t)}async function Rr(e){let t=await S.default.readdir(e),r=[];for(let n of t){let o=T.default.join(e,n);(await S.default.stat(o)).isFile()&&r.push(o)}return r}async function ft(){let e=Ze();if(!e)throw new Error("Currents config is missing!");e.debug&&ue();let t=await gt(e);me(Tr(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 _t(t.reportDir);i("Found %d instance results in the reportDir: %s",n.length,t.reportDir);let o=fr(t.reportDir),a=await j(o),p=Cr(t.reportDir),l=null;if(a){let f=await P(o);E("Marker file detected. The report was already uploaded: %o",{runUrl:f.response.runUrl,isoDate:f.isoDate}),await j(p)&&(l=await P(p),i("Full test suite file detected: %s",p))}if(l)i("The discovery stage was skipped");else{if(l=await dt(r).getFullTestSuite(),hr(l))throw new Error("Failed to discover the full test suite!");await Z(p,JSON.stringify(l))}let _=l.length===1?l[0].name:null,K={currents:e},U={type:r.framework,version:r.frameworkVersion,clientVersion:Ae},ie=B.userFacingNanoid(),N=_e(e.ciBuildId),h={};for await(let f of n){let C=await P(f);h[C.groupId]||(h[C.groupId]=[]),h[C.groupId].push(C)}for await(let f of Object.keys(h)){let C=h[f],J=f;_&&(i("Default group found: %s, overwriting the group in the results",_),J=_,C=C.map(O=>({...O,groupId:_})));try{let O=await Ir({ci:N,group:J,instances:C,fullTestSuite:l,config:K,machineId:ie,framework:U});i("Api response: %o",O),z("[%s] Run created: %s",J,O.runUrl);let Ct={response:O,isoDate:new Date().toISOString()};await Z(o,JSON.stringify(Ct)),i("Marker file %s: %s",a?"overwritten":"created",o)}catch(O){throw i("Failed to upload the results to the dashboard"),O}}}async function Ir({ci:e,group:t,instances:r,fullTestSuite:n,config:o,machineId:a,framework:p}){let l=await Ce(),_=await Pe(),K={browserName:"node",browserVersion:It.default.coerce(process.version)?.version},{currents:U}=o,N={platform:{...K,..._},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:p,instances:r};return i("Creating run: %o",(0,Rt.mapValues)(N,(h,f)=>f==="recordKey"?"******":h)),Xe(N)}function fr(e){return V.default.join(e,"upload.marker.json")}function Cr(e){return V.default.join(e,"fullTestSuite.json")}function Tr(e){return V.default.join(e,`.debug-${new Date().toISOString()}.log`)}function hr(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.1.0-beta.4",
3
+ "version": "1.1.0-beta.6",
4
4
  "main": "./dist/index.js",
5
5
  "author": "Currents Software Inc",
6
6
  "license": "GPL-3.0-or-later",