@checksum-ai/runtime 1.0.32 → 1.0.33
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/checksum-root/playwright.config.ts +1 -1
- package/cli.js +3 -3
- package/index.js +51 -51
- package/package.json +1 -1
- package/test-run-monitor.js +1 -1
package/package.json
CHANGED
package/test-run-monitor.js
CHANGED
|
@@ -6,4 +6,4 @@ GFS4: `),console.error(e)},"debug"));H[se]||(Vn=global[se]||[],Bn(H,Vn),H.close=
|
|
|
6
6
|
|
|
7
7
|
see https://github.com/jprichardson/node-fs-extra/issues/269`,"Warning","fs-extra-WARN0002");let{srcStat:t,destStat:i}=Vp.checkPathsSync(e,a,"copy",p);if(Vp.checkParentPathsSync(e,t,a,"copy"),p.filter&&!p.filter(e,a))return;let d=Rp.dirname(a);return _e.existsSync(d)||Xo(d),t3(i,e,a,p)}r(em,"copySync");function t3(e,a,p,t){let d=(t.dereference?_e.statSync:_e.lstatSync)(a);if(d.isDirectory())return nm(d,e,a,p,t);if(d.isFile()||d.isCharacterDevice()||d.isBlockDevice())return am(d,e,a,p,t);if(d.isSymbolicLink())return om(e,a,p,t);throw d.isSocket()?new Error(`Cannot copy a socket file: ${a}`):d.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${a}`):new Error(`Unknown file: ${a}`)}r(t3,"getStats");function am(e,a,p,t,i){return a?pm(e,p,t,i):i3(e,p,t,i)}r(am,"onFile");function pm(e,a,p,t){if(t.overwrite)return _e.unlinkSync(p),i3(e,a,p,t);if(t.errorOnExist)throw new Error(`'${p}' already exists`)}r(pm,"mayCopyFile");function i3(e,a,p,t){return _e.copyFileSync(a,p),t.preserveTimestamps&&tm(e.mode,a,p),cd(p,e.mode)}r(i3,"copyFile");function tm(e,a,p){return im(e)&&dm(p,e),rm(a,p)}r(tm,"handleTimestamps");function im(e){return(e&128)===0}r(im,"fileIsNotWritable");function dm(e,a){return cd(e,a|128)}r(dm,"makeFileWritable");function cd(e,a){return _e.chmodSync(e,a)}r(cd,"setDestMode");function rm(e,a){let p=_e.statSync(e);return Qo(a,p.atime,p.mtime)}r(rm,"setDestTimestamps");function nm(e,a,p,t,i){return a?d3(p,t,i):lm(e.mode,p,t,i)}r(nm,"onDir");function lm(e,a,p,t){return _e.mkdirSync(p),d3(a,p,t),cd(p,e)}r(lm,"mkDirAndCopy");function d3(e,a,p){_e.readdirSync(e).forEach(t=>sm(t,e,a,p))}r(d3,"copyDir");function sm(e,a,p,t){let i=Rp.join(a,e),d=Rp.join(p,e);if(t.filter&&!t.filter(i,d))return;let{destStat:n}=Vp.checkPathsSync(i,d,"copy",t);return t3(n,i,d,t)}r(sm,"copyDirItem");function om(e,a,p,t){let i=_e.readlinkSync(a);if(t.dereference&&(i=Rp.resolve(process.cwd(),i)),e){let d;try{d=_e.readlinkSync(p)}catch(n){if(n.code==="EINVAL"||n.code==="UNKNOWN")return _e.symlinkSync(i,p);throw n}if(t.dereference&&(d=Rp.resolve(process.cwd(),d)),Vp.isSrcSubdir(i,d))throw new Error(`Cannot copy '${i}' to a subdirectory of itself, '${d}'.`);if(Vp.isSrcSubdir(d,i))throw new Error(`Cannot overwrite '${d}' with '${i}'.`);return mm(i,p)}else return _e.symlinkSync(i,p)}r(om,"onLink");function mm(e,a){return _e.unlinkSync(a),_e.symlinkSync(e,a)}r(mm,"copyLink");r3.exports=em});var Zt=v((qc,l3)=>{"use strict";var um=Se().fromCallback;l3.exports={copy:um(p3()),copySync:n3()}});var Ip=v((Uc,o3)=>{"use strict";var s3=be(),fm=Se().fromCallback;function hm(e,a){s3.rm(e,{recursive:!0,force:!0},a)}r(hm,"remove");function cm(e){s3.rmSync(e,{recursive:!0,force:!0})}r(cm,"removeSync");o3.exports={remove:fm(hm),removeSync:cm}});var _3=v((zc,w3)=>{"use strict";var vm=Se().fromPromise,f3=Q1(),h3=require("path"),c3=ze(),v3=Ip(),m3=vm(r(async function(a){let p;try{p=await f3.readdir(a)}catch{return c3.mkdirs(a)}return Promise.all(p.map(t=>v3.remove(h3.join(a,t))))},"emptyDir"));function u3(e){let a;try{a=f3.readdirSync(e)}catch{return c3.mkdirsSync(e)}a.forEach(p=>{p=h3.join(e,p),v3.removeSync(p)})}r(u3,"emptyDirSync");w3.exports={emptyDirSync:u3,emptydirSync:u3,emptyDir:m3,emptydir:m3}});var b3=v((Zc,S3)=>{"use strict";var wm=Se().fromCallback,g3=require("path"),O1=be(),y3=ze();function _m(e,a){function p(){O1.writeFile(e,"",t=>{if(t)return a(t);a()})}r(p,"makeFile"),O1.stat(e,(t,i)=>{if(!t&&i.isFile())return a();let d=g3.dirname(e);O1.stat(d,(n,l)=>{if(n)return n.code==="ENOENT"?y3.mkdirs(d,s=>{if(s)return a(s);p()}):a(n);l.isDirectory()?p():O1.readdir(d,s=>{if(s)return a(s)})})})}r(_m,"createFile");function gm(e){let a;try{a=O1.statSync(e)}catch{}if(a&&a.isFile())return;let p=g3.dirname(e);try{O1.statSync(p).isDirectory()||O1.readdirSync(p)}catch(t){if(t&&t.code==="ENOENT")y3.mkdirsSync(p);else throw t}O1.writeFileSync(e,"")}r(gm,"createFileSync");S3.exports={createFile:wm(_m),createFileSync:gm}});var E3=v((Hc,D3)=>{"use strict";var ym=Se().fromCallback,x3=require("path"),R1=be(),T3=ze(),Sm=F1().pathExists,{areIdentical:N3}=ea();function bm(e,a,p){function t(i,d){R1.link(i,d,n=>{if(n)return p(n);p(null)})}r(t,"makeLink"),R1.lstat(a,(i,d)=>{R1.lstat(e,(n,l)=>{if(n)return n.message=n.message.replace("lstat","ensureLink"),p(n);if(d&&N3(l,d))return p(null);let s=x3.dirname(a);Sm(s,(m,o)=>{if(m)return p(m);if(o)return t(e,a);T3.mkdirs(s,c=>{if(c)return p(c);t(e,a)})})})})}r(bm,"createLink");function xm(e,a){let p;try{p=R1.lstatSync(a)}catch{}try{let d=R1.lstatSync(e);if(p&&N3(d,p))return}catch(d){throw d.message=d.message.replace("lstat","ensureLink"),d}let t=x3.dirname(a);return R1.existsSync(t)||T3.mkdirsSync(t),R1.linkSync(e,a)}r(xm,"createLinkSync");D3.exports={createLink:ym(bm),createLinkSync:xm}});var A3=v((Gc,k3)=>{"use strict";var V1=require("path"),Bp=be(),Tm=F1().pathExists;function Nm(e,a,p){if(V1.isAbsolute(e))return Bp.lstat(e,t=>t?(t.message=t.message.replace("lstat","ensureSymlink"),p(t)):p(null,{toCwd:e,toDst:e}));{let t=V1.dirname(a),i=V1.join(t,e);return Tm(i,(d,n)=>d?p(d):n?p(null,{toCwd:i,toDst:e}):Bp.lstat(e,l=>l?(l.message=l.message.replace("lstat","ensureSymlink"),p(l)):p(null,{toCwd:e,toDst:V1.relative(t,e)})))}}r(Nm,"symlinkPaths");function Dm(e,a){let p;if(V1.isAbsolute(e)){if(p=Bp.existsSync(e),!p)throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}else{let t=V1.dirname(a),i=V1.join(t,e);if(p=Bp.existsSync(i),p)return{toCwd:i,toDst:e};if(p=Bp.existsSync(e),!p)throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:V1.relative(t,e)}}}r(Dm,"symlinkPathsSync");k3.exports={symlinkPaths:Nm,symlinkPathsSync:Dm}});var O3=v((Kc,F3)=>{"use strict";var C3=be();function Em(e,a,p){if(p=typeof a=="function"?a:p,a=typeof a=="function"?!1:a,a)return p(null,a);C3.lstat(e,(t,i)=>{if(t)return p(null,"file");a=i&&i.isDirectory()?"dir":"file",p(null,a)})}r(Em,"symlinkType");function km(e,a){let p;if(a)return a;try{p=C3.lstatSync(e)}catch{return"file"}return p&&p.isDirectory()?"dir":"file"}r(km,"symlinkTypeSync");F3.exports={symlinkType:Em,symlinkTypeSync:km}});var U3=v((Xc,q3)=>{"use strict";var Am=Se().fromCallback,V3=require("path"),je=Q1(),I3=ze(),Cm=I3.mkdirs,Fm=I3.mkdirsSync,B3=A3(),Om=B3.symlinkPaths,Rm=B3.symlinkPathsSync,P3=O3(),Vm=P3.symlinkType,Im=P3.symlinkTypeSync,Bm=F1().pathExists,{areIdentical:L3}=ea();function Pm(e,a,p,t){t=typeof p=="function"?p:t,p=typeof p=="function"?!1:p,je.lstat(a,(i,d)=>{!i&&d.isSymbolicLink()?Promise.all([je.stat(e),je.stat(a)]).then(([n,l])=>{if(L3(n,l))return t(null);R3(e,a,p,t)}):R3(e,a,p,t)})}r(Pm,"createSymlink");function R3(e,a,p,t){Om(e,a,(i,d)=>{if(i)return t(i);e=d.toDst,Vm(d.toCwd,p,(n,l)=>{if(n)return t(n);let s=V3.dirname(a);Bm(s,(m,o)=>{if(m)return t(m);if(o)return je.symlink(e,a,l,t);Cm(s,c=>{if(c)return t(c);je.symlink(e,a,l,t)})})})})}r(R3,"_createSymlink");function Lm(e,a,p){let t;try{t=je.lstatSync(a)}catch{}if(t&&t.isSymbolicLink()){let l=je.statSync(e),s=je.statSync(a);if(L3(l,s))return}let i=Rm(e,a);e=i.toDst,p=Im(i.toCwd,p);let d=V3.dirname(a);return je.existsSync(d)||Fm(d),je.symlinkSync(e,a,p)}r(Lm,"createSymlinkSync");q3.exports={createSymlink:Am(Pm),createSymlinkSync:Lm}});var G3=v((ev,$3)=>{"use strict";var{createFile:M3,createFileSync:z3}=b3(),{createLink:j3,createLinkSync:Z3}=E3(),{createSymlink:W3,createSymlinkSync:H3}=U3();$3.exports={createFile:M3,createFileSync:z3,ensureFile:M3,ensureFileSync:z3,createLink:j3,createLinkSync:Z3,ensureLink:j3,ensureLinkSync:Z3,createSymlink:W3,createSymlinkSync:H3,ensureSymlink:W3,ensureSymlinkSync:H3}});var Wt=v((av,J3)=>{function qm(e,{EOL:a=`
|
|
8
8
|
`,finalEOL:p=!0,replacer:t=null,spaces:i}={}){let d=p?a:"";return JSON.stringify(e,t,i).replace(/\n/g,a)+d}r(qm,"stringify");function Um(e){return Buffer.isBuffer(e)&&(e=e.toString("utf8")),e.replace(/^\uFEFF/,"")}r(Um,"stripBom");J3.exports={stringify:qm,stripBom:Um}});var Q3=v((tv,X3)=>{var qa;try{qa=be()}catch{qa=require("fs")}var Ht=Se(),{stringify:K3,stripBom:Y3}=Wt();async function Mm(e,a={}){typeof a=="string"&&(a={encoding:a});let p=a.fs||qa,t="throws"in a?a.throws:!0,i=await Ht.fromCallback(p.readFile)(e,a);i=Y3(i);let d;try{d=JSON.parse(i,a?a.reviver:null)}catch(n){if(t)throw n.message=`${e}: ${n.message}`,n;return null}return d}r(Mm,"_readFile");var zm=Ht.fromPromise(Mm);function jm(e,a={}){typeof a=="string"&&(a={encoding:a});let p=a.fs||qa,t="throws"in a?a.throws:!0;try{let i=p.readFileSync(e,a);return i=Y3(i),JSON.parse(i,a.reviver)}catch(i){if(t)throw i.message=`${e}: ${i.message}`,i;return null}}r(jm,"readFileSync");async function Zm(e,a,p={}){let t=p.fs||qa,i=K3(a,p);await Ht.fromCallback(t.writeFile)(e,i,p)}r(Zm,"_writeFile");var Wm=Ht.fromPromise(Zm);function Hm(e,a,p={}){let t=p.fs||qa,i=K3(a,p);return t.writeFileSync(e,i,p)}r(Hm,"writeFileSync");var $m={readFile:zm,readFileSync:jm,writeFile:Wm,writeFileSync:Hm};X3.exports=$m});var a9=v((dv,e9)=>{"use strict";var $t=Q3();e9.exports={readJson:$t.readFile,readJsonSync:$t.readFileSync,writeJson:$t.writeFile,writeJsonSync:$t.writeFileSync}});var Gt=v((rv,i9)=>{"use strict";var Gm=Se().fromCallback,Pp=be(),p9=require("path"),t9=ze(),Jm=F1().pathExists;function Km(e,a,p,t){typeof p=="function"&&(t=p,p="utf8");let i=p9.dirname(e);Jm(i,(d,n)=>{if(d)return t(d);if(n)return Pp.writeFile(e,a,p,t);t9.mkdirs(i,l=>{if(l)return t(l);Pp.writeFile(e,a,p,t)})})}r(Km,"outputFile");function Ym(e,...a){let p=p9.dirname(e);if(Pp.existsSync(p))return Pp.writeFileSync(e,...a);t9.mkdirsSync(p),Pp.writeFileSync(e,...a)}r(Ym,"outputFileSync");i9.exports={outputFile:Gm(Km),outputFileSync:Ym}});var r9=v((lv,d9)=>{"use strict";var{stringify:Xm}=Wt(),{outputFile:Qm}=Gt();async function eu(e,a,p={}){let t=Xm(a,p);await Qm(e,t,p)}r(eu,"outputJson");d9.exports=eu});var l9=v((ov,n9)=>{"use strict";var{stringify:au}=Wt(),{outputFileSync:pu}=Gt();function tu(e,a,p){let t=au(a,p);pu(e,t,p)}r(tu,"outputJsonSync");n9.exports=tu});var o9=v((uv,s9)=>{"use strict";var iu=Se().fromPromise,ge=a9();ge.outputJson=iu(r9());ge.outputJsonSync=l9();ge.outputJSON=ge.outputJson;ge.outputJSONSync=ge.outputJsonSync;ge.writeJSON=ge.writeJson;ge.writeJSONSync=ge.writeJsonSync;ge.readJSON=ge.readJson;ge.readJSONSync=ge.readJsonSync;s9.exports=ge});var c9=v((fv,h9)=>{"use strict";var du=be(),wd=require("path"),ru=Zt().copy,f9=Ip().remove,nu=ze().mkdirp,lu=F1().pathExists,m9=ea();function su(e,a,p,t){typeof p=="function"&&(t=p,p={}),p=p||{};let i=p.overwrite||p.clobber||!1;m9.checkPaths(e,a,"move",p,(d,n)=>{if(d)return t(d);let{srcStat:l,isChangingCase:s=!1}=n;m9.checkParentPaths(e,l,a,"move",m=>{if(m)return t(m);if(ou(a))return u9(e,a,i,s,t);nu(wd.dirname(a),o=>o?t(o):u9(e,a,i,s,t))})})}r(su,"move");function ou(e){let a=wd.dirname(e);return wd.parse(a).root===a}r(ou,"isParentRoot");function u9(e,a,p,t,i){if(t)return vd(e,a,p,i);if(p)return f9(a,d=>d?i(d):vd(e,a,p,i));lu(a,(d,n)=>d?i(d):n?i(new Error("dest already exists.")):vd(e,a,p,i))}r(u9,"doRename");function vd(e,a,p,t){du.rename(e,a,i=>i?i.code!=="EXDEV"?t(i):mu(e,a,p,t):t())}r(vd,"rename");function mu(e,a,p,t){ru(e,a,{overwrite:p,errorOnExist:!0},d=>d?t(d):f9(e,t))}r(mu,"moveAcrossDevice");h9.exports=su});var y9=v((cv,g9)=>{"use strict";var w9=be(),gd=require("path"),uu=Zt().copySync,_9=Ip().removeSync,fu=ze().mkdirpSync,v9=ea();function hu(e,a,p){p=p||{};let t=p.overwrite||p.clobber||!1,{srcStat:i,isChangingCase:d=!1}=v9.checkPathsSync(e,a,"move",p);return v9.checkParentPathsSync(e,i,a,"move"),cu(a)||fu(gd.dirname(a)),vu(e,a,t,d)}r(hu,"moveSync");function cu(e){let a=gd.dirname(e);return gd.parse(a).root===a}r(cu,"isParentRoot");function vu(e,a,p,t){if(t)return _d(e,a,p);if(p)return _9(a),_d(e,a,p);if(w9.existsSync(a))throw new Error("dest already exists.");return _d(e,a,p)}r(vu,"doRename");function _d(e,a,p){try{w9.renameSync(e,a)}catch(t){if(t.code!=="EXDEV")throw t;return wu(e,a,p)}}r(_d,"rename");function wu(e,a,p){return uu(e,a,{overwrite:p,errorOnExist:!0}),_9(e)}r(wu,"moveAcrossDevice");g9.exports=hu});var b9=v((wv,S9)=>{"use strict";var _u=Se().fromCallback;S9.exports={move:_u(c9()),moveSync:y9()}});var T9=v((_v,x9)=>{"use strict";x9.exports={...Q1(),...Zt(),..._3(),...G3(),...o9(),...ze(),...b9(),...Gt(),...F1(),...Ip()}});var gu={};L9(gu,{TestRunMonitor:()=>Lp});module.exports=q9(gu);var C9=I1(require("net")),Ua=require("fs"),yd=I1(rr());var na=r(e=>new Promise(a=>setTimeout(a,e)),"awaitSleep"),nr=r(async(e,a=1e3,p="action hang guard timed out")=>{let t="guard-timed-out",i=r(async()=>(await na(a+1e3),t),"guard"),d=await Promise.race([e,i()]);if(typeof d=="string"&&d===t)throw new Error(p);return d},"guardReturn");var Yt=require("path");var xn=require("fs"),Tn=require("jsdom"),Nn=require("fs/promises"),Dn=I1(Pt());var kp=class{constructor(a,p,t,i="https://api.checksum.ai/api/test-runs"){this.reportHTMLFilePath=a;this.testRunUUID=p;this.pwTestIdToChecksumTestId=t;this.assetsBaseURL=i;this.supportVideo=!1}async process(){await this.initializeDOM(),this.makeLightModeOnly(),await this.editZipFile(),await this.writeFile()}async initializeDOM(){return this.dom=await Tn.JSDOM.fromFile(this.reportHTMLFilePath,{resources:"usable",runScripts:"dangerously"}),new Promise(a=>this.dom.window.addEventListener("load",a))}async writeFile(){let a=this.dom.serialize();a=a.replace(/window.playwrightReportBase64 = ".*";/,`window.playwrightReportBase64 = "${this.newBase64Zip}";`),await(0,Nn.cp)(this.reportHTMLFilePath,this.reportHTMLFilePath.replace(".html",".backup.html")),(0,xn.writeFileSync)(this.reportHTMLFilePath,a)}makeLightModeOnly(){this.dom.window.document.querySelector('meta[name="color-scheme"]').setAttribute("content","light");let p=this.dom.window.document.querySelector("head style"),t=p.innerHTML,i=/@media\s*\(prefers-color-scheme:\s*dark\)\s*{[^}]*}/g,d=t.replace(i,"");p.innerHTML=d}async editZipFile(){let a=this.dom.window.playwrightReportBase64.replace("data:application/zip;base64,",""),p=await(0,Dn.loadAsync)(a,{base64:!0});for(let i of Object.keys(p.files)){let d=p.file(i);if(d){let n=await d.async("string"),l=JSON.parse(n);i.startsWith("report")?this.handleReportJSON(l):this.handleFileReportJSON(l),p.file(i,JSON.stringify(l))}}let t=await p.generateAsync({type:"base64"});this.newBase64Zip=`data:application/zip;base64,${t}`}getCloudPath(a){return`${this.assetsBaseURL}/${this.testRunUUID}/${this.pwTestIdToChecksumTestId[a]}`}handleReportJSON(a){a.files.forEach(p=>p.tests.forEach(t=>{t.results.forEach(i=>{this.processAttachments(i.attachments,t.testId)})}))}handleFileReportJSON(a){var p;(p=a.tests)==null||p.forEach(t=>{var i;(i=t.results)==null||i.forEach(d=>{this.processAttachments(d.attachments,t.testId)})})}processAttachments(a,p){if(a.forEach(t=>this.updateAttachment(t,p)),!this.supportVideo){let t=a.findIndex(i=>i.name==="video");t!==-1&&a.splice(t,1)}}updateAttachment(a,p){["trace","video"].includes(a.name)&&(a.path=`${this.getCloudPath(p)}/${a.name}`)}};r(kp,"PlaywrightReportProcessor");var F9=require("http");var ue=require("fs"),ad=I1(Pt()),pd=require("readline/promises");var Ap=class{constructor(a,p,t,i){this.mode=a;this.inputZipFilePath=p;this.outputZipFilePath=t;this.frontendLogPrefix=i;this.originalTraceFileNames=[];this.remainingTraceFileNames=[];this.wallTimesToBeRemoved={};this.callIdsRemovals={};this.consoleLogGUIDs=[];this.numberOfLinesPerFile={};this.generationAllowedAPIName=["page.goto","page.waitForNavigation","locator.fill","locator.click","locator.hover","locator.check","locator.uncheck"]}async process(){await this.unzipAndWriteTraceFiles();for(let a of this.originalTraceFileNames)await this.preprocessFile(a);for(this.remainingTraceFileNames=[...this.originalTraceFileNames];this.remainingTraceFileNames.length>0;)for(let a of this.remainingTraceFileNames)await this.processFile(a);await this.reZip()}getBackupZipFilePath(){return this.inputZipFilePath.replace(".zip",".trace-files-backup.zip")}async unzipAndWriteTraceFiles(){let a=(0,ue.readFileSync)(this.inputZipFilePath);this.zipped=await(0,ad.loadAsync)(a),this.originalTraceFileNames=Object.keys(this.zipped.files).filter(i=>i.endsWith(".trace"));let p=await(0,ad.loadAsync)("UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==",{base64:!0});for(let i of this.originalTraceFileNames){let d=await this.zipped.file(i).async("string");(0,ue.writeFileSync)(i,d),p.file(i,d)}let t=await p.generateAsync({type:"nodebuffer"});(0,ue.writeFileSync)(this.getBackupZipFilePath(),t)}async reZip(){for(let p of this.originalTraceFileNames){let t=(0,ue.readFileSync)(p);this.zipped.remove(p),this.zipped.file(p,t)}let a=await this.zipped.generateAsync({type:"nodebuffer"});(0,ue.existsSync)(this.outputZipFilePath)&&(0,ue.rmSync)(this.outputZipFilePath),(0,ue.writeFileSync)(this.outputZipFilePath,a);for(let p of this.originalTraceFileNames)(0,ue.rmSync)(p)}async preprocessFile(a){this.callIdsRemovals[a]={callIdsToBeRemoved:{},arrayOfCallIdsToBeRemoved:new Set};let p=(0,ue.createReadStream)(a),t=(0,pd.createInterface)({input:p,crlfDelay:1/0}),i=0;for await(let d of t){i++;let n=JSON.parse(d);this.shouldLineBeRemoved(n)&&(n.wallTime&&(this.wallTimesToBeRemoved[n.wallTime]=!0),n.callId&&(this.callIdsRemovals[a].callIdsToBeRemoved[n.callId]=!0,this.callIdsRemovals[a].arrayOfCallIdsToBeRemoved.add(n.callId)))}this.numberOfLinesPerFile[a]=i}async processFile(a){var n,l;let p=[],t=(0,ue.createReadStream)(a),i=(0,pd.createInterface)({input:t,crlfDelay:1/0}),d=a;for await(let s of i){let m=JSON.parse(s),o=!1;if(this.frontendLogPrefix){if(this.isChecksumConsoleLog(m)){this.consoleLogGUIDs.push(m.guid);continue}if(this.isConsoleLogMetadata(m)&&this.consoleLogGUIDs.includes((l=(n=m.params)==null?void 0:n.message)==null?void 0:l.guid))continue}if(this.lineCanBeRemoved(m)&&(this.wallTimesToBeRemoved[m.wallTime]||this.callIdsRemovals[d].callIdsToBeRemoved[m.callId]||Array.from(this.callIdsRemovals[d].arrayOfCallIdsToBeRemoved).some(c=>s.includes(`"${c}"`)))&&(o=!0),o){m.callId&&(this.callIdsRemovals[d].callIdsToBeRemoved[m.callId]=!0,this.callIdsRemovals[d].arrayOfCallIdsToBeRemoved.add(m.callId));continue}p.push(s)}if(p.length===this.numberOfLinesPerFile[d]){let s=this.remainingTraceFileNames.indexOf(d);s>-1&&this.remainingTraceFileNames.splice(s,1)}else this.numberOfLinesPerFile[d]=p.length,(0,ue.writeFileSync)(a,p.join(`
|
|
9
|
-
`))}isChecksumConsoleLog(a){var p,t;return a.class==="ConsoleMessage"&&((t=(p=a.initializer)==null?void 0:p.text)==null?void 0:t.startsWith(this.frontendLogPrefix))}isConsoleLogMetadata(a){return a.class==="BrowserContext"&&a.method==="console"}lineCanBeRemoved(a){return!["frame-snapshot"].includes(a.type)}shouldLineBeRemoved(a){switch(this.mode){case"runtime":return this.shouldLineBeRemoved_runtime(a);case"generation":return this.shouldLineBeRemoved_generation(a)}return!1}shouldLineBeRemoved_runtime(a){var p;return(p=a.stack)==null?void 0:p.find(t=>!t.file.endsWith("spec.ts")&&!["executePlaywrightMethodWithTimeout"].includes(t.function))}shouldLineBeRemoved_generation(a){return!!a.apiName&&!this.generationAllowedAPIName.includes(a.apiName)}};r(Ap,"PlaywrightTraceProcessor");var N9=I1(Pt()),Jt=I1(T9()),Kt=I1(require("path")),D9=require("fs");async function E9(e,a){let p=await Jt.default.readdir(a);await Promise.all(p.map(async t=>{let i=Kt.default.join(a,t);if((await Jt.default.stat(i)).isDirectory()){let n=e.folder(t);await E9(n,i)}else{let n=await Jt.default.readFile(i);e.file(t,n)}}))}r(E9,"addFolderToZip");async function k9(e){let a=new N9.default;try{await E9(a,e);let p=await a.generateAsync({type:"nodebuffer"}),t=`${(0,Kt.basename)(e)}.zip`;return(0,D9.writeFileSync)(t,p),t}catch(p){return console.error("Error creating zip:",p),null}}r(k9,"zipFolder");var Lp=class{constructor(a,p=!1){this.config=a;this.
|
|
9
|
+
`))}isChecksumConsoleLog(a){var p,t;return a.class==="ConsoleMessage"&&((t=(p=a.initializer)==null?void 0:p.text)==null?void 0:t.startsWith(this.frontendLogPrefix))}isConsoleLogMetadata(a){return a.class==="BrowserContext"&&a.method==="console"}lineCanBeRemoved(a){return!["frame-snapshot"].includes(a.type)}shouldLineBeRemoved(a){switch(this.mode){case"runtime":return this.shouldLineBeRemoved_runtime(a);case"generation":return this.shouldLineBeRemoved_generation(a)}return!1}shouldLineBeRemoved_runtime(a){var p;return(p=a.stack)==null?void 0:p.find(t=>!t.file.endsWith("spec.ts")&&!["executePlaywrightMethodWithTimeout"].includes(t.function))}shouldLineBeRemoved_generation(a){return!!a.apiName&&!this.generationAllowedAPIName.includes(a.apiName)}};r(Ap,"PlaywrightTraceProcessor");var N9=I1(Pt()),Jt=I1(T9()),Kt=I1(require("path")),D9=require("fs");async function E9(e,a){let p=await Jt.default.readdir(a);await Promise.all(p.map(async t=>{let i=Kt.default.join(a,t);if((await Jt.default.stat(i)).isDirectory()){let n=e.folder(t);await E9(n,i)}else{let n=await Jt.default.readFile(i);e.file(t,n)}}))}r(E9,"addFolderToZip");async function k9(e){let a=new N9.default;try{await E9(a,e);let p=await a.generateAsync({type:"nodebuffer"}),t=`${(0,Kt.basename)(e)}.zip`;return(0,D9.writeFileSync)(t,p),t}catch(p){return console.error("Error creating zip:",p),null}}r(k9,"zipFolder");var Lp=class{constructor(a,p=!1){this.config=a;this.isolatedMode=p;this.MAX_UPLOADS=5;this.MONITOR_INTERVAL=5e3;this.UPLOAD_TIMEOUT=6e5;this.assets=[];this.stats={passed:0,failed:0,healed:0};this.reportComplete=!1;this.pwTestIdToChecksumTestId={};setInterval(this.monitorUploads.bind(this),this.MONITOR_INTERVAL),this.listenForMessages(),this.startServer()}listenForMessages(){process.stdin.on("data",async a=>{let p=a.toString().trim();if(!p.startsWith("cli:"))return;let[t,i]=p.substring(4).split("=");switch(t){case"report":await this.handleReport(i),this.monitorUploadsCompletion();break;case"shutdown":this.shutdown();break}})}sendMessage(a){console.log(`${"monitor"}:${a}`)}async handleReport(a){if(!this.isolatedMode)return this.reportAsset=this.initAsset({type:"report",path:a}),await new kp(a,this.config.sessionId,this.pwTestIdToChecksumTestId).process(),this.uploadAsset(this.reportAsset)}shutdown(){console.log("Received shutdown message from CLI"),this.server.close(),process.exit(0)}async monitorUploadsCompletion(){if(this.isolatedMode||!this.reportComplete&&this.reportAsset&&this.reportAsset.complete){this.reportComplete=!0;let a="{}";try{a=JSON.stringify(this.stats)}catch(p){console.log("Error stringifying stats",p)}this.sendMessage(`report-uploaded=${a}`)}if(this.reportComplete&&this.assets.filter(a=>a.complete||a.error).length===this.assets.length){await na(100),this.sendMessage("complete");return}await na(1e3),this.monitorUploadsCompletion()}async startServer(){let a=await this.acquirePortNumber();this.sendMessage(`port=${a}`),this.server=(0,F9.createServer)((p,t)=>{let i=r(n=>{t.writeHead(400,{"Content-Type":"text/plain"}),t.end(n)},"returnErrorWithMessage");if(p.method!=="POST"){t.writeHead(404,{"Content-Type":"text/plain"}),t.end("Method not allowed");return}let d="";p.on("data",n=>{d+=n.toString()}),p.on("end",()=>{let n;try{n=JSON.parse(d)}catch{return i("Invalid body")}let{type:l,payload:s,watch:m}=n;switch(l){case"asset":if(!s.path||!s.type)return i("Missing arguments");m?this.watchAsset(s):this.processAsset(s);break;case"testInfo":if(!s.pwTestId||!s.checksumTestId)return i("Missing arguments");this.pwTestIdToChecksumTestId[s.pwTestId]=s.checksumTestId;break;case"testStats":this.stats[s.passed?"passed":"failed"]++,s.healed&&this.stats.healed++;break;default:return i("Invalid message type")}t.writeHead(200,{"Content-Type":"text/plain"}),t.end("OK")})}),this.server.listen(a)}monitorUploads(){let a=r(()=>this.assets.filter(t=>t.response&&!t.complete&&!t.error),"getActiveUploads"),p=this.assets.filter(t=>!t.response);if(p.length!==0&&!(a().length>=this.MAX_UPLOADS))for(;p.length>0&&a().length<this.MAX_UPLOADS;){let t=p.pop();this.uploadAsset(t)}}async uploadAsset(a){if(this.isolatedMode){a.response=new Promise((l,s)=>{setTimeout(()=>{a.complete=!0,l(new Response)},Math.random()*100)});return}let{path:p}=a.info;if(console.log("Uploading file",p),await this.getSignedURLForUpload(a),!a.uploadURL){console.log("Error getting signed URL for asset",p),a.error=!0;return}let i=(0,Ua.statSync)(p).size,d=(0,Ua.createReadStream)(p),n=nr((0,yd.default)(a.uploadURL,{method:"PUT",headers:{"Content-length":i.toString()},body:d}),this.UPLOAD_TIMEOUT);n.then(l=>{if(!l.ok)throw l.json().then(s=>{console.log(s)}),new Error("Upload failed");console.log("File uploaded successfully",p),a.complete=!0}).catch(l=>{console.log("Error uploading asset",p,l),a.error=!0}),a.response=n}async getSignedURLForUpload(a){try{let{apiKey:p,sessionId:t,checksumApiURL:i}=this.config,d=a.info,n=await(0,yd.default)(`${i}/client-api/test-runs/${t}/get-upload-url`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",ChecksumAppCode:p},body:JSON.stringify(d)}),{url:l}=await n.json();a.uploadURL=l}catch(p){return console.error("Error getting signed URL for artifact",p),null}}watchAsset(a){let p=(0,Yt.dirname)(a.path),t=(0,Yt.basename)(a.path),i=(0,Ua.watch)(p,(d,n)=>{n===t&&(this.processAsset(a),i.close())})}processAsset(a){if(!this.isolatedMode)switch(a.type){case"trace":return this.processTrace(a.path,a.testId);case"har":return this.processHar(a.path,a.testId);case"esra":case"test-files":return this.addAsset(a)}}async processHar(a,p){await na(1e3);let t=await k9(a);if(console.log("Processed har, sending for upload"),t)return this.addAsset({type:"har",path:t,testId:p})}async processTrace(a,p){await na(1e3);let t=a.replace(".zip",".processed.zip");await new Ap("runtime",a,t,"$checksum").process(),console.log("Processed trace files, sending for upload"),this.addAsset({type:"trace",path:t,testId:p}),this.addAsset({type:"trace-backup-file",path:a,testId:p})}addAsset(a){if(this.isolatedMode)return;console.log("Adding file",a.path);let p=this.initAsset(a);return this.assets.push(p),p}initAsset(a){return{complete:!1,error:!1,response:void 0,info:a}}async acquirePortNumber(){return await new Promise((a,p)=>{let t=C9.createServer();t.unref(),t.on("error",p),t.listen(0,()=>{let i=t.address().port;t.close(()=>{a(i)})})})}};r(Lp,"TestRunMonitor");var O9;try{O9=JSON.parse(process.argv[2])}catch(e){console.log("Error starting test run monitor",e),process.exit(1)}var A9;new Lp(O9,((A9=process.argv)==null?void 0:A9[3])==="isolated");0&&(module.exports={TestRunMonitor});
|