1 line
No EOL
6.4 KiB
JavaScript
1 line
No EOL
6.4 KiB
JavaScript
import{D as e,_ as t,b as n,g as r,i,k as a,n as o,o as s,r as c,s as l,t as u,v as d}from"./assets/defaultSettingsView-B-dXF5JN.js";import"./assets/urlMatch-L3liM589.js";var f=a(e(),1),p=a(d(),1),m=r(),h=()=>{let[e,n]=f.useState(!1),[r,a]=f.useState(),[d,p]=f.useState(),[h,_]=f.useState(g),[v,y]=f.useState({done:0,total:0}),[b,x]=f.useState(!1),[S,C]=f.useState(null),[w,T]=f.useState(null),[E,D]=f.useState(!1),O=f.useCallback(e=>{let t=new URL(window.location.href);if(!e.length)return;let n=e.item(0),r=URL.createObjectURL(n);t.searchParams.append(`trace`,r);let i=t.toString();window.history.pushState({},``,i),a(r),p(n.name),x(!1),C(null)},[]);f.useEffect(()=>{let e=async e=>{if(!e.clipboardData?.files.length)return;let t=[`application/zip`,`application/x-zip-compressed`];for(let n of e.clipboardData.files)if(!t.includes(n.type))return;e.preventDefault(),O(e.clipboardData.files)};return document.addEventListener(`paste`,e),()=>document.removeEventListener(`paste`,e)}),f.useEffect(()=>{let e=e=>{let{method:t,params:n}=e.data;if(t!==`load`||!(n?.trace instanceof Blob))return;let r=new File([n.trace],`trace.zip`,{type:`application/zip`}),i=new DataTransfer;i.items.add(r),O(i.files)};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)});let k=f.useCallback(e=>{e.preventDefault(),O(e.dataTransfer.files)},[O]),A=f.useCallback(e=>{e.preventDefault(),e.target.files&&O(e.target.files)},[O]);f.useEffect(()=>{let e=new URL(window.location.href).searchParams,t=e.get(`trace`);if(n(e.has(`isServer`)),t?.startsWith(`file:`)){T(t||null);return}if(e.has(`isServer`)){let e=new URLSearchParams(window.location.search).get(`ws`),t=new URL(`../${e}`,window.location.toString());t.protocol=window.location.protocol===`https:`?`wss:`:`ws:`;let n=new o(new c(t));n.onLoadTraceRequested(async e=>{a(e.traceUrl),x(!1),C(null)}),n.initialize({}).catch(()=>{})}else t&&!t.startsWith(`blob:`)&&a(t)},[]);let j=f.useCallback(async e=>{let n=new URLSearchParams;n.set(`trace`,e);let r=await fetch(`contexts?${n.toString()}`);if(!r.ok){let{error:e}=await r.json();return C(e),e}let i=new t(e,await r.json());y({done:0,total:0}),C(null),_(i)},[]);f.useEffect(()=>{(async()=>{if(!r){_(g);return}let t=e=>{e.data.method===`progress`&&y(e.data.params)};try{navigator.serviceWorker.addEventListener(`message`,t),y({done:0,total:1});let n=await j(r);n?.includes(`please grant permission for Local Network Access`)&&(await fetch(r,{method:`HEAD`,headers:{"x-pw-serviceworker":`skip`}}),n=await j(r)),n&&(e||a(void 0))}finally{navigator.serviceWorker.removeEventListener(`message`,t)}})()},[e,r,d,j]);let M=v.done!==v.total&&v.total!==0&&!S;f.useEffect(()=>{if(M){let e=setTimeout(()=>{D(!0)},200);return()=>clearTimeout(e)}else D(!1)},[M]);let N=!!(!e&&!b&&!w&&(!r||S));return(0,m.jsxs)(`div`,{className:`vbox workbench-loader`,onDragOver:e=>{e.preventDefault(),e.dataTransfer.types.includes(`Files`)&&x(!0)},children:[(0,m.jsxs)(`div`,{className:`hbox workbench-loader-header`,...N?{inert:!0}:{},children:[(0,m.jsx)(`div`,{className:`logo`,children:(0,m.jsx)(`img`,{src:`playwright-logo.svg`,alt:`Playwright logo`})}),(0,m.jsx)(`div`,{className:`product`,children:`Playwright`}),h.title&&(0,m.jsx)(`div`,{className:`title`,children:h.title}),(0,m.jsx)(`div`,{className:`spacer`}),(0,m.jsx)(s,{icon:`settings-gear`,title:`Settings`,dialogDataTestId:`settings-toolbar-dialog`,children:(0,m.jsx)(u,{location:`trace-viewer`})})]}),(0,m.jsx)(i,{model:h,inert:N}),w&&(0,m.jsxs)(`div`,{className:`drop-target`,children:[(0,m.jsx)(`div`,{children:`Trace Viewer uses Service Workers to show traces. To view trace:`}),(0,m.jsxs)(`div`,{style:{paddingTop:20},children:[(0,m.jsxs)(`div`,{children:[`1. Click `,(0,m.jsx)(`a`,{href:w,children:`here`}),` to put your trace into the download shelf`]}),(0,m.jsxs)(`div`,{children:[`2. Go to `,(0,m.jsx)(`a`,{href:`https://trace.playwright.dev`,children:`trace.playwright.dev`})]}),(0,m.jsx)(`div`,{children:`3. Drop the trace from the download shelf into the page`})]})]}),(0,m.jsx)(l,{open:E,isModal:!0,className:`progress-dialog`,children:(0,m.jsxs)(`div`,{className:`progress-content`,children:[(0,m.jsx)(`div`,{className:`title`,role:`heading`,"aria-level":1,children:`Loading Playwright Trace...`}),(0,m.jsx)(`div`,{className:`progress-wrapper`,children:(0,m.jsx)(`div`,{className:`inner-progress`,style:{width:v.total?100*v.done/v.total+`%`:0}})})]})}),N&&(0,m.jsxs)(`div`,{className:`drop-target`,children:[(0,m.jsx)(`div`,{className:`processing-error`,role:`alert`,children:S}),(0,m.jsx)(`div`,{className:`title`,role:`heading`,"aria-level":1,children:`Drop Playwright Trace to load`}),(0,m.jsx)(`div`,{children:`or`}),(0,m.jsx)(`button`,{onClick:()=>{let e=document.createElement(`input`);e.type=`file`,e.click(),e.addEventListener(`change`,e=>A(e))},type:`button`,children:`Select file`}),(0,m.jsx)(`div`,{className:`info`,children:`Playwright Trace Viewer is a Progressive Web App, it does not send your trace anywhere, it opens it locally.`}),(0,m.jsxs)(`div`,{className:`version`,children:[`Playwright v`,`1.62.1`]})]}),e&&!r&&(0,m.jsx)(`div`,{className:`drop-target`,children:(0,m.jsx)(`div`,{className:`title`,children:`Select test to see the trace`})}),b&&(0,m.jsx)(`div`,{className:`drop-target`,onDragLeave:()=>{x(!1)},onDrop:e=>k(e),children:(0,m.jsx)(`div`,{className:`title`,children:`Release to analyse the Playwright Trace`})})]})},g=new t(``,[]),_=({traceJson:e})=>{let[n,r]=f.useState(void 0),[a,o]=f.useState(0),s=f.useRef(null);return f.useEffect(()=>(s.current&&clearTimeout(s.current),s.current=setTimeout(async()=>{try{r(await v(e))}catch{r(new t(``,[]))}finally{o(a+1)}},500),()=>{s.current&&clearTimeout(s.current)}),[e,a]),(0,m.jsx)(i,{isLive:!0,model:n})};async function v(e){let n=new URLSearchParams;return n.set(`trace`,e),new t(e,await(await fetch(`contexts?${n.toString()}`)).json())}(async()=>{let e=new URLSearchParams(window.location.search);if(n(),window.location.protocol!==`file:`){if(e.get(`isUnderTest`)===`true`&&await new Promise(e=>setTimeout(e,1e3)),!navigator.serviceWorker)throw Error(`Service workers are not supported.\nMake sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register(`sw.bundle.js`),navigator.serviceWorker.controller||await new Promise(e=>{navigator.serviceWorker.oncontrollerchange=()=>e()}),setInterval(function(){fetch(`ping`)},1e4)}let t=e.get(`trace`),r=t?.endsWith(`.json`)?(0,m.jsx)(_,{traceJson:t}):(0,m.jsx)(h,{});p.createRoot(document.querySelector(`#root`)).render(r)})(); |