chrome-devtools-mcp 1.3.0 → 1.4.0

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.
Files changed (26) hide show
  1. package/README.md +37 -2
  2. package/build/src/bin/check-latest-version.js +1 -0
  3. package/build/src/bin/chrome-devtools-mcp-cli-options.js +2 -2
  4. package/build/src/formatters/NetworkFormatter.js +3 -1
  5. package/build/src/third_party/THIRD_PARTY_NOTICES +3 -3
  6. package/build/src/third_party/bundled-packages.json +3 -3
  7. package/build/src/third_party/devtools-heap-snapshot-worker.js +13 -0
  8. package/build/src/third_party/index.js +1522 -230
  9. package/build/src/utils/check-for-updates.js +1 -0
  10. package/build/src/version.js +1 -1
  11. package/package.json +7 -6
  12. package/skills/a11y-debugging/SKILL.md +89 -0
  13. package/skills/a11y-debugging/references/a11y-snippets.md +92 -0
  14. package/skills/chrome-devtools/SKILL.md +72 -0
  15. package/skills/chrome-devtools-cli/SKILL.md +153 -0
  16. package/skills/chrome-devtools-cli/references/installation.md +14 -0
  17. package/skills/debug-optimize-lcp/SKILL.md +121 -0
  18. package/skills/debug-optimize-lcp/references/elements-and-size.md +27 -0
  19. package/skills/debug-optimize-lcp/references/lcp-breakdown.md +23 -0
  20. package/skills/debug-optimize-lcp/references/lcp-snippets.md +79 -0
  21. package/skills/debug-optimize-lcp/references/optimization-strategies.md +38 -0
  22. package/skills/memory-leak-debugging/SKILL.md +50 -0
  23. package/skills/memory-leak-debugging/references/common-leaks.md +33 -0
  24. package/skills/memory-leak-debugging/references/compare_snapshots.js +109 -0
  25. package/skills/memory-leak-debugging/references/memlab.md +29 -0
  26. package/skills/troubleshooting/SKILL.md +98 -0
@@ -15,12 +15,13 @@ import require$$1 from 'tty';
15
15
  import require$$0 from 'os';
16
16
  import require$$0$3 from 'child_process';
17
17
  import { PassThrough } from 'node:stream';
18
+ import { debuglog, promisify } from 'node:util';
18
19
  import { mkdtemp, unlink, rename } from 'node:fs/promises';
19
20
  import { EventEmitter as EventEmitter$1 } from 'node:events';
21
+ import 'node:crypto';
20
22
  import * as http from 'node:http';
21
23
  import * as https from 'node:https';
22
24
  import { urlToHttpOptions, URL as URL$1 } from 'node:url';
23
- import { debuglog, promisify } from 'node:util';
24
25
  import 'node:assert';
25
26
  import require$$0$7 from 'events';
26
27
  import require$$1$3 from 'https';
@@ -11512,6 +11513,10 @@ function requireRange () {
11512
11513
  return comp
11513
11514
  };
11514
11515
  const isX = id => !id || id.toLowerCase() === 'x' || id === '*';
11516
+ const invalidXRangeOrder = (M, m, p) => (
11517
+ (isX(M) && !isX(m)) ||
11518
+ (isX(m) && p && !isX(p))
11519
+ );
11515
11520
  const replaceTildes = (comp, options) => {
11516
11521
  return comp
11517
11522
  .trim()
@@ -11521,15 +11526,16 @@ function requireRange () {
11521
11526
  };
11522
11527
  const replaceTilde = (comp, options) => {
11523
11528
  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
11529
+ const z = options.includePrerelease ? '-0' : '';
11524
11530
  return comp.replace(r, (_, M, m, p, pr) => {
11525
11531
  debug('tilde', comp, _, M, m, p, pr);
11526
11532
  let ret;
11527
11533
  if (isX(M)) {
11528
11534
  ret = '';
11529
11535
  } else if (isX(m)) {
11530
- ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
11536
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
11531
11537
  } else if (isX(p)) {
11532
- ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
11538
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
11533
11539
  } else if (pr) {
11534
11540
  debug('replaceTilde pr', pr);
11535
11541
  ret = `>=${M}.${m}.${p}-${pr
@@ -11611,6 +11617,9 @@ function requireRange () {
11611
11617
  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
11612
11618
  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
11613
11619
  debug('xRange', comp, ret, gtlt, M, m, p, pr);
11620
+ if (invalidXRangeOrder(M, m, p)) {
11621
+ return comp
11622
+ }
11614
11623
  const xM = isX(M);
11615
11624
  const xm = xM || isX(m);
11616
11625
  const xp = xm || isX(p);
@@ -48133,6 +48142,37 @@ function requireAjv () {
48133
48142
  var ajvExports = requireAjv();
48134
48143
  var ajv = /*@__PURE__*/getDefaultExportFromCjs(ajvExports);
48135
48144
 
48145
+ /**
48146
+ * @license
48147
+ * Copyright 2020 Google Inc.
48148
+ * SPDX-License-Identifier: Apache-2.0
48149
+ */
48150
+ const isNode = !!(typeof process !== 'undefined' && process.version);
48151
+ const environment = {
48152
+ value: {
48153
+ get fs() {
48154
+ throw new Error('fs is not available in this environment');
48155
+ },
48156
+ ScreenRecorder: class {
48157
+ constructor() {
48158
+ throw new Error('ScreenRecorder is not available in this environment');
48159
+ }
48160
+ },
48161
+ },
48162
+ };
48163
+
48164
+ /**
48165
+ * @license
48166
+ * Copyright 2026 Google Inc.
48167
+ * SPDX-License-Identifier: Apache-2.0
48168
+ */
48169
+ environment.value = {
48170
+ fs,
48171
+ path,
48172
+ debuglog,
48173
+ ScreenRecorder: environment.value.ScreenRecorder,
48174
+ };
48175
+
48136
48176
  /**
48137
48177
  Apache License
48138
48178
  Version 2.0, January 2004
@@ -50620,23 +50660,6 @@ class SuppressedErrorPolyfill extends Error {
50620
50660
  }
50621
50661
  }
50622
50662
 
50623
- /**
50624
- * @license
50625
- * Copyright 2020 Google Inc.
50626
- * SPDX-License-Identifier: Apache-2.0
50627
- */
50628
- const isNode = !!(typeof process !== 'undefined' && process.version);
50629
- const environment = {
50630
- value: {
50631
- get fs() {
50632
- throw new Error('fs is not available in this environment');
50633
- },
50634
- get ScreenRecorder() {
50635
- throw new Error('ScreenRecorder is not available in this environment');
50636
- },
50637
- },
50638
- };
50639
-
50640
50663
  /**
50641
50664
  * @license
50642
50665
  * Copyright 2020 Google Inc.
@@ -50699,39 +50722,36 @@ function mergeUint8Arrays(items) {
50699
50722
  * Copyright 2025 Google Inc.
50700
50723
  * SPDX-License-Identifier: Apache-2.0
50701
50724
  */
50702
- const packageVersion = '25.1.0';
50725
+ const packageVersion = '25.2.0';
50703
50726
 
50704
50727
  /**
50705
50728
  * @license
50706
50729
  * Copyright 2020 Google Inc.
50707
50730
  * SPDX-License-Identifier: Apache-2.0
50708
50731
  */
50709
- let debugModule = null;
50710
- async function importDebug() {
50711
- if (!debugModule) {
50712
- debugModule = (await import('node:util')).debuglog;
50713
- }
50714
- return debugModule;
50715
- }
50716
50732
  const debug$1 = (prefix) => {
50717
50733
  if (isNode) {
50718
- return async (...logArgs) => {
50719
- (await importDebug())(prefix)(...logArgs);
50734
+ const nodeDebug = environment.value.debuglog?.(prefix);
50735
+ if (!nodeDebug || !nodeDebug.enabled) {
50736
+ return;
50737
+ }
50738
+ return (...logArgs) => {
50739
+ nodeDebug(...logArgs);
50720
50740
  };
50721
50741
  }
50742
+ const debugLevel = globalThis.__PUPPETEER_DEBUG;
50743
+ if (!debugLevel) {
50744
+ return;
50745
+ }
50746
+ const everythingShouldBeLogged = debugLevel === '*';
50747
+ const prefixMatchesDebugLevel = everythingShouldBeLogged ||
50748
+ (debugLevel.endsWith('*')
50749
+ ? prefix.startsWith(debugLevel.slice(0, -1))
50750
+ : prefix === debugLevel);
50751
+ if (!prefixMatchesDebugLevel) {
50752
+ return;
50753
+ }
50722
50754
  return (...logArgs) => {
50723
- const debugLevel = globalThis.__PUPPETEER_DEBUG;
50724
- if (!debugLevel) {
50725
- return;
50726
- }
50727
- const everythingShouldBeLogged = debugLevel === '*';
50728
- const prefixMatchesDebugLevel = everythingShouldBeLogged ||
50729
- (debugLevel.endsWith('*')
50730
- ? prefix.startsWith(debugLevel)
50731
- : prefix === debugLevel);
50732
- if (!prefixMatchesDebugLevel) {
50733
- return;
50734
- }
50735
50755
  console.log(`${prefix}:`, ...logArgs);
50736
50756
  };
50737
50757
  };
@@ -50835,6 +50855,7 @@ const paperFormats = {
50835
50855
  * SPDX-License-Identifier: Apache-2.0
50836
50856
  */
50837
50857
  const debugError = debug$1('puppeteer:error');
50858
+ const debugCatchError = debugError ?? (() => { });
50838
50859
  const DEFAULT_VIEWPORT = Object.freeze({ width: 800, height: 600 });
50839
50860
  const SOURCE_URL = Symbol('Source URL for Puppeteer evaluation scripts');
50840
50861
  class PuppeteerURL {
@@ -50947,7 +50968,7 @@ async function getReadableAsTypedArray(readable, path) {
50947
50968
  return concat;
50948
50969
  }
50949
50970
  catch (error) {
50950
- debugError(error);
50971
+ debugError?.(error);
50951
50972
  return null;
50952
50973
  }
50953
50974
  }
@@ -51162,7 +51183,7 @@ class EventEmitter {
51162
51183
  return this;
51163
51184
  }
51164
51185
  [disposeSymbol]() {
51165
- return void this[asyncDisposeSymbol]().catch(debugError);
51186
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51166
51187
  }
51167
51188
  async [asyncDisposeSymbol]() {
51168
51189
  for (const [type, handlers] of this.#handlers) {
@@ -51227,7 +51248,7 @@ let Browser$1 = class Browser extends EventEmitter {
51227
51248
  return await this.defaultBrowserContext().setPermission(origin, ...permissions);
51228
51249
  }
51229
51250
  [disposeSymbol]() {
51230
- return void this[asyncDisposeSymbol]().catch(debugError);
51251
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51231
51252
  }
51232
51253
  async [asyncDisposeSymbol]() {
51233
51254
  if (this.process()) {
@@ -51456,7 +51477,7 @@ class BrowserContext extends EventEmitter {
51456
51477
  return undefined;
51457
51478
  }
51458
51479
  [disposeSymbol]() {
51459
- return void this[asyncDisposeSymbol]().catch(debugError);
51480
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
51460
51481
  }
51461
51482
  async [asyncDisposeSymbol]() {
51462
51483
  await this.close();
@@ -52024,7 +52045,7 @@ class CSSQueryHandler extends QueryHandler {
52024
52045
  };
52025
52046
  }
52026
52047
 
52027
- const source = "\"use strict\";var N=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},G=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let s of B(e))!Y.call(t,s)&&s!==r&&N(t,s,{get:()=>e[s],enumerable:!(o=X(e,s))||o.enumerable});return t};var J=t=>G(N({},\"__esModule\",{value:!0}),t);var pe={};l(pe,{default:()=>he});module.exports=J(pe);var x=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends x{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(s=>s instanceof t?(s.#s&&r.add(s),s.valueOrThrow()):s);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#s;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#s),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#n;valueOrThrow(){return this.#n||(this.#n=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#n}};var L=new Map,W=t=>{let e=L.get(t);return e||(e=new Function(`return ${t}`)(),L.set(t,e),e)};var E={};l(E,{ariaQuerySelector:()=>z,ariaQuerySelectorAll:()=>b});var z=(t,e)=>globalThis.__ariaQuerySelector(t,e),b=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var v={};l(v,{cssQuerySelector:()=>K,cssQuerySelectorAll:()=>Z});var K=(t,e)=>t.querySelector(e),Z=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(s,i)=>{for(let n of o(s,i))return n;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(s,i)=>{let n=o(s,i);return n?[n]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>ee,pierceQuerySelectorAll:()=>te});var ee=(t,e)=>{let r=null,o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&!r&&n.matches(e)&&(r=n)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},te=(t,e)=>{let r=[],o=s=>{let i=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT);do{let n=i.currentNode;n.shadowRoot&&o(n.shadowRoot),!(n instanceof ShadowRoot)&&n!==s&&n.matches(e)&&r.push(n)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let s=await this.#e();if(!s){window.requestAnimationFrame(o);return}e.resolve(s),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var _={};l(_,{PCombinator:()=>H,pQuerySelector:()=>fe,pQuerySelectorAll:()=>$});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var re=new Set([\"checkbox\",\"image\",\"radio\"]),oe=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!re.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),I=new WeakMap,F=t=>{for(;t;)I.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,ne=new MutationObserver(t=>{for(let e of t)F(e.target)}),d=t=>{let e=I.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(oe(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{F(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ne.observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return I.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let s;o.shadowRoot?s=m(o.shadowRoot,e):s=m(o,e);for(let i of s)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>le,pierce:()=>g,pierceAll:()=>O});var ie=[\"hidden\",\"collapse\"],le=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),s=o&&!ie.includes(o.visibility)&&!ae(r);return e===s?t:!1};function ae(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ce=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ce(t)?yield t.shadowRoot:yield t}function*O(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let s=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],n;for(;(n=s.iterateNext())&&(i.push(n),!(r&&i.length===r)););for(let h=0;h<i.length;h++)n=i[h],yield n,i[h]=null};var ue=/[-\\w\\P{ASCII}*]/u,H=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(H||{}),V=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&ue.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){V(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!V(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let s of r.parentElement.children)if(++o,s===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*b(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,O),this.#t();break}default:this.#r=e,this.#t();break}}},M=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let s=0;for(let n=e.previousSibling;n;n=n.previousSibling)++s;let i=this.calculate(e.parentNode,[s]);return this.#e.set(e,i),[...i,...r]}},U=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[s=-1,...i]=e;return r===s?U(o,i):r<s?-1:1},de=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new M;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,s])=>U(o,s)).map(([o])=>o)},$=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let s=0;return o.some(i=>(typeof i==\"string\"?++s:s=0,s>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return de(a.flatMap(r,o=>{let s=new Q(t,o);return s.run(),s.elements}))},fe=async function(t,e){for await(let r of $(t,e))return r;return null};var me=Object.freeze({...E,...A,...R,..._,...C,...k,...D,...v,Deferred:c,createFunction:W,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),he=me;\n";
52048
+ const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var de=/[-\\w\\P{ASCII}*]/u,U=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(U||{}),H=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;\n";
52028
52049
 
52029
52050
  /**
52030
52051
  * @license
@@ -52817,14 +52838,7 @@ let JSHandle = (() => {
52817
52838
  }
52818
52839
  async getProperties() {
52819
52840
  const propertyNames = await this.evaluate(object => {
52820
- const enumerableProperties = [];
52821
- const descriptors = Object.getOwnPropertyDescriptors(object);
52822
- for (const propertyName in descriptors) {
52823
- if (descriptors[propertyName]?.enumerable) {
52824
- enumerableProperties.push(propertyName);
52825
- }
52826
- }
52827
- return enumerableProperties;
52841
+ return Object.keys(object ?? {});
52828
52842
  });
52829
52843
  const map = new Map();
52830
52844
  const results = await Promise.all(propertyNames.map(key => {
@@ -52849,7 +52863,7 @@ let JSHandle = (() => {
52849
52863
  return map;
52850
52864
  }
52851
52865
  [(_getProperty_decorators = [throwIfDisposed()], _getProperties_decorators = [throwIfDisposed()], disposeSymbol)]() {
52852
- return void this[asyncDisposeSymbol]().catch(debugError);
52866
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
52853
52867
  }
52854
52868
  [asyncDisposeSymbol]() {
52855
52869
  return this.dispose();
@@ -53059,7 +53073,7 @@ class Locator extends EventEmitter {
53059
53073
  return this.emit(LocatorEvent.Action, undefined);
53060
53074
  }), mergeMap(handle => {
53061
53075
  return from(handle.click(options)).pipe(catchError(err => {
53062
- void handle.dispose().catch(debugError);
53076
+ void handle.dispose().catch(debugCatchError);
53063
53077
  throw err;
53064
53078
  }));
53065
53079
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53200,7 +53214,7 @@ class Locator extends EventEmitter {
53200
53214
  }
53201
53215
  }))
53202
53216
  .pipe(catchError(err => {
53203
- void handle.dispose().catch(debugError);
53217
+ void handle.dispose().catch(debugCatchError);
53204
53218
  throw err;
53205
53219
  }));
53206
53220
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53215,7 +53229,7 @@ class Locator extends EventEmitter {
53215
53229
  return this.emit(LocatorEvent.Action, undefined);
53216
53230
  }), mergeMap(handle => {
53217
53231
  return from(handle.hover()).pipe(catchError(err => {
53218
- void handle.dispose().catch(debugError);
53232
+ void handle.dispose().catch(debugCatchError);
53219
53233
  throw err;
53220
53234
  }));
53221
53235
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -53237,7 +53251,7 @@ class Locator extends EventEmitter {
53237
53251
  el.scrollLeft = scrollLeft;
53238
53252
  }
53239
53253
  }, options?.scrollTop, options?.scrollLeft)).pipe(catchError(err => {
53240
- void handle.dispose().catch(debugError);
53254
+ void handle.dispose().catch(debugCatchError);
53241
53255
  throw err;
53242
53256
  }));
53243
53257
  }), this.operators.retryAndRaceWithSignalAndTimer(signal, cause));
@@ -55079,13 +55093,17 @@ var InterceptResolutionAction;
55079
55093
  })(InterceptResolutionAction || (InterceptResolutionAction = {}));
55080
55094
  function headersArray(headers) {
55081
55095
  const result = [];
55082
- for (const name in headers) {
55096
+ for (const name of Object.keys(headers)) {
55083
55097
  const value = headers[name];
55084
- if (!Object.is(value, undefined)) {
55085
- const values = Array.isArray(value) ? value : [value];
55086
- result.push(...values.map(value => {
55087
- return { name, value: value + '' };
55088
- }));
55098
+ if (value !== undefined) {
55099
+ if (Array.isArray(value)) {
55100
+ for (const v of value) {
55101
+ result.push({ name, value: v + '' });
55102
+ }
55103
+ }
55104
+ else {
55105
+ result.push({ name, value: value + '' });
55106
+ }
55089
55107
  }
55090
55108
  }
55091
55109
  return result;
@@ -55178,7 +55196,7 @@ function handleError(error) {
55178
55196
  error.originalMessage.includes('invalid argument')) {
55179
55197
  throw error;
55180
55198
  }
55181
- debugError(error);
55199
+ debugError?.(error);
55182
55200
  }
55183
55201
 
55184
55202
  /**
@@ -55667,7 +55685,7 @@ let Page = (() => {
55667
55685
  if (viewport && viewport.deviceScaleFactor !== 0) {
55668
55686
  await this.setViewport({ ...viewport, deviceScaleFactor: 0 });
55669
55687
  stack.defer(() => {
55670
- void this.setViewport(viewport).catch(debugError);
55688
+ void this.setViewport(viewport).catch(debugCatchError);
55671
55689
  });
55672
55690
  }
55673
55691
  return await this.mainFrame()
@@ -55761,7 +55779,7 @@ let Page = (() => {
55761
55779
  ...scrollDimensions,
55762
55780
  });
55763
55781
  stack.defer(async () => {
55764
- await this.setViewport(viewport).catch(debugError);
55782
+ await this.setViewport(viewport).catch(debugCatchError);
55765
55783
  });
55766
55784
  }
55767
55785
  }
@@ -55817,7 +55835,7 @@ let Page = (() => {
55817
55835
  [(_screenshot_decorators = [guarded(function () {
55818
55836
  return this.browser();
55819
55837
  })], disposeSymbol)]() {
55820
- return void this[asyncDisposeSymbol]().catch(debugError);
55838
+ return void this[asyncDisposeSymbol]().catch(debugCatchError);
55821
55839
  }
55822
55840
  async [asyncDisposeSymbol]() {
55823
55841
  await this.close();
@@ -56120,6 +56138,12 @@ let WebWorker$1 = class WebWorker extends EventEmitter {
56120
56138
  func = withSourcePuppeteerURLIfNone(this.evaluateHandle.name, func);
56121
56139
  return await this.mainRealm().evaluateHandle(func, ...args);
56122
56140
  }
56141
+ waitForFunction(workerFunction, options = {}, ...args) {
56142
+ return this.mainRealm().waitForFunction(workerFunction, {
56143
+ polling: 100,
56144
+ ...options,
56145
+ }, ...args);
56146
+ }
56123
56147
  async close() {
56124
56148
  throw new UnsupportedOperation('WebWorker.close() is not supported');
56125
56149
  }
@@ -56222,7 +56246,7 @@ class Accessibility {
56222
56246
  root.iframeSnapshot = iframeSnapshot ?? undefined;
56223
56247
  }
56224
56248
  catch (error) {
56225
- debugError(error);
56249
+ debugError?.(error);
56226
56250
  }
56227
56251
  }
56228
56252
  catch (e_1) {
@@ -56233,9 +56257,9 @@ class Accessibility {
56233
56257
  __disposeResources$4(env_1);
56234
56258
  }
56235
56259
  }
56236
- for (const child of root.children) {
56237
- await populateIframes(child);
56238
- }
56260
+ await Promise.all(root.children.map(child => {
56261
+ return populateIframes(child);
56262
+ }));
56239
56263
  };
56240
56264
  let needle = defaultRoot;
56241
56265
  if (!defaultRoot) {
@@ -56752,7 +56776,7 @@ let Binding$2 = class Binding {
56752
56776
  callbacks.get(seq).reject(error);
56753
56777
  callbacks.delete(seq);
56754
56778
  }, this.#name, id, error.message, error.stack)
56755
- .catch(debugError);
56779
+ .catch(debugCatchError);
56756
56780
  }
56757
56781
  else {
56758
56782
  await context
@@ -56761,7 +56785,7 @@ let Binding$2 = class Binding {
56761
56785
  callbacks.get(seq).reject(error);
56762
56786
  callbacks.delete(seq);
56763
56787
  }, this.#name, id, error)
56764
- .catch(debugError);
56788
+ .catch(debugCatchError);
56765
56789
  }
56766
56790
  }
56767
56791
  }
@@ -56898,7 +56922,7 @@ class CallbackRegistry {
56898
56922
  request(callback.id);
56899
56923
  }
56900
56924
  catch (error) {
56901
- callback.promise.catch(debugError).finally(() => {
56925
+ void callback.promise.catch(debugCatchError).finally(() => {
56902
56926
  this.#callbacks.delete(callback.id);
56903
56927
  });
56904
56928
  callback.reject(error);
@@ -57178,7 +57202,7 @@ class Connection extends EventEmitter {
57178
57202
  id,
57179
57203
  sessionId,
57180
57204
  });
57181
- debugProtocolSend(stringifiedMessage);
57205
+ debugProtocolSend?.(stringifiedMessage);
57182
57206
  this.#transport.send(stringifiedMessage);
57183
57207
  });
57184
57208
  }
@@ -57191,7 +57215,7 @@ class Connection extends EventEmitter {
57191
57215
  return setTimeout(r, this.#delay);
57192
57216
  });
57193
57217
  }
57194
- debugProtocolReceive(message);
57218
+ debugProtocolReceive?.(message);
57195
57219
  const object = JSON.parse(message);
57196
57220
  if (object.method === 'Target.attachedToTarget') {
57197
57221
  const sessionId = object.params.sessionId;
@@ -57389,7 +57413,7 @@ class JSCoverage {
57389
57413
  this.#scriptSources.set(event.scriptId, response.scriptSource);
57390
57414
  }
57391
57415
  catch (error) {
57392
- debugError(error);
57416
+ debugError?.(error);
57393
57417
  }
57394
57418
  }
57395
57419
  async stop() {
@@ -57478,7 +57502,7 @@ class CSSCoverage {
57478
57502
  this.#stylesheetSources.set(header.styleSheetId, response.text);
57479
57503
  }
57480
57504
  catch (error) {
57481
- debugError(error);
57505
+ debugError?.(error);
57482
57506
  }
57483
57507
  }
57484
57508
  async stop() {
@@ -57651,6 +57675,8 @@ let EmulationManager = (() => {
57651
57675
  let _private_emulateIdleState_descriptor;
57652
57676
  let _private_emulateTimezone_decorators;
57653
57677
  let _private_emulateTimezone_descriptor;
57678
+ let _private_emulateLocale_decorators;
57679
+ let _private_emulateLocale_descriptor;
57654
57680
  let _private_emulateVisionDeficiency_decorators;
57655
57681
  let _private_emulateVisionDeficiency_descriptor;
57656
57682
  let _private_emulateCpuThrottling_decorators;
@@ -57673,6 +57699,7 @@ let EmulationManager = (() => {
57673
57699
  _private_applyViewport_decorators = [invokeAtMostOnceForArguments];
57674
57700
  _private_emulateIdleState_decorators = [invokeAtMostOnceForArguments];
57675
57701
  _private_emulateTimezone_decorators = [invokeAtMostOnceForArguments];
57702
+ _private_emulateLocale_decorators = [invokeAtMostOnceForArguments];
57676
57703
  _private_emulateVisionDeficiency_decorators = [invokeAtMostOnceForArguments];
57677
57704
  _private_emulateCpuThrottling_decorators = [invokeAtMostOnceForArguments];
57678
57705
  _private_emulateMediaFeatures_decorators = [invokeAtMostOnceForArguments];
@@ -57688,7 +57715,7 @@ let EmulationManager = (() => {
57688
57715
  client.send('Emulation.setTouchEmulationEnabled', {
57689
57716
  enabled: false,
57690
57717
  }),
57691
- ]).catch(debugError);
57718
+ ]).catch(debugCatchError);
57692
57719
  return;
57693
57720
  }
57694
57721
  const { viewport } = viewportState;
@@ -57711,7 +57738,7 @@ let EmulationManager = (() => {
57711
57738
  })
57712
57739
  .catch(err => {
57713
57740
  if (err.message.includes('Target does not support metrics override')) {
57714
- debugError(err);
57741
+ debugError?.(err);
57715
57742
  return;
57716
57743
  }
57717
57744
  throw err;
@@ -57751,6 +57778,14 @@ let EmulationManager = (() => {
57751
57778
  throw error;
57752
57779
  }
57753
57780
  }, "#emulateTimezone") }, _private_emulateTimezone_decorators, { kind: "method", name: "#emulateTimezone", static: false, private: true, access: { has: obj => #emulateTimezone in obj, get: obj => obj.#emulateTimezone }, metadata: _metadata }, null, _instanceExtraInitializers);
57781
+ __esDecorate$3(this, _private_emulateLocale_descriptor = { value: __setFunctionName$1(async function (client, localeState) {
57782
+ if (!localeState.active) {
57783
+ return;
57784
+ }
57785
+ await client.send('Emulation.setLocaleOverride', {
57786
+ locale: localeState.locale,
57787
+ });
57788
+ }, "#emulateLocale") }, _private_emulateLocale_decorators, { kind: "method", name: "#emulateLocale", static: false, private: true, access: { has: obj => #emulateLocale in obj, get: obj => obj.#emulateLocale }, metadata: _metadata }, null, _instanceExtraInitializers);
57754
57789
  __esDecorate$3(this, _private_emulateVisionDeficiency_descriptor = { value: __setFunctionName$1(async function (client, visionDeficiency) {
57755
57790
  if (!visionDeficiency.active) {
57756
57791
  return;
@@ -57834,6 +57869,9 @@ let EmulationManager = (() => {
57834
57869
  #timezoneState = new EmulatedState({
57835
57870
  active: false,
57836
57871
  }, this, this.#emulateTimezone);
57872
+ #localeState = new EmulatedState({
57873
+ active: false,
57874
+ }, this, this.#emulateLocale);
57837
57875
  #visionDeficiencyState = new EmulatedState({
57838
57876
  active: false,
57839
57877
  }, this, this.#emulateVisionDeficiency);
@@ -57880,7 +57918,7 @@ let EmulationManager = (() => {
57880
57918
  this.#secondaryClients.delete(client);
57881
57919
  });
57882
57920
  void Promise.all(this.#states.map(s => {
57883
- return s.sync().catch(debugError);
57921
+ return s.sync().catch(debugCatchError);
57884
57922
  }));
57885
57923
  }
57886
57924
  get javascriptEnabled() {
@@ -57921,6 +57959,13 @@ let EmulationManager = (() => {
57921
57959
  active: true,
57922
57960
  });
57923
57961
  }
57962
+ get #emulateLocale() { return _private_emulateLocale_descriptor.value; }
57963
+ async emulateLocale(locale) {
57964
+ await this.#localeState.setState({
57965
+ locale,
57966
+ active: true,
57967
+ });
57968
+ }
57924
57969
  get #emulateVisionDeficiency() { return _private_emulateVisionDeficiency_descriptor.value; }
57925
57970
  async emulateVisionDeficiency(type) {
57926
57971
  const visionDeficiencies = new Set([
@@ -58494,7 +58539,7 @@ async function releaseObject(client, remoteObject) {
58494
58539
  await client
58495
58540
  .send('Runtime.releaseObject', { objectId: remoteObject.objectId })
58496
58541
  .catch(error => {
58497
- debugError(error);
58542
+ debugError?.(error);
58498
58543
  });
58499
58544
  }
58500
58545
 
@@ -58594,7 +58639,7 @@ let CdpElementHandle = (() => {
58594
58639
  });
58595
58640
  }
58596
58641
  catch (error) {
58597
- debugError(error);
58642
+ debugError?.(error);
58598
58643
  await super.scrollIntoView();
58599
58644
  }
58600
58645
  }
@@ -58804,7 +58849,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58804
58849
  return;
58805
58850
  }
58806
58851
  }
58807
- debugError(error);
58852
+ debugError?.(error);
58808
58853
  }
58809
58854
  }
58810
58855
  catch (e_1) {
@@ -58840,7 +58885,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58840
58885
  await binding?.run(this, seq, args, isTrivial);
58841
58886
  }
58842
58887
  catch (err) {
58843
- debugError(err);
58888
+ debugError?.(err);
58844
58889
  }
58845
58890
  }
58846
58891
  get id() {
@@ -58880,7 +58925,7 @@ let ExecutionContext$1 = class ExecutionContext extends EventEmitter {
58880
58925
  await this.#addBinding(binding);
58881
58926
  }
58882
58927
  catch (err) {
58883
- debugError(err);
58928
+ debugError?.(err);
58884
58929
  }
58885
58930
  }
58886
58931
  async evaluate(pageFunction, ...args) {
@@ -59049,6 +59094,7 @@ class CdpWebWorker extends WebWorker$1 {
59049
59094
  #id;
59050
59095
  #targetType;
59051
59096
  #emitter;
59097
+ #workerLoaded = new Deferred();
59052
59098
  get internalEmitter() {
59053
59099
  return this.#emitter;
59054
59100
  }
@@ -59062,6 +59108,9 @@ class CdpWebWorker extends WebWorker$1 {
59062
59108
  this.#client.once('Runtime.executionContextCreated', async (event) => {
59063
59109
  this.#world.setContext(new ExecutionContext$1(client, event.context, this.#world));
59064
59110
  });
59111
+ this.#client.once('Inspector.workerScriptLoaded', () => {
59112
+ this.#workerLoaded.resolve();
59113
+ });
59065
59114
  this.#world.emitter.on('consoleapicalled', async (event) => {
59066
59115
  try {
59067
59116
  const values = event.args.map(arg => {
@@ -59071,7 +59120,7 @@ class CdpWebWorker extends WebWorker$1 {
59071
59120
  const noWorkerListeners = this.listenerCount(WebWorkerEvent.Console) === 0;
59072
59121
  if (noInternalListeners && noWorkerListeners) {
59073
59122
  for (const value of values) {
59074
- void value.dispose().catch(debugError);
59123
+ void value.dispose().catch(debugCatchError);
59075
59124
  }
59076
59125
  return;
59077
59126
  }
@@ -59082,15 +59131,17 @@ class CdpWebWorker extends WebWorker$1 {
59082
59131
  }
59083
59132
  }
59084
59133
  catch (err) {
59085
- debugError(err);
59134
+ debugError?.(err);
59086
59135
  }
59087
59136
  });
59088
59137
  this.#client.on('Runtime.exceptionThrown', exceptionThrown);
59089
59138
  this.#client.once(CDPSessionEvent.Disconnected, () => {
59090
59139
  this.#world.dispose();
59091
59140
  });
59092
- networkManager?.addClient(this.#client).catch(debugError);
59093
- this.#client.send('Runtime.enable').catch(debugError);
59141
+ networkManager
59142
+ ?.addClient(this.#client)
59143
+ .catch(debugCatchError ?? (() => { }));
59144
+ this.#client.send('Runtime.enable').catch(debugCatchError ?? (() => { }));
59094
59145
  }
59095
59146
  mainRealm() {
59096
59147
  return this.#world;
@@ -59121,6 +59172,14 @@ class CdpWebWorker extends WebWorker$1 {
59121
59172
  });
59122
59173
  }
59123
59174
  }
59175
+ async evaluate(func, ...args) {
59176
+ await this.#workerLoaded.valueOrThrow();
59177
+ return await super.evaluate(func, ...args);
59178
+ }
59179
+ async evaluateHandle(func, ...args) {
59180
+ await this.#workerLoaded.valueOrThrow();
59181
+ return await super.evaluateHandle(func, ...args);
59182
+ }
59124
59183
  }
59125
59184
 
59126
59185
  /**
@@ -59684,7 +59743,7 @@ let CdpFrame = (() => {
59684
59743
  this.#client.send('Runtime.addBinding', {
59685
59744
  name: CDP_BINDING_PREFIX + binding.name,
59686
59745
  }),
59687
- this.evaluate(binding.initSource).catch(debugError),
59746
+ this.evaluate(binding.initSource).catch(debugCatchError),
59688
59747
  ]);
59689
59748
  }
59690
59749
  async removeExposedFunctionBinding(binding) {
@@ -59697,7 +59756,7 @@ let CdpFrame = (() => {
59697
59756
  }),
59698
59757
  this.evaluate(name => {
59699
59758
  globalThis[name] = undefined;
59700
- }, binding.name).catch(debugError),
59759
+ }, binding.name).catch(debugCatchError),
59701
59760
  ]);
59702
59761
  }
59703
59762
  async waitForDevicePrompt(options = {}) {
@@ -59918,7 +59977,7 @@ class CdpHTTPRequest extends HTTPRequest {
59918
59977
  return result.postData;
59919
59978
  }
59920
59979
  catch (err) {
59921
- debugError(err);
59980
+ debugError?.(err);
59922
59981
  return;
59923
59982
  }
59924
59983
  }
@@ -60332,8 +60391,10 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60332
60391
  #userCacheDisabled;
60333
60392
  #emulatedNetworkConditions;
60334
60393
  #userAgent;
60394
+ #defaultUserAgent;
60335
60395
  #userAgentMetadata;
60336
60396
  #platform;
60397
+ #acceptLanguage;
60337
60398
  #handlers = [
60338
60399
  ['Fetch.requestPaused', this.#onRequestPaused],
60339
60400
  ['Fetch.authRequired', this.#onAuthRequired],
@@ -60348,10 +60409,11 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60348
60409
  ];
60349
60410
  #clients = new Map();
60350
60411
  #networkEnabled = true;
60351
- constructor(frameManager, networkEnabled) {
60412
+ constructor(frameManager, networkEnabled, defaultUserAgent) {
60352
60413
  super();
60353
60414
  this.#frameManager = frameManager;
60354
60415
  this.#networkEnabled = networkEnabled ?? true;
60416
+ this.#defaultUserAgent = defaultUserAgent;
60355
60417
  }
60356
60418
  #canIgnoreError(error) {
60357
60419
  return (isErrorLike$2(error) &&
@@ -60496,13 +60558,19 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60496
60558
  this.#platform = platform;
60497
60559
  await this.#applyToAllClients(this.#applyUserAgent.bind(this));
60498
60560
  }
60561
+ async setAcceptLanguage(acceptLanguage) {
60562
+ this.#acceptLanguage = acceptLanguage;
60563
+ await this.#applyToAllClients(this.#applyUserAgent.bind(this));
60564
+ }
60499
60565
  async #applyUserAgent(client) {
60500
- if (this.#userAgent === undefined) {
60566
+ const userAgent = this.#userAgent ?? this.#defaultUserAgent;
60567
+ if (userAgent === undefined) {
60501
60568
  return;
60502
60569
  }
60503
60570
  try {
60504
60571
  await client.send('Network.setUserAgentOverride', {
60505
- userAgent: this.#userAgent,
60572
+ userAgent,
60573
+ acceptLanguage: this.#acceptLanguage,
60506
60574
  userAgentMetadata: this.#userAgentMetadata,
60507
60575
  platform: this.#platform,
60508
60576
  });
@@ -60603,21 +60671,21 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60603
60671
  username: undefined,
60604
60672
  password: undefined,
60605
60673
  };
60606
- client
60674
+ void client
60607
60675
  .send('Fetch.continueWithAuth', {
60608
60676
  requestId: event.requestId,
60609
60677
  authChallengeResponse: { response, username, password },
60610
60678
  })
60611
- .catch(debugError);
60679
+ .catch(debugCatchError);
60612
60680
  }
60613
60681
  #onRequestPaused(client, event) {
60614
60682
  if (!this.#userRequestInterceptionEnabled &&
60615
60683
  this.#protocolRequestInterceptionEnabled) {
60616
- client
60684
+ void client
60617
60685
  .send('Fetch.continueRequest', {
60618
60686
  requestId: event.requestId,
60619
60687
  })
60620
- .catch(debugError);
60688
+ .catch(debugCatchError);
60621
60689
  }
60622
60690
  const { networkId: networkRequestId, requestId: fetchRequestId } = event;
60623
60691
  if (!networkRequestId) {
@@ -60719,7 +60787,7 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60719
60787
  request = this.#networkEventManager.getRequest(event.requestId);
60720
60788
  }
60721
60789
  if (!request) {
60722
- debugError(new Error(`Request ${event.requestId} was served from cache but we could not find the corresponding request object`));
60790
+ debugError?.(new Error(`Request ${event.requestId} was served from cache but we could not find the corresponding request object`));
60723
60791
  return;
60724
60792
  }
60725
60793
  this.emit(NetworkManagerEvent.RequestServedFromCache, request);
@@ -60740,7 +60808,7 @@ let NetworkManager$2 = class NetworkManager extends EventEmitter {
60740
60808
  }
60741
60809
  const extraInfos = this.#networkEventManager.responseExtraInfo(responseReceived.requestId);
60742
60810
  if (extraInfos.length) {
60743
- debugError(new Error('Unexpected extraInfo events for request ' +
60811
+ debugError?.(new Error('Unexpected extraInfo events for request ' +
60744
60812
  responseReceived.requestId));
60745
60813
  }
60746
60814
  if (responseReceived.response.fromDiskCache) {
@@ -60877,15 +60945,15 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
60877
60945
  get client() {
60878
60946
  return this.#client;
60879
60947
  }
60880
- constructor(client, page, timeoutSettings) {
60948
+ constructor(client, page, timeoutSettings, defaultUserAgent) {
60881
60949
  super();
60882
60950
  this.#client = client;
60883
60951
  this.#page = page;
60884
- this.#networkManager = new NetworkManager$2(this, page.browser().isNetworkEnabled());
60952
+ this.#networkManager = new NetworkManager$2(this, page.browser().isNetworkEnabled(), defaultUserAgent);
60885
60953
  this.#timeoutSettings = timeoutSettings;
60886
60954
  this.setupEventListeners(this.#client);
60887
60955
  client.once(CDPSessionEvent.Disconnected, () => {
60888
- this.#onClientDisconnect().catch(debugError);
60956
+ void this.#onClientDisconnect().catch(debugCatchError);
60889
60957
  });
60890
60958
  }
60891
60959
  async #onClientDisconnect() {
@@ -60926,7 +60994,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
60926
60994
  }
60927
60995
  this.setupEventListeners(client);
60928
60996
  client.once(CDPSessionEvent.Disconnected, () => {
60929
- this.#onClientDisconnect().catch(debugError);
60997
+ void this.#onClientDisconnect().catch(debugCatchError);
60930
60998
  });
60931
60999
  await this.initialize(client, frame);
60932
61000
  await this.#networkManager.addClient(client);
@@ -61064,7 +61132,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61064
61132
  .send('Page.removeScriptToEvaluateOnNewDocument', {
61065
61133
  identifier,
61066
61134
  })
61067
- .catch(debugError);
61135
+ .catch(debugCatchError);
61068
61136
  }));
61069
61137
  }
61070
61138
  onAttachedToTarget(target) {
@@ -61076,7 +61144,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61076
61144
  frame.updateClient(target._session());
61077
61145
  }
61078
61146
  this.setupEventListeners(target._session());
61079
- void this.initialize(target._session(), frame).catch(debugError);
61147
+ void this.initialize(target._session(), frame).catch(debugCatchError);
61080
61148
  }
61081
61149
  _deviceRequestPromptManager(client) {
61082
61150
  let manager = this.#deviceRequestPromptManagerMap.get(client);
@@ -61185,7 +61253,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61185
61253
  worldName: name,
61186
61254
  grantUniveralAccess: true,
61187
61255
  })
61188
- .catch(debugError);
61256
+ .catch(debugCatchError);
61189
61257
  }));
61190
61258
  this.#isolatedWorlds.add(key);
61191
61259
  }
@@ -61245,7 +61313,7 @@ let FrameManager$1 = class FrameManager extends EventEmitter {
61245
61313
  else if (this.#isExtensionOrigin(origin)) {
61246
61314
  const extId = this.#extractExtensionId(origin);
61247
61315
  if (!extId) {
61248
- debugError('Error while parsing extension id');
61316
+ debugError?.('Error while parsing extension id');
61249
61317
  return;
61250
61318
  }
61251
61319
  if (frame.extensionWorlds[extId]) {
@@ -62283,7 +62351,7 @@ class WebMCPToolCall {
62283
62351
  }
62284
62352
  catch (error) {
62285
62353
  this.input = {};
62286
- debugError(error);
62354
+ debugError?.(error);
62287
62355
  }
62288
62356
  }
62289
62357
  }
@@ -62302,6 +62370,7 @@ class WebMCP extends EventEmitter {
62302
62370
  const frameTools = this.#tools.get(tool.frameId) ?? new Map();
62303
62371
  if (!this.#tools.has(tool.frameId)) {
62304
62372
  this.#tools.set(tool.frameId, frameTools);
62373
+ this.#listenToContextDestroyed(frame);
62305
62374
  }
62306
62375
  const addedTool = new WebMCPTool(this, tool, frame);
62307
62376
  frameTools.set(tool.name, addedTool);
@@ -62345,7 +62414,7 @@ class WebMCP extends EventEmitter {
62345
62414
  };
62346
62415
  this.emit('toolresponded', response);
62347
62416
  };
62348
- #onFrameNavigated = (frame) => {
62417
+ #onContextDisposed = (frame) => {
62349
62418
  this.#pendingCalls.clear();
62350
62419
  const frameTools = this.#tools.get(frame._id);
62351
62420
  if (!frameTools) {
@@ -62357,15 +62426,19 @@ class WebMCP extends EventEmitter {
62357
62426
  this.emit('toolsremoved', { tools });
62358
62427
  }
62359
62428
  };
62429
+ #listenToContextDestroyed(frame) {
62430
+ frame.mainRealm().context?.once('disposed', () => {
62431
+ this.#onContextDisposed(frame);
62432
+ });
62433
+ }
62360
62434
  constructor(client, frameManager) {
62361
62435
  super();
62362
62436
  this.#client = client;
62363
62437
  this.#frameManager = frameManager;
62364
- this.#frameManager.on(FrameManagerEvent.FrameNavigated, this.#onFrameNavigated);
62365
62438
  this.#bindListeners();
62366
62439
  }
62367
62440
  async initialize() {
62368
- return await this.#client.send('WebMCP.enable').catch(debugError);
62441
+ return await this.#client.send('WebMCP.enable').catch(debugCatchError);
62369
62442
  }
62370
62443
  async invokeTool(tool, input) {
62371
62444
  return await this.#client.send('WebMCP.invokeTool', {
@@ -62464,7 +62537,7 @@ function convertSameSiteFromPuppeteerToCdp(sameSite) {
62464
62537
  }
62465
62538
  class CdpPage extends Page {
62466
62539
  static async _create(client, target, defaultViewport) {
62467
- const page = new CdpPage(client, target);
62540
+ const page = new CdpPage(client, target, await target.browser().userAgent());
62468
62541
  await page.#initialize();
62469
62542
  if (defaultViewport) {
62470
62543
  try {
@@ -62472,7 +62545,7 @@ class CdpPage extends Page {
62472
62545
  }
62473
62546
  catch (err) {
62474
62547
  if (isErrorLike$2(err) && isTargetClosedError(err)) {
62475
- debugError(err);
62548
+ debugError?.(err);
62476
62549
  }
62477
62550
  else {
62478
62551
  throw err;
@@ -62504,7 +62577,7 @@ class CdpPage extends Page {
62504
62577
  #sessionCloseDeferred = Deferred.create();
62505
62578
  #serviceWorkerBypassed = false;
62506
62579
  #userDragInterceptionEnabled = false;
62507
- constructor(client, target) {
62580
+ constructor(client, target, defaultUserAgent) {
62508
62581
  super();
62509
62582
  this.#primaryTargetClient = client;
62510
62583
  this.#tabTargetClient = client.parentSession();
@@ -62517,7 +62590,7 @@ class CdpPage extends Page {
62517
62590
  this.#keyboard = new CdpKeyboard(client);
62518
62591
  this.#mouse = new CdpMouse(client, this.#keyboard);
62519
62592
  this.#touchscreen = new CdpTouchscreen(client, this.#keyboard);
62520
- this.#frameManager = new FrameManager$1(client, this, this._timeoutSettings);
62593
+ this.#frameManager = new FrameManager$1(client, this, this._timeoutSettings, defaultUserAgent);
62521
62594
  this.#emulationManager = new EmulationManager(client);
62522
62595
  this.#tracing = new Tracing(client);
62523
62596
  this.#webmcp = new WebMCP(client, this.#frameManager);
@@ -62559,14 +62632,14 @@ class CdpPage extends Page {
62559
62632
  this.#tabTargetClient.on(CDPSessionEvent.Swapped, this.#onActivation.bind(this));
62560
62633
  this.#tabTargetClient.on(CDPSessionEvent.Ready, this.#onSecondaryTarget.bind(this));
62561
62634
  this.#targetManager.on("targetGone" , this.#onDetachedFromTarget);
62562
- this.#tabTarget._isClosedDeferred
62635
+ void this.#tabTarget._isClosedDeferred
62563
62636
  .valueOrThrow()
62564
62637
  .then(() => {
62565
62638
  this.#targetManager.off("targetGone" , this.#onDetachedFromTarget);
62566
62639
  this.emit("close" , undefined);
62567
62640
  this.#closed = true;
62568
62641
  })
62569
- .catch(debugError);
62642
+ .catch(debugCatchError);
62570
62643
  this.#setupPrimaryTargetListeners();
62571
62644
  this.#attachExistingTargets();
62572
62645
  }
@@ -62608,10 +62681,12 @@ class CdpPage extends Page {
62608
62681
  if (session.target()._subtype() !== 'prerender') {
62609
62682
  return;
62610
62683
  }
62611
- this.#frameManager.registerSpeculativeSession(session).catch(debugError);
62612
- this.#emulationManager
62684
+ void this.#frameManager
62613
62685
  .registerSpeculativeSession(session)
62614
- .catch(debugError);
62686
+ .catch(debugCatchError);
62687
+ void this.#emulationManager
62688
+ .registerSpeculativeSession(session)
62689
+ .catch(debugCatchError);
62615
62690
  }
62616
62691
  #setupPrimaryTargetListeners() {
62617
62692
  const clientEmitter = new EventEmitter(this.#primaryTargetClient);
@@ -62652,7 +62727,7 @@ class CdpPage extends Page {
62652
62727
  const noListenersForConsoleOnWorker = worker.listenerCount(WebWorkerEvent.Console) === 0;
62653
62728
  if (noListenersForConsoleOnPage && noListenersForConsoleOnWorker) {
62654
62729
  for (const arg of message.args()) {
62655
- void arg.dispose().catch(debugError);
62730
+ void arg.dispose().catch(debugCatchError);
62656
62731
  }
62657
62732
  return;
62658
62733
  }
@@ -62675,7 +62750,7 @@ class CdpPage extends Page {
62675
62750
  }
62676
62751
  catch (err) {
62677
62752
  if (isErrorLike$2(err) && isTargetClosedError(err)) {
62678
- debugError(err);
62753
+ debugError?.(err);
62679
62754
  }
62680
62755
  else {
62681
62756
  throw err;
@@ -63050,7 +63125,7 @@ class CdpPage extends Page {
63050
63125
  if (!hasPageConsoleListeners) {
63051
63126
  if (!hasWorkerConsoleListeners) {
63052
63127
  for (const value of values) {
63053
- void value.dispose().catch(debugError);
63128
+ void value.dispose().catch(debugCatchError);
63054
63129
  }
63055
63130
  }
63056
63131
  return;
@@ -63144,6 +63219,10 @@ class CdpPage extends Page {
63144
63219
  async emulateTimezone(timezoneId) {
63145
63220
  return await this.#emulationManager.emulateTimezone(timezoneId);
63146
63221
  }
63222
+ async emulateLocale(locale) {
63223
+ await this.#emulationManager.emulateLocale(locale);
63224
+ await this.#frameManager.networkManager.setAcceptLanguage(locale);
63225
+ }
63147
63226
  async emulateIdleState(overrides) {
63148
63227
  return await this.#emulationManager.emulateIdleState(overrides);
63149
63228
  }
@@ -63180,7 +63259,7 @@ class CdpPage extends Page {
63180
63259
  stack.defer(async () => {
63181
63260
  await this.#emulationManager
63182
63261
  .resetDefaultBackgroundColor()
63183
- .catch(debugError);
63262
+ .catch(debugCatchError);
63184
63263
  });
63185
63264
  }
63186
63265
  let clip = userClip;
@@ -63537,23 +63616,21 @@ class CdpExtension extends Extension {
63537
63616
  return (target.type() === 'service_worker' &&
63538
63617
  targetUrl.startsWith('chrome-extension://' + this.id));
63539
63618
  });
63540
- const workers = [];
63541
- for (const target of extensionWorkers) {
63619
+ const workers = await Promise.all(extensionWorkers.map(async (target) => {
63542
63620
  try {
63543
- const worker = await target.worker();
63544
- if (worker) {
63545
- workers.push(worker);
63546
- }
63621
+ return await target.worker();
63547
63622
  }
63548
63623
  catch (err) {
63549
63624
  if (this.#canIgnoreError(err)) {
63550
- debugError(err);
63551
- continue;
63625
+ debugError?.(err);
63626
+ return null;
63552
63627
  }
63553
63628
  throw err;
63554
63629
  }
63555
- }
63556
- return workers;
63630
+ }));
63631
+ return workers.filter((worker) => {
63632
+ return worker !== null;
63633
+ });
63557
63634
  }
63558
63635
  async pages() {
63559
63636
  const targets = this.#browser.targets();
@@ -63568,7 +63645,7 @@ class CdpExtension extends Extension {
63568
63645
  }
63569
63646
  catch (err) {
63570
63647
  if (this.#canIgnoreError(err)) {
63571
- debugError(err);
63648
+ debugError?.(err);
63572
63649
  return null;
63573
63650
  }
63574
63651
  throw err;
@@ -63751,7 +63828,7 @@ class PageTarget extends CdpTarget {
63751
63828
  this.#defaultViewport = defaultViewport ?? undefined;
63752
63829
  }
63753
63830
  _initialize() {
63754
- this._initializedDeferred
63831
+ void this._initializedDeferred
63755
63832
  .valueOrThrow()
63756
63833
  .then(async (result) => {
63757
63834
  if (result === InitializationStatus.ABORTED) {
@@ -63772,7 +63849,7 @@ class PageTarget extends CdpTarget {
63772
63849
  openerPage.emit("popup" , popupPage);
63773
63850
  return true;
63774
63851
  })
63775
- .catch(debugError);
63852
+ .catch(debugCatchError);
63776
63853
  this._checkIfInitialized();
63777
63854
  }
63778
63855
  async page() {
@@ -64714,12 +64791,14 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64714
64791
  }
64715
64792
  }
64716
64793
  #silentDetach = async (session, parentSession) => {
64717
- await session.send('Runtime.runIfWaitingForDebugger').catch(debugError);
64794
+ await session
64795
+ .send('Runtime.runIfWaitingForDebugger')
64796
+ .catch(debugCatchError);
64718
64797
  await parentSession
64719
64798
  .send('Target.detachFromTarget', {
64720
64799
  sessionId: session.id(),
64721
64800
  })
64722
- .catch(debugError);
64801
+ .catch(debugCatchError);
64723
64802
  };
64724
64803
  #getParentTarget = (parentSession) => {
64725
64804
  return parentSession instanceof CdpCDPSession
@@ -64786,6 +64865,7 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64786
64865
  throw new Error(`Session ${event.sessionId} was not created.`);
64787
64866
  }
64788
64867
  if (!this.#connection.isAutoAttached(targetInfo.targetId)) {
64868
+ await this.#maybeSetupNetworkConditions(session, targetInfo);
64789
64869
  return;
64790
64870
  }
64791
64871
  if (!this.#initialAttachDone && !this.isUrlAllowed(targetInfo.url)) {
@@ -64793,6 +64873,13 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64793
64873
  return;
64794
64874
  }
64795
64875
  if (targetInfo.type === 'service_worker') {
64876
+ if (!this.isUrlAllowed(targetInfo.url)) {
64877
+ await Promise.all([
64878
+ this.#maybeSetupNetworkConditions(session, targetInfo),
64879
+ session.send('Runtime.runIfWaitingForDebugger'),
64880
+ ]).catch(debugCatchError);
64881
+ return;
64882
+ }
64796
64883
  await this.#silentDetach(session, parentSession);
64797
64884
  if (this.#attachedTargetsByTargetId.has(targetInfo.targetId) ||
64798
64885
  this.#ignoredTargets.has(targetInfo.targetId) ||
@@ -64849,9 +64936,9 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64849
64936
  autoAttach: true,
64850
64937
  filter: this.#discoveryFilter,
64851
64938
  }),
64852
- this.#maybeSetupNetworkConditions(session),
64939
+ this.#maybeSetupNetworkConditions(session, targetInfo),
64853
64940
  session.send('Runtime.runIfWaitingForDebugger'),
64854
- ]).catch(debugError);
64941
+ ]).catch(debugCatchError);
64855
64942
  };
64856
64943
  #finishInitializationIfReady(targetId) {
64857
64944
  if (targetId !== undefined) {
@@ -64905,7 +64992,7 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64905
64992
  }
64906
64993
  return result;
64907
64994
  }
64908
- #maybeSetupNetworkConditions = async (session) => {
64995
+ #maybeSetupNetworkConditions = async (session, targetInfo) => {
64909
64996
  if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
64910
64997
  return;
64911
64998
  }
@@ -64937,10 +65024,18 @@ let TargetManager$1 = class TargetManager extends EventEmitter {
64937
65024
  uploadThroughput: -1,
64938
65025
  });
64939
65026
  }
64940
- await session.send('Network.emulateNetworkConditionsByRule', {
65027
+ const needsNetwork = targetInfo.type === 'worker' ||
65028
+ targetInfo.type === 'service_worker' ||
65029
+ targetInfo.type === 'shared_worker';
65030
+ const promises = [];
65031
+ if (needsNetwork) {
65032
+ promises.push(session.send('Network.enable'));
65033
+ }
65034
+ promises.push(session.send('Network.emulateNetworkConditionsByRule', {
64941
65035
  offline: this.#blocklist.length > 0 ? true : undefined,
64942
65036
  matchedNetworkConditions,
64943
- });
65037
+ }));
65038
+ await Promise.all(promises).catch(debugCatchError);
64944
65039
  };
64945
65040
  };
64946
65041
 
@@ -65325,7 +65420,7 @@ async function _connectToCdpBrowser(connectionTransport, url, options) {
65325
65420
  false, idGenerator);
65326
65421
  const { browserContextIds } = await connection.send('Target.getBrowserContexts');
65327
65422
  const browser = await CdpBrowser._create(connection, browserContextIds, acceptInsecureCerts, defaultViewport, downloadBehavior, undefined, () => {
65328
- return connection.send('Browser.close').catch(debugError);
65423
+ return connection.send('Browser.close').catch(debugCatchError);
65329
65424
  }, targetFilter, isPageTarget, undefined, networkEnabled, issuesEnabled, handleDevToolsAsPage, blocklist, allowlist);
65330
65425
  return browser;
65331
65426
  }
@@ -65383,7 +65478,7 @@ class BrowserWebSocketTransport {
65383
65478
  this.onclose.call(null);
65384
65479
  }
65385
65480
  });
65386
- this.#ws.addEventListener('error', debugError);
65481
+ this.#ws.addEventListener('error', debugCatchError);
65387
65482
  }
65388
65483
  send(message) {
65389
65484
  this.#ws.send(message);
@@ -67015,7 +67110,9 @@ async function getBiDiConnection(connectionTransport, url, options) {
67015
67110
  return {
67016
67111
  bidiConnection: pureBidiConnection,
67017
67112
  closeCallback: async () => {
67018
- await pureBidiConnection.send('browser.close', {}).catch(debugError);
67113
+ await pureBidiConnection
67114
+ .send('browser.close', {})
67115
+ .catch(debugCatchError);
67019
67116
  },
67020
67117
  };
67021
67118
  }
@@ -67037,7 +67134,7 @@ async function getBiDiConnection(connectionTransport, url, options) {
67037
67134
  cdpConnection,
67038
67135
  bidiConnection: bidiOverCdpConnection,
67039
67136
  closeCallback: async () => {
67040
- await cdpConnection.send('Browser.close').catch(debugError);
67137
+ await cdpConnection.send('Browser.close').catch(debugCatchError);
67041
67138
  },
67042
67139
  };
67043
67140
  }
@@ -67061,6 +67158,16 @@ function assertSupportedUrlRestrictions(options) {
67061
67158
  (options.blocklist || options.allowlist)) {
67062
67159
  throw new Error('blocklist and allowlist are only supported with the CDP protocol');
67063
67160
  }
67161
+ if (options.blocklist) {
67162
+ for (const rule of options.blocklist) {
67163
+ new Y$1(rule);
67164
+ }
67165
+ }
67166
+ if (options.allowlist) {
67167
+ for (const rule of options.allowlist) {
67168
+ new Y$1(rule);
67169
+ }
67170
+ }
67064
67171
  }
67065
67172
  async function _connectToBrowser(options) {
67066
67173
  assertSupportedUrlRestrictions(options);
@@ -67202,9 +67309,9 @@ class Puppeteer {
67202
67309
  * SPDX-License-Identifier: Apache-2.0
67203
67310
  */
67204
67311
  const PUPPETEER_REVISIONS = Object.freeze({
67205
- chrome: '149.0.7827.22',
67206
- 'chrome-headless-shell': '149.0.7827.22',
67207
- firefox: 'stable_151.0',
67312
+ chrome: '150.0.7871.24',
67313
+ 'chrome-headless-shell': '150.0.7871.24',
67314
+ firefox: 'stable_152.0.1',
67208
67315
  });
67209
67316
 
67210
67317
  /**
@@ -72002,7 +72109,7 @@ class NodeWebSocketTransport {
72002
72109
  this.onclose.call(null);
72003
72110
  }
72004
72111
  });
72005
- this.#ws.addEventListener('error', debugError);
72112
+ this.#ws.addEventListener('error', debugCatchError);
72006
72113
  }
72007
72114
  send(message) {
72008
72115
  this.#ws.send(message);
@@ -72036,10 +72143,10 @@ class PipeTransport {
72036
72143
  this.onclose.call(null);
72037
72144
  }
72038
72145
  });
72039
- pipeReadEmitter.on('error', debugError);
72146
+ pipeReadEmitter.on('error', debugCatchError);
72040
72147
  const pipeWriteEmitter = this.#subscriptions.use(
72041
72148
  new EventEmitter(pipeWrite));
72042
- pipeWriteEmitter.on('error', debugError);
72149
+ pipeWriteEmitter.on('error', debugCatchError);
72043
72150
  }
72044
72151
  send(message) {
72045
72152
  assert(!this.#isClosed, '`PipeTransport` is closed.');
@@ -72083,6 +72190,15 @@ class PipeTransport {
72083
72190
  * Copyright 2017 Google Inc.
72084
72191
  * SPDX-License-Identifier: Apache-2.0
72085
72192
  */
72193
+ function getBrowserTypeDisplayName(browserType) {
72194
+ switch (browserType) {
72195
+ case Browser.FIREFOX:
72196
+ case Browser.CHROME:
72197
+ return browserType.charAt(0).toUpperCase() + browserType.slice(1);
72198
+ default:
72199
+ return browserType;
72200
+ }
72201
+ }
72086
72202
  class BrowserLauncher {
72087
72203
  #browser;
72088
72204
  puppeteer;
@@ -72206,9 +72322,6 @@ class BrowserLauncher {
72206
72322
  throw error;
72207
72323
  }
72208
72324
  if (Array.isArray(enableExtensions)) {
72209
- if (this.#browser === 'chrome' && !usePipe) {
72210
- throw new Error('To use `enableExtensions` with a list of paths in Chrome, you must be connected with `--remote-debugging-pipe` (`pipe: true`).');
72211
- }
72212
72325
  await Promise.all([
72213
72326
  enableExtensions.map(path => {
72214
72327
  return browser.installExtension(path);
@@ -72227,7 +72340,7 @@ class BrowserLauncher {
72227
72340
  await browserProcess.hasClosed();
72228
72341
  }
72229
72342
  catch (error) {
72230
- debugError(error);
72343
+ debugError?.(error);
72231
72344
  await browserProcess.close();
72232
72345
  }
72233
72346
  }
@@ -72328,18 +72441,10 @@ class BrowserLauncher {
72328
72441
  if (configVersion) {
72329
72442
  throw new Error(`Tried to find the browser at the configured path (${executablePath}) for version ${configVersion}, but no executable was found.`);
72330
72443
  }
72331
- switch (this.browser) {
72332
- case 'chrome':
72333
- throw new Error(`Could not find Chrome (ver. ${browserVersion}). This can occur if either\n` +
72334
- ` 1. you did not perform an installation before running the script (e.g. \`npx puppeteer browsers install ${browserType}\`) or\n` +
72335
- ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72336
- 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72337
- case 'firefox':
72338
- throw new Error(`Could not find Firefox (rev. ${browserVersion}). This can occur if either\n` +
72339
- ' 1. you did not perform an installation for Firefox before running the script (e.g. `npx puppeteer browsers install firefox`) or\n' +
72340
- ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72341
- 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72342
- }
72444
+ throw new Error(`Could not find ${getBrowserTypeDisplayName(browserType)} (ver. ${browserVersion}). This can occur if either\n` +
72445
+ ` 1. you did not perform an installation before running the script (e.g. \`npx puppeteer browsers install ${browserType}\`) or\n` +
72446
+ ` 2. your cache path is incorrectly configured (which is: ${config.cacheDirectory}).\n` +
72447
+ 'For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.');
72343
72448
  }
72344
72449
  return executablePath;
72345
72450
  }
@@ -72436,16 +72541,21 @@ class ChromeLauncher extends BrowserLauncher {
72436
72541
  }
72437
72542
  }
72438
72543
  let isTempUserDataDir = false;
72439
- let userDataDirIndex = chromeArguments.findIndex(arg => {
72544
+ const userDataDirIndex = chromeArguments.findIndex(arg => {
72440
72545
  return arg.startsWith('--user-data-dir');
72441
72546
  });
72547
+ let userDataDir;
72442
72548
  if (userDataDirIndex < 0) {
72443
72549
  isTempUserDataDir = true;
72444
- chromeArguments.push(`--user-data-dir=${await mkdtemp(await this.getProfilePath())}`);
72445
- userDataDirIndex = chromeArguments.length - 1;
72550
+ const profilePath = await this.getProfilePath();
72551
+ userDataDir = await mkdtemp(profilePath);
72552
+ chromeArguments.push(`--user-data-dir=${userDataDir}`);
72553
+ }
72554
+ else {
72555
+ const parsedUserDataDir = chromeArguments[userDataDirIndex].split('=', 2)[1];
72556
+ assert(typeof parsedUserDataDir === 'string', '`--user-data-dir` is malformed');
72557
+ userDataDir = parsedUserDataDir;
72446
72558
  }
72447
- const userDataDir = chromeArguments[userDataDirIndex].split('=', 2)[1];
72448
- assert(typeof userDataDir === 'string', '`--user-data-dir` is malformed');
72449
72559
  let chromeExecutable = executablePath;
72450
72560
  if (!chromeExecutable) {
72451
72561
  assert(channel || !this.puppeteer._isPuppeteerCore, `An \`executablePath\` or \`channel\` must be specified for \`puppeteer-core\``);
@@ -72466,7 +72576,7 @@ class ChromeLauncher extends BrowserLauncher {
72466
72576
  await rm(path);
72467
72577
  }
72468
72578
  catch (error) {
72469
- debugError(error);
72579
+ debugError?.(error);
72470
72580
  throw error;
72471
72581
  }
72472
72582
  }
@@ -72553,9 +72663,9 @@ class ChromeLauncher extends BrowserLauncher {
72553
72663
  if (headless) {
72554
72664
  chromeArguments.push(headless === 'shell' ? '--headless' : '--headless=new', '--hide-scrollbars', '--mute-audio');
72555
72665
  }
72556
- chromeArguments.push(enableExtensions
72557
- ? '--enable-unsafe-extension-debugging'
72558
- : '--disable-extensions');
72666
+ if (!enableExtensions) {
72667
+ chromeArguments.push('--disable-extensions');
72668
+ }
72559
72669
  if (args.every(arg => {
72560
72670
  return arg.startsWith('-');
72561
72671
  })) {
@@ -72689,7 +72799,7 @@ class FirefoxLauncher extends BrowserLauncher {
72689
72799
  await rm(userDataDir);
72690
72800
  }
72691
72801
  catch (error) {
72692
- debugError(error);
72802
+ debugError?.(error);
72693
72803
  throw error;
72694
72804
  }
72695
72805
  }
@@ -72712,7 +72822,7 @@ class FirefoxLauncher extends BrowserLauncher {
72712
72822
  }
72713
72823
  }
72714
72824
  catch (error) {
72715
- debugError(error);
72825
+ debugError?.(error);
72716
72826
  }
72717
72827
  }
72718
72828
  }
@@ -72926,6 +73036,11 @@ var __setFunctionName = (undefined && undefined.__setFunctionName) || function (
72926
73036
  const CRF_VALUE = 30;
72927
73037
  const DEFAULT_FPS = 30;
72928
73038
  const debugFfmpeg = debug$1('puppeteer:ffmpeg');
73039
+ function countFrames(startTimestamp, previousTimestamp, timestamp, fps) {
73040
+ const end = Math.round((timestamp - startTimestamp) * fps);
73041
+ const start = Math.round((previousTimestamp - startTimestamp) * fps);
73042
+ return Math.max(0, end - start);
73043
+ }
72929
73044
  let ScreenRecorder = (() => {
72930
73045
  let _classSuper = PassThrough;
72931
73046
  let _instanceExtraInitializers = [];
@@ -73001,10 +73116,9 @@ let ScreenRecorder = (() => {
73001
73116
  '-fflags',
73002
73117
  'nobuffer',
73003
73118
  ],
73004
- ['-f', 'image2pipe', '-vcodec', 'png', '-i', 'pipe:0'],
73119
+ ['-framerate', `${fps}`, '-f', 'image2pipe', '-vcodec', 'png', '-i', 'pipe:0'],
73005
73120
  ['-an'],
73006
73121
  ['-threads', '1'],
73007
- ['-framerate', `${fps}`],
73008
73122
  ['-b:v', '0'],
73009
73123
  formatArgs,
73010
73124
  ['-vf', filters.join()],
@@ -73013,13 +73127,14 @@ let ScreenRecorder = (() => {
73013
73127
  ].flat(), { stdio: ['pipe', 'pipe', 'pipe'] });
73014
73128
  this.#process.stdout.pipe(this);
73015
73129
  this.#process.stderr.on('data', (data) => {
73016
- debugFfmpeg(data.toString('utf8'));
73130
+ debugFfmpeg?.(data.toString('utf8'));
73017
73131
  });
73018
73132
  this.#page = page;
73019
73133
  const { client } = this.#page.mainFrame();
73020
73134
  client.once(CDPSessionEvent.Disconnected, () => {
73021
- void this.stop().catch(debugError);
73135
+ void this.stop().catch(debugCatchError);
73022
73136
  });
73137
+ let startTimestamp;
73023
73138
  this.#lastFrame = lastValueFrom(fromEmitterEvent(client, 'Page.screencastFrame').pipe(tap(event => {
73024
73139
  void client.send('Page.screencastFrameAck', {
73025
73140
  sessionId: event.sessionId,
@@ -73032,7 +73147,8 @@ let ScreenRecorder = (() => {
73032
73147
  timestamp: event.metadata.timestamp,
73033
73148
  };
73034
73149
  }), bufferCount(2, 1), concatMap(([{ timestamp: previousTimestamp, buffer }, { timestamp }]) => {
73035
- return from(Array(Math.round(fps * Math.max(timestamp - previousTimestamp, 0))).fill(buffer));
73150
+ startTimestamp ??= previousTimestamp;
73151
+ return from(Array(countFrames(startTimestamp, previousTimestamp, timestamp, fps)).fill(buffer));
73036
73152
  }), map(buffer => {
73037
73153
  void this.#writeFrame(buffer);
73038
73154
  return [buffer, performance.now()];
@@ -73085,7 +73201,7 @@ let ScreenRecorder = (() => {
73085
73201
  if (this.#controller.signal.aborted) {
73086
73202
  return;
73087
73203
  }
73088
- await this.#page._stopScreencast().catch(debugError);
73204
+ await this.#page._stopScreencast().catch(debugCatchError);
73089
73205
  this.#controller.abort();
73090
73206
  const [buffer, timestamp] = await this.#lastFrame;
73091
73207
  await Promise.all(Array(Math.max(1, Math.round((this.#fps * (performance.now() - timestamp)) / 1000)))
@@ -73108,11 +73224,7 @@ let ScreenRecorder = (() => {
73108
73224
  * Copyright 2017 Google Inc.
73109
73225
  * SPDX-License-Identifier: Apache-2.0
73110
73226
  */
73111
- environment.value = {
73112
- fs,
73113
- path,
73114
- ScreenRecorder: ScreenRecorder,
73115
- };
73227
+ environment.value.ScreenRecorder = ScreenRecorder;
73116
73228
  const puppeteer = new PuppeteerNode({
73117
73229
  isPuppeteerCore: true,
73118
73230
  });
@@ -79341,6 +79453,9 @@ const debounce = function (func, delay) {
79341
79453
  clearTimeout(timer);
79342
79454
  timer = setTimeout(() => func(...args), testDebounceOverride ? 0 : delay);
79343
79455
  };
79456
+ debounced.cancel = () => {
79457
+ clearTimeout(timer);
79458
+ };
79344
79459
  return debounced;
79345
79460
  };
79346
79461
  let testDebounceOverride = false;
@@ -86811,7 +86926,8 @@ function registerCommands(inspectorBackend) {
86811
86926
  inspectorBackend.registerType("CSS.InheritedPseudoElementMatches", [{ "name": "pseudoElements", "type": "array", "optional": false, "description": "Matches of pseudo styles from the pseudos of an ancestor node.", "typeRef": "CSS.PseudoElementMatches" }]);
86812
86927
  inspectorBackend.registerType("CSS.RuleMatch", [{ "name": "rule", "type": "object", "optional": false, "description": "CSS rule in the match.", "typeRef": "CSS.CSSRule" }, { "name": "matchingSelectors", "type": "array", "optional": false, "description": "Matching selector indices in the rule's selectorList selectors (0-based).", "typeRef": "integer" }]);
86813
86928
  inspectorBackend.registerType("CSS.Value", [{ "name": "text", "type": "string", "optional": false, "description": "Value text.", "typeRef": null }, { "name": "range", "type": "object", "optional": true, "description": "Value range in the underlying resource (if available).", "typeRef": "CSS.SourceRange" }, { "name": "specificity", "type": "object", "optional": true, "description": "Specificity of the selector.", "typeRef": "CSS.Specificity" }]);
86814
- inspectorBackend.registerType("CSS.Specificity", [{ "name": "a", "type": "number", "optional": false, "description": "The a component, which represents the number of ID selectors.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component, which represents the number of class selectors, attributes selectors, and pseudo-classes.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component, which represents the number of type selectors and pseudo-elements.", "typeRef": null }]);
86929
+ inspectorBackend.registerType("CSS.SpecificityComponent", [{ "name": "text", "type": "string", "optional": false, "description": "The simple selector text that contributes to specificity.", "typeRef": null }, { "name": "a", "type": "number", "optional": false, "description": "The a component contribution.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component contribution.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component contribution.", "typeRef": null }]);
86930
+ inspectorBackend.registerType("CSS.Specificity", [{ "name": "a", "type": "number", "optional": false, "description": "The a component, which represents the number of ID selectors.", "typeRef": null }, { "name": "b", "type": "number", "optional": false, "description": "The b component, which represents the number of class selectors, attributes selectors, and pseudo-classes.", "typeRef": null }, { "name": "c", "type": "number", "optional": false, "description": "The c component, which represents the number of type selectors and pseudo-elements.", "typeRef": null }, { "name": "components", "type": "array", "optional": true, "description": "Per-simple-selector contributions used to explain this specificity.", "typeRef": "CSS.SpecificityComponent" }]);
86815
86931
  inspectorBackend.registerType("CSS.SelectorList", [{ "name": "selectors", "type": "array", "optional": false, "description": "Selectors in the list.", "typeRef": "CSS.Value" }, { "name": "text", "type": "string", "optional": false, "description": "Rule selector text.", "typeRef": null }]);
86816
86932
  inspectorBackend.registerType("CSS.CSSStyleSheetHeader", [{ "name": "styleSheetId", "type": "string", "optional": false, "description": "The stylesheet identifier.", "typeRef": "DOM.StyleSheetId" }, { "name": "frameId", "type": "string", "optional": false, "description": "Owner frame identifier.", "typeRef": "Page.FrameId" }, { "name": "sourceURL", "type": "string", "optional": false, "description": "Stylesheet resource URL. Empty if this is a constructed stylesheet created using new CSSStyleSheet() (but non-empty if this is a constructed stylesheet imported as a CSS module script).", "typeRef": null }, { "name": "sourceMapURL", "type": "string", "optional": true, "description": "URL of source map associated with the stylesheet (if any).", "typeRef": null }, { "name": "origin", "type": "string", "optional": false, "description": "Stylesheet origin.", "typeRef": "CSS.StyleSheetOrigin" }, { "name": "title", "type": "string", "optional": false, "description": "Stylesheet title.", "typeRef": null }, { "name": "ownerNode", "type": "number", "optional": true, "description": "The backend id for the owner node of the stylesheet.", "typeRef": "DOM.BackendNodeId" }, { "name": "disabled", "type": "boolean", "optional": false, "description": "Denotes whether the stylesheet is disabled.", "typeRef": null }, { "name": "hasSourceURL", "type": "boolean", "optional": true, "description": "Whether the sourceURL field value comes from the sourceURL comment.", "typeRef": null }, { "name": "isInline", "type": "boolean", "optional": false, "description": "Whether this stylesheet is created for STYLE tag by parser. This flag is not set for document.written STYLE tags.", "typeRef": null }, { "name": "isMutable", "type": "boolean", "optional": false, "description": "Whether this stylesheet is mutable. Inline stylesheets become mutable after they have been modified via CSSOM API. `<link>` element's stylesheets become mutable only if DevTools modifies them. Constructed stylesheets (new CSSStyleSheet()) are mutable immediately after creation.", "typeRef": null }, { "name": "isConstructed", "type": "boolean", "optional": false, "description": "True if this stylesheet is created through new CSSStyleSheet() or imported as a CSS module script.", "typeRef": null }, { "name": "startLine", "type": "number", "optional": false, "description": "Line offset of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "startColumn", "type": "number", "optional": false, "description": "Column offset of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "length", "type": "number", "optional": false, "description": "Size of the content (in characters).", "typeRef": null }, { "name": "endLine", "type": "number", "optional": false, "description": "Line offset of the end of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "endColumn", "type": "number", "optional": false, "description": "Column offset of the end of the stylesheet within the resource (zero based).", "typeRef": null }, { "name": "loadingFailed", "type": "boolean", "optional": true, "description": "If the style sheet was loaded from a network resource, this indicates when the resource failed to load", "typeRef": null }]);
86817
86933
  inspectorBackend.registerType("CSS.CSSRule", [{ "name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId" }, { "name": "selectorList", "type": "object", "optional": false, "description": "Rule selector data.", "typeRef": "CSS.SelectorList" }, { "name": "nestingSelectors", "type": "array", "optional": true, "description": "Array of selectors from ancestor style rules, sorted by distance from the current rule.", "typeRef": "string" }, { "name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin" }, { "name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle" }, { "name": "originTreeScopeNodeId", "type": "number", "optional": true, "description": "The BackendNodeId of the DOM node that constitutes the origin tree scope of this rule.", "typeRef": "DOM.BackendNodeId" }, { "name": "media", "type": "array", "optional": true, "description": "Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSMedia" }, { "name": "containerQueries", "type": "array", "optional": true, "description": "Container query list array (for rules involving container queries). The array enumerates container queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSContainerQuery" }, { "name": "supports", "type": "array", "optional": true, "description": "@supports CSS at-rule array. The array enumerates @supports at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSSupports" }, { "name": "layers", "type": "array", "optional": true, "description": "Cascade layer array. Contains the layer hierarchy that this rule belongs to starting with the innermost layer and going outwards.", "typeRef": "CSS.CSSLayer" }, { "name": "scopes", "type": "array", "optional": true, "description": "@scope CSS at-rule array. The array enumerates @scope at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSScope" }, { "name": "ruleTypes", "type": "array", "optional": true, "description": "The array keeps the types of ancestor CSSRules from the innermost going outwards.", "typeRef": "CSS.CSSRuleType" }, { "name": "startingStyles", "type": "array", "optional": true, "description": "@starting-style CSS at-rule array. The array enumerates @starting-style at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSStartingStyle" }, { "name": "navigations", "type": "array", "optional": true, "description": "@navigation CSS at-rule array. The array enumerates @navigation at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSNavigation" }]);
@@ -90290,7 +90406,21 @@ const generatedProperties = [
90290
90406
  "block-ellipsis",
90291
90407
  "continue"
90292
90408
  ],
90293
- "name": "-alternative-webkit-line-clamp"
90409
+ "name": "-alternative-line-clamp-shorthand"
90410
+ },
90411
+ {
90412
+ "keywords": [
90413
+ "none"
90414
+ ],
90415
+ "name": "-alternative-webkit-line-clamp-longhand"
90416
+ },
90417
+ {
90418
+ "longhands": [
90419
+ "max-lines",
90420
+ "block-ellipsis",
90421
+ "continue"
90422
+ ],
90423
+ "name": "-alternative-webkit-line-clamp-shorthand"
90294
90424
  },
90295
90425
  {
90296
90426
  "inherited": true,
@@ -90372,6 +90502,12 @@ const generatedProperties = [
90372
90502
  },
90373
90503
  {
90374
90504
  "inherited": true,
90505
+ "keywords": [
90506
+ "auto",
90507
+ "none",
90508
+ "antialiased",
90509
+ "subpixel-antialiased"
90510
+ ],
90375
90511
  "name": "-webkit-font-smoothing"
90376
90512
  },
90377
90513
  {
@@ -90392,6 +90528,9 @@ const generatedProperties = [
90392
90528
  },
90393
90529
  {
90394
90530
  "inherited": true,
90531
+ "keywords": [
90532
+ "auto"
90533
+ ],
90395
90534
  "name": "-webkit-locale"
90396
90535
  },
90397
90536
  {
@@ -90408,15 +90547,27 @@ const generatedProperties = [
90408
90547
  "name": "-webkit-mask-box-image-outset"
90409
90548
  },
90410
90549
  {
90550
+ "keywords": [
90551
+ "repeat",
90552
+ "stretch",
90553
+ "space",
90554
+ "round"
90555
+ ],
90411
90556
  "name": "-webkit-mask-box-image-repeat"
90412
90557
  },
90413
90558
  {
90414
90559
  "name": "-webkit-mask-box-image-slice"
90415
90560
  },
90416
90561
  {
90562
+ "keywords": [
90563
+ "none"
90564
+ ],
90417
90565
  "name": "-webkit-mask-box-image-source"
90418
90566
  },
90419
90567
  {
90568
+ "keywords": [
90569
+ "auto"
90570
+ ],
90420
90571
  "name": "-webkit-mask-box-image-width"
90421
90572
  },
90422
90573
  {
@@ -90449,10 +90600,23 @@ const generatedProperties = [
90449
90600
  },
90450
90601
  {
90451
90602
  "inherited": true,
90603
+ "keywords": [
90604
+ "none",
90605
+ "horizontal"
90606
+ ],
90452
90607
  "name": "-webkit-text-combine"
90453
90608
  },
90454
90609
  {
90455
90610
  "inherited": true,
90611
+ "keywords": [
90612
+ "none",
90613
+ "blink",
90614
+ "line-through",
90615
+ "overline",
90616
+ "underline",
90617
+ "spelling-error",
90618
+ "grammar-error"
90619
+ ],
90456
90620
  "name": "-webkit-text-decorations-in-effect"
90457
90621
  },
90458
90622
  {
@@ -90539,6 +90703,20 @@ const generatedProperties = [
90539
90703
  "name": "align-items"
90540
90704
  },
90541
90705
  {
90706
+ "keywords": [
90707
+ "auto",
90708
+ "normal",
90709
+ "stretch",
90710
+ "baseline",
90711
+ "center",
90712
+ "start",
90713
+ "end",
90714
+ "self-start",
90715
+ "self-end",
90716
+ "flex-start",
90717
+ "flex-end",
90718
+ "anchor-center"
90719
+ ],
90542
90720
  "name": "align-self"
90543
90721
  },
90544
90722
  {
@@ -90560,6 +90738,7 @@ const generatedProperties = [
90560
90738
  },
90561
90739
  {
90562
90740
  "longhands": [
90741
+ "-alternative-webkit-line-clamp-longhand",
90563
90742
  "-webkit-border-horizontal-spacing",
90564
90743
  "-webkit-border-vertical-spacing",
90565
90744
  "-webkit-box-align",
@@ -90825,6 +91004,7 @@ const generatedProperties = [
90825
91004
  "letter-spacing",
90826
91005
  "lighting-color",
90827
91006
  "line-break",
91007
+ "line-clamp",
90828
91008
  "line-gap-override",
90829
91009
  "line-height",
90830
91010
  "list-style-image",
@@ -91131,6 +91311,9 @@ const generatedProperties = [
91131
91311
  "name": "animation-direction"
91132
91312
  },
91133
91313
  {
91314
+ "keywords": [
91315
+ "auto"
91316
+ ],
91134
91317
  "name": "animation-duration"
91135
91318
  },
91136
91319
  {
@@ -91212,6 +91395,22 @@ const generatedProperties = [
91212
91395
  "name": "app-region"
91213
91396
  },
91214
91397
  {
91398
+ "keywords": [
91399
+ "auto",
91400
+ "none",
91401
+ "checkbox",
91402
+ "radio",
91403
+ "button",
91404
+ "listbox",
91405
+ "menulist",
91406
+ "menulist-button",
91407
+ "meter",
91408
+ "progress-bar",
91409
+ "searchfield",
91410
+ "textfield",
91411
+ "textarea",
91412
+ "base-select"
91413
+ ],
91215
91414
  "name": "appearance"
91216
91415
  },
91217
91416
  {
@@ -91299,7 +91498,6 @@ const generatedProperties = [
91299
91498
  },
91300
91499
  {
91301
91500
  "keywords": [
91302
- "auto",
91303
91501
  "none"
91304
91502
  ],
91305
91503
  "name": "background-image"
@@ -91428,9 +91626,26 @@ const generatedProperties = [
91428
91626
  "name": "border-block-end-color"
91429
91627
  },
91430
91628
  {
91629
+ "keywords": [
91630
+ "none",
91631
+ "hidden",
91632
+ "inset",
91633
+ "groove",
91634
+ "outset",
91635
+ "ridge",
91636
+ "dotted",
91637
+ "dashed",
91638
+ "solid",
91639
+ "double"
91640
+ ],
91431
91641
  "name": "border-block-end-style"
91432
91642
  },
91433
91643
  {
91644
+ "keywords": [
91645
+ "medium",
91646
+ "thick",
91647
+ "thin"
91648
+ ],
91434
91649
  "name": "border-block-end-width"
91435
91650
  },
91436
91651
  {
@@ -91445,9 +91660,26 @@ const generatedProperties = [
91445
91660
  "name": "border-block-start-color"
91446
91661
  },
91447
91662
  {
91663
+ "keywords": [
91664
+ "none",
91665
+ "hidden",
91666
+ "inset",
91667
+ "groove",
91668
+ "outset",
91669
+ "ridge",
91670
+ "dotted",
91671
+ "dashed",
91672
+ "solid",
91673
+ "double"
91674
+ ],
91448
91675
  "name": "border-block-start-style"
91449
91676
  },
91450
91677
  {
91678
+ "keywords": [
91679
+ "medium",
91680
+ "thick",
91681
+ "thin"
91682
+ ],
91451
91683
  "name": "border-block-start-width"
91452
91684
  },
91453
91685
  {
@@ -91531,6 +91763,13 @@ const generatedProperties = [
91531
91763
  "name": "border-end-start-radius"
91532
91764
  },
91533
91765
  {
91766
+ "keywords": [
91767
+ "none",
91768
+ "repeat",
91769
+ "stretch",
91770
+ "space",
91771
+ "round"
91772
+ ],
91534
91773
  "longhands": [
91535
91774
  "border-image-source",
91536
91775
  "border-image-slice",
@@ -91597,9 +91836,26 @@ const generatedProperties = [
91597
91836
  "name": "border-inline-end-color"
91598
91837
  },
91599
91838
  {
91839
+ "keywords": [
91840
+ "none",
91841
+ "hidden",
91842
+ "inset",
91843
+ "groove",
91844
+ "outset",
91845
+ "ridge",
91846
+ "dotted",
91847
+ "dashed",
91848
+ "solid",
91849
+ "double"
91850
+ ],
91600
91851
  "name": "border-inline-end-style"
91601
91852
  },
91602
91853
  {
91854
+ "keywords": [
91855
+ "medium",
91856
+ "thick",
91857
+ "thin"
91858
+ ],
91603
91859
  "name": "border-inline-end-width"
91604
91860
  },
91605
91861
  {
@@ -91614,9 +91870,26 @@ const generatedProperties = [
91614
91870
  "name": "border-inline-start-color"
91615
91871
  },
91616
91872
  {
91873
+ "keywords": [
91874
+ "none",
91875
+ "hidden",
91876
+ "inset",
91877
+ "groove",
91878
+ "outset",
91879
+ "ridge",
91880
+ "dotted",
91881
+ "dashed",
91882
+ "solid",
91883
+ "double"
91884
+ ],
91617
91885
  "name": "border-inline-start-style"
91618
91886
  },
91619
91887
  {
91888
+ "keywords": [
91889
+ "medium",
91890
+ "thick",
91891
+ "thin"
91892
+ ],
91620
91893
  "name": "border-inline-start-width"
91621
91894
  },
91622
91895
  {
@@ -92174,6 +92447,9 @@ const generatedProperties = [
92174
92447
  "name": "contain"
92175
92448
  },
92176
92449
  {
92450
+ "keywords": [
92451
+ "none"
92452
+ ],
92177
92453
  "name": "contain-intrinsic-block-size"
92178
92454
  },
92179
92455
  {
@@ -92183,6 +92459,9 @@ const generatedProperties = [
92183
92459
  "name": "contain-intrinsic-height"
92184
92460
  },
92185
92461
  {
92462
+ "keywords": [
92463
+ "none"
92464
+ ],
92186
92465
  "name": "contain-intrinsic-inline-size"
92187
92466
  },
92188
92467
  {
@@ -92222,6 +92501,14 @@ const generatedProperties = [
92222
92501
  "name": "container-type"
92223
92502
  },
92224
92503
  {
92504
+ "keywords": [
92505
+ "none",
92506
+ "normal",
92507
+ "close-quote",
92508
+ "no-close-quote",
92509
+ "no-open-quote",
92510
+ "open-quote"
92511
+ ],
92225
92512
  "name": "content"
92226
92513
  },
92227
92514
  {
@@ -93252,13 +93539,19 @@ const generatedProperties = [
93252
93539
  },
93253
93540
  {
93254
93541
  "keywords": [
93255
- "none"
93542
+ "auto",
93543
+ "none",
93544
+ "min-content",
93545
+ "max-content"
93256
93546
  ],
93257
93547
  "name": "grid-template-columns"
93258
93548
  },
93259
93549
  {
93260
93550
  "keywords": [
93261
- "none"
93551
+ "auto",
93552
+ "none",
93553
+ "min-content",
93554
+ "max-content"
93262
93555
  ],
93263
93556
  "name": "grid-template-rows"
93264
93557
  },
@@ -93293,6 +93586,9 @@ const generatedProperties = [
93293
93586
  },
93294
93587
  {
93295
93588
  "inherited": true,
93589
+ "keywords": [
93590
+ "auto"
93591
+ ],
93296
93592
  "name": "hyphenate-character"
93297
93593
  },
93298
93594
  {
@@ -93323,6 +93619,10 @@ const generatedProperties = [
93323
93619
  },
93324
93620
  {
93325
93621
  "inherited": true,
93622
+ "keywords": [
93623
+ "none",
93624
+ "from-image"
93625
+ ],
93326
93626
  "name": "image-orientation"
93327
93627
  },
93328
93628
  {
@@ -93379,9 +93679,15 @@ const generatedProperties = [
93379
93679
  "name": "inset-block"
93380
93680
  },
93381
93681
  {
93682
+ "keywords": [
93683
+ "auto"
93684
+ ],
93382
93685
  "name": "inset-block-end"
93383
93686
  },
93384
93687
  {
93688
+ "keywords": [
93689
+ "auto"
93690
+ ],
93385
93691
  "name": "inset-block-start"
93386
93692
  },
93387
93693
  {
@@ -93392,9 +93698,15 @@ const generatedProperties = [
93392
93698
  "name": "inset-inline"
93393
93699
  },
93394
93700
  {
93701
+ "keywords": [
93702
+ "auto"
93703
+ ],
93395
93704
  "name": "inset-inline-end"
93396
93705
  },
93397
93706
  {
93707
+ "keywords": [
93708
+ "auto"
93709
+ ],
93398
93710
  "name": "inset-inline-start"
93399
93711
  },
93400
93712
  {
@@ -93440,6 +93752,22 @@ const generatedProperties = [
93440
93752
  "name": "justify-items"
93441
93753
  },
93442
93754
  {
93755
+ "keywords": [
93756
+ "auto",
93757
+ "normal",
93758
+ "stretch",
93759
+ "baseline",
93760
+ "center",
93761
+ "start",
93762
+ "end",
93763
+ "self-start",
93764
+ "self-end",
93765
+ "flex-start",
93766
+ "flex-end",
93767
+ "left",
93768
+ "right",
93769
+ "anchor-center"
93770
+ ],
93443
93771
  "name": "justify-self"
93444
93772
  },
93445
93773
  {
@@ -93474,10 +93802,12 @@ const generatedProperties = [
93474
93802
  "name": "line-break"
93475
93803
  },
93476
93804
  {
93477
- "longhands": [
93478
- "max-lines",
93479
- "block-ellipsis",
93480
- "continue"
93805
+ "keywords": [
93806
+ "none",
93807
+ "auto",
93808
+ "ellipsis",
93809
+ "no-ellipsis",
93810
+ "-webkit-legacy"
93481
93811
  ],
93482
93812
  "name": "line-clamp"
93483
93813
  },
@@ -93661,6 +93991,9 @@ const generatedProperties = [
93661
93991
  "name": "mask-composite"
93662
93992
  },
93663
93993
  {
93994
+ "keywords": [
93995
+ "none"
93996
+ ],
93664
93997
  "name": "mask-image"
93665
93998
  },
93666
93999
  {
@@ -93685,6 +94018,11 @@ const generatedProperties = [
93685
94018
  "name": "mask-repeat"
93686
94019
  },
93687
94020
  {
94021
+ "keywords": [
94022
+ "auto",
94023
+ "contain",
94024
+ "cover"
94025
+ ],
93688
94026
  "name": "mask-size"
93689
94027
  },
93690
94028
  {
@@ -93745,15 +94083,43 @@ const generatedProperties = [
93745
94083
  "name": "max-width"
93746
94084
  },
93747
94085
  {
94086
+ "keywords": [
94087
+ "auto",
94088
+ "min-content",
94089
+ "max-content",
94090
+ "fit-content",
94091
+ "stretch"
94092
+ ],
93748
94093
  "name": "min-block-size"
93749
94094
  },
93750
94095
  {
94096
+ "keywords": [
94097
+ "auto",
94098
+ "min-content",
94099
+ "max-content",
94100
+ "fit-content",
94101
+ "stretch"
94102
+ ],
93751
94103
  "name": "min-height"
93752
94104
  },
93753
94105
  {
94106
+ "keywords": [
94107
+ "auto",
94108
+ "min-content",
94109
+ "max-content",
94110
+ "fit-content",
94111
+ "stretch"
94112
+ ],
93754
94113
  "name": "min-inline-size"
93755
94114
  },
93756
94115
  {
94116
+ "keywords": [
94117
+ "auto",
94118
+ "min-content",
94119
+ "max-content",
94120
+ "fit-content",
94121
+ "stretch"
94122
+ ],
93757
94123
  "name": "min-width"
93758
94124
  },
93759
94125
  {
@@ -93864,6 +94230,21 @@ const generatedProperties = [
93864
94230
  "name": "orphans"
93865
94231
  },
93866
94232
  {
94233
+ "keywords": [
94234
+ "auto",
94235
+ "none",
94236
+ "inset",
94237
+ "groove",
94238
+ "ridge",
94239
+ "outset",
94240
+ "dotted",
94241
+ "dashed",
94242
+ "solid",
94243
+ "double",
94244
+ "medium",
94245
+ "thick",
94246
+ "thin"
94247
+ ],
93867
94248
  "longhands": [
93868
94249
  "outline-color",
93869
94250
  "outline-style",
@@ -93977,6 +94358,11 @@ const generatedProperties = [
93977
94358
  "name": "override-colors"
93978
94359
  },
93979
94360
  {
94361
+ "keywords": [
94362
+ "auto",
94363
+ "none",
94364
+ "contain"
94365
+ ],
93980
94366
  "longhands": [
93981
94367
  "overscroll-behavior-x",
93982
94368
  "overscroll-behavior-y"
@@ -94072,6 +94458,13 @@ const generatedProperties = [
94072
94458
  "name": "page-break-after"
94073
94459
  },
94074
94460
  {
94461
+ "keywords": [
94462
+ "auto",
94463
+ "left",
94464
+ "right",
94465
+ "always",
94466
+ "avoid"
94467
+ ],
94075
94468
  "longhands": [
94076
94469
  "break-before"
94077
94470
  ],
@@ -94662,6 +95055,11 @@ const generatedProperties = [
94662
95055
  "name": "scroll-margin-top"
94663
95056
  },
94664
95057
  {
95058
+ "keywords": [
95059
+ "none",
95060
+ "after",
95061
+ "before"
95062
+ ],
94665
95063
  "name": "scroll-marker-group"
94666
95064
  },
94667
95065
  {
@@ -94782,6 +95180,9 @@ const generatedProperties = [
94782
95180
  "name": "scroll-timeline-axis"
94783
95181
  },
94784
95182
  {
95183
+ "keywords": [
95184
+ "none"
95185
+ ],
94785
95186
  "name": "scroll-timeline-name"
94786
95187
  },
94787
95188
  {
@@ -94818,9 +95219,6 @@ const generatedProperties = [
94818
95219
  "name": "shape-image-threshold"
94819
95220
  },
94820
95221
  {
94821
- "keywords": [
94822
- "none"
94823
- ],
94824
95222
  "name": "shape-margin"
94825
95223
  },
94826
95224
  {
@@ -94840,6 +95238,11 @@ const generatedProperties = [
94840
95238
  "name": "shape-rendering"
94841
95239
  },
94842
95240
  {
95241
+ "keywords": [
95242
+ "auto",
95243
+ "portrait",
95244
+ "landscape"
95245
+ ],
94843
95246
  "name": "size"
94844
95247
  },
94845
95248
  {
@@ -95010,6 +95413,12 @@ const generatedProperties = [
95010
95413
  },
95011
95414
  {
95012
95415
  "inherited": true,
95416
+ "keywords": [
95417
+ "auto",
95418
+ "text",
95419
+ "cap",
95420
+ "ex"
95421
+ ],
95013
95422
  "name": "text-box-edge"
95014
95423
  },
95015
95424
  {
@@ -95251,6 +95660,10 @@ const generatedProperties = [
95251
95660
  "name": "text-wrap-style"
95252
95661
  },
95253
95662
  {
95663
+ "keywords": [
95664
+ "none",
95665
+ "all"
95666
+ ],
95254
95667
  "name": "timeline-scope"
95255
95668
  },
95256
95669
  {
@@ -95285,12 +95698,23 @@ const generatedProperties = [
95285
95698
  "name": "timeline-trigger-active-range"
95286
95699
  },
95287
95700
  {
95701
+ "keywords": [
95702
+ "auto",
95703
+ "normal"
95704
+ ],
95288
95705
  "name": "timeline-trigger-active-range-end"
95289
95706
  },
95290
95707
  {
95708
+ "keywords": [
95709
+ "auto",
95710
+ "normal"
95711
+ ],
95291
95712
  "name": "timeline-trigger-active-range-start"
95292
95713
  },
95293
95714
  {
95715
+ "keywords": [
95716
+ "none"
95717
+ ],
95294
95718
  "name": "timeline-trigger-name"
95295
95719
  },
95296
95720
  {
@@ -95464,9 +95888,15 @@ const generatedProperties = [
95464
95888
  "name": "view-timeline-axis"
95465
95889
  },
95466
95890
  {
95891
+ "keywords": [
95892
+ "auto"
95893
+ ],
95467
95894
  "name": "view-timeline-inset"
95468
95895
  },
95469
95896
  {
95897
+ "keywords": [
95898
+ "none"
95899
+ ],
95470
95900
  "name": "view-timeline-name"
95471
95901
  },
95472
95902
  {
@@ -95590,6 +96020,11 @@ const generatedProperties = [
95590
96020
  }
95591
96021
  ];
95592
96022
  const generatedPropertyValues = {
96023
+ "-alternative-webkit-line-clamp-longhand": {
96024
+ "values": [
96025
+ "none"
96026
+ ]
96027
+ },
95593
96028
  "-webkit-box-align": {
95594
96029
  "values": [
95595
96030
  "stretch",
@@ -95625,6 +96060,14 @@ const generatedPropertyValues = {
95625
96060
  "justify"
95626
96061
  ]
95627
96062
  },
96063
+ "-webkit-font-smoothing": {
96064
+ "values": [
96065
+ "auto",
96066
+ "none",
96067
+ "antialiased",
96068
+ "subpixel-antialiased"
96069
+ ]
96070
+ },
95628
96071
  "-webkit-line-break": {
95629
96072
  "values": [
95630
96073
  "auto",
@@ -95639,12 +96082,52 @@ const generatedPropertyValues = {
95639
96082
  "none"
95640
96083
  ]
95641
96084
  },
96085
+ "-webkit-locale": {
96086
+ "values": [
96087
+ "auto"
96088
+ ]
96089
+ },
96090
+ "-webkit-mask-box-image-repeat": {
96091
+ "values": [
96092
+ "repeat",
96093
+ "stretch",
96094
+ "space",
96095
+ "round"
96096
+ ]
96097
+ },
96098
+ "-webkit-mask-box-image-source": {
96099
+ "values": [
96100
+ "none"
96101
+ ]
96102
+ },
96103
+ "-webkit-mask-box-image-width": {
96104
+ "values": [
96105
+ "auto"
96106
+ ]
96107
+ },
95642
96108
  "-webkit-rtl-ordering": {
95643
96109
  "values": [
95644
96110
  "logical",
95645
96111
  "visual"
95646
96112
  ]
95647
96113
  },
96114
+ "-webkit-text-combine": {
96115
+ "values": [
96116
+ "none",
96117
+ "horizontal"
96118
+ ]
96119
+ },
96120
+ "-webkit-text-decorations-in-effect": {
96121
+ "values": [
96122
+ "none",
96123
+ "blink",
96124
+ "line-through",
96125
+ "overline",
96126
+ "underline",
96127
+ "spelling-error",
96128
+ "grammar-error"
96129
+ ]
96130
+ },
95648
96131
  "-webkit-text-security": {
95649
96132
  "values": [
95650
96133
  "none",
@@ -95673,6 +96156,22 @@ const generatedPropertyValues = {
95673
96156
  "currentcolor"
95674
96157
  ]
95675
96158
  },
96159
+ "align-self": {
96160
+ "values": [
96161
+ "auto",
96162
+ "normal",
96163
+ "stretch",
96164
+ "baseline",
96165
+ "center",
96166
+ "start",
96167
+ "end",
96168
+ "self-start",
96169
+ "self-end",
96170
+ "flex-start",
96171
+ "flex-end",
96172
+ "anchor-center"
96173
+ ]
96174
+ },
95676
96175
  "alignment-baseline": {
95677
96176
  "values": [
95678
96177
  "auto",
@@ -95715,6 +96214,11 @@ const generatedPropertyValues = {
95715
96214
  "alternate-reverse"
95716
96215
  ]
95717
96216
  },
96217
+ "animation-duration": {
96218
+ "values": [
96219
+ "auto"
96220
+ ]
96221
+ },
95718
96222
  "animation-fill-mode": {
95719
96223
  "values": [
95720
96224
  "none",
@@ -95772,6 +96276,24 @@ const generatedPropertyValues = {
95772
96276
  "no-drag"
95773
96277
  ]
95774
96278
  },
96279
+ "appearance": {
96280
+ "values": [
96281
+ "auto",
96282
+ "none",
96283
+ "checkbox",
96284
+ "radio",
96285
+ "button",
96286
+ "listbox",
96287
+ "menulist",
96288
+ "menulist-button",
96289
+ "meter",
96290
+ "progress-bar",
96291
+ "searchfield",
96292
+ "textfield",
96293
+ "textarea",
96294
+ "base-select"
96295
+ ]
96296
+ },
95775
96297
  "aspect-ratio": {
95776
96298
  "values": [
95777
96299
  "auto"
@@ -95831,7 +96353,6 @@ const generatedPropertyValues = {
95831
96353
  },
95832
96354
  "background-image": {
95833
96355
  "values": [
95834
- "auto",
95835
96356
  "none"
95836
96357
  ]
95837
96358
  },
@@ -95874,6 +96395,48 @@ const generatedPropertyValues = {
95874
96395
  "auto"
95875
96396
  ]
95876
96397
  },
96398
+ "border-block-end-style": {
96399
+ "values": [
96400
+ "none",
96401
+ "hidden",
96402
+ "inset",
96403
+ "groove",
96404
+ "outset",
96405
+ "ridge",
96406
+ "dotted",
96407
+ "dashed",
96408
+ "solid",
96409
+ "double"
96410
+ ]
96411
+ },
96412
+ "border-block-end-width": {
96413
+ "values": [
96414
+ "medium",
96415
+ "thick",
96416
+ "thin"
96417
+ ]
96418
+ },
96419
+ "border-block-start-style": {
96420
+ "values": [
96421
+ "none",
96422
+ "hidden",
96423
+ "inset",
96424
+ "groove",
96425
+ "outset",
96426
+ "ridge",
96427
+ "dotted",
96428
+ "dashed",
96429
+ "solid",
96430
+ "double"
96431
+ ]
96432
+ },
96433
+ "border-block-start-width": {
96434
+ "values": [
96435
+ "medium",
96436
+ "thick",
96437
+ "thin"
96438
+ ]
96439
+ },
95877
96440
  "border-bottom-color": {
95878
96441
  "values": [
95879
96442
  "currentcolor"
@@ -95906,6 +96469,15 @@ const generatedPropertyValues = {
95906
96469
  "collapse"
95907
96470
  ]
95908
96471
  },
96472
+ "border-image": {
96473
+ "values": [
96474
+ "none",
96475
+ "repeat",
96476
+ "stretch",
96477
+ "space",
96478
+ "round"
96479
+ ]
96480
+ },
95909
96481
  "border-image-repeat": {
95910
96482
  "values": [
95911
96483
  "stretch",
@@ -95924,6 +96496,48 @@ const generatedPropertyValues = {
95924
96496
  "auto"
95925
96497
  ]
95926
96498
  },
96499
+ "border-inline-end-style": {
96500
+ "values": [
96501
+ "none",
96502
+ "hidden",
96503
+ "inset",
96504
+ "groove",
96505
+ "outset",
96506
+ "ridge",
96507
+ "dotted",
96508
+ "dashed",
96509
+ "solid",
96510
+ "double"
96511
+ ]
96512
+ },
96513
+ "border-inline-end-width": {
96514
+ "values": [
96515
+ "medium",
96516
+ "thick",
96517
+ "thin"
96518
+ ]
96519
+ },
96520
+ "border-inline-start-style": {
96521
+ "values": [
96522
+ "none",
96523
+ "hidden",
96524
+ "inset",
96525
+ "groove",
96526
+ "outset",
96527
+ "ridge",
96528
+ "dotted",
96529
+ "dashed",
96530
+ "solid",
96531
+ "double"
96532
+ ]
96533
+ },
96534
+ "border-inline-start-width": {
96535
+ "values": [
96536
+ "medium",
96537
+ "thick",
96538
+ "thin"
96539
+ ]
96540
+ },
95927
96541
  "border-left-color": {
95928
96542
  "values": [
95929
96543
  "currentcolor"
@@ -96275,11 +96889,21 @@ const generatedPropertyValues = {
96275
96889
  "block-size"
96276
96890
  ]
96277
96891
  },
96892
+ "contain-intrinsic-block-size": {
96893
+ "values": [
96894
+ "none"
96895
+ ]
96896
+ },
96278
96897
  "contain-intrinsic-height": {
96279
96898
  "values": [
96280
96899
  "none"
96281
96900
  ]
96282
96901
  },
96902
+ "contain-intrinsic-inline-size": {
96903
+ "values": [
96904
+ "none"
96905
+ ]
96906
+ },
96283
96907
  "contain-intrinsic-width": {
96284
96908
  "values": [
96285
96909
  "none"
@@ -96299,6 +96923,16 @@ const generatedPropertyValues = {
96299
96923
  "anchored"
96300
96924
  ]
96301
96925
  },
96926
+ "content": {
96927
+ "values": [
96928
+ "none",
96929
+ "normal",
96930
+ "close-quote",
96931
+ "no-close-quote",
96932
+ "no-open-quote",
96933
+ "open-quote"
96934
+ ]
96935
+ },
96302
96936
  "content-visibility": {
96303
96937
  "values": [
96304
96938
  "visible",
@@ -96885,12 +97519,18 @@ const generatedPropertyValues = {
96885
97519
  },
96886
97520
  "grid-template-columns": {
96887
97521
  "values": [
96888
- "none"
97522
+ "auto",
97523
+ "none",
97524
+ "min-content",
97525
+ "max-content"
96889
97526
  ]
96890
97527
  },
96891
97528
  "grid-template-rows": {
96892
97529
  "values": [
96893
- "none"
97530
+ "auto",
97531
+ "none",
97532
+ "min-content",
97533
+ "max-content"
96894
97534
  ]
96895
97535
  },
96896
97536
  "hanging-punctuation": {
@@ -96909,6 +97549,11 @@ const generatedPropertyValues = {
96909
97549
  "max-content"
96910
97550
  ]
96911
97551
  },
97552
+ "hyphenate-character": {
97553
+ "values": [
97554
+ "auto"
97555
+ ]
97556
+ },
96912
97557
  "hyphenate-limit-chars": {
96913
97558
  "values": [
96914
97559
  "auto"
@@ -96929,6 +97574,12 @@ const generatedPropertyValues = {
96929
97574
  "stopped"
96930
97575
  ]
96931
97576
  },
97577
+ "image-orientation": {
97578
+ "values": [
97579
+ "none",
97580
+ "from-image"
97581
+ ]
97582
+ },
96932
97583
  "image-rendering": {
96933
97584
  "values": [
96934
97585
  "auto",
@@ -96951,6 +97602,26 @@ const generatedPropertyValues = {
96951
97602
  "auto"
96952
97603
  ]
96953
97604
  },
97605
+ "inset-block-end": {
97606
+ "values": [
97607
+ "auto"
97608
+ ]
97609
+ },
97610
+ "inset-block-start": {
97611
+ "values": [
97612
+ "auto"
97613
+ ]
97614
+ },
97615
+ "inset-inline-end": {
97616
+ "values": [
97617
+ "auto"
97618
+ ]
97619
+ },
97620
+ "inset-inline-start": {
97621
+ "values": [
97622
+ "auto"
97623
+ ]
97624
+ },
96954
97625
  "interactivity": {
96955
97626
  "values": [
96956
97627
  "auto",
@@ -96969,6 +97640,24 @@ const generatedPropertyValues = {
96969
97640
  "isolate"
96970
97641
  ]
96971
97642
  },
97643
+ "justify-self": {
97644
+ "values": [
97645
+ "auto",
97646
+ "normal",
97647
+ "stretch",
97648
+ "baseline",
97649
+ "center",
97650
+ "start",
97651
+ "end",
97652
+ "self-start",
97653
+ "self-end",
97654
+ "flex-start",
97655
+ "flex-end",
97656
+ "left",
97657
+ "right",
97658
+ "anchor-center"
97659
+ ]
97660
+ },
96972
97661
  "left": {
96973
97662
  "values": [
96974
97663
  "auto"
@@ -96994,6 +97683,15 @@ const generatedPropertyValues = {
96994
97683
  "after-white-space"
96995
97684
  ]
96996
97685
  },
97686
+ "line-clamp": {
97687
+ "values": [
97688
+ "none",
97689
+ "auto",
97690
+ "ellipsis",
97691
+ "no-ellipsis",
97692
+ "-webkit-legacy"
97693
+ ]
97694
+ },
96997
97695
  "line-height": {
96998
97696
  "values": [
96999
97697
  "normal"
@@ -97084,6 +97782,11 @@ const generatedPropertyValues = {
97084
97782
  "exclude"
97085
97783
  ]
97086
97784
  },
97785
+ "mask-image": {
97786
+ "values": [
97787
+ "none"
97788
+ ]
97789
+ },
97087
97790
  "mask-mode": {
97088
97791
  "values": [
97089
97792
  "alpha",
@@ -97091,6 +97794,13 @@ const generatedPropertyValues = {
97091
97794
  "match-source"
97092
97795
  ]
97093
97796
  },
97797
+ "mask-size": {
97798
+ "values": [
97799
+ "auto",
97800
+ "contain",
97801
+ "cover"
97802
+ ]
97803
+ },
97094
97804
  "mask-type": {
97095
97805
  "values": [
97096
97806
  "luminance",
@@ -97134,6 +97844,42 @@ const generatedPropertyValues = {
97134
97844
  "none"
97135
97845
  ]
97136
97846
  },
97847
+ "min-block-size": {
97848
+ "values": [
97849
+ "auto",
97850
+ "min-content",
97851
+ "max-content",
97852
+ "fit-content",
97853
+ "stretch"
97854
+ ]
97855
+ },
97856
+ "min-height": {
97857
+ "values": [
97858
+ "auto",
97859
+ "min-content",
97860
+ "max-content",
97861
+ "fit-content",
97862
+ "stretch"
97863
+ ]
97864
+ },
97865
+ "min-inline-size": {
97866
+ "values": [
97867
+ "auto",
97868
+ "min-content",
97869
+ "max-content",
97870
+ "fit-content",
97871
+ "stretch"
97872
+ ]
97873
+ },
97874
+ "min-width": {
97875
+ "values": [
97876
+ "auto",
97877
+ "min-content",
97878
+ "max-content",
97879
+ "fit-content",
97880
+ "stretch"
97881
+ ]
97882
+ },
97137
97883
  "mix-blend-mode": {
97138
97884
  "values": [
97139
97885
  "normal",
@@ -97197,6 +97943,23 @@ const generatedPropertyValues = {
97197
97943
  "none"
97198
97944
  ]
97199
97945
  },
97946
+ "outline": {
97947
+ "values": [
97948
+ "auto",
97949
+ "none",
97950
+ "inset",
97951
+ "groove",
97952
+ "ridge",
97953
+ "outset",
97954
+ "dotted",
97955
+ "dashed",
97956
+ "solid",
97957
+ "double",
97958
+ "medium",
97959
+ "thick",
97960
+ "thin"
97961
+ ]
97962
+ },
97200
97963
  "outline-color": {
97201
97964
  "values": [
97202
97965
  "currentcolor"
@@ -97270,6 +98033,13 @@ const generatedPropertyValues = {
97270
98033
  "auto"
97271
98034
  ]
97272
98035
  },
98036
+ "overscroll-behavior": {
98037
+ "values": [
98038
+ "auto",
98039
+ "none",
98040
+ "contain"
98041
+ ]
98042
+ },
97273
98043
  "overscroll-behavior-x": {
97274
98044
  "values": [
97275
98045
  "auto",
@@ -97291,6 +98061,15 @@ const generatedPropertyValues = {
97291
98061
  "auto"
97292
98062
  ]
97293
98063
  },
98064
+ "page-break-before": {
98065
+ "values": [
98066
+ "auto",
98067
+ "left",
98068
+ "right",
98069
+ "always",
98070
+ "avoid"
98071
+ ]
98072
+ },
97294
98073
  "page-margin-safety": {
97295
98074
  "values": [
97296
98075
  "none",
@@ -97550,6 +98329,13 @@ const generatedPropertyValues = {
97550
98329
  "nearest"
97551
98330
  ]
97552
98331
  },
98332
+ "scroll-marker-group": {
98333
+ "values": [
98334
+ "none",
98335
+ "after",
98336
+ "before"
98337
+ ]
98338
+ },
97553
98339
  "scroll-padding-block-end": {
97554
98340
  "values": [
97555
98341
  "auto"
@@ -97622,6 +98408,11 @@ const generatedPropertyValues = {
97622
98408
  "auto"
97623
98409
  ]
97624
98410
  },
98411
+ "scroll-timeline-name": {
98412
+ "values": [
98413
+ "none"
98414
+ ]
98415
+ },
97625
98416
  "scrollbar-color": {
97626
98417
  "values": [
97627
98418
  "auto"
@@ -97641,11 +98432,6 @@ const generatedPropertyValues = {
97641
98432
  "none"
97642
98433
  ]
97643
98434
  },
97644
- "shape-margin": {
97645
- "values": [
97646
- "none"
97647
- ]
97648
- },
97649
98435
  "shape-outside": {
97650
98436
  "values": [
97651
98437
  "none"
@@ -97659,6 +98445,13 @@ const generatedPropertyValues = {
97659
98445
  "geometricprecision"
97660
98446
  ]
97661
98447
  },
98448
+ "size": {
98449
+ "values": [
98450
+ "auto",
98451
+ "portrait",
98452
+ "landscape"
98453
+ ]
98454
+ },
97662
98455
  "speak": {
97663
98456
  "values": [
97664
98457
  "none",
@@ -97738,6 +98531,14 @@ const generatedPropertyValues = {
97738
98531
  "normal"
97739
98532
  ]
97740
98533
  },
98534
+ "text-box-edge": {
98535
+ "values": [
98536
+ "auto",
98537
+ "text",
98538
+ "cap",
98539
+ "ex"
98540
+ ]
98541
+ },
97741
98542
  "text-box-trim": {
97742
98543
  "values": [
97743
98544
  "none",
@@ -97890,6 +98691,29 @@ const generatedPropertyValues = {
97890
98691
  "stable"
97891
98692
  ]
97892
98693
  },
98694
+ "timeline-scope": {
98695
+ "values": [
98696
+ "none",
98697
+ "all"
98698
+ ]
98699
+ },
98700
+ "timeline-trigger-active-range-end": {
98701
+ "values": [
98702
+ "auto",
98703
+ "normal"
98704
+ ]
98705
+ },
98706
+ "timeline-trigger-active-range-start": {
98707
+ "values": [
98708
+ "auto",
98709
+ "normal"
98710
+ ]
98711
+ },
98712
+ "timeline-trigger-name": {
98713
+ "values": [
98714
+ "none"
98715
+ ]
98716
+ },
97893
98717
  "timeline-trigger-source": {
97894
98718
  "values": [
97895
98719
  "none",
@@ -98002,6 +98826,16 @@ const generatedPropertyValues = {
98002
98826
  "middle"
98003
98827
  ]
98004
98828
  },
98829
+ "view-timeline-inset": {
98830
+ "values": [
98831
+ "auto"
98832
+ ]
98833
+ },
98834
+ "view-timeline-name": {
98835
+ "values": [
98836
+ "none"
98837
+ ]
98838
+ },
98005
98839
  "view-transition-class": {
98006
98840
  "values": [
98007
98841
  "none"
@@ -98579,6 +99413,11 @@ class CSSMetadata {
98579
99413
  for (let i = 0; i < properties.length; ++i) {
98580
99414
  const property = properties[i];
98581
99415
  const propertyName = property.name;
99416
+ if ('is_descriptor' in property && 'is_property' in property) {
99417
+ if (property.is_descriptor && !property.is_property) {
99418
+ continue;
99419
+ }
99420
+ }
98582
99421
  if (!CSS.supports(propertyName, 'initial')) {
98583
99422
  continue;
98584
99423
  }
@@ -98619,6 +99458,15 @@ class CSSMetadata {
98619
99458
  }
98620
99459
  }
98621
99460
  for (const [propertyName, values] of propertyValueSets) {
99461
+ const aliasFor = this.#aliasesFor.get(propertyName);
99462
+ if (aliasFor) {
99463
+ const aliasForValues = propertyValueSets.get(aliasFor);
99464
+ if (aliasForValues) {
99465
+ for (const val of aliasForValues) {
99466
+ values.add(val);
99467
+ }
99468
+ }
99469
+ }
98622
99470
  for (const commonKeyword of CommonKeywords) {
98623
99471
  if (!values.has(commonKeyword) && CSS.supports(propertyName, commonKeyword)) {
98624
99472
  values.add(commonKeyword);
@@ -99806,6 +100654,7 @@ const extraPropertyValues = new Map([
99806
100654
  'superellipse(infinity)',
99807
100655
  ]),
99808
100656
  ],
100657
+ ['outline-style', new Set(['auto'])],
99809
100658
  ]);
99810
100659
  const Weight = new Map([
99811
100660
  ['align-content', 57],
@@ -100148,6 +100997,63 @@ class VariableMatcher extends matcherBase(VariableMatch) {
100148
100997
  null;
100149
100998
  }
100150
100999
  }
101000
+ class VariableNameMatch {
101001
+ node;
101002
+ text;
101003
+ matchedStyles;
101004
+ style;
101005
+ constructor(node, text, matchedStyles, style) {
101006
+ this.node = node;
101007
+ this.text = text;
101008
+ this.matchedStyles = matchedStyles;
101009
+ this.style = style;
101010
+ }
101011
+ resolveVariable() {
101012
+ return this.matchedStyles.computeCSSVariable(this.style, this.text);
101013
+ }
101014
+ }
101015
+ class VariableNameMatcher extends matcherBase(VariableNameMatch) {
101016
+ matchedStyles;
101017
+ style;
101018
+ constructor(matchedStyles, style) {
101019
+ super();
101020
+ this.matchedStyles = matchedStyles;
101021
+ this.style = style;
101022
+ }
101023
+ accepts() {
101024
+ return true;
101025
+ }
101026
+ matches(node, matching) {
101027
+ if (node.name !== 'VariableName' && node.name !== 'FeatureName' && node.name !== 'KeywordQuery') {
101028
+ return null;
101029
+ }
101030
+ const rawText = matching.ast.text(node);
101031
+ if (!rawText.startsWith('--')) {
101032
+ return null;
101033
+ }
101034
+ let cur = node.parent;
101035
+ let foundStyleCall = null;
101036
+ while (cur) {
101037
+ if (cur.name === 'CallExpression') {
101038
+ return null;
101039
+ }
101040
+ if (cur.name === 'CallQuery') {
101041
+ const callee = cur.getChild('QueryCallee');
101042
+ if (callee && matching.ast.text(callee) === 'style') {
101043
+ foundStyleCall = cur;
101044
+ break;
101045
+ }
101046
+ return null;
101047
+ }
101048
+ cur = cur.parent;
101049
+ }
101050
+ if (!foundStyleCall) {
101051
+ return null;
101052
+ }
101053
+ const text = node.name === 'KeywordQuery' ? rawText.split(/\s|[>!=<:]/)[0] : rawText;
101054
+ return new VariableNameMatch(node, text, this.matchedStyles, this.style);
101055
+ }
101056
+ }
100151
101057
  class AttributeMatch extends BaseVariableMatch {
100152
101058
  type;
100153
101059
  isCSSTokens;
@@ -103707,6 +104613,7 @@ class CSSMatchedStyles {
103707
104613
  propertyMatchers(style, computedStyles) {
103708
104614
  return [
103709
104615
  new VariableMatcher(this, style),
104616
+ new VariableNameMatcher(this, style),
103710
104617
  new ColorMatcher(() => computedStyles?.get('color') ?? null),
103711
104618
  new ColorMixMatcher(),
103712
104619
  new ContrastColorMatcher(),
@@ -148980,6 +149887,66 @@ var Show;
148980
149887
  },
148981
149888
  {
148982
149889
  'order': 15,
149890
+ 'show-by-default': false,
149891
+ 'title': 'iPhone 14',
149892
+ 'screen': {
149893
+ 'horizontal': {
149894
+ 'width': 844,
149895
+ 'height': 390,
149896
+ },
149897
+ 'device-pixel-ratio': 3,
149898
+ 'vertical': {
149899
+ 'width': 390,
149900
+ 'height': 844,
149901
+ },
149902
+ },
149903
+ 'capabilities': ['touch', 'mobile'],
149904
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149905
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149906
+ 'type': 'phone',
149907
+ },
149908
+ {
149909
+ 'order': 16,
149910
+ 'show-by-default': false,
149911
+ 'title': 'iPhone 14 Plus',
149912
+ 'screen': {
149913
+ 'horizontal': {
149914
+ 'width': 926,
149915
+ 'height': 428,
149916
+ },
149917
+ 'device-pixel-ratio': 3,
149918
+ 'vertical': {
149919
+ 'width': 428,
149920
+ 'height': 926,
149921
+ },
149922
+ },
149923
+ 'capabilities': ['touch', 'mobile'],
149924
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149925
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149926
+ 'type': 'phone',
149927
+ },
149928
+ {
149929
+ 'order': 17,
149930
+ 'show-by-default': false,
149931
+ 'title': 'iPhone 14 Pro',
149932
+ 'screen': {
149933
+ 'horizontal': {
149934
+ 'width': 852,
149935
+ 'height': 393,
149936
+ },
149937
+ 'device-pixel-ratio': 3,
149938
+ 'vertical': {
149939
+ 'width': 393,
149940
+ 'height': 852,
149941
+ },
149942
+ },
149943
+ 'capabilities': ['touch', 'mobile'],
149944
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149945
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149946
+ 'type': 'phone',
149947
+ },
149948
+ {
149949
+ 'order': 18,
148983
149950
  'show-by-default': true,
148984
149951
  'title': 'iPhone 14 Pro Max',
148985
149952
  'screen': {
@@ -148999,7 +149966,187 @@ var Show;
148999
149966
  'type': 'phone',
149000
149967
  },
149001
149968
  {
149002
- 'order': 16,
149969
+ 'order': 19,
149970
+ 'show-by-default': false,
149971
+ 'title': 'iPhone 15',
149972
+ 'screen': {
149973
+ 'horizontal': {
149974
+ 'width': 852,
149975
+ 'height': 393,
149976
+ },
149977
+ 'device-pixel-ratio': 3,
149978
+ 'vertical': {
149979
+ 'width': 393,
149980
+ 'height': 852,
149981
+ },
149982
+ },
149983
+ 'capabilities': ['touch', 'mobile'],
149984
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
149985
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
149986
+ 'type': 'phone',
149987
+ },
149988
+ {
149989
+ 'order': 20,
149990
+ 'show-by-default': false,
149991
+ 'title': 'iPhone 15 Plus',
149992
+ 'screen': {
149993
+ 'horizontal': {
149994
+ 'width': 932,
149995
+ 'height': 430,
149996
+ },
149997
+ 'device-pixel-ratio': 3,
149998
+ 'vertical': {
149999
+ 'width': 430,
150000
+ 'height': 932,
150001
+ },
150002
+ },
150003
+ 'capabilities': ['touch', 'mobile'],
150004
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150005
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150006
+ 'type': 'phone',
150007
+ },
150008
+ {
150009
+ 'order': 21,
150010
+ 'show-by-default': false,
150011
+ 'title': 'iPhone 15 Pro',
150012
+ 'screen': {
150013
+ 'horizontal': {
150014
+ 'width': 852,
150015
+ 'height': 393,
150016
+ },
150017
+ 'device-pixel-ratio': 3,
150018
+ 'vertical': {
150019
+ 'width': 393,
150020
+ 'height': 852,
150021
+ },
150022
+ },
150023
+ 'capabilities': ['touch', 'mobile'],
150024
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150025
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150026
+ 'type': 'phone',
150027
+ },
150028
+ {
150029
+ 'order': 22,
150030
+ 'show-by-default': true,
150031
+ 'title': 'iPhone 15 Pro Max',
150032
+ 'screen': {
150033
+ 'horizontal': {
150034
+ 'width': 932,
150035
+ 'height': 430,
150036
+ },
150037
+ 'device-pixel-ratio': 3,
150038
+ 'vertical': {
150039
+ 'width': 430,
150040
+ 'height': 932,
150041
+ },
150042
+ },
150043
+ 'capabilities': ['touch', 'mobile'],
150044
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150045
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150046
+ 'type': 'phone',
150047
+ },
150048
+ {
150049
+ 'order': 23,
150050
+ 'show-by-default': false,
150051
+ 'title': 'iPhone 16e',
150052
+ 'screen': {
150053
+ 'horizontal': {
150054
+ 'width': 844,
150055
+ 'height': 390,
150056
+ },
150057
+ 'device-pixel-ratio': 3,
150058
+ 'vertical': {
150059
+ 'width': 390,
150060
+ 'height': 844,
150061
+ },
150062
+ },
150063
+ 'capabilities': ['touch', 'mobile'],
150064
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150065
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150066
+ 'type': 'phone',
150067
+ },
150068
+ {
150069
+ 'order': 24,
150070
+ 'show-by-default': false,
150071
+ 'title': 'iPhone 16',
150072
+ 'screen': {
150073
+ 'horizontal': {
150074
+ 'width': 852,
150075
+ 'height': 393,
150076
+ },
150077
+ 'device-pixel-ratio': 3,
150078
+ 'vertical': {
150079
+ 'width': 393,
150080
+ 'height': 852,
150081
+ },
150082
+ },
150083
+ 'capabilities': ['touch', 'mobile'],
150084
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150085
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150086
+ 'type': 'phone',
150087
+ },
150088
+ {
150089
+ 'order': 25,
150090
+ 'show-by-default': false,
150091
+ 'title': 'iPhone 16 Plus',
150092
+ 'screen': {
150093
+ 'horizontal': {
150094
+ 'width': 932,
150095
+ 'height': 430,
150096
+ },
150097
+ 'device-pixel-ratio': 3,
150098
+ 'vertical': {
150099
+ 'width': 430,
150100
+ 'height': 932,
150101
+ },
150102
+ },
150103
+ 'capabilities': ['touch', 'mobile'],
150104
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150105
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150106
+ 'type': 'phone',
150107
+ },
150108
+ {
150109
+ 'order': 26,
150110
+ 'show-by-default': false,
150111
+ 'title': 'iPhone 16 Pro',
150112
+ 'screen': {
150113
+ 'horizontal': {
150114
+ 'width': 874,
150115
+ 'height': 402,
150116
+ },
150117
+ 'device-pixel-ratio': 3,
150118
+ 'vertical': {
150119
+ 'width': 402,
150120
+ 'height': 874,
150121
+ },
150122
+ },
150123
+ 'capabilities': ['touch', 'mobile'],
150124
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150125
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150126
+ 'type': 'phone',
150127
+ },
150128
+ {
150129
+ 'order': 27,
150130
+ 'show-by-default': true,
150131
+ 'title': 'iPhone 16 Pro Max',
150132
+ 'screen': {
150133
+ 'horizontal': {
150134
+ 'width': 956,
150135
+ 'height': 440,
150136
+ },
150137
+ 'device-pixel-ratio': 3,
150138
+ 'vertical': {
150139
+ 'width': 440,
150140
+ 'height': 956,
150141
+ },
150142
+ },
150143
+ 'capabilities': ['touch', 'mobile'],
150144
+ 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
150145
+ 'user-agent-metadata': { 'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true },
150146
+ 'type': 'phone',
150147
+ },
150148
+ {
150149
+ 'order': 28,
149003
150150
  'show-by-default': false,
149004
150151
  'title': 'Pixel 3 XL',
149005
150152
  'screen': {
@@ -149019,7 +150166,7 @@ var Show;
149019
150166
  'type': 'phone',
149020
150167
  },
149021
150168
  {
149022
- 'order': 18,
150169
+ 'order': 30,
149023
150170
  'show-by-default': true,
149024
150171
  'title': 'Pixel 7',
149025
150172
  'screen': {
@@ -149039,7 +150186,147 @@ var Show;
149039
150186
  'type': 'phone',
149040
150187
  },
149041
150188
  {
149042
- 'order': 20,
150189
+ 'order': 31,
150190
+ 'show-by-default': true,
150191
+ 'title': 'Pixel 8',
150192
+ 'screen': {
150193
+ 'horizontal': {
150194
+ 'width': 915,
150195
+ 'height': 412,
150196
+ },
150197
+ 'device-pixel-ratio': 2.625,
150198
+ 'vertical': {
150199
+ 'width': 412,
150200
+ 'height': 915,
150201
+ },
150202
+ },
150203
+ 'capabilities': ['touch', 'mobile'],
150204
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150205
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8', 'mobile': true },
150206
+ 'type': 'phone',
150207
+ },
150208
+ {
150209
+ 'order': 32,
150210
+ 'show-by-default': false,
150211
+ 'title': 'Pixel 8 Pro',
150212
+ 'screen': {
150213
+ 'horizontal': {
150214
+ 'width': 997,
150215
+ 'height': 448,
150216
+ },
150217
+ 'device-pixel-ratio': 3,
150218
+ 'vertical': {
150219
+ 'width': 448,
150220
+ 'height': 997,
150221
+ },
150222
+ },
150223
+ 'capabilities': ['touch', 'mobile'],
150224
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150225
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8 Pro', 'mobile': true },
150226
+ 'type': 'phone',
150227
+ },
150228
+ {
150229
+ 'order': 33,
150230
+ 'show-by-default': false,
150231
+ 'title': 'Pixel 8a',
150232
+ 'screen': {
150233
+ 'horizontal': {
150234
+ 'width': 915,
150235
+ 'height': 412,
150236
+ },
150237
+ 'device-pixel-ratio': 2.625,
150238
+ 'vertical': {
150239
+ 'width': 412,
150240
+ 'height': 915,
150241
+ },
150242
+ },
150243
+ 'capabilities': ['touch', 'mobile'],
150244
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8a) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150245
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 8a', 'mobile': true },
150246
+ 'type': 'phone',
150247
+ },
150248
+ {
150249
+ 'order': 34,
150250
+ 'show-by-default': true,
150251
+ 'title': 'Pixel 9',
150252
+ 'screen': {
150253
+ 'horizontal': {
150254
+ 'width': 924,
150255
+ 'height': 412,
150256
+ },
150257
+ 'device-pixel-ratio': 2.625,
150258
+ 'vertical': {
150259
+ 'width': 412,
150260
+ 'height': 924,
150261
+ },
150262
+ },
150263
+ 'capabilities': ['touch', 'mobile'],
150264
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150265
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9', 'mobile': true },
150266
+ 'type': 'phone',
150267
+ },
150268
+ {
150269
+ 'order': 35,
150270
+ 'show-by-default': false,
150271
+ 'title': 'Pixel 9 Pro',
150272
+ 'screen': {
150273
+ 'horizontal': {
150274
+ 'width': 952,
150275
+ 'height': 427,
150276
+ },
150277
+ 'device-pixel-ratio': 3,
150278
+ 'vertical': {
150279
+ 'width': 427,
150280
+ 'height': 952,
150281
+ },
150282
+ },
150283
+ 'capabilities': ['touch', 'mobile'],
150284
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150285
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9 Pro', 'mobile': true },
150286
+ 'type': 'phone',
150287
+ },
150288
+ {
150289
+ 'order': 36,
150290
+ 'show-by-default': false,
150291
+ 'title': 'Pixel 9 Pro XL',
150292
+ 'screen': {
150293
+ 'horizontal': {
150294
+ 'width': 997,
150295
+ 'height': 448,
150296
+ },
150297
+ 'device-pixel-ratio': 3,
150298
+ 'vertical': {
150299
+ 'width': 448,
150300
+ 'height': 997,
150301
+ },
150302
+ },
150303
+ 'capabilities': ['touch', 'mobile'],
150304
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 9 Pro XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150305
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'Pixel 9 Pro XL', 'mobile': true },
150306
+ 'type': 'phone',
150307
+ },
150308
+ {
150309
+ 'order': 37,
150310
+ 'show-by-default': true,
150311
+ 'title': 'Pixel 10',
150312
+ 'screen': {
150313
+ 'horizontal': {
150314
+ 'width': 924,
150315
+ 'height': 412,
150316
+ },
150317
+ 'device-pixel-ratio': 2.625,
150318
+ 'vertical': {
150319
+ 'width': 412,
150320
+ 'height': 924,
150321
+ },
150322
+ },
150323
+ 'capabilities': ['touch', 'mobile'],
150324
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 16; Pixel 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
150325
+ 'user-agent-metadata': { 'platform': 'Android', 'platformVersion': '16', 'architecture': '', 'model': 'Pixel 10', 'mobile': true },
150326
+ 'type': 'phone',
150327
+ },
150328
+ {
150329
+ 'order': 38,
149043
150330
  'show-by-default': true,
149044
150331
  'title': 'Samsung Galaxy S8+',
149045
150332
  'screen': {
@@ -149059,7 +150346,7 @@ var Show;
149059
150346
  'type': 'phone',
149060
150347
  },
149061
150348
  {
149062
- 'order': 24,
150349
+ 'order': 39,
149063
150350
  'show-by-default': true,
149064
150351
  'title': 'Samsung Galaxy S20 Ultra',
149065
150352
  'screen': {
@@ -149079,7 +150366,7 @@ var Show;
149079
150366
  'type': 'phone',
149080
150367
  },
149081
150368
  {
149082
- 'order': 26,
150369
+ 'order': 40,
149083
150370
  'show-by-default': true,
149084
150371
  'title': 'iPad Mini',
149085
150372
  'screen': {
@@ -149099,7 +150386,7 @@ var Show;
149099
150386
  'type': 'tablet',
149100
150387
  },
149101
150388
  {
149102
- 'order': 28,
150389
+ 'order': 41,
149103
150390
  'show-by-default': true,
149104
150391
  'title': 'iPad Air',
149105
150392
  'screen': {
@@ -149119,7 +150406,7 @@ var Show;
149119
150406
  'type': 'tablet',
149120
150407
  },
149121
150408
  {
149122
- 'order': 29,
150409
+ 'order': 42,
149123
150410
  'show-by-default': true,
149124
150411
  'title': 'iPad Pro',
149125
150412
  'screen': {
@@ -149139,7 +150426,7 @@ var Show;
149139
150426
  'type': 'tablet',
149140
150427
  },
149141
150428
  {
149142
- 'order': 30,
150429
+ 'order': 43,
149143
150430
  'show-by-default': true,
149144
150431
  'title': 'Surface Pro 7',
149145
150432
  'screen': {
@@ -149158,7 +150445,7 @@ var Show;
149158
150445
  'type': 'tablet',
149159
150446
  },
149160
150447
  {
149161
- 'order': 32,
150448
+ 'order': 44,
149162
150449
  'show-by-default': true,
149163
150450
  'dual-screen': true,
149164
150451
  'title': 'Surface Duo',
@@ -149193,7 +150480,7 @@ var Show;
149193
150480
  ],
149194
150481
  },
149195
150482
  {
149196
- 'order': 34,
150483
+ 'order': 46,
149197
150484
  'show-by-default': true,
149198
150485
  'foldable-screen': true,
149199
150486
  'title': 'Galaxy Z Fold 5',
@@ -149242,7 +150529,7 @@ var Show;
149242
150529
  ],
149243
150530
  },
149244
150531
  {
149245
- 'order': 35,
150532
+ 'order': 47,
149246
150533
  'show-by-default': true,
149247
150534
  'foldable-screen': true,
149248
150535
  'title': 'Asus Zenbook Fold',
@@ -149295,7 +150582,7 @@ var Show;
149295
150582
  ],
149296
150583
  },
149297
150584
  {
149298
- 'order': 36,
150585
+ 'order': 48,
149299
150586
  'show-by-default': true,
149300
150587
  'title': 'Samsung Galaxy A51/71',
149301
150588
  'screen': {
@@ -156095,6 +157382,7 @@ const UIStrings$h = {
156095
157382
  CSSSelectorInternalMediaControlsOverlayCastButton: "The `disableRemotePlayback` attribute should be used in order to disable the default Cast integration instead of using `-internal-media-controls-overlay-cast-button` selector.",
156096
157383
  CSSValueAppearanceSliderVertical: "CSS appearance value `slider-vertical` is not standardized and will be removed.",
156097
157384
  DataUrlInSvgUse: "Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future.",
157385
+ DigitalCredentialsUnknownProtocol: "An unknown Digital Credentials protocol was requested in navigator.credentials.get() or create(). In a future release, unrecognized protocols will be blocked.",
156098
157386
  DocumentCreateEventKeyboardEvents: "document.createEvent('KeyboardEvents') is deprecated and will be removed. Use `new KeyboardEvent()` instead.",
156099
157387
  DocumentCreateEventTransitionEvent: "document.createEvent('TransitionEvent') is deprecated and will be removed. Use `new TransitionEvent()` instead.",
156100
157388
  ExampleBrowserProcessDeprecation: "This is an example for showing the code required for a browser process reported deprecation.",
@@ -156188,6 +157476,10 @@ const DEPRECATIONS_METADATA = {
156188
157476
  "chromeStatusFeature": 5128825141198848,
156189
157477
  "milestone": 119
156190
157478
  },
157479
+ "DigitalCredentialsUnknownProtocol": {
157480
+ "chromeStatusFeature": 6492906882990080,
157481
+ "milestone": 160
157482
+ },
156191
157483
  "DocumentCreateEventKeyboardEvents": {
156192
157484
  "chromeStatusFeature": 5095987863486464,
156193
157485
  "milestone": 151