playwright-core 1.58.0-alpha-2025-12-05 → 1.58.0-alpha-2025-12-07

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.
@@ -1,2 +1,2 @@
1
- import{T as m,r,a as F,W as M,j as e,D as C,b as I,c as k,d as z,e as O,f as V}from"./assets/defaultSettingsView-CFbbG_bM.js";const $=()=>{const[o,i]=r.useState(!1),[c,l]=r.useState(),[h,u]=r.useState(),[p,L]=r.useState(N),[g,x]=r.useState({done:0,total:0}),[b,f]=r.useState(!1),[j,S]=r.useState(null),[y,P]=r.useState(null),[R,E]=r.useState(!1),w=r.useCallback(t=>{const s=new URL(window.location.href);if(!t.length)return;const n=t.item(0),a=URL.createObjectURL(n);s.searchParams.append("trace",a);const d=s.toString();window.history.pushState({},"",d),l(a),u(n.name),f(!1),S(null)},[]);r.useEffect(()=>{const t=async s=>{var n;if((n=s.clipboardData)!=null&&n.files.length){for(const a of s.clipboardData.files)if(a.type!=="application/zip")return;s.preventDefault(),w(s.clipboardData.files)}};return document.addEventListener("paste",t),()=>document.removeEventListener("paste",t)}),r.useEffect(()=>{const t=s=>{const{method:n,params:a}=s.data;if(n!=="load"||!((a==null?void 0:a.trace)instanceof Blob))return;const d=new File([a.trace],"trace.zip",{type:"application/zip"}),v=new DataTransfer;v.items.add(d),w(v.files)};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)});const U=r.useCallback(t=>{t.preventDefault(),w(t.dataTransfer.files)},[w]),W=r.useCallback(t=>{t.preventDefault(),t.target.files&&w(t.target.files)},[w]);r.useEffect(()=>{const t=new URL(window.location.href).searchParams,s=t.get("trace");if(i(t.has("isServer")),s!=null&&s.startsWith("file:")){P(s||null);return}if(t.has("isServer")){const n=new URLSearchParams(window.location.search).get("ws"),a=new URL(`../${n}`,window.location.toString());a.protocol=window.location.protocol==="https:"?"wss:":"ws:";const d=new F(new M(a));d.onLoadTraceRequested(async v=>{l(v.traceUrl),f(!1),S(null)}),d.initialize({}).catch(()=>{})}else s&&!s.startsWith("blob:")&&l(s)},[]),r.useEffect(()=>{(async()=>{if(!c){L(N);return}const t=s=>{s.data.method==="progress"&&x(s.data.params)};try{navigator.serviceWorker.addEventListener("message",t),x({done:0,total:1});const s=new URLSearchParams;s.set("trace",c);const n=await fetch(`contexts?${s.toString()}`);if(!n.ok){o||l(void 0),S((await n.json()).error);return}const a=await n.json(),d=new m(c,a);x({done:0,total:0}),L(d)}finally{navigator.serviceWorker.removeEventListener("message",t)}})()},[o,c,h]);const D=g.done!==g.total&&g.total!==0&&!j;r.useEffect(()=>{if(D){const t=setTimeout(()=>{E(!0)},200);return()=>clearTimeout(t)}else E(!1)},[D]);const T=!!(!o&&!b&&!y&&(!c||j));return e.jsxs("div",{className:"vbox workbench-loader",onDragOver:t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&f(!0)},children:[e.jsxs("div",{className:"hbox header",...T?{inert:!0}:{},children:[e.jsx("div",{className:"logo",children:e.jsx("img",{src:"playwright-logo.svg",alt:"Playwright logo"})}),e.jsx("div",{className:"product",children:"Playwright"}),p.title&&e.jsx("div",{className:"title",children:p.title}),e.jsx("div",{className:"spacer"}),e.jsx(C,{icon:"settings-gear",title:"Settings",dialogDataTestId:"settings-toolbar-dialog",children:e.jsx(I,{location:"trace-viewer"})})]}),e.jsx(k,{model:p,inert:T}),y&&e.jsxs("div",{className:"drop-target",children:[e.jsx("div",{children:"Trace Viewer uses Service Workers to show traces. To view trace:"}),e.jsxs("div",{style:{paddingTop:20},children:[e.jsxs("div",{children:["1. Click ",e.jsx("a",{href:y,children:"here"})," to put your trace into the download shelf"]}),e.jsxs("div",{children:["2. Go to ",e.jsx("a",{href:"https://trace.playwright.dev",children:"trace.playwright.dev"})]}),e.jsx("div",{children:"3. Drop the trace from the download shelf into the page"})]})]}),e.jsx(z,{open:R,isModal:!0,className:"progress-dialog",children:e.jsxs("div",{className:"progress-content",children:[e.jsx("div",{className:"title",role:"heading","aria-level":1,children:"Loading Playwright Trace..."}),e.jsx("div",{className:"progress-wrapper",children:e.jsx("div",{className:"inner-progress",style:{width:g.total?100*g.done/g.total+"%":0}})})]})}),T&&e.jsxs("div",{className:"drop-target",children:[e.jsx("div",{className:"processing-error",role:"alert",children:j}),e.jsx("div",{className:"title",role:"heading","aria-level":1,children:"Drop Playwright Trace to load"}),e.jsx("div",{children:"or"}),e.jsx("button",{onClick:()=>{const t=document.createElement("input");t.type="file",t.click(),t.addEventListener("change",s=>W(s))},type:"button",children:"Select file"}),e.jsx("div",{className:"info",children:"Playwright Trace Viewer is a Progressive Web App, it does not send your trace anywhere, it opens it locally."}),e.jsxs("div",{className:"version",children:["Playwright v","1.58.0-next"]})]}),o&&!c&&e.jsx("div",{className:"drop-target",children:e.jsx("div",{className:"title",children:"Select test to see the trace"})}),b&&e.jsx("div",{className:"drop-target",onDragLeave:()=>{f(!1)},onDrop:t=>U(t),children:e.jsx("div",{className:"title",children:"Release to analyse the Playwright Trace"})})]})},N=new m("",[]),q=({traceJson:o})=>{const[i,c]=r.useState(void 0),[l,h]=r.useState(0),u=r.useRef(null);return r.useEffect(()=>(u.current&&clearTimeout(u.current),u.current=setTimeout(async()=>{try{const p=await A(o);c(p)}catch{const p=new m("",[]);c(p)}finally{h(l+1)}},500),()=>{u.current&&clearTimeout(u.current)}),[o,l]),e.jsx(k,{isLive:!0,model:i})};async function A(o){const i=new URLSearchParams;i.set("trace",o);const l=await(await fetch(`contexts?${i.toString()}`)).json();return new m(o,l)}(async()=>{const o=new URLSearchParams(window.location.search);if(O(),window.location.protocol!=="file:"){if(o.get("isUnderTest")==="true"&&await new Promise(h=>setTimeout(h,1e3)),!navigator.serviceWorker)throw new Error(`Service workers are not supported.
1
+ import{T as m,r,a as F,W as M,j as e,D as C,b as I,c as k,d as z,e as O,f as V}from"./assets/defaultSettingsView-C7iHYOsw.js";const $=()=>{const[o,i]=r.useState(!1),[c,l]=r.useState(),[h,u]=r.useState(),[p,L]=r.useState(N),[g,x]=r.useState({done:0,total:0}),[b,f]=r.useState(!1),[j,S]=r.useState(null),[y,P]=r.useState(null),[R,E]=r.useState(!1),w=r.useCallback(t=>{const s=new URL(window.location.href);if(!t.length)return;const n=t.item(0),a=URL.createObjectURL(n);s.searchParams.append("trace",a);const d=s.toString();window.history.pushState({},"",d),l(a),u(n.name),f(!1),S(null)},[]);r.useEffect(()=>{const t=async s=>{var n;if((n=s.clipboardData)!=null&&n.files.length){for(const a of s.clipboardData.files)if(a.type!=="application/zip")return;s.preventDefault(),w(s.clipboardData.files)}};return document.addEventListener("paste",t),()=>document.removeEventListener("paste",t)}),r.useEffect(()=>{const t=s=>{const{method:n,params:a}=s.data;if(n!=="load"||!((a==null?void 0:a.trace)instanceof Blob))return;const d=new File([a.trace],"trace.zip",{type:"application/zip"}),v=new DataTransfer;v.items.add(d),w(v.files)};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)});const U=r.useCallback(t=>{t.preventDefault(),w(t.dataTransfer.files)},[w]),W=r.useCallback(t=>{t.preventDefault(),t.target.files&&w(t.target.files)},[w]);r.useEffect(()=>{const t=new URL(window.location.href).searchParams,s=t.get("trace");if(i(t.has("isServer")),s!=null&&s.startsWith("file:")){P(s||null);return}if(t.has("isServer")){const n=new URLSearchParams(window.location.search).get("ws"),a=new URL(`../${n}`,window.location.toString());a.protocol=window.location.protocol==="https:"?"wss:":"ws:";const d=new F(new M(a));d.onLoadTraceRequested(async v=>{l(v.traceUrl),f(!1),S(null)}),d.initialize({}).catch(()=>{})}else s&&!s.startsWith("blob:")&&l(s)},[]),r.useEffect(()=>{(async()=>{if(!c){L(N);return}const t=s=>{s.data.method==="progress"&&x(s.data.params)};try{navigator.serviceWorker.addEventListener("message",t),x({done:0,total:1});const s=new URLSearchParams;s.set("trace",c);const n=await fetch(`contexts?${s.toString()}`);if(!n.ok){o||l(void 0),S((await n.json()).error);return}const a=await n.json(),d=new m(c,a);x({done:0,total:0}),L(d)}finally{navigator.serviceWorker.removeEventListener("message",t)}})()},[o,c,h]);const D=g.done!==g.total&&g.total!==0&&!j;r.useEffect(()=>{if(D){const t=setTimeout(()=>{E(!0)},200);return()=>clearTimeout(t)}else E(!1)},[D]);const T=!!(!o&&!b&&!y&&(!c||j));return e.jsxs("div",{className:"vbox workbench-loader",onDragOver:t=>{t.preventDefault(),t.dataTransfer.types.includes("Files")&&f(!0)},children:[e.jsxs("div",{className:"hbox header",...T?{inert:!0}:{},children:[e.jsx("div",{className:"logo",children:e.jsx("img",{src:"playwright-logo.svg",alt:"Playwright logo"})}),e.jsx("div",{className:"product",children:"Playwright"}),p.title&&e.jsx("div",{className:"title",children:p.title}),e.jsx("div",{className:"spacer"}),e.jsx(C,{icon:"settings-gear",title:"Settings",dialogDataTestId:"settings-toolbar-dialog",children:e.jsx(I,{location:"trace-viewer"})})]}),e.jsx(k,{model:p,inert:T}),y&&e.jsxs("div",{className:"drop-target",children:[e.jsx("div",{children:"Trace Viewer uses Service Workers to show traces. To view trace:"}),e.jsxs("div",{style:{paddingTop:20},children:[e.jsxs("div",{children:["1. Click ",e.jsx("a",{href:y,children:"here"})," to put your trace into the download shelf"]}),e.jsxs("div",{children:["2. Go to ",e.jsx("a",{href:"https://trace.playwright.dev",children:"trace.playwright.dev"})]}),e.jsx("div",{children:"3. Drop the trace from the download shelf into the page"})]})]}),e.jsx(z,{open:R,isModal:!0,className:"progress-dialog",children:e.jsxs("div",{className:"progress-content",children:[e.jsx("div",{className:"title",role:"heading","aria-level":1,children:"Loading Playwright Trace..."}),e.jsx("div",{className:"progress-wrapper",children:e.jsx("div",{className:"inner-progress",style:{width:g.total?100*g.done/g.total+"%":0}})})]})}),T&&e.jsxs("div",{className:"drop-target",children:[e.jsx("div",{className:"processing-error",role:"alert",children:j}),e.jsx("div",{className:"title",role:"heading","aria-level":1,children:"Drop Playwright Trace to load"}),e.jsx("div",{children:"or"}),e.jsx("button",{onClick:()=>{const t=document.createElement("input");t.type="file",t.click(),t.addEventListener("change",s=>W(s))},type:"button",children:"Select file"}),e.jsx("div",{className:"info",children:"Playwright Trace Viewer is a Progressive Web App, it does not send your trace anywhere, it opens it locally."}),e.jsxs("div",{className:"version",children:["Playwright v","1.58.0-next"]})]}),o&&!c&&e.jsx("div",{className:"drop-target",children:e.jsx("div",{className:"title",children:"Select test to see the trace"})}),b&&e.jsx("div",{className:"drop-target",onDragLeave:()=>{f(!1)},onDrop:t=>U(t),children:e.jsx("div",{className:"title",children:"Release to analyse the Playwright Trace"})})]})},N=new m("",[]),q=({traceJson:o})=>{const[i,c]=r.useState(void 0),[l,h]=r.useState(0),u=r.useRef(null);return r.useEffect(()=>(u.current&&clearTimeout(u.current),u.current=setTimeout(async()=>{try{const p=await A(o);c(p)}catch{const p=new m("",[]);c(p)}finally{h(l+1)}},500),()=>{u.current&&clearTimeout(u.current)}),[o,l]),e.jsx(k,{isLive:!0,model:i})};async function A(o){const i=new URLSearchParams;i.set("trace",o);const l=await(await fetch(`contexts?${i.toString()}`)).json();return new m(o,l)}(async()=>{const o=new URLSearchParams(window.location.search);if(O(),window.location.protocol!=="file:"){if(o.get("isUnderTest")==="true"&&await new Promise(h=>setTimeout(h,1e3)),!navigator.serviceWorker)throw new Error(`Service workers are not supported.
2
2
  Make sure to serve the Trace Viewer (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(h=>{navigator.serviceWorker.oncontrollerchange=()=>h()}),setInterval(function(){fetch("ping")},1e4)}const i=o.get("trace"),l=(i==null?void 0:i.endsWith(".json"))?e.jsx(q,{traceJson:i}):e.jsx($,{});V.createRoot(document.querySelector("#root")).render(l)})();
@@ -7,8 +7,8 @@
7
7
  <link rel="icon" href="./playwright-logo.svg" type="image/svg+xml">
8
8
  <link rel="manifest" href="./manifest.webmanifest">
9
9
  <title>Playwright Trace Viewer</title>
10
- <script type="module" crossorigin src="./index.B_hycly9.js"></script>
11
- <link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-CFbbG_bM.js">
10
+ <script type="module" crossorigin src="./index.C5w1selH.js"></script>
11
+ <link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-C7iHYOsw.js">
12
12
  <link rel="stylesheet" crossorigin href="./defaultSettingsView.CpI7RarT.css">
13
13
  <link rel="stylesheet" crossorigin href="./index.C4Y3Aw8n.css">
14
14
  </head>
@@ -0,0 +1,5 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./assets/xtermModule-CsJ4vdCR.js","./xtermModule.DYP7pi_n.css"])))=>i.map(i=>d[i]);
2
+ import{u as zt,r as H,g as Kt,_ as Vt,h as $t,i as Ht,j as n,R as u,E as qt,s as Et,k as mt,l as Yt,t as Qt,m as Xt,n as q,o as F,T as It,c as Jt,p as at,a as Zt,W as Gt,S as te,q as ee,b as se,e as ie,f as oe}from"./assets/defaultSettingsView-C7iHYOsw.js";var ne={};class pt{constructor(t,e={}){this.isListing=!1,this._tests=new Map,this._rootSuite=new Z("","root"),this._options=e,this._reporter=t}reset(){this._rootSuite._entries=[],this._tests.clear()}dispatch(t){const{method:e,params:s}=t;if(e==="onConfigure"){this._onConfigure(s.config);return}if(e==="onProject"){this._onProject(s.project);return}if(e==="onBegin"){this._onBegin();return}if(e==="onTestBegin"){this._onTestBegin(s.testId,s.result);return}if(e==="onTestEnd"){this._onTestEnd(s.test,s.result);return}if(e==="onStepBegin"){this._onStepBegin(s.testId,s.resultId,s.step);return}if(e==="onAttach"){this._onAttach(s.testId,s.resultId,s.attachments);return}if(e==="onStepEnd"){this._onStepEnd(s.testId,s.resultId,s.step);return}if(e==="onError"){this._onError(s.error);return}if(e==="onStdIO"){this._onStdIO(s.type,s.testId,s.resultId,s.data,s.isBase64);return}if(e==="onEnd")return this._onEnd(s.result);if(e==="onExit")return this._onExit()}_onConfigure(t){var e,s;this._rootDir=t.rootDir,this._config=this._parseConfig(t),(s=(e=this._reporter).onConfigure)==null||s.call(e,this._config)}_onProject(t){let e=this._options.mergeProjects?this._rootSuite.suites.find(s=>s.project().name===t.name):void 0;e||(e=new Z(t.name,"project"),this._rootSuite._addSuite(e)),e._project=this._parseProject(t);for(const s of t.suites)this._mergeSuiteInto(s,e)}_onBegin(){var t,e;(e=(t=this._reporter).onBegin)==null||e.call(t,this._rootSuite)}_onTestBegin(t,e){var c,r;const s=this._tests.get(t);this._options.clearPreviousResultsWhenTestBegins&&(s.results=[]);const o=s._createTestResult(e.id);o.retry=e.retry,o.workerIndex=e.workerIndex,o.parallelIndex=e.parallelIndex,o.setStartTimeNumber(e.startTime),(r=(c=this._reporter).onTestBegin)==null||r.call(c,s,o)}_onTestEnd(t,e){var c,r,m;const s=this._tests.get(t.testId);s.timeout=t.timeout,s.expectedStatus=t.expectedStatus;const o=s.results.find(d=>d._id===e.id);o.duration=e.duration,o.status=e.status,o.errors=e.errors,o.error=(c=o.errors)==null?void 0:c[0],e.attachments&&(o.attachments=this._parseAttachments(e.attachments)),e.annotations&&(this._absoluteAnnotationLocationsInplace(e.annotations),o.annotations=e.annotations,s.annotations=e.annotations),(m=(r=this._reporter).onTestEnd)==null||m.call(r,s,o),o._stepMap=new Map}_onStepBegin(t,e,s){var f,a;const o=this._tests.get(t),c=o.results.find(w=>w._id===e),r=s.parentStepId?c._stepMap.get(s.parentStepId):void 0,m=this._absoluteLocation(s.location),d=new ae(s,r,m,c);r?r.steps.push(d):c.steps.push(d),c._stepMap.set(s.id,d),(a=(f=this._reporter).onStepBegin)==null||a.call(f,o,c,d)}_onStepEnd(t,e,s){var m,d;const o=this._tests.get(t),c=o.results.find(f=>f._id===e),r=c._stepMap.get(s.id);r._endPayload=s,r.duration=s.duration,r.error=s.error,(d=(m=this._reporter).onStepEnd)==null||d.call(m,o,c,r)}_onAttach(t,e,s){this._tests.get(t).results.find(r=>r._id===e).attachments.push(...s.map(r=>({name:r.name,contentType:r.contentType,path:r.path,body:r.base64&&globalThis.Buffer?Buffer.from(r.base64,"base64"):void 0})))}_onError(t){var e,s;(s=(e=this._reporter).onError)==null||s.call(e,t)}_onStdIO(t,e,s,o,c){var f,a,w,S;const r=c?globalThis.Buffer?Buffer.from(o,"base64"):atob(o):o,m=e?this._tests.get(e):void 0,d=m&&s?m.results.find(l=>l._id===s):void 0;t==="stdout"?(d==null||d.stdout.push(r),(a=(f=this._reporter).onStdOut)==null||a.call(f,r,m,d)):(d==null||d.stderr.push(r),(S=(w=this._reporter).onStdErr)==null||S.call(w,r,m,d))}async _onEnd(t){var e,s;await((s=(e=this._reporter).onEnd)==null?void 0:s.call(e,{status:t.status,startTime:new Date(t.startTime),duration:t.duration}))}_onExit(){var t,e;return(e=(t=this._reporter).onExit)==null?void 0:e.call(t)}_parseConfig(t){const e={...ce,...t};return this._options.configOverrides&&(e.configFile=this._options.configOverrides.configFile,e.reportSlowTests=this._options.configOverrides.reportSlowTests,e.quiet=this._options.configOverrides.quiet,e.reporter=[...this._options.configOverrides.reporter]),e}_parseProject(t){return{metadata:t.metadata,name:t.name,outputDir:this._absolutePath(t.outputDir),repeatEach:t.repeatEach,retries:t.retries,testDir:this._absolutePath(t.testDir),testIgnore:lt(t.testIgnore),testMatch:lt(t.testMatch),timeout:t.timeout,grep:lt(t.grep),grepInvert:lt(t.grepInvert),dependencies:t.dependencies,teardown:t.teardown,snapshotDir:this._absolutePath(t.snapshotDir),use:t.use}}_parseAttachments(t){return t.map(e=>({...e,body:e.base64&&globalThis.Buffer?Buffer.from(e.base64,"base64"):void 0}))}_mergeSuiteInto(t,e){let s=e.suites.find(o=>o.title===t.title);s||(s=new Z(t.title,e.type==="project"?"file":"describe"),e._addSuite(s)),s.location=this._absoluteLocation(t.location),t.entries.forEach(o=>{"testId"in o?this._mergeTestInto(o,s):this._mergeSuiteInto(o,s)})}_mergeTestInto(t,e){let s=this._options.mergeTestCases?e.tests.find(o=>o.title===t.title&&o.repeatEachIndex===t.repeatEachIndex):void 0;s||(s=new re(t.testId,t.title,this._absoluteLocation(t.location),t.repeatEachIndex),e._addTest(s),this._tests.set(s.id,s)),this._updateTest(t,s)}_updateTest(t,e){return e.id=t.testId,e.location=this._absoluteLocation(t.location),e.retries=t.retries,e.tags=t.tags??[],e.annotations=t.annotations??[],this._absoluteAnnotationLocationsInplace(e.annotations),e}_absoluteAnnotationLocationsInplace(t){for(const e of t)e.location&&(e.location=this._absoluteLocation(e.location))}_absoluteLocation(t){return t&&{...t,file:this._absolutePath(t.file)}}_absolutePath(t){if(t!==void 0)return this._options.resolvePath?this._options.resolvePath(this._rootDir,t):this._rootDir+"/"+t}}class Z{constructor(t,e){this._entries=[],this._requireFile="",this._parallelMode="none",this.title=t,this._type=e}get type(){return this._type}get suites(){return this._entries.filter(t=>t.type!=="test")}get tests(){return this._entries.filter(t=>t.type==="test")}entries(){return this._entries}allTests(){const t=[],e=s=>{for(const o of s.entries())o.type==="test"?t.push(o):e(o)};return e(this),t}titlePath(){const t=this.parent?this.parent.titlePath():[];return(this.title||this._type!=="describe")&&t.push(this.title),t}project(){var t;return this._project??((t=this.parent)==null?void 0:t.project())}_addTest(t){t.parent=this,this._entries.push(t)}_addSuite(t){t.parent=this,this._entries.push(t)}}class re{constructor(t,e,s,o){this.fn=()=>{},this.results=[],this.type="test",this.expectedStatus="passed",this.timeout=0,this.annotations=[],this.retries=0,this.tags=[],this.repeatEachIndex=0,this.id=t,this.title=e,this.location=s,this.repeatEachIndex=o}titlePath(){const t=this.parent?this.parent.titlePath():[];return t.push(this.title),t}outcome(){return de(this)}ok(){const t=this.outcome();return t==="expected"||t==="flaky"||t==="skipped"}_createTestResult(t){const e=new le(this.results.length,t);return this.results.push(e),e}}class ae{constructor(t,e,s,o){this.duration=-1,this.steps=[],this._startTime=0,this.title=t.title,this.category=t.category,this.location=s,this.parent=e,this._startTime=t.startTime,this._result=o}titlePath(){var e;return[...((e=this.parent)==null?void 0:e.titlePath())||[],this.title]}get startTime(){return new Date(this._startTime)}set startTime(t){this._startTime=+t}get attachments(){var t,e;return((e=(t=this._endPayload)==null?void 0:t.attachments)==null?void 0:e.map(s=>this._result.attachments[s]))??[]}get annotations(){var t;return((t=this._endPayload)==null?void 0:t.annotations)??[]}}class le{constructor(t,e){this.parallelIndex=-1,this.workerIndex=-1,this.duration=-1,this.stdout=[],this.stderr=[],this.attachments=[],this.annotations=[],this.status="skipped",this.steps=[],this.errors=[],this._stepMap=new Map,this._startTime=0,this.retry=t,this._id=e}setStartTimeNumber(t){this._startTime=t}get startTime(){return new Date(this._startTime)}set startTime(t){this._startTime=+t}}const ce={forbidOnly:!1,fullyParallel:!1,globalSetup:null,globalTeardown:null,globalTimeout:0,grep:/.*/,grepInvert:null,maxFailures:0,metadata:{},preserveOutput:"always",projects:[],reporter:[[ne.CI?"dot":"list"]],reportSlowTests:{max:5,threshold:3e5},configFile:"",rootDir:"",quiet:!1,shard:null,tags:[],updateSnapshots:"missing",updateSourceMethod:"patch",version:"",workers:0,webServer:null};function lt(i){return i.map(t=>t.s!==void 0?t.s:new RegExp(t.r.source,t.r.flags))}function de(i){let t=0,e=0,s=0;for(const o of i.results)o.status==="interrupted"||(o.status==="skipped"&&i.expectedStatus==="skipped"?++t:o.status==="skipped"||(o.status===i.expectedStatus?++e:++s));return e===0&&s===0?"skipped":s===0?"expected":e===0&&t===0?"unexpected":"flaky"}class gt{constructor(t,e,s,o,c,r){this._treeItemById=new Map,this._treeItemByTestId=new Map;const m=o&&[...o.values()].some(Boolean);this.pathSeparator=c,this.rootItem={kind:"group",subKind:"folder",id:t,title:"",location:{file:"",line:0,column:0},duration:0,parent:void 0,children:[],status:"none",hasLoadErrors:!1},this._treeItemById.set(t,this.rootItem);const d=(f,a,w,S)=>{for(const l of S==="tests"?[]:a.suites){if(!l.title){d(f,l,w,"all");continue}let k=w.children.find(_=>_.kind==="group"&&_.title===l.title);k||(k={kind:"group",subKind:"describe",id:"suite:"+a.titlePath().join("")+""+l.title,title:l.title,location:l.location,duration:0,parent:w,children:[],status:"none",hasLoadErrors:!1},this._addChild(w,k)),d(f,l,k,"all")}for(const l of S==="suites"?[]:a.tests){const k=l.title;let _=w.children.find(D=>D.kind!=="group"&&D.title===k);_||(_={kind:"case",id:"test:"+l.titlePath().join(""),title:k,parent:w,children:[],tests:[],location:l.location,duration:0,status:"none",project:void 0,test:void 0,tags:l.tags},this._addChild(w,_));const x=l.results[0];let y="none";(x==null?void 0:x[G])==="scheduled"?y="scheduled":(x==null?void 0:x[G])==="running"?y="running":(x==null?void 0:x.status)==="skipped"?y="skipped":(x==null?void 0:x.status)==="interrupted"?y="none":x&&l.outcome()!=="expected"?y="failed":x&&l.outcome()==="expected"&&(y="passed"),_.tests.push(l);const b={kind:"test",id:l.id,title:f.name,location:l.location,test:l,parent:_,children:[],status:y,duration:l.results.length?Math.max(0,l.results[0].duration):0,project:f};this._addChild(_,b),this._treeItemByTestId.set(l.id,b),_.duration=_.children.reduce((D,C)=>D+C.duration,0)}};for(const f of(e==null?void 0:e.suites)||[])if(!(m&&!o.get(f.title)))for(const a of f.suites)if(r){if(d(f.project(),a,this.rootItem,"suites"),a.tests.length){const w=this._defaultDescribeItem();d(f.project(),a,w,"tests")}}else{const w=this._fileItem(a.location.file.split(c),!0);d(f.project(),a,w,"all")}for(const f of s){if(!f.location)continue;const a=this._fileItem(f.location.file.split(c),!0);a.hasLoadErrors=!0}}_addChild(t,e){t.children.push(e),e.parent=t,this._treeItemById.set(e.id,e)}filterTree(t,e,s){const o=t.trim().toLowerCase().split(" "),c=[...e.values()].some(Boolean),r=d=>{const f=[...d.tests[0].titlePath(),...d.tests[0].tags].join(" ").toLowerCase();return!o.every(a=>f.includes(a))&&!d.tests.some(a=>s==null?void 0:s.has(a.id))?!1:(d.children=d.children.filter(a=>!c||(s==null?void 0:s.has(a.test.id))||e.get(a.status)),d.tests=d.children.map(a=>a.test),!!d.children.length)},m=d=>{const f=[];for(const a of d.children)a.kind==="case"?r(a)&&f.push(a):(m(a),(a.children.length||a.hasLoadErrors)&&f.push(a));d.children=f};m(this.rootItem)}_fileItem(t,e){if(t.length===0)return this.rootItem;const s=t.join(this.pathSeparator),o=this._treeItemById.get(s);if(o)return o;const c=this._fileItem(t.slice(0,t.length-1),!1),r={kind:"group",subKind:e?"file":"folder",id:s,title:t[t.length-1],location:{file:s,line:0,column:0},duration:0,parent:c,children:[],status:"none",hasLoadErrors:!1};return this._addChild(c,r),r}_defaultDescribeItem(){let t=this._treeItemById.get("<anonymous>");return t||(t={kind:"group",subKind:"describe",id:"<anonymous>",title:"<anonymous>",location:{file:"",line:0,column:0},duration:0,parent:this.rootItem,children:[],status:"none",hasLoadErrors:!1},this._addChild(this.rootItem,t)),t}sortAndPropagateStatus(){Rt(this.rootItem)}flattenForSingleProject(){const t=e=>{e.kind==="case"&&e.children.length===1?(e.project=e.children[0].project,e.test=e.children[0].test,e.children=[],this._treeItemByTestId.set(e.test.id,e)):e.children.forEach(t)};t(this.rootItem)}shortenRoot(){let t=this.rootItem;for(;t.children.length===1&&t.children[0].kind==="group"&&t.children[0].subKind==="folder";)t=t.children[0];t.location=this.rootItem.location,this.rootItem=t}fileNames(){const t=new Set,e=s=>{s.kind==="group"&&s.subKind==="file"?t.add(s.id):s.children.forEach(e)};return e(this.rootItem),[...t]}flatTreeItems(){const t=[],e=s=>{t.push(s),s.children.forEach(e)};return e(this.rootItem),t}treeItemById(t){return this._treeItemById.get(t)}collectTestIds(t){return ue(t)}}function Rt(i){for(const r of i.children)Rt(r);i.kind==="group"&&i.children.sort((r,m)=>r.location.file.localeCompare(m.location.file)||r.location.line-m.location.line);let t=i.children.length>0,e=i.children.length>0,s=!1,o=!1,c=!1;for(const r of i.children)e=e&&r.status==="skipped",t=t&&(r.status==="passed"||r.status==="skipped"),s=s||r.status==="failed",o=o||r.status==="running",c=c||r.status==="scheduled";o?i.status="running":c?i.status="scheduled":s?i.status="failed":e?i.status="skipped":t&&(i.status="passed")}function ue(i){const t=new Set,e=new Set,s=o=>{if(o.kind!=="test"&&o.kind!=="case"){o.children.forEach(s);return}let c=o;for(;c&&c.parent&&!(c.kind==="group"&&c.subKind==="file");)c=c.parent;e.add(c.location.file),o.kind==="case"?o.tests.forEach(r=>t.add(r.id)):t.add(o.id)};return s(i),{testIds:t,locations:e}}const G=Symbol("statusEx");class he{constructor(t){this.loadErrors=[],this.progress={total:0,passed:0,failed:0,skipped:0},this._lastRunTestCount=0,this._receiver=new pt(this._createReporter(),{mergeProjects:!0,mergeTestCases:!0,resolvePath:Tt(t.pathSeparator),clearPreviousResultsWhenTestBegins:!0}),this._options=t}_createReporter(){return{version:()=>"v2",onConfigure:t=>{this.config=t,this._lastRunReceiver=new pt({version:()=>"v2",onBegin:e=>{this._lastRunTestCount=e.allTests().length,this._lastRunReceiver=void 0}},{mergeProjects:!0,mergeTestCases:!1,resolvePath:Tt(this._options.pathSeparator)}),this._lastRunReceiver.dispatch({method:"onConfigure",params:{config:t}})},onBegin:t=>{var e;if(this.rootSuite||(this.rootSuite=t),this._testResultsSnapshot){for(const s of this.rootSuite.allTests())s.results=((e=this._testResultsSnapshot)==null?void 0:e.get(s.id))||s.results;this._testResultsSnapshot=void 0}this.progress.total=this._lastRunTestCount,this.progress.passed=0,this.progress.failed=0,this.progress.skipped=0,this._options.onUpdate(!0)},onEnd:()=>{this._options.onUpdate(!0)},onTestBegin:(t,e)=>{e[G]="running",this._options.onUpdate()},onTestEnd:(t,e)=>{t.outcome()==="skipped"?++this.progress.skipped:t.outcome()==="unexpected"?++this.progress.failed:++this.progress.passed,e[G]=e.status,this._options.onUpdate()},onError:t=>this._handleOnError(t),printsToStdio:()=>!1}}processGlobalReport(t){const e=new pt({version:()=>"v2",onConfigure:s=>{this.config=s},onError:s=>this._handleOnError(s)});for(const s of t)e.dispatch(s)}processListReport(t){var s;const e=((s=this.rootSuite)==null?void 0:s.allTests())||[];this._testResultsSnapshot=new Map(e.map(o=>[o.id,o.results])),this._receiver.reset();for(const o of t)this._receiver.dispatch(o)}processTestReportEvent(t){var e,s,o;(s=(e=this._lastRunReceiver)==null?void 0:e.dispatch(t))==null||s.catch(()=>{}),(o=this._receiver.dispatch(t))==null||o.catch(()=>{})}_handleOnError(t){var e,s;this.loadErrors.push(t),(s=(e=this._options).onError)==null||s.call(e,t),this._options.onUpdate()}asModel(){return{rootSuite:this.rootSuite||new Z("","root"),config:this.config,loadErrors:this.loadErrors,progress:this.progress}}}function Tt(i){return(t,e)=>{const s=[];for(const o of[...t.split(i),...e.split(i)]){const c=i==="\\"&&s.length===1&&s[0].endsWith(":"),r=!s.length;if(!(!o&&!r&&!c)&&o!=="."){if(o===".."){s.pop();continue}s.push(o)}}return s.join(i)}}const fe=({source:i})=>{const[t,e]=zt(),[s,o]=H.useState(Kt()),[c]=H.useState(Vt(()=>import("./assets/xtermModule-CsJ4vdCR.js"),__vite__mapDeps([0,1]),import.meta.url).then(m=>m.default)),r=H.useRef(null);return H.useEffect(()=>($t(o),()=>Ht(o)),[]),H.useEffect(()=>{const m=i.write,d=i.clear;return(async()=>{const{Terminal:f,FitAddon:a}=await c,w=e.current;if(!w)return;const S=s==="dark-mode"?ge:pe;if(r.current&&r.current.terminal.options.theme===S)return;r.current&&(w.textContent="");const l=new f({convertEol:!0,fontSize:13,scrollback:1e4,fontFamily:"monospace",theme:S}),k=new a;l.loadAddon(k);for(const _ of i.pending)l.write(_);i.write=(_=>{i.pending.push(_),l.write(_)}),i.clear=()=>{i.pending=[],l.clear()},l.open(w),k.fit(),r.current={terminal:l,fitAddon:k}})(),()=>{i.clear=d,i.write=m}},[c,r,e,i,s]),H.useEffect(()=>{setTimeout(()=>{r.current&&(r.current.fitAddon.fit(),i.resize(r.current.terminal.cols,r.current.terminal.rows))},250)},[t,i]),n.jsx("div",{"data-testid":"output",className:"xterm-wrapper",style:{flex:"auto"},ref:e})},pe={foreground:"#383a42",background:"#fafafa",cursor:"#383a42",black:"#000000",red:"#e45649",green:"#50a14f",yellow:"#c18401",blue:"#4078f2",magenta:"#a626a4",cyan:"#0184bc",white:"#a0a0a0",brightBlack:"#000000",brightRed:"#e06c75",brightGreen:"#98c379",brightYellow:"#d19a66",brightBlue:"#4078f2",brightMagenta:"#a626a4",brightCyan:"#0184bc",brightWhite:"#383a42",selectionBackground:"#d7d7d7",selectionForeground:"#383a42"},ge={foreground:"#f8f8f2",background:"#1e1e1e",cursor:"#f8f8f0",black:"#000000",red:"#ff5555",green:"#50fa7b",yellow:"#f1fa8c",blue:"#bd93f9",magenta:"#ff79c6",cyan:"#8be9fd",white:"#bfbfbf",brightBlack:"#4d4d4d",brightRed:"#ff6e6e",brightGreen:"#69ff94",brightYellow:"#ffffa5",brightBlue:"#d6acff",brightMagenta:"#ff92df",brightCyan:"#a4ffff",brightWhite:"#e6e6e6",selectionBackground:"#44475a",selectionForeground:"#f8f8f2"},me=({filterText:i,setFilterText:t,statusFilters:e,setStatusFilters:s,projectFilters:o,setProjectFilters:c,testModel:r,runTests:m})=>{const[d,f]=u.useState(!1),a=u.useRef(null);u.useEffect(()=>{var l;(l=a.current)==null||l.focus()},[]);const w=[...e.entries()].filter(([l,k])=>k).map(([l])=>l).join(" ")||"all",S=[...o.entries()].filter(([l,k])=>k).map(([l])=>l).join(" ")||"all";return n.jsxs("div",{className:"filters",children:[n.jsx(qt,{expanded:d,setExpanded:f,title:n.jsx("input",{ref:a,type:"search",placeholder:"Filter (e.g. text, @tag)",spellCheck:!1,value:i,onChange:l=>{t(l.target.value)},onKeyDown:l=>{l.key==="Enter"&&m()}})}),n.jsxs("div",{className:"filter-summary",title:"Status: "+w+`
3
+ Projects: `+S,onClick:()=>f(!d),children:[n.jsx("span",{className:"filter-label",children:"Status:"})," ",w,n.jsx("span",{className:"filter-label",children:"Projects:"})," ",S]}),d&&n.jsxs("div",{className:"hbox",style:{marginLeft:14,maxHeight:200,overflowY:"auto"},children:[n.jsx("div",{className:"filter-list",role:"list","data-testid":"status-filters",children:[...e.entries()].map(([l,k])=>n.jsx("div",{className:"filter-entry",role:"listitem",children:n.jsxs("label",{children:[n.jsx("input",{type:"checkbox",checked:k,onChange:()=>{const _=new Map(e);_.set(l,!_.get(l)),s(_)}}),n.jsx("div",{children:l})]})},l))}),n.jsx("div",{className:"filter-list",role:"list","data-testid":"project-filters",children:[...o.entries()].map(([l,k])=>n.jsx("div",{className:"filter-entry",role:"listitem",children:n.jsxs("label",{children:[n.jsx("input",{type:"checkbox",checked:k,onChange:()=>{var y;const _=new Map(o);_.set(l,!_.get(l)),c(_);const x=(y=r==null?void 0:r.config)==null?void 0:y.configFile;x&&Et.setObject(x+":projects",[..._.entries()].filter(([b,D])=>D).map(([b])=>b))}}),n.jsx("div",{children:l||"untitled"})]})},l))})]})]})},_e=({tag:i,style:t,onClick:e})=>n.jsx("span",{className:mt("tag",`tag-color-${ve(i)}`),onClick:e,style:{margin:"6px 0 0 6px",...t},title:`Click to filter by tag: ${i}`,children:i});function ve(i){let t=0;for(let e=0;e<i.length;e++)t=i.charCodeAt(e)+((t<<8)-t);return Math.abs(t%6)}const we=Yt,be=({filterText:i,testModel:t,testServerConnection:e,testTree:s,runTests:o,runningState:c,watchAll:r,watchedTreeIds:m,setWatchedTreeIds:d,isLoading:f,onItemSelected:a,requestedCollapseAllCount:w,requestedExpandAllCount:S,setFilterText:l,onRevealSource:k})=>{const[_,x]=u.useState({expandedItems:new Map}),[y,b]=u.useState(),[D,C]=u.useState(w),[U,tt]=u.useState(S);u.useEffect(()=>{if(D!==w){_.expandedItems.clear();for(const j of s.flatTreeItems())_.expandedItems.set(j.id,!1);C(w),b(void 0),x({..._});return}if(U!==S){_.expandedItems.clear();for(const j of s.flatTreeItems())_.expandedItems.set(j.id,!0);tt(S),b(void 0),x({..._});return}if(!c||c.itemSelectedByUser)return;let h;const R=j=>{var M;j.children.forEach(R),!h&&j.status==="failed"&&(j.kind==="test"&&c.testIds.has(j.test.id)||j.kind==="case"&&c.testIds.has((M=j.tests[0])==null?void 0:M.id))&&(h=j)};R(s.rootItem),h&&b(h.id)},[c,b,s,D,C,w,U,tt,S,_,x]);const N=u.useMemo(()=>{if(y)return s.treeItemById(y)},[y,s]);u.useEffect(()=>{if(!t)return;const h=xe(N,t);let R;(N==null?void 0:N.kind)==="test"?R=N.test:(N==null?void 0:N.kind)==="case"&&N.tests.length===1&&(R=N.tests[0]),a({treeItem:N,testCase:R,testFile:h})},[t,N,a]),u.useEffect(()=>{if(!f)if(r)e==null||e.watchNoReply({fileNames:s.fileNames()});else{const h=new Set;for(const R of m.value){const j=s.treeItemById(R),M=j==null?void 0:j.location.file;M&&h.add(M)}e==null||e.watchNoReply({fileNames:[...h]})}},[f,s,r,m,e]);const $=h=>{b(h.id),o("bounce-if-busy",s.collectTestIds(h))},K=(h,R)=>{if(h.preventDefault(),h.stopPropagation(),h.metaKey||h.ctrlKey){const j=i.split(" ");j.includes(R)?l(j.filter(M=>M!==R).join(" ").trim()):l((i+" "+R).trim())}else l((i.split(" ").filter(j=>!j.startsWith("@")).join(" ")+" "+R).trim())};return n.jsx(we,{name:"tests",treeState:_,setTreeState:x,rootItem:s.rootItem,dataTestId:"test-tree",render:h=>{const R=h.id.replace(/[^\w\d-_]/g,"-"),j=R+"-label",M=R+"-time";return n.jsxs("div",{className:"hbox ui-mode-tree-item","aria-labelledby":`${j} ${M}`,children:[n.jsxs("div",{id:j,className:"ui-mode-tree-item-title",children:[n.jsx("span",{children:h.title}),h.kind==="case"?h.tags.map(Y=>n.jsx(_e,{tag:Y.slice(1),onClick:ct=>K(ct,Y)},Y)):null]}),!!h.duration&&h.status!=="skipped"&&n.jsx("div",{id:M,className:"ui-mode-tree-item-time",children:Xt(h.duration)}),n.jsxs(q,{noMinHeight:!0,noShadow:!0,children:[n.jsx(F,{icon:"play",title:"Run",onClick:()=>$(h),disabled:!!c&&!c.completed}),n.jsx(F,{icon:"go-to-file",title:"Show source",onClick:k,style:h.kind==="group"&&h.subKind==="folder"?{visibility:"hidden"}:{}}),!r&&n.jsx(F,{icon:"eye",title:"Watch",onClick:()=>{m.value.has(h.id)?m.value.delete(h.id):m.value.add(h.id),d({...m})},toggled:m.value.has(h.id)})]})]})},icon:h=>Qt(h.status),title:h=>h.title,selectedItem:N,onAccepted:$,onSelected:h=>{c&&(c.itemSelectedByUser=!0),b(h.id)},isError:h=>h.kind==="group"?h.hasLoadErrors:!1,autoExpandDepth:i?5:1,noItemsMessage:f?"Loading…":"No tests"})};function xe(i,t){if(!(!i||!t))return{file:i.location.file,line:i.location.line,column:i.location.column,source:{errors:t.loadErrors.filter(e=>{var s;return((s=e.location)==null?void 0:s.file)===i.location.file}).map(e=>({line:e.location.line,message:e.message})),content:void 0}}}function Se(i){return`.playwright-artifacts-${i}`}const Te=({item:i,rootDir:t,onOpenExternally:e,revealSource:s,pathSeparator:o})=>{var w,S;const[c,r]=u.useState(void 0),[m,d]=u.useState(0),f=u.useRef(null),{outputDir:a}=u.useMemo(()=>({outputDir:i.testCase?ke(i.testCase):void 0}),[i]);return u.useEffect(()=>{var x,y;f.current&&clearTimeout(f.current);const l=(x=i.testCase)==null?void 0:x.results[0];if(!l){r(void 0);return}const k=l&&l.duration>=0&&l.attachments.find(b=>b.name==="trace");if(k&&k.path){kt(k.path).then(b=>r({model:b,isLive:!1}));return}if(!a){r(void 0);return}const _=[a,Se(l.workerIndex),"traces",`${(y=i.testCase)==null?void 0:y.id}.json`].join(o);return f.current=setTimeout(async()=>{try{const b=await kt(_);r({model:b,isLive:!0})}catch{const b=new It("",[]);b.errorDescriptors.push(...l.errors.flatMap(D=>D.message?[{message:D.message}]:[])),r({model:b,isLive:!1})}finally{d(m+1)}},500),()=>{f.current&&clearTimeout(f.current)}},[a,i,r,m,d,o]),n.jsx(Jt,{model:c==null?void 0:c.model,showSourcesFirst:!0,rootDir:t,fallbackLocation:i.testFile,isLive:c==null?void 0:c.isLive,status:(w=i.treeItem)==null?void 0:w.status,annotations:((S=i.testCase)==null?void 0:S.annotations)??[],onOpenExternally:e,revealSource:s},"workbench")},ke=i=>{var t;for(let e=i.parent;e;e=e.parent)if(e.project())return(t=e.project())==null?void 0:t.outputDir};async function kt(i){const t=new URLSearchParams;t.set("trace",i);const s=await(await fetch(`contexts?${t.toString()}`)).json();return new It(i,s)}let jt={cols:80};const z={pending:[],clear:()=>{},write:i=>z.pending.push(i),resize:()=>{}},A=new URLSearchParams(window.location.search),je=new URL(A.get("server")??"../",window.location.href),_t=new URL(A.get("ws"),je);_t.protocol=_t.protocol==="https:"?"wss:":"ws:";const B={args:A.getAll("arg"),grep:A.get("grep")||void 0,grepInvert:A.get("grepInvert")||void 0,projects:A.getAll("project"),workers:A.get("workers")||void 0,headed:A.has("headed"),updateSnapshots:A.get("updateSnapshots")||void 0,reporters:A.has("reporter")?A.getAll("reporter"):void 0,pathSeparator:A.get("pathSeparator")||"/"};B.updateSnapshots&&!["all","changed","none","missing"].includes(B.updateSnapshots)&&(B.updateSnapshots=void 0);const yt=navigator.platform==="MacIntel";function ye(i){return i.startsWith("/")&&(i=i.substring(1)),i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}const Ee=({})=>{var xt;const[i,t]=u.useState(""),[e,s]=u.useState(!1),[o,c]=u.useState(!1),[r,m]=u.useState(new Map([["passed",!1],["failed",!1],["skipped",!1]])),[d,f]=u.useState(new Map),[a,w]=u.useState(),[S,l]=u.useState(),[k,_]=u.useState({}),[x,y]=u.useState(!1),[b,D]=u.useState(),C=b&&!b.completed,[U,tt]=at("watch-all",!1),[N,$]=u.useState({value:new Set}),K=u.useRef(Promise.resolve()),h=u.useRef({testIds:new Set,locations:new Set}),[R,j]=u.useState(0),[M,Y]=u.useState(0),[ct,Bt]=u.useState(!1),[vt,wt]=u.useState(!0),[v,Ct]=u.useState(),[et,Nt]=u.useState(),[st,Pt]=u.useState(!1),[it,Lt]=u.useState(!1),[Dt,bt]=u.useState(!1),Mt=u.useCallback(()=>bt(!0),[bt]),[dt,Ft]=at("single-worker",!1),[ut,Ot]=at("updateSnapshots","missing"),[Q]=at("mergeFiles",!1),At=u.useRef(null),ot=u.useCallback(()=>{Ct(p=>(p==null||p.close(),new Zt(new Gt(_t))))},[]);u.useEffect(()=>{var p;(p=At.current)==null||p.focus(),y(!0),ot()},[ot]),u.useEffect(()=>{if(!v)return;const p=[v.onStdio(g=>{if(g.buffer){const T=atob(g.buffer);z.write(T)}else z.write(g.text);g.type==="stderr"&&c(!0)}),v.onClose(()=>Bt(!0))];return z.resize=(g,T)=>{jt={cols:g,rows:T},v.resizeTerminalNoReply({cols:g,rows:T})},()=>{for(const g of p)g.dispose()}},[v]),u.useEffect(()=>{if(!v)return;let p;const g=new he({onUpdate:T=>{clearTimeout(p),p=void 0,T?w(g.asModel()):p||(p=setTimeout(()=>{w(g.asModel())},250))},onError:T=>{z.write((T.stack||T.value||"")+`
4
+ `),c(!0)},pathSeparator:B.pathSeparator});return Nt(g),w(void 0),y(!0),$({value:new Set}),(async()=>{try{await v.initialize({interceptStdio:!0,watchTestDirs:!0});const{status:T,report:I}=await v.runGlobalSetup({});if(g.processGlobalReport(I),T!=="passed")return;const P=await v.listTests({projects:B.projects,locations:B.args,grep:B.grep,grepInvert:B.grepInvert});g.processListReport(P.report),v.onReport(V=>{g.processTestReportEvent(V)});const{hasBrowsers:O}=await v.checkBrowsers({});wt(O)}finally{y(!1)}})(),()=>{clearTimeout(p)}},[v]),u.useEffect(()=>{if(!a)return;const{config:p,rootSuite:g}=a,T=p.configFile?Et.getObject(p.configFile+":projects",void 0):void 0,I=new Map(d);for(const P of I.keys())g.suites.find(O=>O.title===P)||I.delete(P);for(const P of g.suites)I.has(P.title)||I.set(P.title,!!(T!=null&&T.includes(P.title)));!T&&I.size&&![...I.values()].includes(!0)&&I.set(I.entries().next().value[0],!0),(d.size!==I.size||[...d].some(([P,O])=>I.get(P)!==O))&&f(I)},[d,a]),u.useEffect(()=>{C&&(a!=null&&a.progress)?l(a.progress):a||l(void 0)},[a,C]);const{testTree:nt}=u.useMemo(()=>{if(!a)return{testTree:new gt("",new Z("","root"),[],d,B.pathSeparator,Q)};const p=new gt("",a.rootSuite,a.loadErrors,d,B.pathSeparator,Q);return p.filterTree(i,r,C?b==null?void 0:b.testIds:void 0),p.sortAndPropagateStatus(),p.shortenRoot(),p.flattenForSingleProject(),{testTree:p}},[i,a,r,d,b,C,Q]),X=u.useCallback((p,g)=>{if(!(!v||!a)&&!(p==="bounce-if-busy"&&C)){for(const T of g.testIds)h.current.testIds.add(T);for(const T of g.locations)h.current.locations.add(T);K.current=K.current.then(async()=>{var O,V,W;const{testIds:T,locations:I}=h.current;if(h.current={testIds:new Set,locations:new Set},!T.size)return;{for(const E of((O=a.rootSuite)==null?void 0:O.allTests())||[])if(T.has(E.id)){E.results=[];const L=E._createTestResult("pending");L[G]="scheduled"}w({...a})}const P=" ["+new Date().toLocaleTimeString()+"]";z.write("\x1B[2m—".repeat(Math.max(0,jt.cols-P.length))+P+"\x1B[22m"),l({total:0,passed:0,failed:0,skipped:0}),D({testIds:T}),await v.runTests({locations:[...I].map(ye),grep:B.grep,grepInvert:B.grepInvert,testIds:[...T],projects:[...d].filter(([E,L])=>L).map(([E])=>E),updateSnapshots:ut,reporters:B.reporters,workers:dt?1:void 0,trace:"on"});for(const E of((V=a.rootSuite)==null?void 0:V.allTests())||[])((W=E.results[0])==null?void 0:W.duration)===-1&&(E.results=[]);w({...a}),D(E=>E?{...E,completed:!0}:void 0)})}},[d,C,a,v,ut,dt]),rt=u.useCallback(()=>X("bounce-if-busy",nt.collectTestIds(nt.rootItem)),[X,nt]);u.useEffect(()=>{if(!v||!et)return;const p=v.onTestFilesChanged(async g=>{if(K.current=K.current.then(async()=>{y(!0);try{const W=await v.listTests({projects:B.projects,locations:B.args,grep:B.grep,grepInvert:B.grepInvert});et.processListReport(W.report)}catch(W){console.log(W)}finally{y(!1)}}),await K.current,g.testFiles.length===0)return;const T=et.asModel(),I=new gt("",T.rootSuite,T.loadErrors,d,B.pathSeparator,Q),P=[],O=[],V=new Set(g.testFiles);if(U){const W=E=>{const L=E.location.file;if(L&&V.has(L)){const J=I.collectTestIds(E);P.push(...J.locations),O.push(...J.testIds)}E.kind==="group"&&E.subKind==="folder"&&E.children.forEach(W)};W(I.rootItem)}else for(const W of N.value){const E=I.treeItemById(W);if(!E)continue;let L=E;for(;!(L.kind==="group"&&(L.subKind==="file"||L.subKind==="folder"))&&L.parent;)L=L.parent;const J=L==null?void 0:L.location.file;if(J&&V.has(J)){const St=I.collectTestIds(E);P.push(...St.locations),O.push(...St.testIds)}}X("queue-if-busy",{locations:P,testIds:O})});return()=>p.dispose()},[X,v,U,N,et,d,Q]),u.useEffect(()=>{if(!v)return;const p=g=>{g.code==="Backquote"&&g.ctrlKey?(g.preventDefault(),s(!e)):g.code==="F5"&&g.shiftKey?(g.preventDefault(),v==null||v.stopTestsNoReply({})):g.code==="F5"&&(g.preventDefault(),rt())};return addEventListener("keydown",p),()=>{removeEventListener("keydown",p)}},[rt,ot,v,e]);const ht=u.useRef(null),Wt=u.useCallback(p=>{var g;p.preventDefault(),p.stopPropagation(),(g=ht.current)==null||g.showModal()},[]),ft=u.useCallback(p=>{var g;p.preventDefault(),p.stopPropagation(),(g=ht.current)==null||g.close()},[]),Ut=u.useCallback(p=>{ft(p),s(!0),v==null||v.installBrowsers({}).then(async()=>{s(!1);const{hasBrowsers:g}=await(v==null?void 0:v.checkBrowsers({}));wt(g)})},[ft,v]);return n.jsxs("div",{className:"vbox ui-mode",children:[!vt&&n.jsxs("dialog",{ref:ht,children:[n.jsxs("div",{className:"title",children:[n.jsx("span",{className:"codicon codicon-lightbulb"}),"Install browsers"]}),n.jsxs("div",{className:"body",children:["Playwright did not find installed browsers.",n.jsx("br",{}),"Would you like to run `playwright install`?",n.jsx("br",{}),n.jsx("button",{className:"button",onClick:Ut,children:"Install"}),n.jsx("button",{className:"button secondary",onClick:ft,children:"Dismiss"})]})]}),ct&&n.jsxs("div",{className:"disconnected",children:[n.jsx("div",{className:"title",children:"UI Mode disconnected"}),n.jsxs("div",{children:[n.jsx("a",{href:"#",onClick:()=>window.location.href="/",children:"Reload the page"})," to reconnect"]})]}),n.jsx(te,{sidebarSize:250,minSidebarSize:150,orientation:"horizontal",sidebarIsFirst:!0,settingName:"testListSidebar",main:n.jsxs("div",{className:"vbox",children:[n.jsxs("div",{className:mt("vbox",!e&&"hidden"),children:[n.jsxs(q,{children:[n.jsx("div",{className:"section-title",style:{flex:"none"},children:"Output"}),n.jsx(F,{icon:"circle-slash",title:"Clear output",onClick:()=>{z.clear(),c(!1)}}),n.jsx("div",{className:"spacer"}),n.jsx(F,{icon:"close",title:"Close",onClick:()=>s(!1)})]}),n.jsx(fe,{source:z})]}),n.jsx("div",{className:mt("vbox",e&&"hidden"),children:n.jsx(Te,{pathSeparator:B.pathSeparator,item:k,rootDir:(xt=a==null?void 0:a.config)==null?void 0:xt.rootDir,revealSource:Dt,onOpenExternally:p=>v==null?void 0:v.openNoReply({location:{file:p.file,line:p.line,column:p.column}})})})]}),sidebar:n.jsxs("div",{className:"vbox ui-mode-sidebar",children:[n.jsxs(q,{noShadow:!0,noMinHeight:!0,children:[n.jsx("img",{src:"playwright-logo.svg",alt:"Playwright logo"}),n.jsx("div",{className:"section-title",children:"Playwright"}),n.jsx(F,{icon:"refresh",title:"Reload",onClick:()=>ot(),disabled:C||x}),n.jsxs("div",{style:{position:"relative"},children:[n.jsx(F,{icon:"terminal",title:"Toggle output — "+(yt?"⌃`":"Ctrl + `"),toggled:e,onClick:()=>{s(!e)}}),o&&n.jsx("div",{title:"Output contains error",style:{position:"absolute",top:2,right:2,width:7,height:7,borderRadius:"50%",backgroundColor:"var(--vscode-notificationsErrorIcon-foreground)"}})]}),!vt&&n.jsx(F,{icon:"lightbulb-autofix",style:{color:"var(--vscode-list-warningForeground)"},title:"Playwright browsers are missing",onClick:Wt})]}),n.jsx(me,{filterText:i,setFilterText:t,statusFilters:r,setStatusFilters:m,projectFilters:d,setProjectFilters:f,testModel:a,runTests:rt}),n.jsxs(q,{className:"section-toolbar",noMinHeight:!0,children:[!C&&!S&&n.jsx("div",{className:"section-title",children:"Tests"}),!C&&S&&n.jsx("div",{"data-testid":"status-line",className:"status-line",children:n.jsxs("div",{children:[S.passed,"/",S.total," passed (",S.passed/S.total*100|0,"%)"]})}),C&&S&&n.jsx("div",{"data-testid":"status-line",className:"status-line",children:n.jsxs("div",{children:["Running ",S.passed,"/",b.testIds.size," passed (",S.passed/b.testIds.size*100|0,"%)"]})}),n.jsx(F,{icon:"play",title:"Run all — F5",onClick:rt,disabled:C||x}),n.jsx(F,{icon:"debug-stop",title:"Stop — "+(yt?"⇧F5":"Shift + F5"),onClick:()=>v==null?void 0:v.stopTests({}),disabled:!C||x}),n.jsx(F,{icon:"eye",title:"Watch all",toggled:U,onClick:()=>{$({value:new Set}),tt(!U)}}),n.jsx(F,{icon:"collapse-all",title:"Collapse all",onClick:()=>{j(R+1)}}),n.jsx(F,{icon:"expand-all",title:"Expand all",onClick:()=>{Y(M+1)}})]}),n.jsx(be,{filterText:i,testModel:a,testTree:nt,testServerConnection:v,runningState:b,runTests:X,onItemSelected:_,watchAll:U,watchedTreeIds:N,setWatchedTreeIds:$,isLoading:x,requestedCollapseAllCount:R,requestedExpandAllCount:M,setFilterText:t,onRevealSource:Mt}),n.jsxs(q,{noShadow:!0,noMinHeight:!0,className:"settings-toolbar",onClick:()=>Lt(!it),children:[n.jsx("span",{className:`codicon codicon-${it?"chevron-down":"chevron-right"}`,style:{marginLeft:5},title:it?"Hide Testing Options":"Show Testing Options"}),n.jsx("div",{className:"section-title",children:"Testing Options"})]}),it&&n.jsx(ee,{settings:[{type:"check",value:dt,set:Ft,name:"Single worker"},{type:"select",options:[{label:"All",value:"all"},{label:"Changed",value:"changed"},{label:"Missing",value:"missing"},{label:"None",value:"none"}],value:ut,set:Ot,name:"Update snapshots"}]}),n.jsxs(q,{noShadow:!0,noMinHeight:!0,className:"settings-toolbar",onClick:()=>Pt(!st),children:[n.jsx("span",{className:`codicon codicon-${st?"chevron-down":"chevron-right"}`,style:{marginLeft:5},title:st?"Hide Settings":"Show Settings"}),n.jsx("div",{className:"section-title",children:"Settings"})]}),st&&n.jsx(se,{location:"ui-mode"})]})})]})};(async()=>{if(ie(),window.location.protocol!=="file:"){if(window.location.href.includes("isUnderTest=true")&&await new Promise(i=>setTimeout(i,1e3)),!navigator.serviceWorker)throw new Error(`Service workers are not supported.
5
+ Make sure to serve the website (${window.location}) via HTTPS or localhost.`);navigator.serviceWorker.register("sw.bundle.js"),navigator.serviceWorker.controller||await new Promise(i=>{navigator.serviceWorker.oncontrollerchange=()=>i()}),setInterval(function(){fetch("ping")},1e4)}oe.createRoot(document.querySelector("#root")).render(n.jsx(Ee,{}))})();
@@ -6,8 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <link rel="icon" href="./playwright-logo.svg" type="image/svg+xml">
8
8
  <title>Playwright Test</title>
9
- <script type="module" crossorigin src="./uiMode.CA0bvrCl.js"></script>
10
- <link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-CFbbG_bM.js">
9
+ <script type="module" crossorigin src="./uiMode.CCu4MMfA.js"></script>
10
+ <link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-C7iHYOsw.js">
11
11
  <link rel="stylesheet" crossorigin href="./defaultSettingsView.CpI7RarT.css">
12
12
  <link rel="stylesheet" crossorigin href="./uiMode.Btcz36p_.css">
13
13
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playwright-core",
3
- "version": "1.58.0-alpha-2025-12-05",
3
+ "version": "1.58.0-alpha-2025-12-07",
4
4
  "description": "A high-level API to automate web browsers",
5
5
  "repository": {
6
6
  "type": "git",
package/types/types.d.ts CHANGED
@@ -27,6 +27,11 @@ type ElementHandleWaitForSelectorOptionsNotHidden = ElementHandleWaitForSelector
27
27
  state?: 'visible'|'attached';
28
28
  };
29
29
 
30
+ // @ts-ignore this will be any if zod is not installed
31
+ type ZodTypeAny = import('zod').ZodTypeAny;
32
+ // @ts-ignore this will be any if zod is not installed
33
+ type ZodInfer<T extends ZodTypeAny> = import('zod').infer<T>;
34
+
30
35
  /**
31
36
  * Page provides methods to interact with a single tab in a [Browser](https://playwright.dev/docs/api/class-browser),
32
37
  * or an [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One
@@ -1013,6 +1018,24 @@ export interface Page {
1013
1018
  */
1014
1019
  behavior?: 'wait'|'ignoreErrors'|'default'
1015
1020
  }): Promise<void>;
1021
+
1022
+ /**
1023
+ * Extract information from the page using the agentic loop, return it in a given Zod format.
1024
+ *
1025
+ * **Usage**
1026
+ *
1027
+ * ```js
1028
+ * await page.extract('List of items in the cart', z.object({
1029
+ * title: z.string().describe('Item title to extract'),
1030
+ * price: z.string().describe('Item price to extract'),
1031
+ * }).array());
1032
+ * ```
1033
+ *
1034
+ * @param query Task to perform using agentic loop.
1035
+ * @param schema
1036
+ * @param options
1037
+ */
1038
+ extract<Schema extends ZodTypeAny>(query: string, schema: Schema): Promise<ZodInfer<Schema>>;
1016
1039
  /**
1017
1040
  * Emitted when the page closes.
1018
1041
  */
@@ -3796,6 +3819,31 @@ export interface Page {
3796
3819
  width?: string|number;
3797
3820
  }): Promise<Buffer>;
3798
3821
 
3822
+ /**
3823
+ * Perform action using agentic loop.
3824
+ *
3825
+ * **Usage**
3826
+ *
3827
+ * ```js
3828
+ * await page.perform('Click submit button');
3829
+ * ```
3830
+ *
3831
+ * @param task Task to perform using agentic loop.
3832
+ * @param options
3833
+ */
3834
+ perform(task: string, options?: {
3835
+ /**
3836
+ * All the agentic actions are converted to the Playwright calls and are cached. By default, they are cached globally
3837
+ * with the `task` as a key. This option allows controlling the cache key explicitly.
3838
+ */
3839
+ key?: string;
3840
+
3841
+ /**
3842
+ * Maximum number of agentic steps to take while performing this action.
3843
+ */
3844
+ maxTurns?: number;
3845
+ }): Promise<void>;
3846
+
3799
3847
  /**
3800
3848
  * **NOTE** Use locator-based [locator.press(key[, options])](https://playwright.dev/docs/api/class-locator#locator-press)
3801
3849
  * instead. Read more about [locators](https://playwright.dev/docs/locators).
@@ -22033,6 +22081,32 @@ export interface BrowserContextOptions {
22033
22081
  */
22034
22082
  acceptDownloads?: boolean;
22035
22083
 
22084
+ /**
22085
+ * Agent settings for [page.perform(task[, options])](https://playwright.dev/docs/api/class-page#page-perform) and
22086
+ * [page.extract(query, schema[, options])](https://playwright.dev/docs/api/class-page#page-extract).
22087
+ */
22088
+ agent?: {
22089
+ /**
22090
+ * LLM provider to use
22091
+ */
22092
+ provider: string;
22093
+
22094
+ /**
22095
+ * Model identifier within provider
22096
+ */
22097
+ model: string;
22098
+
22099
+ /**
22100
+ * Cache folder to use/generate code for performed actions into. Cache is not used if not specified (default).
22101
+ */
22102
+ cacheDir?: string;
22103
+
22104
+ /**
22105
+ * Cache control, defauls to 'auto'
22106
+ */
22107
+ cacheMode?: 'force'|'ignore'|'auto';
22108
+ };
22109
+
22036
22110
  /**
22037
22111
  * When using [page.goto(url[, options])](https://playwright.dev/docs/api/class-page#page-goto),
22038
22112
  * [page.route(url, handler[, options])](https://playwright.dev/docs/api/class-page#page-route),