@testrelic/playwright-analytics 2.11.1-next.75 → 2.11.1-next.77
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/api-fixture.cjs +4 -4
- package/dist/api-fixture.cjs.map +1 -1
- package/dist/api-fixture.js +4 -4
- package/dist/api-fixture.js.map +1 -1
- package/dist/cli.cjs +9 -5
- package/dist/fixture.cjs +4 -4
- package/dist/fixture.cjs.map +1 -1
- package/dist/fixture.js +4 -4
- package/dist/fixture.js.map +1 -1
- package/dist/index.cjs +50 -50
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +49 -49
- package/dist/index.js.map +1 -1
- package/dist/reporter-entry.cjs +1 -1
- package/dist/reporter-entry.cjs.map +1 -1
- package/dist/reporter-entry.js +2 -2
- package/dist/reporter-entry.js.map +1 -1
- package/package.json +2 -2
package/dist/reporter-entry.cjs
CHANGED
|
@@ -2543,7 +2543,7 @@ ${r?`<meta name="artifact-server-port" content="${r}">`:""}
|
|
|
2543
2543
|
${o?`<script id="artifact-manifest-data" type="application/json">${o}</script>`:""}
|
|
2544
2544
|
<script>${l}</script>
|
|
2545
2545
|
</body>
|
|
2546
|
-
</html>`}function De(t){try{let e=process.platform,r;e==="darwin"?r
|
|
2546
|
+
</html>`}function De(t){try{let e=process.platform,r,s;e==="darwin"?(r="open",s=[t]):e==="win32"?(r="cmd",s=["/c","start","",t]):(r="xdg-open",s=[t]),child_process.execFile(r,s,n=>{n&&process.stderr.write(`[testrelic] Failed to open browser: ${n.message}
|
|
2547
2547
|
`);});}catch{}}path.join(os$1.tmpdir(),"testrelic-data");async function Dt(t,e,r,s){let n=(e-1)*r,a=[],o=0,i=readline.createInterface({input:fs$1.createReadStream(t,{encoding:"utf-8"}),crlfDelay:1/0});for await(let u of i)if(u.length!==0){if(o>=n&&a.length<r)try{a.push(JSON.parse(u));}catch{}if(o++,a.length>=r&&s!==void 0)break}let d=s??o,l=Math.max(1,Math.ceil(d/r));return {items:a,total:d,page:e,pageSize:r,totalPages:l}}var qt=/^[a-f0-9]{12}$/,Be=/^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}(-\d+)?$/,Ht=500;function b(t,e,r){t.writeHead(e,{"Content-Type":"application/json"}),t.end(JSON.stringify(r));}function Ut(t){t.setHeader("Access-Control-Allow-Origin","*"),t.setHeader("Access-Control-Allow-Methods","GET, DELETE, OPTIONS"),t.setHeader("Access-Control-Allow-Headers","Content-Type");}function ae(t){try{return fs$1.existsSync(t)?JSON.parse(fs$1.readFileSync(t,"utf-8")):null}catch{return null}}function ie(t){let e=0;try{let r=fs$1.readdirSync(t,{withFileTypes:!0});for(let s of r){let n=path.join(t,s.name);s.isFile()?e+=fs$1.statSync(n).size:s.isDirectory()&&(e+=ie(n));}}catch{}return e}function $t(t,e,r,s){let n=ae(path.join(r,"index.json"));b(e,200,{status:"ok",reportMode:"streaming",testCount:n?.length??0,uptime:Math.floor((Date.now()-s)/1e3)});}function zt(t,e,r){let s=ae(path.join(r,"summary.json"));if(!s){b(e,404,{error:"Summary not found"});return}b(e,200,s);}function jt(t,e,r){let s=ae(path.join(r,"index.json"));if(!s){b(e,404,{error:"Test index not found"});return}let a=new URL(t.url??"/",`http://${t.headers.host}`).searchParams,o=Math.max(1,parseInt(a.get("page")??"1",10)||1),i=Math.min(Ht,Math.max(1,parseInt(a.get("pageSize")??"100",10)||100)),d=a.get("status")?.split(",").filter(Boolean)??null,l=a.get("file")??null,u=a.get("search")?.toLowerCase()??null,g=a.get("tag")?.split(",").filter(Boolean)??null,m=a.get("sort")??"file",p=a.get("order")==="desc"?-1:1,f=s;d&&d.length>0&&(f=f.filter(x=>d.includes(x.status))),l&&(f=f.filter(x=>x.filePath===l||x.filePath.startsWith(l+"/"))),u&&(f=f.filter(x=>x.title.toLowerCase().includes(u)||x.filePath.toLowerCase().includes(u))),g&&g.length>0&&(f=f.filter(x=>g.some(T=>x.tags.includes(T)))),f=[...f].sort((x,T)=>{let M=0;switch(m){case "duration":M=x.duration-T.duration;break;case "status":M=x.status.localeCompare(T.status);break;case "title":M=x.title.localeCompare(T.title);break;default:M=x.filePath.localeCompare(T.filePath);break}return M*p});let c=f.length,h=Math.max(1,Math.ceil(c/i)),v=(o-1)*i,w=f.slice(v,v+i);b(e,200,{tests:w,pagination:{page:o,pageSize:i,totalItems:c,totalPages:h},filters:{status:d,file:l,search:u,tag:g}});}function Vt(t,e,r,s){if(!qt.test(s)){b(e,400,{error:"Invalid test ID format"});return}let n=path.join(r,"tests",s,"meta.json"),a=path.join(r,"tests",`${s}.json`),o=fs$1.existsSync(n)?n:fs$1.existsSync(a)?a:null;if(!o){b(e,404,{error:`Test not found: ${s}`});return}try{let i=fs$1.readFileSync(o,"utf-8");e.writeHead(200,{"Content-Type":"application/json"}),e.end(i);}catch(i){b(e,500,{error:i instanceof Error?i.message:String(i)});}}async function Gt(t,e,r,s,n){if(!qt.test(s)){b(e,400,{error:"Invalid test ID format"});return}let o=path.join(r,"tests",s,{network:"network.jsonl",console:"console.jsonl","api-calls":"api-calls.jsonl"}[n]);if(!fs$1.existsSync(o)){b(e,200,{items:[],total:0,page:1,pageSize:50,totalPages:0});return}try{let d=new URL(t.url??"/",`http://${t.headers.host}`).searchParams,l=Math.max(1,parseInt(d.get("page")??"1",10)||1),u=Math.min(Ht,Math.max(1,parseInt(d.get("pageSize")??"50",10)||50)),g,m=path.join(r,"tests",s,"meta.json");if(fs$1.existsSync(m))try{let f=JSON.parse(fs$1.readFileSync(m,"utf-8"));switch(n){case "network":g=f.networkRequestsCount;break;case "console":g=f.consoleLogsCount;break;case "api-calls":g=f.apiCallsCount;break}}catch{}let p=await Dt(o,l,u,g);b(e,200,p);}catch(i){b(e,500,{error:i instanceof Error?i.message:String(i)});}}function Wt(t,e,r){let s=ae(path.join(r,"index.json"));if(!s){b(e,404,{error:"Test index not found"});return}let n=new Map;for(let o of s){if(o.isRetry)continue;let i=n.get(o.filePath);switch(i||(i={total:0,passed:0,failed:0,flaky:0,skipped:0,timedOut:0},n.set(o.filePath,i)),i.total++,o.status){case "passed":i.passed++;break;case "failed":i.failed++;break;case "flaky":i.flaky++;break;case "skipped":i.skipped++;break;case "timedout":i.timedOut++;break}}let a=Array.from(n.entries()).map(([o,i])=>({filePath:o,...i})).sort((o,i)=>o.filePath.localeCompare(i.filePath));b(e,200,{files:a});}function Kt(t,e,r){if(!fs$1.existsSync(r)){b(e,200,{runs:[],totalSizeBytes:0});return}try{let s=[],n=0,a=fs$1.readdirSync(r,{withFileTypes:!0});for(let o of a){if(!o.isDirectory()||!Be.test(o.name))continue;let i=path.join(r,o.name),d=ie(i),l=fs$1.readdirSync(i,{withFileTypes:!0}).filter(u=>u.isDirectory());s.push({folderName:o.name,totalSizeBytes:d,testCount:l.length}),n+=d;}s.sort((o,i)=>i.folderName.localeCompare(o.folderName)),b(e,200,{runs:s,totalSizeBytes:n});}catch(s){b(e,500,{error:s instanceof Error?s.message:String(s)});}}function Jt(t,e,r){try{let s=0,n=0;if(fs$1.existsSync(r)){let a=fs$1.readdirSync(r,{withFileTypes:!0});for(let o of a){if(!o.isDirectory()||!Be.test(o.name))continue;let i=path.join(r,o.name),d=ie(i);fs$1.rmSync(i,{recursive:!0,force:!0}),n+=d,s++;}}b(e,200,{deletedCount:s,freedBytes:n});}catch(s){b(e,500,{error:s instanceof Error?s.message:String(s)});}}function Yt(t,e,r,s){if(!Be.test(s)){b(e,400,{error:"Invalid folder name"});return}let n=path.join(r,s);try{if(!fs$1.statSync(n).isDirectory()){b(e,404,{error:"Not found"});return}}catch{b(e,404,{error:"Not found"});return}try{let a=ie(n);fs$1.rmSync(n,{recursive:!0,force:!0}),b(e,200,{deleted:s,freedBytes:a});}catch(a){b(e,500,{error:a instanceof Error?a.message:String(a)});}}function Qt(t,e,r){b(e,200,{status:"shutting_down"}),r.close();}function Oe(t,e,r){if(!fs$1.existsSync(r)){b(e,404,{error:"File not found"});return}try{let s=fs$1.readFileSync(r),n=path.extname(r).toLowerCase(),a=Is[n]??"application/octet-stream";e.writeHead(200,{"Content-Type":a}),e.end(s);}catch(s){b(e,500,{error:s instanceof Error?s.message:String(s)});}}var Is={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".webm":"video/webm",".mp4":"video/mp4",".json":"application/json",".html":"text/html",".css":"text/css",".js":"text/javascript",".svg":"image/svg+xml"};var Es=9323,Ps=10,Ns=1800*1e3;function Y(t,e){return new Promise((r,s)=>{let n=e?.port??Es,a=Date.now(),o,i=0,d=fs$1.existsSync(path.join(t,"artifacts"))?path.join(t,"artifacts"):fs$1.existsSync(path.join(t,"..","artifacts"))?path.join(t,"..","artifacts"):path.join(t,"artifacts");function l(){clearTimeout(o),o=setTimeout(()=>{g.close();},Ns);}let u=e?.htmlPath??null;if(!u){let p=path.dirname(t);try{let f=fs$1.readdirSync(p).find(c=>c.endsWith(".html"));f&&(u=path.join(p,f));}catch{}}let g=http.createServer((p,f)=>{if(l(),Ut(f),p.method==="OPTIONS"){f.writeHead(204),f.end();return}let c;try{c=new URL(p.url??"/",`http://${p.headers.host??"localhost"}`).pathname;}catch{b(f,400,{error:"Invalid URL"});return}if(p.method==="GET"&&(c==="/"||c==="/index.html")){if(u&&fs$1.existsSync(u)){Oe(p,f,u);return}b(f,404,{error:"HTML report not found"});return}if(p.method==="GET"&&c==="/api/health"){$t(p,f,t,a);return}if(p.method==="GET"&&c==="/api/summary"){zt(p,f,t);return}if(p.method==="GET"&&c==="/api/tests"){jt(p,f,t);return}if(p.method==="GET"&&c==="/api/files"){Wt(p,f,t);return}let h=c.match(/^\/api\/tests\/([a-f0-9]+)\/(network|console|api-calls)$/);if(p.method==="GET"&&h){Gt(p,f,t,h[1],h[2]);return}let v=c.match(/^\/api\/tests\/([a-f0-9]+)$/);if(p.method==="GET"&&v){Vt(p,f,t,v[1]);return}if(p.method==="GET"&&c==="/api/artifacts"){Kt(p,f,d);return}if(p.method==="DELETE"&&c==="/api/artifacts"){Jt(p,f,d);return}let w=c.match(/^\/api\/artifacts\/(.+)$/);if(p.method==="DELETE"&&w){Yt(p,f,d,decodeURIComponent(w[1]));return}if(p.method==="GET"&&c.startsWith("/artifacts/")){let x=decodeURIComponent(c.slice(11));if(x.includes("..")||x.includes("\0")){b(f,400,{error:"Invalid path"});return}Oe(p,f,path.join(d,x));return}if(p.method==="POST"&&c==="/api/shutdown"){Qt(p,f,g);return}b(f,404,{error:"Not found"});});function m(p){let f=c=>{c.code==="EADDRINUSE"&&i<Ps?(i++,m(p+1)):s(c);};g.once("error",f),g.listen(p,"127.0.0.1",()=>{g.removeListener("error",f);let c=g.address();if(!c||typeof c=="string"){s(new Error("Failed to get server address"));return}l(),r({port:c.port,dispose:()=>new Promise(h=>{clearTimeout(o),g.close(()=>h());})});});}m(n);})}async function Zt(t){let e=await Y(t);return {port:e.port,dispose:e.dispose}}function Bs(t,e,r){let s=JSON.stringify(t),n=r?JSON.stringify(r):null;return Ft(s,e,n)}async function He(t,e,r){try{let s=null,n=null,a=e.reportMode==="streaming"||e.reportMode==="auto"&&t.timeline.length===0&&t.summary.total>=e.streamingThreshold,o,i=e.htmlReportPath,d=path.dirname(i);fs$1.mkdirSync(d,{recursive:!0});let l="",u="[]",g=null;if(a){l=JSON.stringify({...t.summary,testRunId:t.testRunId,startedAt:t.startedAt,completedAt:t.completedAt,totalDuration:t.totalDuration,ci:t.ci,metadata:t.metadata,shardRunIds:t.shardRunIds});let p=path.dirname(e.outputPath),f=path.join(p,".testrelic-report");try{let c=path.join(f,"index-compact.json"),h=path.join(f,"index.json");fs$1.existsSync(c)?u=fs$1.readFileSync(c,"utf-8"):fs$1.existsSync(h)&&(u=fs$1.readFileSync(h,"utf-8"));}catch{}g=r?JSON.stringify(r):null,o=Fe(l,u,null,g);}else o=Bs(t,null,r);let m=i+".tmp";if(fs$1.writeFileSync(m,o,"utf-8"),fs$1.renameSync(m,i),a){if(t.ci===null){let p=path.dirname(e.outputPath),f=path.join(p,".testrelic-report"),c=path.resolve(i);try{if(await qs(),s=await Hs(f),!s){n=await Y(f,{htmlPath:c}),s=n.port;let h=setInterval(()=>{},6e4),v=()=>{clearInterval(h),n?.dispose();};process.on("SIGINT",v),process.on("SIGTERM",v),setTimeout(v,1800*1e3).unref();}if(s){process.stderr.write(`
|
|
2548
2548
|
Report server: http://127.0.0.1:${s}
|
|
2549
2549
|
`);try{let h=Fe(l,u,s,g),v=i+".tmp";fs$1.writeFileSync(v,h,"utf-8"),fs$1.renameSync(v,i);}catch{}}}catch{}}}else if(e.openReport&&t.ci===null&&e.includeArtifacts){let p=path.dirname(e.outputPath),f=path.join(p,"artifacts");if(fs$1.existsSync(f))try{let c=await Zt(f);s=c.port,process.on("exit",()=>{c.dispose();});}catch{}}if(e.openReport&&t.ci===null)if(a&&s)De(`http://127.0.0.1:${s}`);else {let p=path.resolve(i);De(p);}}catch(s){process.stderr.write(`[testrelic] Failed to write HTML report: ${s instanceof Error?s.message:String(s)}
|