@currents/cmd 1.1.0-beta.0 → 1.1.0-beta.10

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