@currents/cmd 1.1.0-beta.16 → 1.1.0-beta.18

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,34 +1,34 @@
1
1
  #! /usr/bin/env node
2
- "use strict";var Fo=Object.create;var Ae=Object.defineProperty;var ko=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var jo=Object.getPrototypeOf,Ko=Object.prototype.hasOwnProperty;var $o=(e,t)=>{for(var r in t)Ae(e,r,{get:t[r],enumerable:!0})},Vo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ho(t))!Ko.call(e,n)&&n!==r&&Ae(e,n,{get:()=>t[n],enumerable:!(o=ko(t,n))||o.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Fo(jo(e)):{},Vo(t||!e||!e.__esModule?Ae(r,"default",{value:e,enumerable:!0}):r,e));var Bd=require("source-map-support/register");var Bo=require("@commander-js/extra-typings");var pt={name:"@currents/cmd",version:"1.1.0-beta.16",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","https-proxy-agent":"^7.0.4",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=pt.version;var st=require("@commander-js/extra-typings");var Yo=[];function xe(e){Yo.push(e)}var T=c(require("chalk")),$=c(require("util"));var Ue=require("debug"),qo=c(require("fs-extra")),a=(0,Ue.debug)("currents"),Wo=null;function v(){Ue.debug.enable("currents,currents:*")}function mt(e){Wo=e}var dt=[],ut=[];var we=(...e)=>{let t=$.default.format(...e);xe(t),console.log(t)},Qo=(...e)=>{let t=$.default.format(...e);xe(t),console.error(t)},k=we,f=(...e)=>{let t=$.default.format(...e);return ut.push(t),a("WARNING: ",t),we(T.default.bgYellow.black(" WARNING "),t)},Se=(...e)=>{let t=$.default.format(...e);return a("WARNING: ",t),we(T.default.bgYellow.black(" WARNING "),t)};var l=(...e)=>{let t=$.default.format(...e);return dt.push(t),a("ERROR: ",t),Qo(T.default.bgRed.white(" ERROR "),t)};var te=(e=2)=>console.log(Array(e).fill("").join(`
3
- `)),Li=T.default.cyan,Bi=T.default.blueBright,Mi=T.default.red,Gi=T.default.yellow,Fi=T.default.green,ki=T.default.gray,Hi=T.default.white,ji=T.default.black,Ki=T.default.magenta,E=T.default.dim,$i=T.default.bold;var fo=c(require("chalk"));var V=class extends Error{};function lt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function _(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function Xo(e,t){return e[t].cli}function Zo(e,t){return e[t].name}function H(e,t,r,o){let n={...lt(o),...lt(r())};return t.forEach(s=>{if(!n[s])throw l(`${Zo(e,s)} is required for Currents Reporter. Use the following methods to set the value:
2
+ "use strict";var ko=Object.create;var Ue=Object.defineProperty;var Ho=Object.getOwnPropertyDescriptor;var jo=Object.getOwnPropertyNames;var Ko=Object.getPrototypeOf,$o=Object.prototype.hasOwnProperty;var Vo=(e,t)=>{for(var r in t)Ue(e,r,{get:t[r],enumerable:!0})},Jo=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of jo(t))!$o.call(e,n)&&n!==r&&Ue(e,n,{get:()=>t[n],enumerable:!(o=Ho(t,n))||o.enumerable});return e};var p=(e,t,r)=>(r=e!=null?ko(Ko(e)):{},Jo(t||!e||!e.__esModule?Ue(r,"default",{value:e,enumerable:!0}):r,e));var kd=require("source-map-support/register");var Mo=require("@commander-js/extra-typings");var pt={name:"@currents/cmd",version:"1.1.0-beta.18",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","https-proxy-agent":"^7.0.4",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 te=pt.version;var st=require("@commander-js/extra-typings");var qo=[];function we(e){qo.push(e)}var T=p(require("chalk")),$=p(require("util"));var Se=require("debug"),Wo=p(require("fs-extra")),a=(0,Se.debug)("currents"),Qo=null;function v(){Se.debug.enable("currents,currents:*")}function mt(e){Qo=e}var dt=[],ut=[];var De=(...e)=>{let t=$.default.format(...e);we(t),console.log(t)},zo=(...e)=>{let t=$.default.format(...e);we(t),console.error(t)},k=De,f=(...e)=>{let t=$.default.format(...e);return ut.push(t),a("WARNING: ",t),De(T.default.bgYellow.black(" WARNING "),t)},X=(...e)=>{let t=$.default.format(...e);return a("WARNING: ",t),De(T.default.bgYellow.black(" WARNING "),t)};var l=(...e)=>{let t=$.default.format(...e);return dt.push(t),a("ERROR: ",t),zo(T.default.bgRed.white(" ERROR "),t)};var re=(e=2)=>console.log(Array(e).fill("").join(`
3
+ `)),Bi=T.default.cyan,Mi=T.default.blueBright,Gi=T.default.red,Fi=T.default.yellow,ki=T.default.green,Hi=T.default.gray,ji=T.default.white,Ki=T.default.black,$i=T.default.magenta,E=T.default.dim,Vi=T.default.bold;var go=p(require("chalk"));var V=class extends Error{};function lt(e){return Object.entries(e??{}).reduce((t,[r,o])=>o===void 0?t:{...t,[r]:o},{})}function _(e,t){return"env"in e[t]&&e[t].env?e[t].env:""}function Zo(e,t){return e[t].cli}function en(e,t){return e[t].name}function H(e,t,r,o){let n={...lt(o),...lt(r())};return t.forEach(s=>{if(!n[s])throw l(`${en(e,s)} is required for Currents Reporter. Use the following methods to set the value:
4
4
  - as environment variable: ${E(_(e,s))}
5
- - as CLI flag of the command: ${E(Xo(e,s))}`),new V("Missing required config variable")}),n}var en={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},tn={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={...en,...tn};function ft(){return{apiKey:process.env[S.apiKey.env],debug:!!process.env[S.debug.env]}}var rn=a.extend("config"),on=["apiKey","projectId"],De=null;function gt(e){De=H(S,on,ft,e),rn("Resolved config: %o",De)}function re(){return De}var oe=c(require("fs-extra")),Ct=require("path");async function j(e){try{return await oe.default.readJson(e)}catch(t){throw l("Error while reading JSON file: %s",e,t),l}}async function J(e,t){try{return await oe.default.writeFile(e,t,"utf8"),e}catch(r){throw l(`Error writing file at ${e}:`,r),r}}async function Et(e){let t=(0,Ct.dirname)(e);await oe.default.ensureDir(t)}var ne={};$o(ne,{getNanoid:()=>nn,userFacingNanoid:()=>ve});var Ne=require("nanoid"),Rt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",nn=(e=16)=>(0,Ne.customAlphabet)(Rt,e)(),ve=(0,Ne.customAlphabet)(Rt,12);var Jt=require("fs/promises");var Bt=c(require("lodash"));var bt=c(require("axios")),At=c(require("axios-retry")),xt=c(require("lodash"));var Le=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ht=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",It=()=>3e4;var Be=require("axios"),Me=c(require("pretty-ms"));var _t=a.extend("http"),ie=e=>[3*1e3,15*1e3,30*1e3][e-1],Tt=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,Be.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Be.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),ae=()=>3;function Ot(e,t,r){_t("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Me.default)(ie(e)),e,ae()),f("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Me.default)(ie(e)),e,ae())}var Pt=a.extend("http");var Ge={api:null,restApi:null};function an(e){let t=bt.default.create({baseURL:e==="api"?Le():ht(),timeout:It(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let o=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let n={...xt.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?Pt("network request retry: %o",yt({...n,isRetry:!0})):Pt("network request: %o",yt(n)),r}),(0,At.default)(t,{retries:ae(),retryCondition:Tt,retryDelay:ie,shouldResetTimeout:!0,onRetry:Ot}),t}function Ut(e){return Ge[e]===null&&(Ge[e]=an(e)),Ge[e]}function yt(e){return{method:e.method,baseUrl:Le(),url:e.url,data:e.isRetry?"<retry>":sn(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function sn(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Dt=require("axios"),Nt=c(require("lodash")),O=require("ts-pattern");function vt(e){(0,O.match)(e).when(Dt.isAxiosError,cn).otherwise(()=>{f("Unexpected error while sending network request: %s",e)})}function cn(e){return(0,O.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:O.P.not(O.P.nullish)},t=>{pn(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 pn(e,{status:t,data:r}){(0,O.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,()=>{mn(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 mn(e,t){(0,O.match)(t).with({code:wt.MISSING_SUITE,message:O.P.string,errors:O.P.array(O.P.string)},async r=>{let{message:o,errors:n}=r;te(1),l(...St(o,n))}).with({code:wt.RUN_EXPIRED,message:O.P.string},r=>{f(r.message)}).with({message:O.P.string,errors:O.P.array(O.P.string)},r=>{let{message:o,errors:n}=r;te(1),f(...St(o,n)),te(1)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
5
+ - as CLI flag of the command: ${E(Zo(e,s))}`),new V("Missing required config variable")}),n}var tn={apiKey:{name:"Api Key",env:"CURRENTS_API_KEY",cli:"--api-key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},rn={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={...tn,...rn};function ft(){return{apiKey:process.env[S.apiKey.env],debug:!!process.env[S.debug.env]}}var on=a.extend("config"),nn=["apiKey","projectId"],Ne=null;function gt(e){Ne=H(S,nn,ft,e),on("Resolved config: %o",Ne)}function oe(){return Ne}var ne=p(require("fs-extra")),Ct=require("path");async function j(e){try{return await ne.default.readJson(e)}catch(t){throw l("Error while reading JSON file: %s",e,t),l}}async function J(e,t){try{return await ne.default.writeFile(e,t,"utf8"),e}catch(r){throw l(`Error writing file at ${e}:`,r),r}}async function Et(e){let t=(0,Ct.dirname)(e);await ne.default.ensureDir(t)}var ie={};Vo(ie,{getNanoid:()=>an,userFacingNanoid:()=>Le});var ve=require("nanoid"),Rt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",an=(e=16)=>(0,ve.customAlphabet)(Rt,e)(),Le=(0,ve.customAlphabet)(Rt,12);var Jt=require("fs/promises");var Bt=p(require("lodash"));var bt=p(require("axios")),At=p(require("axios-retry")),xt=p(require("lodash"));var Be=()=>process.env.CURRENTS_API_URL??"https://cy.currents.dev",ht=()=>process.env.CURRENTS_REST_API_URL??"https://api.currents.dev",It=()=>3e4;var Me=require("axios"),Ge=p(require("pretty-ms"));var _t=a.extend("http"),ae=e=>[3*1e3,15*1e3,30*1e3][e-1],Tt=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,Me.isAxiosError)(e)}),"code"in e&&e.code&&["ECONNABORTED","ECONNREFUSED","ECONNRESET","ETIMEDOUT","ENETRESET"].includes(e.code)?!0:(0,Me.isAxiosError)(e)?[429,502,503,504].includes(e.response?.status??0):!1),se=()=>3;function Ot(e,t,r){_t("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ge.default)(ae(e)),e,se()),f("Network request '%s' failed: '%s'. Next attempt is in %s (%d/%d).",`${r.method?.toUpperCase()} ${r.url}`,t.message,(0,Ge.default)(ae(e)),e,se())}var Pt=a.extend("http");var Fe={api:null,restApi:null};function sn(e){let t=bt.default.create({baseURL:e==="api"?Be():ht(),timeout:It(),transitional:{clarifyTimeoutError:!0}});return t.interceptors.request.use(r=>{let o=r["axios-retry"]?.retryCount??0;r.headers.get("Content-Type")||r.headers.set("Content-Type","application/json");let n={...xt.default.pick(r,"method","url","headers"),data:Buffer.isBuffer(r.data)?"buffer":r.data};return o?Pt("network request retry: %o",yt({...n,isRetry:!0})):Pt("network request: %o",yt(n)),r}),(0,At.default)(t,{retries:se(),retryCondition:Tt,retryDelay:ae,shouldResetTimeout:!0,onRetry:Ot}),t}function Ut(e){return Fe[e]===null&&(Fe[e]=sn(e)),Fe[e]}function yt(e){return{method:e.method,baseUrl:Be(),url:e.url,data:e.isRetry?"<retry>":cn(e.data),headers:{...e.headers,"x-currents-key":"***"}}}function cn(e){return e?.results?.raw?{...e,results:{...e.results,raw:"***"}}:e}var Dt=require("axios"),Nt=p(require("lodash")),O=require("ts-pattern");function vt(e){(0,O.match)(e).when(Dt.isAxiosError,pn).otherwise(()=>{f("Unexpected error while sending network request: %s",e)})}function pn(e){return(0,O.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:O.P.not(O.P.nullish)},t=>{mn(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 mn(e,{status:t,data:r}){(0,O.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,()=>{dn(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 dn(e,t){(0,O.match)(t).with({code:wt.MISSING_SUITE,message:O.P.string,errors:O.P.array(O.P.string)},async r=>{let{message:o,errors:n}=r;re(1),l(...St(o,n))}).with({code:wt.RUN_EXPIRED,message:O.P.string},r=>{f(r.message)}).with({message:O.P.string,errors:O.P.array(O.P.string)},r=>{let{message:o,errors:n}=r;re(1),f(...St(o,n)),re(1)}).otherwise(()=>{f(`[currents] Unexpected network response: %s
9
9
  %O`,e.message,{method:e.response?.config.method,url:e.response?.config.url,status:e.response?.status})})}var wt={RUN_CANCELLED:"RUN_CANCELLED",RUN_EXPIRED:"RUN_EXPIRED",MISSING_SUITE:"MISSING_SUITE"};function St(e,t){return Nt.default.isString(e)?t?.length===0?[e]:[e,`
10
10
  ${(t??[]).map(r=>` - ${r}`).join(`
11
11
  `)}
12
- `]:["Unexpected network error"]}var Lt=a.extend("http");async function K(e,t,r=Ut){try{let o=await r(e).request(t);return Lt("network response: %o",{...Bt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Lt("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}),vt(n),n}}var se=a.extend("api");async function Gt(e){try{return se("Request params: %o",e),K("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw se("Failed to create cache:",t),t}}async function Ft(e){try{return se("Request params: %o",e),K("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw se("Failed to retrieve cache:",t),t}}var Ht=require("util"),jt=require("zlib");var kt=a.extend("api"),dn=(0,Ht.promisify)(jt.gzip);async function Kt(e){try{kt("Run params: %o",e);let t=await un(JSON.stringify(e));return K("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw kt("Failed to create the run:",t),t}}async function un(e){try{return await dn(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var $t=a.extend("api");async function Vt(e,t){try{return $t("Run params: %o",t),K("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw $t("Failed to obtain run data:",r),r}}async function Fe(){try{let e=re();if(!e)throw new Error("Config is missing!");e.debug&&v();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 Vt(e.apiKey,t);await ln(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function ln(e,t){let r=JSON.stringify(e,null,2);t.output?(await Et(t.output),await(0,Jt.writeFile)(t.output,r,"utf-8")):k(r)}var b=require("@commander-js/extra-typings");var fn={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},gn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},paths:{name:"Paths to cache",cli:"--paths"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"}},Cn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"}},L={...fn,...gn,...Cn};function ke(){return{recordKey:process.env[L.recordKey.env],debug:!!process.env[L.debug.env]}}var Yt=a.extend("config"),qt=["recordKey"],X;function Wt(e){X={type:"SET_COMMAND_CONFIG",values:H(L,qt,ke,e)},Yt("Resolved config: %o",X)}function Qt(e){X={type:"GET_COMMAND_CONFIG",values:H(L,qt,ke,e)},Yt("Resolved config: %o",X)}function B(){return X}function zt(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal}}function Xt(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,paths:e.paths,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal}}var Zt=require("@commander-js/extra-typings");var er=require("axios");function Y(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function M(e,t){try{await e(t),process.exit(0)}catch(r){r instanceof Zt.CommanderError&&(l(r.message),process.exit(r.exitCode)),r instanceof V&&(l(r.message),process.exit(1)),(0,er.isAxiosError)(r)&&(l(r.message),process.exit(1)),l("Script execution failed: %o",r),process.exit(1)}}var He=new b.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(_(L,"recordKey")),je=new b.Option("--debug","Enable debug logging").env(_(L,"debug")).default(!1),Ke=new b.Option("--id <id>","The ID the data is saved under in the cache"),tr=new b.Option("--paths <paths>","Comma-separated list of paths to cache").argParser(Y),ce=(t=>(t.lastRun="last-run",t))(ce||{}),$e=new b.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(ce)),rr=new b.Option("--output-dir <dir>","Path to the directory where output will be written"),or=new b.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),pe=".currents_env",nr=new b.Option("--preset-output <path>","Path to the file containing the preset output").default(pe),Ve=new b.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(ir),Je=new b.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(ir);function ir(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new b.InvalidArgumentError("A positive integer is expected.");return t}var C=require("lodash");var me=a.extend("ci"),En=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),Rn=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),g=e=>(0,C.transform)(e,Rn,{}),hn=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,In=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,_n=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),Tn=()=>process.env.bamboo_buildNumber,On=()=>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,yn=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),bn=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),An=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,xn=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,Un=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,wn={appveyor:"APPVEYOR",azure:In,awsCodeBuild:_n,bamboo:Tn,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:On,codeshipPro:Pn,concourse:yn,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:bn,goCD:"GO_JOB_NAME",googleCloud:An,jenkins:xn,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:hn,travis:"TRAVIS",wercker:Un,netlify:"NETLIFY",layerci:"LAYERCI"};function Sn(){let{env:e}=process;return(0,C.findKey)(wn,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var ar=()=>({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","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT"]),goCD: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"])}),Dn=()=>{let{env:e}=process;return{appveyor:{sha:e.APPVEYOR_REPO_COMMIT,branch:e.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH||e.APPVEYOR_REPO_BRANCH,message:En(`
13
- `,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},sr=e=>{let t=cr();return t?(0,C.chain)(e()).get(t).value():{}};function Nn(){return(0,C.chain)(ar()).omitBy(C.isNull).keys().value()}function vn(e){return e&&Nn().includes(e)}function cr(){let e=Sn();return me("detected CI provider name: %s",e),e||null}function Ln(){return sr(ar)}function pr(){return sr(Dn)}function q(e){let t=Ln(),r=cr(),o=Bn(e,r);return me("detected CI provider: %s",r),me("detected CI params: %O",t),me("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Bn(e,t){return e?{source:"user",value:e}:vn(t)?{source:"server",value:null}:{source:"random",value:`auto:${ve()}`}}var mr=c(require("archiver")),Ye=c(require("fs-extra")),G=c(require("path")),dr=c(require("unzipper"));var Mn=50*1024*1024;async function ur(e,t=Mn){return new Promise((r,o)=>{let n=(0,mr.default)("zip",{zlib:{level:9}}),s=[],p=0;n.on("data",d=>{s.push(d),p+=d.length,p>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",d=>{d.code==="ENOENT"?f(d):o(d)}),n.on("error",d=>o(d)),n.on("end",()=>{let d=Buffer.concat(s);r(d)});let m=async d=>{let R=process.cwd(),I=G.default.normalize(d),P=G.default.relative(R,I),x=await Ye.default.stat(P),y=G.default.dirname(P),A=y==="."?void 0:y;x.isDirectory()?n.directory(P,P,{prefix:A,stats:x}):n.file(I,{name:G.default.basename(P),prefix:A,stats:x})};(async d=>{for(let R of d)if(R==="."){let I=await Ye.default.readdir(R);for(let P of I)await m(P)}else await m(R);n.finalize()})(e).catch(o)})}async function lr(e,t){return dr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}function fr(e){let t=process.cwd();return e.filter(r=>{let o=G.default.resolve(r),n=G.default.relative(t,o);return r.startsWith("..")||G.default.isAbsolute(n)?(f(`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}var gr=c(require("path"));var Cr=require("lodash");function Er({config:e,cacheId:t,orgId:r,paths:o,ci:n}){let s={id:t,orgId:r,config:(0,Cr.omit)(e,"recordKey"),paths:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}var Rr=e=>gr.default.resolve(e??"test-results",".last-run.json");function de(e,t){e instanceof Error?Se("%s. %s.",t,e.message):Se("%s. %s.",t,"Unknown error")}var Or=c(require("async-retry"));var hr=c(require("axios")),Ir=require("https-proxy-agent"),_r=c(require("proxy-from-env"));var Gn=a.extend("axios");function qe(e={}){let t=hr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),s=_r.default.getProxyForUrl(n);return s&&(Gn("Using HTTP proxy %s for %s ",s,n),o.proxy=!1,o.httpsAgent=Fn(s)),o}),t}var ue=null;function Fn(e){return ue||(ue=new Ir.HttpsProxyAgent(e),ue)}var We=a.extend("upload"),le=5;async function Qe(e,t,r){return We("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),Hn(e.buffer,e.uploadUrl,t,r)}async function kn(e,t,r,o){return qe().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function ze(e,t){let r=await qe().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}async function Hn(...e){await(0,Or.default)(async()=>{await kn(...e)},{retries:le,onRetry:(t,r)=>{if(We("Upload failed %d out of %d attempts: %s",r,le,t.message),r===le){l(`Cannot upload after ${r} times: ${t.message}`);return}f(`Upload failed ${r} out of ${le} attempts: ${t.message}`)}})}var Xe=e=>({total:t,loaded:r})=>{};function Tr(e){return e/1e3/1e3}var Ze=c(require("lodash"));async function Pr(e,t){switch(t.provider){case"githubActions":await jn(e,t);break;case"gitlab":await br(e,t);break;default:break}}async function yr(e,t,r){switch(t.provider){case"gitlab":await br(e,t,r);break;default:break}}async function br(e,t,r=null){let o=t.params,n=r?.ci.params,p=(n?fe(n.runAttempt,0):0)+1,m=fe(o.ciNodeIndex,1),u=fe(o.ciNodeTotal,1),d=p>1?"--last-failed":"",R="";u>1&&(R=p>1?"--shard=1/1":`--shard=${m}/${u}`);let I=[d,R].filter(Boolean).join(" ");await J(e.presetOutput??pe,`EXTRA_PW_FLAGS="${I}"
14
- EXTRA_PWCP_FLAGS="${d}"
15
- RUN_ATTEMPT="${p}"
16
- `)}async function jn(e,t){let{matrixIndex:r,matrixTotal:o}=e,n=t.params,s=fe(n.githubRunAttempt,1),p=s>1?"--last-failed":"",m="";o>1&&(m=s>1?"--shard=1/1":`--shard=${r}/${o}`);let u=[p,m].filter(Boolean).join(" "),d=e.presetOutput??pe;await J(d,u),a('Dumped PW config: "%s" for GHA to %s',u,d)}var fe=(e,t)=>{let r=Ze.default.toNumber(e);return Ze.default.isNaN(r)?t:r};async function et(){try{let e=B();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s}=e.values,p=e.values.outputDir;e.values.debug&&v();let m=q();o==="last-run"&&await Pr(e.values,m);let u=await Ft({recordKey:t,ci:m,id:r,config:{matrixIndex:n,matrixTotal:s}});await Kn({readUrl:u.readUrl,outputDir:p});let d=await $n(u.metaReadUrl);o==="last-run"&&await yr(e.values,m,d)}catch(e){de(e,"Failed to obtain cache")}}async function Kn({readUrl:e,outputDir:t}){try{let r=await ze(e);await lr(r,t||"."),a("Cache downloaded")}catch(r){throw a("Failed to recreate cache from archive"),r}}async function $n(e){try{let t=await ze(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}catch(t){throw a("Failed to handle the meta"),t}}var Ar=require("lodash");async function tt(){try{let e=B();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,debug:o,preset:n,pwOutputDir:s,matrixIndex:p,matrixTotal:m}=e.values;o&&v();let u=e.values.paths?fr(e.values.paths):[],d=[];u&&u.length>0&&d.push(...u);let R=q();if(n==="last-run"){let P=Rr(s);d.push(P)}if(d.length===0)throw new Error("No paths available to upload");let I=await Gt({recordKey:t,ci:R,id:r,config:{matrixIndex:p,matrixTotal:m}});await Vn({archive:await ur(d),cacheId:I.cacheId,uploadUrl:I.uploadUrl}),await Jn({meta:Er({cacheId:I.cacheId,config:(0,Ar.omit)(e.values,["recordKey"]),ci:R,orgId:I.orgId,paths:d}),cacheId:I.cacheId,uploadUrl:I.metaUploadUrl})}catch(e){de(e,"Failed to save cache")}}async function Vn({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await Qe({buffer:e,contentType:o,name:t,uploadUrl:r},o,Xe(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function Jn({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,Xe(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var Ur=require("@currents/commit-info"),wr=require("lodash");var ge=require("lodash");var rt=a.extend("ci-git");function xr(e){rt("git commit existing info: %O",e);let t=pr();rt("commit info from provider environment variables: %O",t);let r=(0,ge.transform)(e,(o,n,s)=>{let p=n||(t?t[s]:null);return o[s]=(0,ge.defaultTo)(p,null)});return rt("combined git and environment variables from provider: %O",r),r}var Yn=async()=>{let e=await(0,Ur.commitInfo)();return xr({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Sr=(0,wr.memoize)(Yn);var Dr=c(require("getos")),Nr=require("lodash"),U=require("os"),vr=require("util"),qn=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,vr.promisify)(Dr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},Wn=async()=>{let e=await qn();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},Lr=(0,Nr.memoize)(Wn);var ro=require("lodash"),_e=c(require("path")),oo=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 Br(){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 Qn=a.extend("config"),zn=["projectId","recordKey"],ot=null;function Mr(e){ot=H(h,zn,Br,e),Qn("Resolved Currents config: %o",ot)}function Ce(){return ot}function Gr(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 Wr=c(require("fs-extra")),Qr=require("jest-cli"),zr=c(require("tmp"));var Yr=require("lodash");var Fr=require("lodash"),Xn=["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 kr(e){return(0,Fr.omit)(e,...Xn)}function Hr(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 $r=c(require("fs")),Vr=require("jest-config"),nt=require("lodash"),it=c(require("path"));function Ee(e,t){return(...r)=>new Promise((o,n)=>{let s=0,p=()=>{s++;try{let m=e(...r);o(m)}catch(m){if(s>=t.length)n(m);else{let u=t[s-1];setTimeout(p,u)}}};p()})}var jr=c(require("fs-extra")),Zn=c(require("path"));async function Re(e){let t=await jr.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var Kr=a.extend("jest-discovery");async function Jr(e){try{let{config:t,configPath:r}=await(0,Vr.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,nt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(u=>typeof u!="string"?(0,nt.omit)(u,n):u)),s.rootDir&&Object.keys(s).length===1)return null;let p=it.default.resolve(r?it.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),m=`module.exports=${JSON.stringify(s,null,2)}`;return Kr("configFileContent: %O",m),$r.default.writeFileSync(p,m),await Ee(Re,[200,200,200,200,200,1e3])(p),p}catch(t){return l("Failed to recreate the config file"),Kr("error %o",t),null}}async function qr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=kr(r),n=Hr(o),s=r.config,p=await Jr(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",p?`--config=${p}`:"",...e.args].filter(u=>!(0,Yr.isEmpty)(u)),configFilePath:p}}var ei=a.extend("jest-discovery");async function Xr(e,t){console.time(E("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await qr(t);try{let n=zr.default.fileSync({postfix:".json"});return ei("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,Qr.run)(r.concat(["--openHandlesTimeout=0"])),await Ee(Re,Array.from({length:300},()=>100))(n.name),console.timeEnd(E("@currents/jest:fullTestSuite-ready")),await j(n.name)}catch(n){return l("Failed to obtain the jest full test suite:",n),[]}finally{o&&Wr.default.unlinkSync(o)}}var W=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var he=class extends W{constructor(t){super(t)}async getFullTestSuite(){return Xr(this.config.frameworkConfig,this.config.cliArgs)}};function Zr(e){switch(e.framework){case"jest":return new he(e);default:return new W(e)}}var Q=c(require("fs-extra")),D=c(require("path"));async function eo(e){let t=await ti(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??D.default.join(t,"config.json")}}async function ti(e){return e?(await Ie(e),e):ri((0,D.join)(process.cwd(),".currents"))}async function ri(e){let t=await Q.default.readdir(e),r=null;for(let o of t){let n=D.default.join(e,o),s=await Q.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,D.resolve)(e,r.name):null}async function Ie(e){try{return await Q.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function to(e){let t=D.default.join(e,"instances");return oi(t)}async function oi(e){let t=await Q.default.readdir(e),r=[];for(let o of t){let n=D.default.join(e,o);(await Q.default.stat(n)).isFile()&&r.push(n)}return r}async function at(){let e=Ce();if(!e)throw new Error("Currents config is missing!");e.debug&&v();let t=await eo(e);mt(si(t.reportDir)),a("Reporter options: %o",t),k("Report directory: %s",t.reportDir);let r=await j(t.configFilePath);a("Report config: %o",r);let o=await to(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=ii(t.reportDir),s=await Ie(n),p=ai(t.reportDir),m=null;if(s){let y=await j(n);f("Marker file detected. The report was already uploaded: %o",{runUrl:y.response.runUrl,isoDate:y.isoDate}),await Ie(p)&&(m=await j(p),a("Full test suite file detected: %s",p))}if(m)a("The discovery stage was skipped");else{if(m=await Zr(r).getFullTestSuite(),ci(m))throw new Error("Failed to discover the full test suite!");await J(p,JSON.stringify(m))}let u=m.length===1?m[0].name:null,d={currents:e},R={type:r.framework,version:r.frameworkVersion,clientVersion:ee},I=ne.userFacingNanoid(),P=q(e.ciBuildId),x={};for await(let y of o){let A=await j(y);x[A.groupId]||(x[A.groupId]=[]),x[A.groupId].push(A)}for await(let y of Object.keys(x)){let A=x[y],be=y;u&&(a("Default group found: %s, overwriting the group in the results",u),be=u,A=A.map(F=>({...F,groupId:u})));try{let F=await ni({ci:P,group:be,instances:A,fullTestSuite:m,config:d,machineId:I,framework:R});a("Api response: %o",F),k("[%s] Run created: %s",be,F.runUrl);let Go={response:F,isoDate:new Date().toISOString()};await J(n,JSON.stringify(Go)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(F){throw a("Failed to upload the results to the dashboard"),F}}}async function ni({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:p}){let m=await Sr(),u=await Lr(),d={browserName:"node",browserVersion:oo.default.coerce(process.version)?.version},{currents:R}=n,P={platform:{...d,...u},ci:e,commit:m,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??s,framework:p,instances:r};return a("Creating run: %o",(0,ro.mapValues)(P,(x,y)=>y==="recordKey"?"******":x)),Kt(P)}function ii(e){return _e.default.join(e,"upload.marker.json")}function ai(e){return _e.default.join(e,"fullTestSuite.json")}function si(e){return _e.default.join(e,`.debug-${new Date().toISOString()}.log`)}function ci(e){return e.length===0||e.some(t=>t.tests.length===0)}var pi=a.extend("cli");async function no(e){await M(async t=>{gt(t);let r=re();pi("Config: %o",r),await Fe()},e)}var N=require("@commander-js/extra-typings");var io=new N.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(_(S,"apiKey")),ao=new N.Option("-o, --output <path>","Path to the file where output will be written").env(_(S,"output")),so=new N.Option("--ci-build-id <id>","Unique identifier for the run"),co=new N.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(_(S,"projectId")),po=new N.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(Y),mo=new N.Option("--debug","Enable debug logging").env(_(S,"debug")).default(!1),uo=new N.Option("-b, --branch <branch>","Branch name for the recorded run"),lo=new N.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Te="api",mi=e=>`
12
+ `]:["Unexpected network error"]}var Lt=a.extend("http");async function K(e,t,r=Ut){try{let o=await r(e).request(t);return Lt("network response: %o",{...Bt.default.omit(o,"request","config"),url:o.config.url,method:o.config.method}),o}catch(o){let n=o;throw Lt("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}),vt(n),n}}var ce=a.extend("api");async function Gt(e){try{return ce("Request params: %o",e),K("api",{url:"cache/upload",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ce("Failed to create cache:",t),t}}async function Ft(e){try{return ce("Request params: %o",e),K("api",{url:"cache/download",method:"POST",data:e}).then(t=>t.data)}catch(t){throw ce("Failed to retrieve cache:",t),t}}var Ht=require("util"),jt=require("zlib");var kt=a.extend("api"),un=(0,Ht.promisify)(jt.gzip);async function Kt(e){try{kt("Run params: %o",e);let t=await ln(JSON.stringify(e));return K("api",{url:"v1/runs",method:"POST",headers:{"Content-Type":"application/json","Content-Encoding":"gzip"},data:t}).then(r=>r.data)}catch(t){throw kt("Failed to create the run:",t),t}}async function ln(e){try{return await un(e)}catch(t){throw l("Failed to compress run payload:",t),t}}var $t=a.extend("api");async function Vt(e,t){try{return $t("Run params: %o",t),K("restApi",{url:"v1/runs/previous",params:t,method:"GET",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}}).then(r=>r.data)}catch(r){throw $t("Failed to obtain run data:",r),r}}async function ke(){try{let e=oe();if(!e)throw new Error("Config is missing!");e.debug&&v();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 Vt(e.apiKey,t);await fn(e.pwLastRun&&r.data.pwLastRun?r.data.pwLastRun:r.data,e)}catch(e){throw a("Failed to get run data"),e}}async function fn(e,t){let r=JSON.stringify(e,null,2);t.output?(await Et(t.output),await(0,Jt.writeFile)(t.output,r,"utf-8")):k(r)}var xr=require("axios");var b=require("@commander-js/extra-typings");var gn={recordKey:{name:"Record Key",env:"CURRENTS_RECORD_KEY",cli:"--key"},debug:{name:"Debug",env:"CURRENTS_DEBUG",cli:"--debug"}},Cn={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},pwOutputDir:{name:"Playwright output directory",cli:"--pw-output-dir"},presetOutput:{name:"Preset output path",cli:"--preset-output"},paths:{name:"Paths to cache",cli:"--paths"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"}},En={id:{name:"Cache id",cli:"--id"},preset:{name:"Preset",cli:"--preset"},outputDir:{name:"Custom directory to write output",cli:"--output-dir"},matrixIndex:{name:"Matrix index",cli:"--matrix-index"},matrixTotal:{name:"Matrix total",cli:"--matrix-total"}},L={...gn,...Cn,...En};function He(){return{recordKey:process.env[L.recordKey.env],debug:!!process.env[L.debug.env]}}var Yt=a.extend("config"),qt=["recordKey"],Z;function Wt(e){Z={type:"SET_COMMAND_CONFIG",values:H(L,qt,He,e)},Yt("Resolved config: %o",Z)}function Qt(e){Z={type:"GET_COMMAND_CONFIG",values:H(L,qt,He,e)},Yt("Resolved config: %o",Z)}function B(){return Z}function zt(e){return{recordKey:e.key,id:e.id,preset:e.preset,outputDir:e.outputDir,presetOutput:e.presetOutput,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal}}function Xt(e){return{recordKey:e.key,id:e.id,preset:e.preset,pwOutputDir:e.pwOutputDir,paths:e.paths,debug:e.debug,matrixIndex:e.matrixIndex,matrixTotal:e.matrixTotal}}var Zt=require("@commander-js/extra-typings");var er=require("axios");function Y(e,t=[]){return e?t.concat(e.split(",").map(r=>r.trim())):t}async function M(e,t){try{await e(t),process.exit(0)}catch(r){r instanceof Zt.CommanderError&&(l(r.message),process.exit(r.exitCode)),r instanceof V&&(l(r.message),process.exit(1)),(0,er.isAxiosError)(r)&&(l(r.message),process.exit(1)),l("Script execution failed: %o",r),process.exit(1)}}var je=new b.Option("-k, --key <record-key>","Your secret Record Key obtained from Currents").env(_(L,"recordKey")),Ke=new b.Option("--debug","Enable debug logging").env(_(L,"debug")).default(!1),$e=new b.Option("--id <id>","The ID the data is saved under in the cache"),tr=new b.Option("--paths <paths>","Comma-separated list of paths to cache").argParser(Y),pe=(t=>(t.lastRun="last-run",t))(pe||{}),Ve=new b.Option("--preset <preset-name>",'A set of predefined options. Use "last-run" to get the last run data').choices(Object.values(pe)),rr=new b.Option("--output-dir <dir>","Path to the directory where output will be written"),or=new b.Option("--pw-output-dir <dir>","Directory for artifacts produced by Playwright tests").default("test-results"),me=".currents_env",nr=new b.Option("--preset-output <path>","Path to the file containing the preset output").default(me),Je=new b.Option("--matrix-index <number>","The index of the matrix to use").default(1).argParser(ir),Ye=new b.Option("--matrix-total <number>","The total number of matrices available").default(1).argParser(ir);function ir(e){let t=parseInt(e,10);if(isNaN(t)||t<=0||!Number.isInteger(t))throw new b.InvalidArgumentError("A positive integer is expected.");return t}var C=require("lodash");var de=a.extend("ci"),Rn=(e,...t)=>(0,C.chain)(t).compact().join(e).value(),hn=(e,t)=>(0,C.set)(e,(0,C.camelCase)(t),process.env[t]),g=e=>(0,C.transform)(e,hn,{}),In=()=>process.env.TF_BUILD&&process.env.TF_BUILD_BUILDNUMBER,_n=()=>process.env.TF_BUILD&&process.env.AZURE_HTTP_USER_AGENT,Tn=()=>(0,C.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),On=()=>process.env.bamboo_buildNumber,Pn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&process.env.CODESHIP,yn=()=>process.env.CI_NAME&&process.env.CI_NAME==="codeship"&&!process.env.CODESHIP,bn=()=>(0,C.some)(process.env,(e,t)=>/^CONCOURSE_/.test(t)),An=()=>process.env.GITLAB_CI||process.env.CI_SERVER_NAME&&/^GitLab/.test(process.env.CI_SERVER_NAME),xn=()=>process.env.GCP_PROJECT||process.env.GCLOUD_PROJECT||process.env.GOOGLE_CLOUD_PROJECT,Un=()=>process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.JENKINS_VERSION||process.env.HUDSON_URL||process.env.HUDSON_HOME,wn=()=>process.env.WERCKER||process.env.WERCKER_MAIN_PIPELINE_STARTED,Sn={appveyor:"APPVEYOR",azure:_n,awsCodeBuild:Tn,bamboo:On,bitbucket:"BITBUCKET_BUILD_NUMBER",buildkite:"BUILDKITE",circle:"CIRCLECI",codeshipBasic:Pn,codeshipPro:yn,concourse:bn,codeFresh:"CF_BUILD_ID",drone:"DRONE",githubActions:"GITHUB_ACTIONS",gitlab:An,goCD:"GO_JOB_NAME",googleCloud:xn,jenkins:Un,semaphore:"SEMAPHORE",shippable:"SHIPPABLE",teamcity:"TEAMCITY_VERSION",teamfoundation:In,travis:"TRAVIS",wercker:wn,netlify:"NETLIFY",layerci:"LAYERCI"};function Dn(){let{env:e}=process;return(0,C.findKey)(Sn,t=>{if((0,C.isString)(t))return e[t];if((0,C.isFunction)(t))return t()})}var ar=()=>({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","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT"]),goCD: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"])}),Nn=()=>{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}}},sr=e=>{let t=cr();return t?(0,C.chain)(e()).get(t).value():{}};function vn(){return(0,C.chain)(ar()).omitBy(C.isNull).keys().value()}function Ln(e){return e&&vn().includes(e)}function cr(){let e=Dn();return de("detected CI provider name: %s",e),e||null}function Bn(){return sr(ar)}function pr(){return sr(Nn)}function q(e){let t=Bn(),r=cr(),o=Mn(e,r);return de("detected CI provider: %s",r),de("detected CI params: %O",t),de("detected CI build ID: %o",o),{params:t,provider:r,ciBuildId:o}}function Mn(e,t){return e?{source:"user",value:e}:Ln(t)?{source:"server",value:null}:{source:"random",value:`auto:${Le()}`}}var mr=p(require("archiver")),qe=p(require("fs-extra")),G=p(require("path")),dr=p(require("unzipper"));var Gn=50*1024*1024;async function ur(e,t=Gn){return new Promise((r,o)=>{let n=(0,mr.default)("zip",{zlib:{level:9}}),s=[],m=0;n.on("data",c=>{s.push(c),m+=c.length,m>t&&o(new Error(`Zip size exceeded the limit of ${t} bytes`))}),n.on("warning",c=>{c.code==="ENOENT"?f(c):o(c)}),n.on("error",c=>o(c)),n.on("end",()=>{let c=Buffer.concat(s);r(c)});let d=async c=>{let R=process.cwd(),I=G.default.normalize(c),P=G.default.relative(R,I),x=await qe.default.stat(P),y=G.default.dirname(P),A=y==="."?void 0:y;x.isDirectory()?n.directory(P,P,{prefix:A,stats:x}):n.file(I,{name:G.default.basename(P),prefix:A,stats:x})};(async c=>{for(let R of c)if(R==="."){let I=await qe.default.readdir(R);for(let P of I)await d(P)}else await d(R);n.finalize()})(e).catch(o)})}async function lr(e,t){return dr.default.Open.buffer(e).then(r=>r.extract({path:t,concurrency:3}))}function fr(e){let t=process.cwd();return e.filter(r=>{let o=G.default.resolve(r),n=G.default.relative(t,o);return r.startsWith("..")||G.default.isAbsolute(n)?(f(`Invalid path: "${r}". Path traversal detected. The path was skipped.`),!1):!0})}var gr=p(require("path"));var Cr=require("lodash");function Er({config:e,cacheId:t,orgId:r,paths:o,ci:n}){let s={id:t,orgId:r,config:(0,Cr.omit)(e,"recordKey"),paths:o,ci:n,createdAt:new Date().toISOString()};return Buffer.from(JSON.stringify(s))}var Rr=e=>gr.default.resolve(e??"test-results",".last-run.json");function ue(e,t){e instanceof Error?X("%s. %s.",t,e.message):X("%s. %s.",t,"Unknown error")}var Or=p(require("async-retry")),Pr=require("axios");var hr=p(require("axios")),Ir=require("https-proxy-agent"),_r=p(require("proxy-from-env"));var Fn=a.extend("axios");function We(e={}){let t=hr.default.create(e);return t.interceptors.request.use(r=>{let o={...r},n=t.getUri(r),s=_r.default.getProxyForUrl(n);return s&&(Fn("Using HTTP proxy %s for %s ",s,n),o.proxy=!1,o.httpsAgent=kn(s)),o}),t}var le=null;function kn(e){return le||(le=new Ir.HttpsProxyAgent(e),le)}var ge=a.extend("upload"),fe=5;async function Qe(e,t,r){return ge("Uploading buffer %s",e.name,{buffer:Buffer.byteLength(e.buffer)}),jn(e.buffer,e.uploadUrl,t,r)}async function Hn(e,t,r,o){return We().request({method:"put",url:t,data:e,onUploadProgress:o,headers:{"Content-Disposition":"inline","Content-Type":r}})}async function ze(e,t){try{let r=await We().get(e,{responseType:"arraybuffer",onDownloadProgress:t});return Buffer.from(r.data)}catch(r){throw(0,Pr.isAxiosError)(r)&&ge("Failed to download %s: %s",e,r.message),r}}async function jn(...e){await(0,Or.default)(async()=>{await Hn(...e)},{retries:fe,onRetry:(t,r)=>{if(ge("Upload failed %d out of %d attempts: %s",r,fe,t.message),r===fe){l(`Cannot upload after ${r} times: ${t.message}`);return}f(`Upload failed ${r} out of ${fe} attempts: ${t.message}`)}})}var Xe=e=>({total:t,loaded:r})=>{};function Tr(e){return e/1e3/1e3}var Ze=p(require("lodash"));async function yr(e,t){switch(t.provider){case"githubActions":await Kn(e,t);break;case"gitlab":await Ar(e,t);break;default:break}}async function br(e,t,r){switch(t.provider){case"gitlab":await Ar(e,t,r);break;default:break}}async function Ar(e,t,r=null){let o=t.params,n=r?.ci.params,m=(n?Ce(n.runAttempt,0):0)+1,d=Ce(o.ciNodeIndex,1),u=Ce(o.ciNodeTotal,1),c=m>1?"--last-failed":"",R="";u>1&&(R=m>1?"--shard=1/1":`--shard=${d}/${u}`);let I=[c,R].filter(Boolean).join(" ");await J(e.presetOutput??me,`EXTRA_PW_FLAGS="${I}"
14
+ EXTRA_PWCP_FLAGS="${c}"
15
+ RUN_ATTEMPT="${m}"
16
+ `)}async function Kn(e,t){let{matrixIndex:r,matrixTotal:o}=e,n=t.params,s=Ce(n.githubRunAttempt,1),m=s>1?"--last-failed":"",d="";o>1&&(d=s>1?"--shard=1/1":`--shard=${r}/${o}`);let u=[m,d].filter(Boolean).join(" "),c=e.presetOutput??me;await J(c,u),a('Dumped PW config: "%s" for GHA to %s',u,c)}var Ce=(e,t)=>{let r=Ze.default.toNumber(e);return Ze.default.isNaN(r)?t:r};async function et(){try{let e=B();if(e.type!=="GET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,preset:o,matrixIndex:n,matrixTotal:s}=e.values,m=e.values.outputDir;e.values.debug&&v();let d=q();o==="last-run"&&await yr(e.values,d);let u=await Ft({recordKey:t,ci:d,id:r,config:{matrixIndex:n,matrixTotal:s}});try{await $n({readUrl:u.readUrl,outputDir:m});let c=await Vn(u.metaReadUrl);o==="last-run"&&await br(e.values,d,c)}catch(c){if((0,xr.isAxiosError)(c)&&c.response?.status&&c.response?.status<500){X(`Cache with ID "${u.cacheId}" not found`);return}throw c}}catch(e){ue(e,"Failed to obtain cache")}}async function $n({readUrl:e,outputDir:t}){let r=await ze(e);await lr(r,t||"."),a("Cache downloaded")}async function Vn(e){let t=await ze(e),r=JSON.parse(t.toString("utf-8"));return a("Meta file: %O",r),r}async function tt(){try{let e=B();if(e.type!=="SET_COMMAND_CONFIG"||!e.values)throw new Error("Config is missing!");let{recordKey:t,id:r,debug:o,preset:n,pwOutputDir:s,matrixIndex:m,matrixTotal:d}=e.values;o&&v();let u=e.values.paths?fr(e.values.paths):[],c=[];u&&u.length>0&&c.push(...u);let R=q();if(n==="last-run"){let P=Rr(s);c.push(P)}if(c.length===0)throw new Error("No paths available to upload");let I=await Gt({recordKey:t,ci:R,id:r,config:{matrixIndex:m,matrixTotal:d}});await Jn({archive:await ur(c),cacheId:I.cacheId,uploadUrl:I.uploadUrl}),await Yn({meta:Er({cacheId:I.cacheId,config:e.values,ci:R,orgId:I.orgId,paths:c}),cacheId:I.cacheId,uploadUrl:I.metaUploadUrl})}catch(e){ue(e,"Failed to save cache")}}async function Jn({archive:e,cacheId:t,uploadUrl:r}){try{let o="application/zip";await Qe({buffer:e,contentType:o,name:t,uploadUrl:r},o,Xe(t)),a("Cache archive uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache archive",o),o}}async function Yn({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,Xe(o)),a("Cache meta uploaded",{cacheId:t})}catch(o){throw a("Failed to upload cache meta",o),o}}var wr=require("@currents/commit-info"),Sr=require("lodash");var Ee=require("lodash");var rt=a.extend("ci-git");function Ur(e){rt("git commit existing info: %O",e);let t=pr();rt("commit info from provider environment variables: %O",t);let r=(0,Ee.transform)(e,(o,n,s)=>{let m=n||(t?t[s]:null);return o[s]=(0,Ee.defaultTo)(m,null)});return rt("combined git and environment variables from provider: %O",r),r}var qn=async()=>{let e=await(0,wr.commitInfo)();return Ur({branch:e.branch,remoteOrigin:e.remote,authorEmail:e.email,authorName:e.author,message:e.message,sha:e.sha,ghaEventData:e.ghaEventData})},Dr=(0,Sr.memoize)(qn);var Nr=p(require("getos")),vr=require("lodash"),U=require("os"),Lr=require("util"),Wn=async()=>{if((0,U.platform)()==="linux")try{let e=await(0,Lr.promisify)(Nr.default)();return"dist"in e&&"release"in e?[e.dist,e.release].join(" - "):(0,U.release)()}catch{return(0,U.release)()}return(0,U.release)()},Qn=async()=>{let e=await Wn();return{osName:(0,U.platform)(),osVersion:e,osCpus:[],osMemory:{free:(0,U.freemem)(),total:(0,U.totalmem)()}}},Br=(0,vr.memoize)(Qn);var oo=require("lodash"),Oe=p(require("path")),no=p(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 Mr(){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 zn=a.extend("config"),Xn=["projectId","recordKey"],ot=null;function Gr(e){ot=H(h,Xn,Mr,e),zn("Resolved Currents config: %o",ot)}function Re(){return ot}function Fr(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 Qr=p(require("fs-extra")),zr=require("jest-cli"),Xr=p(require("tmp"));var qr=require("lodash");var kr=require("lodash"),Zn=["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 Hr(e){return(0,kr.omit)(e,...Zn)}function jr(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 Vr=p(require("fs")),Jr=require("jest-config"),nt=require("lodash"),it=p(require("path"));function he(e,t){return(...r)=>new Promise((o,n)=>{let s=0,m=()=>{s++;try{let d=e(...r);o(d)}catch(d){if(s>=t.length)n(d);else{let u=t[s-1];setTimeout(m,u)}}};m()})}var Kr=p(require("fs-extra")),ei=p(require("path"));async function Ie(e){let t=await Kr.default.pathExists(e);if(!t)throw new Error("File does not exist");return t}var $r=a.extend("jest-discovery");async function Yr(e){try{let{config:t,configPath:r}=await(0,Jr.readInitialOptions)(e),o=["collectCoverage","collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","coverageProvider","coverageReporters","coverageThreshold","errorOnDeprecated","forceCoverageMatch","notify","notifyMode","openHandlesTimeout","reporters","runner","showSeed","testFailureExitCode","verbose","watchPathIgnorePatterns","watchPlugins","watchman","bail","clearCache","color","colors","debug","detectLeaks","detectOpenHandles","expand","forceExit","json","listTests","logHeapUsage","noStackTrace","outputFile","shard","showConfig","silent","testNamePattern","waitNextEventLoopTurnForUnhandledRejectionEvents","watch","watchAll"],n=["collectCoverageFrom","coverageDirectory","coveragePathIgnorePatterns","detectLeaks","detectOpenHandles","errorOnDeprecated","forceCoverageMatch","openHandlesTimeout","runner","watchPathIgnorePatterns"],s=(0,nt.omit)(t,o);if(s.projects&&(s.projects=s.projects.map(u=>typeof u!="string"?(0,nt.omit)(u,n):u)),s.rootDir&&Object.keys(s).length===1)return null;let m=it.default.resolve(r?it.default.dirname(r):process.cwd(),`.jest-scanner-${new Date().getTime()}.config.js`),d=`module.exports=${JSON.stringify(s,null,2)}`;return $r("configFileContent: %O",d),Vr.default.writeFileSync(m,d),await he(Ie,[200,200,200,200,200,1e3])(m),m}catch(t){return l("Failed to recreate the config file"),$r("error %o",t),null}}async function Wr(e){let t="!!##ThisPatternWillNotMatchAnyTestName##!!",r=e.options,o=Hr(r),n=jr(o),s=r.config,m=await Yr(s);return{cliArgs:[n,"--testNamePattern",t,"--reporters","@currents/cmd/discovery/jest","--shard=1/1",m?`--config=${m}`:"",...e.args].filter(u=>!(0,qr.isEmpty)(u)),configFilePath:m}}var ti=a.extend("jest-discovery");async function Zr(e,t){console.time(E("@currents/jest:fullTestSuite-ready"));let{cliArgs:r,configFilePath:o}=await Wr(t);try{let n=Xr.default.fileSync({postfix:".json"});return ti("running scanner: %o",r),process.env.CURRENTS_DISCOVERY_PATH=n.name,await(0,zr.run)(r.concat(["--openHandlesTimeout=0"])),await he(Ie,Array.from({length:300},()=>100))(n.name),console.timeEnd(E("@currents/jest:fullTestSuite-ready")),await j(n.name)}catch(n){return l("Failed to obtain the jest full test suite:",n),[]}finally{o&&Qr.default.unlinkSync(o)}}var W=class{constructor(t){this.config=t}async getFullTestSuite(){return[]}};var _e=class extends W{constructor(t){super(t)}async getFullTestSuite(){return Zr(this.config.frameworkConfig,this.config.cliArgs)}};function eo(e){switch(e.framework){case"jest":return new _e(e);default:return new W(e)}}var Q=p(require("fs-extra")),D=p(require("path"));async function to(e){let t=await ri(e?.reportDir);if(!t)throw new Error("Failed to find the report dir");return{reportDir:t,configFilePath:e?.configFilePath??D.default.join(t,"config.json")}}async function ri(e){return e?(await Te(e),e):oi((0,D.join)(process.cwd(),".currents"))}async function oi(e){let t=await Q.default.readdir(e),r=null;for(let o of t){let n=D.default.join(e,o),s=await Q.default.stat(n);s.isDirectory()&&(!r||s.birthtime>r.birthtime)&&(r={name:o,birthtime:s.birthtime})}return r?(0,D.resolve)(e,r.name):null}async function Te(e){try{return await Q.default.pathExists(e)}catch{return l("Error checking if path exists:",l),!1}}async function ro(e){let t=D.default.join(e,"instances");return ni(t)}async function ni(e){let t=await Q.default.readdir(e),r=[];for(let o of t){let n=D.default.join(e,o);(await Q.default.stat(n)).isFile()&&r.push(n)}return r}async function at(){let e=Re();if(!e)throw new Error("Currents config is missing!");e.debug&&v();let t=await to(e);mt(ci(t.reportDir)),a("Reporter options: %o",t),k("Report directory: %s",t.reportDir);let r=await j(t.configFilePath);a("Report config: %o",r);let o=await ro(t.reportDir);a("Found %d instance results in the reportDir: %s",o.length,t.reportDir);let n=ai(t.reportDir),s=await Te(n),m=si(t.reportDir),d=null;if(s){let y=await j(n);f("Marker file detected. The report was already uploaded: %o",{runUrl:y.response.runUrl,isoDate:y.isoDate}),await Te(m)&&(d=await j(m),a("Full test suite file detected: %s",m))}if(d)a("The discovery stage was skipped");else{if(d=await eo(r).getFullTestSuite(),pi(d))throw new Error("Failed to discover the full test suite!");await J(m,JSON.stringify(d))}let u=d.length===1?d[0].name:null,c={currents:e},R={type:r.framework,version:r.frameworkVersion,clientVersion:te},I=ie.userFacingNanoid(),P=q(e.ciBuildId),x={};for await(let y of o){let A=await j(y);x[A.groupId]||(x[A.groupId]=[]),x[A.groupId].push(A)}for await(let y of Object.keys(x)){let A=x[y],xe=y;u&&(a("Default group found: %s, overwriting the group in the results",u),xe=u,A=A.map(F=>({...F,groupId:u})));try{let F=await ii({ci:P,group:xe,instances:A,fullTestSuite:d,config:c,machineId:I,framework:R});a("Api response: %o",F),k("[%s] Run created: %s",xe,F.runUrl);let Fo={response:F,isoDate:new Date().toISOString()};await J(n,JSON.stringify(Fo)),a("Marker file %s: %s",s?"overwritten":"created",n)}catch(F){throw a("Failed to upload the results to the dashboard"),F}}}async function ii({ci:e,group:t,instances:r,fullTestSuite:o,config:n,machineId:s,framework:m}){let d=await Dr(),u=await Br(),c={browserName:"node",browserVersion:no.default.coerce(process.version)?.version},{currents:R}=n,P={platform:{...c,...u},ci:e,commit:d,group:t,fullTestSuite:o,config:n,projectId:R.projectId,recordKey:R.recordKey,ciBuildId:e.ciBuildId.value??void 0,tags:R.tag??[],machineId:R.machineId??s,framework:m,instances:r};return a("Creating run: %o",(0,oo.mapValues)(P,(x,y)=>y==="recordKey"?"******":x)),Kt(P)}function ai(e){return Oe.default.join(e,"upload.marker.json")}function si(e){return Oe.default.join(e,"fullTestSuite.json")}function ci(e){return Oe.default.join(e,`.debug-${new Date().toISOString()}.log`)}function pi(e){return e.length===0||e.some(t=>t.tests.length===0)}var mi=a.extend("cli");async function io(e){await M(async t=>{gt(t);let r=oe();mi("Config: %o",r),await ke()},e)}var N=require("@commander-js/extra-typings");var ao=new N.Option("--api-key <api-key>","API key from Currents dashboard for authentication").env(_(S,"apiKey")),so=new N.Option("-o, --output <path>","Path to the file where output will be written").env(_(S,"output")),co=new N.Option("--ci-build-id <id>","Unique identifier for the run"),po=new N.Option("-p, --project-id <project>","Project ID from Currents associated with the run").env(_(S,"projectId")),mo=new N.Option("-t, --tag <tag>","Comma-separated list of tags for the run").argParser(Y),uo=new N.Option("--debug","Enable debug logging").env(_(S,"debug")).default(!1),lo=new N.Option("-b, --branch <branch>","Branch name for the recorded run"),fo=new N.Option("--pw-last-run",'Generate output formatted for Playwright ".last-run.json"');var Pe="api",di=e=>`
17
17
 
18
- ${fo.default.bold("Examples")}
18
+ ${go.default.bold("Examples")}
19
19
 
20
20
  Obtain run data by --ci-build-id:
21
- ${E(`${e} ${Te} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
21
+ ${E(`${e} ${Pe} get-run --api-key <api-key> --ci-build-id <ci-build-id>`)}
22
22
 
23
23
  Obtain most recent run data by filters:
24
- ${E(`${e} ${Te} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
24
+ ${E(`${e} ${Pe} get-run --api-key <api-key> --project-id <project-id> --branch <branch> --tag tagA,tagB`)}
25
25
 
26
26
  Obtain last run data that matches the Playwright "test-results/.last-run.json":
27
- ${E(`${e} ${Te} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
27
+ ${E(`${e} ${Pe} get-run --api-key <api-key> --ci-build-id <ci-build-id> --pw-last-run --output <output-path>`)}
28
28
 
29
- `,go=e=>new st.Command().command(Te).description(`Receive information from Currents API ${mi(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(di()),di=()=>new st.Command().name("get-run").allowUnknownOption().addOption(io).addOption(mo).addOption(so).addOption(co).addOption(uo).addOption(po).addOption(ao).addOption(lo).action(no);var Oe=require("@commander-js/extra-typings");var Ro=c(require("chalk"));var ui=a.extend("cli");async function Co(e){await M(async t=>{Qt(zt(t));let r=B();ui("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await et()},e)}var li=a.extend("cli");async function Eo(e){await M(async t=>{Wt(Xt(t));let r=B();li("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await tt()},e)}var z="cache",fi=e=>`
29
+ `,Co=e=>new st.Command().command(Pe).description(`Receive information from Currents API ${di(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(ui()),ui=()=>new st.Command().name("get-run").allowUnknownOption().addOption(ao).addOption(uo).addOption(co).addOption(po).addOption(lo).addOption(mo).addOption(so).addOption(fo).action(io);var ye=require("@commander-js/extra-typings");var ho=p(require("chalk"));var li=a.extend("cli");async function Eo(e){await M(async t=>{Qt(zt(t));let r=B();li("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await et()},e)}var fi=a.extend("cli");async function Ro(e){await M(async t=>{Wt(Xt(t));let r=B();fi("Config: %o",{...r.values,recordKey:r.values?.recordKey?"*****":void 0}),await tt()},e)}var z="cache",gi=e=>`
30
30
 
31
- ${Ro.default.bold("Examples")}
31
+ ${ho.default.bold("Examples")}
32
32
 
33
33
  Save files to the cache under a specific ID:
34
34
  ${E(`${e} ${z} set --key <record-key> --id <id> --paths <path-1,path-2,...path-n>`)}
@@ -45,25 +45,25 @@ ${E(`${e} ${z} get --key <record-key> --preset last-run`)}
45
45
  Retrieve the last run data from the cache and save it to a custom directory:
46
46
  ${E(`${e} ${z} get --key <record-key> --preset last-run --output-dir <outputDir>`)}
47
47
 
48
- `,ho=e=>new Oe.Command().command(z).description(`Cache data to Currents ${fi(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(gi()).addCommand(Ci()),gi=()=>new Oe.Command().name("set").allowUnknownOption().addOption(He).addOption(Ke).addOption($e).addOption(tr).addOption(je).addOption(or).addOption(Ve).addOption(Je).action(Eo),Ci=()=>new Oe.Command().name("get").allowUnknownOption().addOption(He).addOption(Ke).addOption($e).addOption(rr).addOption(nr).addOption(je).addOption(Ve).addOption(Je).action(Co);var No=require("@commander-js/extra-typings"),vo=c(require("chalk"));var w=require("@commander-js/extra-typings");var Io=new w.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(_(h,"ciBuildId")),_o=new w.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(h,"recordKey")),To=new w.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(_(h,"projectId")),Oo=new w.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(Y),Po=new w.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),yo=new w.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),bo=new w.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(_(h,"machineId")),Ao=new w.Option("--report-dir <string>","explicit path to the report directory").env(_(h,"reportDir")),xo=new w.Option("--debug","enable debug logs").env(_(h,"debug")).default(!1);var So=c(require("fs"));var Uo=require("tmp-promise"),wo=async()=>{let{path:e}=await(0,Uo.file)();return e};var ct=a.extend("cli"),Pe=class{constructor(t){this.configFilePath=null;this.cliOptions=t,ct("CLI options: %o",this.cliOptions),this.parsedConfig=Gr(this.cliOptions),ct("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await wo();return So.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),ct("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function Do(e){await M(async t=>{let r=new Pe(t);Mr(r.parsedConfig);let o=Ce();k("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await at()},e)}var Z="upload",Ei=e=>`
48
+ `,Io=e=>new ye.Command().command(z).description(`Cache data to Currents ${gi(e)}`).showHelpAfterError("(add --help for additional information)").allowUnknownOption().addCommand(Ci()).addCommand(Ei()),Ci=()=>new ye.Command().name("set").allowUnknownOption().addOption(je).addOption($e).addOption(Ve).addOption(tr).addOption(Ke).addOption(or).addOption(Je).addOption(Ye).action(Ro),Ei=()=>new ye.Command().name("get").allowUnknownOption().addOption(je).addOption($e).addOption(Ve).addOption(rr).addOption(nr).addOption(Ke).addOption(Je).addOption(Ye).action(Eo);var vo=require("@commander-js/extra-typings"),Lo=p(require("chalk"));var w=require("@commander-js/extra-typings");var _o=new w.Option("--ci-build-id <id>","the unique identifier for the recorded build (run)").env(_(h,"ciBuildId")),To=new w.Option("-k, --key <record-key>","your secret Record Key obtained from Currents").env(_(h,"recordKey")),Oo=new w.Option("-p, --project-id <project>","the project ID for results reporting obtained from Currents").env(_(h,"projectId")),Po=new w.Option("-t, --tag <tag>","comma-separated tag(s) for recorded runs in Currents").argParser(Y),yo=new w.Option("--remove-title-tags","remove tags from test names in Currents, e.g. `Test name @smoke` becomes `Test name` in the dashboard").default(!1),bo=new w.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),Ao=new w.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(_(h,"machineId")),xo=new w.Option("--report-dir <string>","explicit path to the report directory").env(_(h,"reportDir")),Uo=new w.Option("--debug","enable debug logs").env(_(h,"debug")).default(!1);var Do=p(require("fs"));var wo=require("tmp-promise"),So=async()=>{let{path:e}=await(0,wo.file)();return e};var ct=a.extend("cli"),be=class{constructor(t){this.configFilePath=null;this.cliOptions=t,ct("CLI options: %o",this.cliOptions),this.parsedConfig=Fr(this.cliOptions),ct("Parsed config from CLI options: %o",this.parsedConfig)}async getConfigFilePath(){if(this.configFilePath)return this.configFilePath;let t=await So();return Do.default.writeFileSync(t,JSON.stringify(this.parsedConfig)),ct("CLI options temp file path: %s",t),this.configFilePath=t,t}};async function No(e){await M(async t=>{let r=new be(t);Gr(r.parsedConfig);let o=Re();k("Currents config: %o",{...o,recordKey:o?.recordKey?"*****":void 0}),await at()},e)}var ee="upload",Ri=e=>`
49
49
 
50
- ${vo.default.bold("Examples")}
50
+ ${Lo.default.bold("Examples")}
51
51
 
52
52
  Upload test results to Currents:
53
- ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
53
+ ${E(`${e} ${ee} --key <record-key> --project-id <id> --ci-build-id <build-id>`)}
54
54
 
55
55
  Upload test results to Currents, add tags "tagA", "tagB" to the recorded run:
56
- ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
56
+ ${E(`${e} ${ee} --key <record-key> --project-id <id> --ci-build-id <build-id> --tag tagA --tag tagB`)}
57
57
 
58
58
  Provide a custom path to the reports directory:
59
- ${E(`${e} ${Z} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
59
+ ${E(`${e} ${ee} --key <record-key> --project-id <id> --ci-build-id <build-id> --report-dir <report-dir>`)}
60
60
 
61
- `,Lo=e=>new No.Command().name(Z).command(Z).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
62
- ${Ei(e)}`).addOption(Io).addOption(_o).addOption(To).addOption(Oo).addOption(Po).addOption(yo).addOption(bo).addOption(xo).addOption(Ao).action(r=>Do(r));var Ri=`
61
+ `,Bo=e=>new vo.Command().name(ee).command(ee).showHelpAfterError("(add --help for additional information)").allowUnknownOption().description(`Upload test results generated by Currents reporters to https://currents.dev
62
+ ${Ri(e)}`).addOption(_o).addOption(To).addOption(Oo).addOption(Po).addOption(yo).addOption(bo).addOption(Ao).addOption(Uo).addOption(xo).action(r=>No(r));var hi=`
63
63
  ----------------------------------------------------
64
64
  \u{1F4D6} Documentation: https://docs.currents.dev
65
65
  \u{1F919} Support: support@currents.dev
66
66
  ----------------------------------------------------
67
- `,ye="currents",Mo=()=>new Bo.Command(ye).version(ee).description(`Currents CLI ${Ri}`).addCommand(Lo(ye),{isDefault:!0}).addCommand(ho(ye)).addCommand(go(ye));import("dotenv/config");function hi(){Mo().parse()}hi();
67
+ `,Ae="currents",Go=()=>new Mo.Command(Ae).version(te).description(`Currents CLI ${hi}`).addCommand(Bo(Ae),{isDefault:!0}).addCommand(Io(Ae)).addCommand(Co(Ae));import("dotenv/config");function Ii(){Go().parse()}Ii();
68
68
  /*! For license information please see index.js.LEGAL.txt */
69
69
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
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,Mt=()=>(0,m.some)(process.env,(e,t)=>/^CODEBUILD_/.test(t)),vt=()=>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:Mt,bamboo:vt,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","CI_NODE_INDEX","CI_NODE_TOTAL","GITLAB_HOST","CI_PROJECT_ID","CI_PROJECT_URL","CI_REPOSITORY_URL","CI_ENVIRONMENT_URL","CI_DEFAULT_BRANCH","RUN_ATTEMPT"]),goCD: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.16",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","https-proxy-agent":"^7.0.4",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 M=(e=2)=>console.log(Array(e).fill("").join(`
2
+ `,e.APPVEYOR_REPO_COMMIT_MESSAGE,e.APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED),authorName:e.APPVEYOR_REPO_COMMIT_AUTHOR,authorEmail:e.APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL},awsCodeBuild:{sha:e.CODEBUILD_RESOLVED_SOURCE_VERSION,remoteOrigin:e.CODEBUILD_SOURCE_REPO_URL},azure:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR,authorEmail:e.BUILD_REQUESTEDFOREMAIL},bamboo:{sha:e.bamboo_planRepository_revision,branch:e.bamboo_planRepository_branch,authorName:e.bamboo_planRepository_username,remoteOrigin:e.bamboo_planRepository_repositoryURL},bitbucket:{sha:e.BITBUCKET_COMMIT,branch:e.BITBUCKET_BRANCH},buildkite:{sha:e.BUILDKITE_COMMIT,branch:e.BUILDKITE_BRANCH,message:e.BUILDKITE_MESSAGE,authorName:e.BUILDKITE_BUILD_CREATOR,authorEmail:e.BUILDKITE_BUILD_CREATOR_EMAIL,remoteOrigin:e.BUILDKITE_REPO,defaultBranch:e.BUILDKITE_PIPELINE_DEFAULT_BRANCH},circle:{sha:e.CIRCLE_SHA1,branch:e.CIRCLE_BRANCH,authorName:e.CIRCLE_USERNAME,remoteOrigin:e.CIRCLE_REPOSITORY_URL},codeshipBasic:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeshipPro:{sha:e.CI_COMMIT_ID,branch:e.CI_BRANCH,message:e.CI_COMMIT_MESSAGE,authorName:e.CI_COMMITTER_NAME,authorEmail:e.CI_COMMITTER_EMAIL},codeFresh:{sha:e.CF_REVISION,branch:e.CF_BRANCH,message:e.CF_COMMIT_MESSAGE,authorName:e.CF_COMMIT_AUTHOR},drone:{sha:e.DRONE_COMMIT_SHA,branch:e.DRONE_SOURCE_BRANCH,message:e.DRONE_COMMIT_MESSAGE,authorName:e.DRONE_COMMIT_AUTHOR,authorEmail:e.DRONE_COMMIT_AUTHOR_EMAIL,remoteOrigin:e.DRONE_GIT_HTTP_URL,defaultBranch:e.DRONE_REPO_BRANCH},githubActions:{sha:e.GITHUB_SHA,branch:e.GH_BRANCH||e.GITHUB_REF,defaultBranch:e.GITHUB_BASE_REF,remoteBranch:e.GITHUB_HEAD_REF,runAttempt:e.GITHUB_RUN_ATTEMPT},gitlab:{sha:e.CI_COMMIT_SHA,branch:e.CI_COMMIT_REF_NAME,message:e.CI_COMMIT_MESSAGE,authorName:e.GITLAB_USER_NAME,authorEmail:e.GITLAB_USER_EMAIL,remoteOrigin:e.CI_REPOSITORY_URL,defaultBranch:e.CI_DEFAULT_BRANCH},googleCloud:{sha:e.COMMIT_SHA,branch:e.BRANCH_NAME},jenkins:{sha:e.GIT_COMMIT,branch:e.GIT_BRANCH},semaphore:{sha:e.SEMAPHORE_GIT_SHA,branch:e.SEMAPHORE_GIT_BRANCH,remoteOrigin:e.SEMAPHORE_GIT_REPO_SLUG},shippable:{sha:e.COMMIT,branch:e.BRANCH,message:e.COMMIT_MESSAGE,authorName:e.COMMITTER},snap:null,teamcity:null,teamfoundation:{sha:e.BUILD_SOURCEVERSION,branch:e.BUILD_SOURCEBRANCHNAME,message:e.BUILD_SOURCEVERSIONMESSAGE,authorName:e.BUILD_SOURCEVERSIONAUTHOR},travis:{sha:e.TRAVIS_PULL_REQUEST_SHA||e.TRAVIS_COMMIT,branch:e.TRAVIS_PULL_REQUEST_BRANCH||e.TRAVIS_BRANCH,message:e.TRAVIS_COMMIT_MESSAGE},wercker:null,netlify:{sha:e.COMMIT_REF,branch:e.BRANCH,remoteOrigin:e.REPOSITORY_URL},layerci:{sha:e.GIT_COMMIT,branch:e.LAYERCI_BRANCH,message:e.GIT_COMMIT_TITLE}}},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.18",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","https-proxy-agent":"^7.0.4",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 M=(e=2)=>console.log(Array(e).fill("").join(`
3
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,v=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 Me(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 ve=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?ve("network request retry: %o",xe({...o,isRetry:!0})):ve("network request: %o",xe(o)),r}),(0,He.default)(t,{retries:w(),retryCondition:be,retryDelay:x,shouldResetTimeout:!0,onRetry:Me}),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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@currents/cmd",
3
- "version": "1.1.0-beta.16",
3
+ "version": "1.1.0-beta.18",
4
4
  "main": "./dist/index.js",
5
5
  "author": "Currents Software Inc",
6
6
  "license": "GPL-3.0-or-later",