@currents/cmd 1.1.0-beta.3 → 1.1.0-beta.5

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