UNPKG

pulse-dashboard

Version:

A Next.js Dashboard application for real-time monitoring and historical analysis of Playwright test executions. This component provides the UI for visualizing Playwright test results and can be run as a standalone CLI tool.

2 lines 14.5 kB
(()=>{var e={};e.id=863,e.ids=[863],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},17478:(e,r)=>{"use strict";function t(e){for(let r=0;r<e.length;r++){let t=e[r];if("function"!=typeof t)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof t}. Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(r,"D",{enumerable:!0,get:function(){return t}})},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:e=>{"use strict";e.exports=require("path")},39794:(e,r,t)=>{"use strict";t.r(r),t.d(r,{patchFetch:()=>g,routeModule:()=>u,serverHooks:()=>f,workAsyncStorage:()=>d,workUnitAsyncStorage:()=>p});var n={};t.r(n),t.d(n,{GET:()=>c});var s=t(96559),o=t(48088),i=t(37719),a=t(32190),l=t(66628);async function c(){console.log("[API /api/historical-trends] Route hit.");let e=process.env.PULSE_USER_CWD,r=process.cwd();console.log("[API /api/historical-trends] process.env.PULSE_USER_CWD (inside API route):",e),console.log("[API /api/historical-trends] process.cwd() (inside API route):",r),console.log("[API /api/historical-trends] Effective baseDir determined for API route (should match actions):",e&&""!==e.trim()?e.trim():r);try{let e=await (0,l.w)();if(!e)return console.error("[API /api/historical-trends] getRawHistoricalReports returned undefined/null. This is unexpected."),a.NextResponse.json({message:"Internal error: Failed to retrieve historical reports data structure."},{status:500});console.log(`[API /api/historical-trends] Received ${e.length} raw reports from getRawHistoricalReports.`);let r=e.map(e=>{let r;if(!e.run)return console.warn("[API /api/historical-trends] Found a report in history without a .run property, skipping:",e),null;if(e.results&&e.results.length>0){let t=new Set;e.results.forEach(e=>{e.workerID&&t.add(e.workerID)}),t.size>0&&(r=t.size)}return{date:e.run.timestamp,totalTests:e.run.totalTests,passed:e.run.passed,failed:e.run.failed+(e.run.timedOut||0),skipped:e.run.skipped,duration:e.run.duration,flakinessRate:void 0!==e.run.flakinessRate?e.run.flakinessRate:0,workerCount:r}}).filter(e=>null!==e).sort((e,r)=>new Date(e.date).getTime()-new Date(r.date).getTime());return console.log(`[API /api/historical-trends] Successfully processed ${r.length} historical trend items.`),a.NextResponse.json(r,{status:200})}catch(r){console.error("[API /api/historical-trends] Error processing historical trends in API route:",r);let e=r instanceof Error?r.message:"An unknown error occurred while processing historical trends.";return a.NextResponse.json({message:`Error processing historical trends: ${e}`,details:String(r)},{status:500})}}let u=new s.AppRouteRouteModule({definition:{kind:o.RouteKind.APP_ROUTE,page:"/api/historical-trends/route",pathname:"/api/historical-trends",filename:"route",bundlePath:"app/api/historical-trends/route"},resolvedPagePath:"/Users/administrator/pulse-dashboard/src/app/api/historical-trends/route.ts",nextConfigOutput:"standalone",userland:n}),{workAsyncStorage:d,workUnitAsyncStorage:p,serverHooks:f}=u;function g(){return(0,i.patchFetch)({workAsyncStorage:d,workUnitAsyncStorage:p})}},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},66628:(e,r,t)=>{"use strict";t.d(r,{h:()=>c,w:()=>l});var n=t(67218);t(79130);var s=t(79748),o=t.n(s),i=t(33873),a=t.n(i);async function l(){console.log("[ACTIONS getRawHistoricalReports] ------------- START -------------");let e=process.env.PULSE_USER_CWD,r=process.cwd();console.log("[ACTIONS getRawHistoricalReports] process.env.PULSE_USER_CWD:",e),console.log("[ACTIONS getRawHistoricalReports] process.cwd():",r);let t=e&&""!==e.trim()?e.trim():r;console.log("[ACTIONS getRawHistoricalReports] Effective baseDir determined:",t);let n=a().join(t,"pulse-report","history");console.log("[ACTIONS getRawHistoricalReports] Attempting to read history directory:",n);try{let e=(await o().readdir(n)).filter(e=>e.startsWith("trend-")&&e.endsWith(".json"));console.log(`[ACTIONS getRawHistoricalReports] Found ${e.length} trend files in ${n}`);let r=[];for(let t of e){let e=a().join(n,t);try{let n=await o().readFile(e,"utf-8"),s=JSON.parse(n);s.run&&s.results?(void 0===s.run.flakinessRate&&(s.run.flakinessRate=0),r.push(s)):console.warn(`[ACTIONS getRawHistoricalReports] Skipping invalid historical report file (missing run or results): ${t}`)}catch(e){console.error(`[ACTIONS getRawHistoricalReports] Error reading or parsing historical file ${t}:`,e)}}return r.sort((e,r)=>new Date(e.run.timestamp).getTime()-new Date(r.run.timestamp).getTime()),console.log("[ACTIONS getRawHistoricalReports] ------------- END (SUCCESS) -------------"),r}catch(e){return console.error(`[ACTIONS getRawHistoricalReports] Error accessing or reading historical trends directory ${n}:`,e.message),e instanceof Error&&"ENOENT"===e.code&&console.warn(`[ACTIONS getRawHistoricalReports] History directory not found at ${n}. This is normal if no historical reports exist yet.`),console.log("[ACTIONS getRawHistoricalReports] ------------- END (ERROR) -------------"),[]}}async function c(){try{let e=await l();if(0===e.length)return console.log("[ACTIONS getFlakyTestsAnalysis] No historical reports found or an error occurred in getRawHistoricalReports. Returning empty flaky tests."),{success:!0,flakyTests:[]};let r=new Map;for(let t of e){if(!t.results){console.warn("[ACTIONS getFlakyTestsAnalysis] Skipping a report in history due to missing .results property.");continue}for(let e of t.results)r.has(e.id)||r.set(e.id,{name:e.name,suiteName:e.suiteName,occurrences:[]}),r.get(e.id).occurrences.push({runTimestamp:t.run.timestamp,status:e.status})}let t=[];for(let[e,n]of r.entries()){let r=new Set(n.occurrences.map(e=>e.status)),s=r.has("passed"),o=r.has("failed")||r.has("timedOut");if(s&&o){let r=0,s=0,o=0,i=0;n.occurrences.forEach(e=>{"passed"===e.status?r++:"failed"===e.status||"timedOut"===e.status?s++:"skipped"===e.status?o++:"pending"===e.status&&i++});let a=n.occurrences.sort((e,r)=>new Date(e.runTimestamp).getTime()-new Date(r.runTimestamp).getTime());t.push({id:e,name:n.name,suiteName:n.suiteName,occurrences:a,passedCount:r,failedCount:s,skippedCount:o,pendingCount:i,totalRuns:n.occurrences.length,firstSeen:a[0]?.runTimestamp||"",lastSeen:a[a.length-1]?.runTimestamp||""})}}return t.sort((e,r)=>r.failedCount/r.totalRuns-e.failedCount/e.totalRuns||r.totalRuns-e.totalRuns),{success:!0,flakyTests:t}}catch(e){return console.error("[ACTIONS getFlakyTestsAnalysis] Error analyzing flaky tests:",e),{success:!1,error:e instanceof Error?e.message:"An unknown error occurred during flaky test analysis."}}}(0,t(17478).D)([l,c]),(0,n.A)(l,"0011e9424474535028c01a45dc1bf60dfbb2f5cfe3",null),(0,n.A)(c,"00361f6e51232960768351a17ab2be16bd5923168d",null)},67218:(e,r,t)=>{"use strict";Object.defineProperty(r,"A",{enumerable:!0,get:function(){return n.registerServerReference}});let n=t(12907)},74722:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(r,{normalizeAppPath:function(){return o},normalizeRscURL:function(){return i}});let n=t(85531),s=t(35499);function o(e){return(0,n.ensureLeadingSlash)(e.split("/").reduce((e,r,t,n)=>!r||(0,s.isGroupSegment)(r)||"@"===r[0]||("page"===r||"route"===r)&&t===n.length-1?e:e+"/"+r,""))}function i(e){return e.replace(/\.rsc($|\?)/,"$1")}},78335:()=>{},79130:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(r,{decryptActionBoundArgs:function(){return y},encryptActionBoundArgs:function(){return g}}),t(34822);let n=t(12907),s=t(52513),o=t(77855),i=t(82602),a=t(63033),l=t(84971),c=function(e){return e&&e.__esModule?e:{default:e}}(t(61120)),u=new TextEncoder,d=new TextDecoder;async function p(e,r){let t=await (0,i.getActionEncryptionKey)();if(void 0===t)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let n=atob(r),s=n.slice(0,16),o=n.slice(16),a=d.decode(await (0,i.decrypt)(t,(0,i.stringToUint8Array)(s),(0,i.stringToUint8Array)(o)));if(!a.startsWith(e))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return a.slice(e.length)}async function f(e,r){let t=await (0,i.getActionEncryptionKey)();if(void 0===t)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let n=new Uint8Array(16);a.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(n));let s=(0,i.arrayBufferToString)(n.buffer),o=await (0,i.encrypt)(t,n,u.encode(e+r));return btoa(s+(0,i.arrayBufferToString)(o))}let g=c.default.cache(async function e(r,...t){let{clientModules:s}=(0,i.getClientReferenceManifestForRsc)(),c=Error();Error.captureStackTrace(c,e);let u=!1,d=a.workUnitAsyncStorage.getStore(),p=(null==d?void 0:d.type)==="prerender"?(0,l.createHangingInputAbortSignal)(d):void 0,g=await (0,o.streamToString)((0,n.renderToReadableStream)(t,s,{signal:p,onError(e){(null==p||!p.aborted)&&!u&&(u=!0,c.message=e instanceof Error?e.message:String(e))}}),p);if(u)throw c;if(!d)return f(r,g);let y=(0,a.getPrerenderResumeDataCache)(d),R=(0,a.getRenderResumeDataCache)(d),m=r+g,h=(null==y?void 0:y.encryptedBoundArgs.get(m))??(null==R?void 0:R.encryptedBoundArgs.get(m));if(h)return h;let w="prerender"===d.type?d.cacheSignal:void 0;null==w||w.beginRead();let E=await f(r,g);return null==w||w.endRead(),null==y||y.encryptedBoundArgs.set(m,E),E});async function y(e,r){let t;let n=await r,o=a.workUnitAsyncStorage.getStore();if(o){let r="prerender"===o.type?o.cacheSignal:void 0,s=(0,a.getPrerenderResumeDataCache)(o),i=(0,a.getRenderResumeDataCache)(o);(t=(null==s?void 0:s.decryptedBoundArgs.get(n))??(null==i?void 0:i.decryptedBoundArgs.get(n)))||(null==r||r.beginRead(),t=await p(e,n),null==r||r.endRead(),null==s||s.decryptedBoundArgs.set(n,t))}else t=await p(e,n);let{edgeRscModuleMapping:l,rscModuleMapping:c}=(0,i.getClientReferenceManifestForRsc)();return await (0,s.createFromReadableStream)(new ReadableStream({start(e){e.enqueue(u.encode(t)),(null==o?void 0:o.type)==="prerender"?o.renderSignal.aborted?e.close():o.renderSignal.addEventListener("abort",()=>e.close(),{once:!0}):e.close()}}),{serverConsumerManifest:{moduleLoading:null,moduleMap:c,serverModuleMap:(0,i.getServerModuleMap)()}})}},79748:e=>{"use strict";e.exports=require("fs/promises")},82602:(e,r,t)=>{"use strict";let n;Object.defineProperty(r,"__esModule",{value:!0}),!function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(r,{arrayBufferToString:function(){return a},decrypt:function(){return u},encrypt:function(){return c},getActionEncryptionKey:function(){return y},getClientReferenceManifestForRsc:function(){return g},getServerModuleMap:function(){return f},setReferenceManifestsSingleton:function(){return p},stringToUint8Array:function(){return l}});let s=t(71617),o=t(74722),i=t(29294);function a(e){let r=new Uint8Array(e),t=r.byteLength;if(t<65535)return String.fromCharCode.apply(null,r);let n="";for(let e=0;e<t;e++)n+=String.fromCharCode(r[e]);return n}function l(e){let r=e.length,t=new Uint8Array(r);for(let n=0;n<r;n++)t[n]=e.charCodeAt(n);return t}function c(e,r,t){return crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,t)}function u(e,r,t){return crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,t)}let d=Symbol.for("next.server.action-manifests");function p({page:e,clientReferenceManifest:r,serverActionsManifest:t,serverModuleMap:n}){var s;let i=null==(s=globalThis[d])?void 0:s.clientReferenceManifestsPerPage;globalThis[d]={clientReferenceManifestsPerPage:{...i,[(0,o.normalizeAppPath)(e)]:r},serverActionsManifest:t,serverModuleMap:n}}function f(){let e=globalThis[d];if(!e)throw Object.defineProperty(new s.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});return e.serverModuleMap}function g(){let e=globalThis[d];if(!e)throw Object.defineProperty(new s.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});let{clientReferenceManifestsPerPage:r}=e,t=i.workAsyncStorage.getStore();if(!t)return function(e){let r=Object.values(e),t={clientModules:{},edgeRscModuleMapping:{},rscModuleMapping:{}};for(let e of r)t.clientModules={...t.clientModules,...e.clientModules},t.edgeRscModuleMapping={...t.edgeRscModuleMapping,...e.edgeRscModuleMapping},t.rscModuleMapping={...t.rscModuleMapping,...e.rscModuleMapping};return t}(r);let n=r[t.route];if(!n)throw Object.defineProperty(new s.InvariantError(`Missing Client Reference Manifest for ${t.route}.`),"__NEXT_ERROR_CODE",{value:"E570",enumerable:!1,configurable:!0});return n}async function y(){if(n)return n;let e=globalThis[d];if(!e)throw Object.defineProperty(new s.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});let r=process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY||e.serverActionsManifest.encryptionKey;if(void 0===r)throw Object.defineProperty(new s.InvariantError("Missing encryption key for Server Actions"),"__NEXT_ERROR_CODE",{value:"E571",enumerable:!1,configurable:!0});return n=await crypto.subtle.importKey("raw",l(atob(r)),"AES-GCM",!0,["encrypt","decrypt"])}},85531:(e,r)=>{"use strict";function t(e){return e.startsWith("/")?e:"/"+e}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ensureLeadingSlash",{enumerable:!0,get:function(){return t}})},92259:(e,r,t)=>{"use strict";t.r(r),t.d(r,{"0011e9424474535028c01a45dc1bf60dfbb2f5cfe3":()=>n.w,"00361f6e51232960768351a17ab2be16bd5923168d":()=>n.h});var n=t(66628)},96487:()=>{}};var r=require("../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),n=r.X(0,[447,724,580],()=>t(39794));module.exports=n})();