@vitest/browser 5.0.5 → 5.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import fs, { promises, existsSync, readFileSync, createReadStream } from 'node:fs';
2
2
  import { createRequire } from 'node:module';
3
3
  import { ManualMockedModule, RedirectedModule, AutomockedModule, AutospiedModule, MockerRegistry } from '@vitest/mocker';
4
- import { dynamicImportPlugin, ServerMockResolver, interceptorPlugin } from '@vitest/mocker/node';
4
+ import { dynamicImportPlugin, ServerMockResolver, getManualMockId, getManualMockUrl, interceptorPlugin, manualMockPlugin } from '@vitest/mocker/node';
5
5
  import { distClientRoot } from '@vitest/ui';
6
6
  import { slash as slash$1, deepMerge, cleanUrl as cleanUrl$1, toArray } from '@vitest/utils/helpers';
7
7
  import sirv from 'sirv';
@@ -209,7 +209,7 @@ const basename = function(p, extension) {
209
209
  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
210
210
  };
211
211
 
212
- var version = "5.0.5";
212
+ var version = "5.1.0-beta.1";
213
213
 
214
214
  const pkgRoot = resolve(fileURLToPath(import.meta.url), "../..");
215
215
  const distRoot = resolve(pkgRoot, "dist");
@@ -1498,7 +1498,8 @@ class Mime {
1498
1498
  getAllExtensions(type) {
1499
1499
  if (typeof type !== 'string')
1500
1500
  return null;
1501
- return __classPrivateFieldGet(this, _Mime_typeToExtensions, "f").get(type.toLowerCase()) ?? null;
1501
+ type = type.split(';')[0].trim().toLowerCase();
1502
+ return __classPrivateFieldGet(this, _Mime_typeToExtensions, "f").get(type) ?? null;
1502
1503
  }
1503
1504
  _freeze() {
1504
1505
  this.define = () => {
@@ -2194,7 +2195,7 @@ const _recordBrowserTrace = async ({ project }, { testId, data }) => {
2194
2195
  if (!entry.stack || entry.location) {
2195
2196
  return entry;
2196
2197
  }
2197
- const stacks = project.browser.parseStacktrace(entry.stack);
2198
+ const stacks = project.browser.parseStacktrace(entry.stack, { firstOnly: true });
2198
2199
  if (stacks[0]) {
2199
2200
  entry.location = stacks[0];
2200
2201
  }
@@ -2226,6 +2227,17 @@ var builtinCommands = {
2226
2227
  class BrowserServerState {
2227
2228
  orchestrators = new Map();
2228
2229
  testers = new Map();
2230
+ // reported by the orchestrator: whether the browser accepts an import map after a module loaded
2231
+ lateImportMaps;
2232
+ // a rule stays in the document until the run ends, and a non-isolated
2233
+ // run shares one document between its files
2234
+ usesImportMaps(config) {
2235
+ const option = config.browser.importMapMocks;
2236
+ if (option === true) {
2237
+ return true;
2238
+ }
2239
+ return option !== false && this.lateImportMaps === true && config.isolate;
2240
+ }
2229
2241
  }
2230
2242
 
2231
2243
  class ProjectBrowser {
@@ -2798,6 +2810,160 @@ function reviveUndefined(_key, value) {
2798
2810
  return value === UNDEFINED_VALUE ? undefined : value;
2799
2811
  }
2800
2812
 
2813
+ function createMockHandlers(project, { registry, factoryExportResolvers, checkFileAccess, rpc }) {
2814
+ const vite = project.vite;
2815
+ const mockResolver = new ServerMockResolver(vite, { moduleDirectories: project.config?.deps?.moduleDirectories });
2816
+ const mocker = project.browser?.provider?.mocker;
2817
+ return {
2818
+ resolveId(id, importer) {
2819
+ return mockResolver.resolveId(id, importer);
2820
+ },
2821
+ resolveMock(rawId, importer, options) {
2822
+ return mockResolver.resolveMock(rawId, importer, options);
2823
+ },
2824
+ invalidate(ids) {
2825
+ return mockResolver.invalidate(ids);
2826
+ },
2827
+ async registerMock(sessionId, module, { importer, testFile }) {
2828
+ const option = project.config.browser.importMapMocks;
2829
+ const state = project.browser.state;
2830
+ if (option === true && state.lateImportMaps === false) {
2831
+ throw new Error("\"browser.importMapMocks\" is enabled, but this browser does not accept an import map after a module has loaded. " + "Firefox needs the \"dom.multiple_import_maps.enabled\" preference.");
2832
+ }
2833
+ if (state.usesImportMaps(project.config)) {
2834
+ // a rule cannot be removed later, so a mock from another module, like
2835
+ // a setup file, is not added when the test file restores the module
2836
+ if (testFile && importer !== testFile && (await getStaticUnmocks(vite, mockResolver, testFile)).has(module.id)) {
2837
+ return;
2838
+ }
2839
+ if (module.type !== "manual") {
2840
+ return resolveMockImportMap(vite, module);
2841
+ }
2842
+ // the shim reads the original only when it loads; until then the
2843
+ // server keeps a way to ask this session for the factory keys
2844
+ // this is a last resort check only if the transformation failed
2845
+ factoryExportResolvers.set(module.url, {
2846
+ sessionId,
2847
+ async resolve() {
2848
+ const { keys } = await rpc().resolveManualMock(module.url);
2849
+ return keys;
2850
+ }
2851
+ });
2852
+ // the shim is not tied to the original file, so a changed original
2853
+ // would otherwise keep a stale export list
2854
+ const { moduleGraph } = vite.environments.client;
2855
+ const shim = moduleGraph.getModuleById(getManualMockId(module.url, module.id));
2856
+ if (shim) {
2857
+ moduleGraph.invalidateModule(shim);
2858
+ }
2859
+ return resolveMockImportMap(vite, module);
2860
+ }
2861
+ if (!mocker) {
2862
+ // make sure modules are not processed yet in case they were imported before
2863
+ // and were not mocked
2864
+ mockResolver.invalidate([module.id]);
2865
+ if (module.type === "manual") {
2866
+ const mock = ManualMockedModule.fromJSON(module, async () => {
2867
+ try {
2868
+ const { keys } = await rpc().resolveManualMock(module.url);
2869
+ return Object.fromEntries(keys.map((key) => [key, null]));
2870
+ } catch (err) {
2871
+ project.vitest.state.catchError(err, "Manual Mock Resolver Error");
2872
+ return {};
2873
+ }
2874
+ });
2875
+ registry.add(mock);
2876
+ } else {
2877
+ if (module.type === "redirect") {
2878
+ const redirectUrl = new URL(module.redirect);
2879
+ const redirect = join(vite.config.root, slash(decodeURI(redirectUrl.pathname)));
2880
+ checkFileAccess(redirect);
2881
+ module.redirect = redirect;
2882
+ }
2883
+ registry.register(module);
2884
+ }
2885
+ return;
2886
+ }
2887
+ if (module.type === "manual") {
2888
+ const manualModule = ManualMockedModule.fromJSON(module, async () => {
2889
+ const { keys } = await rpc().resolveManualMock(module.url);
2890
+ return Object.fromEntries(keys.map((key) => [key, null]));
2891
+ });
2892
+ await mocker.register(sessionId, manualModule);
2893
+ } else if (module.type === "redirect") {
2894
+ await mocker.register(sessionId, RedirectedModule.fromJSON(module));
2895
+ } else if (module.type === "automock") {
2896
+ await mocker.register(sessionId, AutomockedModule.fromJSON(module));
2897
+ } else if (module.type === "autospy") {
2898
+ await mocker.register(sessionId, AutospiedModule.fromJSON(module));
2899
+ }
2900
+ },
2901
+ clearMocks(sessionId) {
2902
+ for (const [url, resolver] of factoryExportResolvers) {
2903
+ if (resolver.sessionId === sessionId) {
2904
+ factoryExportResolvers.delete(url);
2905
+ }
2906
+ }
2907
+ if (!mocker) {
2908
+ return registry.clear();
2909
+ }
2910
+ return mocker.clear(sessionId);
2911
+ },
2912
+ unregisterMock(sessionId, id) {
2913
+ if (!mocker) {
2914
+ return registry.delete(id);
2915
+ }
2916
+ return mocker.delete(sessionId, id);
2917
+ }
2918
+ };
2919
+ }
2920
+ function injectQuery(url, query) {
2921
+ return url.includes("?") ? `${url}&${query}` : `${url}?${query}`;
2922
+ }
2923
+ // the key must be the exact URL that import analysis emits in the browser,
2924
+ // including the dependency version and the HMR timestamp
2925
+ function resolveMockImportMap(vite, module) {
2926
+ let url = module.url;
2927
+ const version = /[?&]v=(\w{8})/.exec(module.id)?.[1];
2928
+ if (version) {
2929
+ url = injectQuery(url, `v=${version}`);
2930
+ }
2931
+ const node = vite.environments.client.moduleGraph.getModuleById(module.id);
2932
+ if (node && node.lastHMRTimestamp > 0) {
2933
+ url = injectQuery(url, `t=${node.lastHMRTimestamp}`);
2934
+ }
2935
+ const base = vite.config.base.replace(/\/$/, "");
2936
+ const key = base + url;
2937
+ if (module.type === "redirect") {
2938
+ const redirect = new URL(module.redirect);
2939
+ return { imports: { [key]: base + redirect.pathname + redirect.search } };
2940
+ }
2941
+ if (module.type === "manual") {
2942
+ return { imports: { [key]: base + getManualMockUrl(module.url, module.id) } };
2943
+ }
2944
+ return { imports: { [key]: injectQuery(key, `mock=${module.type}`) } };
2945
+ }
2946
+ const staticUnmocks = new WeakMap();
2947
+ // resolved ids of the modules that a test file restores with a static `vi.unmock` call
2948
+ async function getStaticUnmocks(vite, resolver, testFile) {
2949
+ const environment = vite.environments.client;
2950
+ // the url the tester requests, so the transform is shared with the import
2951
+ const url = /^\w:/.test(testFile) ? `/@fs/${testFile}` : testFile;
2952
+ // a test file that fails to transform reports the error when it is imported
2953
+ const transformed = await environment.transformRequest(url).catch(() => null);
2954
+ const id = (await environment.moduleGraph.getModuleByUrl(url))?.id;
2955
+ if (!transformed || !id) {
2956
+ return new Set();
2957
+ }
2958
+ let unmocks = staticUnmocks.get(transformed);
2959
+ if (!unmocks) {
2960
+ const calls = environment.pluginContainer.getModuleInfo(id)?.meta?.vitestStaticMocks ?? [];
2961
+ unmocks = Promise.all(calls.filter((call) => call.method === "unmock").map((call) => resolver.resolveId(call.specifier, id).catch(() => null))).then((results) => new Set(results.flatMap((resolved) => resolved ? [resolved.id] : [])));
2962
+ staticUnmocks.set(transformed, unmocks);
2963
+ }
2964
+ return unmocks;
2965
+ }
2966
+
2801
2967
  const debug = createDebugger("vitest:browser:api");
2802
2968
  const BROWSER_API_PATH = "/__vitest_browser_api__";
2803
2969
  const DEFAULT_HEARTBEAT_INTERVAL = 15e3;
@@ -2818,7 +2984,7 @@ function resolveHeartbeatInterval(vitest) {
2818
2984
  }
2819
2985
  return interval;
2820
2986
  }
2821
- function setupBrowserRpc(globalServer, defaultMockerRegistry) {
2987
+ function setupBrowserRpc(globalServer, defaultMockerRegistry, factoryExportResolvers) {
2822
2988
  const vite = globalServer.vite;
2823
2989
  const vitest = globalServer.vitest;
2824
2990
  const wss = new WebSocketServer({ noServer: true });
@@ -2937,10 +3103,9 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
2937
3103
  }
2938
3104
  }
2939
3105
  function setupClient(project, rpcId, ws, options) {
2940
- const mockResolver = new ServerMockResolver(globalServer.vite, { moduleDirectories: project.config?.deps?.moduleDirectories });
2941
- const mocker = project.browser?.provider?.mocker;
2942
3106
  const rpc = createBirpc({
2943
- onOrchestratorReady() {
3107
+ onOrchestratorReady(capabilities) {
3108
+ project.browser.state.lateImportMaps = capabilities.lateImportMaps;
2944
3109
  const sessions = vitest._browserSessions;
2945
3110
  sessions.getSession(options.sessionId)?.ready();
2946
3111
  },
@@ -3083,9 +3248,6 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
3083
3248
  cancelCurrentRun(reason) {
3084
3249
  vitest.cancelCurrentRun(reason);
3085
3250
  },
3086
- async resolveId(id, importer) {
3087
- return mockResolver.resolveId(id, importer);
3088
- },
3089
3251
  debug(...args) {
3090
3252
  vitest.logger.console.debug(...args);
3091
3253
  },
@@ -3129,65 +3291,12 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
3129
3291
  }, provider.getCommandsContext(sessionId));
3130
3292
  return await project.browser.triggerCommand(command, context, ...payload);
3131
3293
  },
3132
- resolveMock(rawId, importer, options) {
3133
- return mockResolver.resolveMock(rawId, importer, options);
3134
- },
3135
- invalidate(ids) {
3136
- return mockResolver.invalidate(ids);
3137
- },
3138
- async registerMock(sessionId, module) {
3139
- if (!mocker) {
3140
- // make sure modules are not processed yet in case they were imported before
3141
- // and were not mocked
3142
- mockResolver.invalidate([module.id]);
3143
- if (module.type === "manual") {
3144
- const mock = ManualMockedModule.fromJSON(module, async () => {
3145
- try {
3146
- const { keys } = await rpc.resolveManualMock(module.url);
3147
- return Object.fromEntries(keys.map((key) => [key, null]));
3148
- } catch (err) {
3149
- vitest.state.catchError(err, "Manual Mock Resolver Error");
3150
- return {};
3151
- }
3152
- });
3153
- defaultMockerRegistry.add(mock);
3154
- } else {
3155
- if (module.type === "redirect") {
3156
- const redirectUrl = new URL(module.redirect);
3157
- const redirect = join(vite.config.root, slash(decodeURI(redirectUrl.pathname)));
3158
- checkFileAccess(redirect);
3159
- module.redirect = redirect;
3160
- }
3161
- defaultMockerRegistry.register(module);
3162
- }
3163
- return;
3164
- }
3165
- if (module.type === "manual") {
3166
- const manualModule = ManualMockedModule.fromJSON(module, async () => {
3167
- const { keys } = await rpc.resolveManualMock(module.url);
3168
- return Object.fromEntries(keys.map((key) => [key, null]));
3169
- });
3170
- await mocker.register(sessionId, manualModule);
3171
- } else if (module.type === "redirect") {
3172
- await mocker.register(sessionId, RedirectedModule.fromJSON(module));
3173
- } else if (module.type === "automock") {
3174
- await mocker.register(sessionId, AutomockedModule.fromJSON(module));
3175
- } else if (module.type === "autospy") {
3176
- await mocker.register(sessionId, AutospiedModule.fromJSON(module));
3177
- }
3178
- },
3179
- clearMocks(sessionId) {
3180
- if (!mocker) {
3181
- return defaultMockerRegistry.clear();
3182
- }
3183
- return mocker.clear(sessionId);
3184
- },
3185
- unregisterMock(sessionId, id) {
3186
- if (!mocker) {
3187
- return defaultMockerRegistry.delete(id);
3188
- }
3189
- return mocker.delete(sessionId, id);
3190
- },
3294
+ ...createMockHandlers(project, {
3295
+ registry: defaultMockerRegistry,
3296
+ factoryExportResolvers,
3297
+ checkFileAccess,
3298
+ rpc: () => rpc
3299
+ }),
3191
3300
  // CDP
3192
3301
  async sendCdpEvent(sessionId, event, payload) {
3193
3302
  assertCdpAllowed(project);
@@ -3265,6 +3374,7 @@ function pinCacheControl(res, value) {
3265
3374
  */
3266
3375
  const createBrowserServer = async () => {
3267
3376
  const mockerRegistry = new MockerRegistry();
3377
+ const factoryExportResolvers = new Map();
3268
3378
  const contribution = {
3269
3379
  async transformIndexHtml(ctx) {
3270
3380
  const parentServer = contribution.parent;
@@ -3414,12 +3524,16 @@ body {
3414
3524
  `/@fs${distDir}`,
3415
3525
  `/@fs${distRoot}`
3416
3526
  ];
3527
+ // request interception serves a mocked dependency at the original URL,
3528
+ // so a cached original would never reach the mock; import map mocks
3529
+ // have their own URLs and keep Vite's immutable caching
3530
+ const interceptsMocks = () => Array.from(parentServer.children).some((child) => !child.state.usesImportMaps(child.config));
3417
3531
  server.middlewares.use((req, res, next) => {
3418
3532
  const url = req.url;
3419
3533
  if (url) {
3420
3534
  if (immutablePrefixes.some((prefix) => url.startsWith(prefix))) {
3421
3535
  pinCacheControl(res, "public,max-age=31536000,immutable");
3422
- } else if (versionRegexp.test(url) && !url.includes("chunk-")) {
3536
+ } else if (versionRegexp.test(url) && !url.includes("chunk-") && interceptsMocks()) {
3423
3537
  pinCacheControl(res, "no-cache");
3424
3538
  }
3425
3539
  }
@@ -3504,7 +3618,7 @@ body {
3504
3618
  }, "/");
3505
3619
  },
3506
3620
  setupRpc(parent) {
3507
- setupBrowserRpc(parent, mockerRegistry);
3621
+ setupBrowserRpc(parent, mockerRegistry, factoryExportResolvers);
3508
3622
  }
3509
3623
  };
3510
3624
  contribution.plugins = [
@@ -3513,6 +3627,13 @@ body {
3513
3627
  registry: mockerRegistry,
3514
3628
  registerWebSocketEvents: false
3515
3629
  }),
3630
+ manualMockPlugin({ resolveFactoryExports(url) {
3631
+ const resolver = factoryExportResolvers.get(url);
3632
+ if (!resolver) {
3633
+ throw new Error(`[vitest] The factory mock "${url}" is not registered`);
3634
+ }
3635
+ return resolver.resolve();
3636
+ } }),
3516
3637
  {
3517
3638
  name: "vitest:browser:framework-sourcemaps",
3518
3639
  enforce: "post",
@@ -0,0 +1,5 @@
1
+ import{vi as e}from"vitest";import{server as t,page as n,utils as r}from"vitest/browser";import{getSafeTimers as i,__INTERNAL as a}from"vitest/internal/browser";const o=globalThis.performance?globalThis.performance.now.bind(globalThis.performance):Date.now;function s(e){let t=l().current;if(!t||t.type!==`test`)return e();let n=!1,r=Error(`STACK_TRACE_ERROR`);t.onFinished??=[],t.onFinished.push(()=>{if(!n){let e=Error(`The call was not awaited. This method is asynchronous and must be awaited; otherwise, the call will not start to avoid unhandled rejections.`);throw e.stack=r.stack?.replace(r.message,e.message),e}});let i;return{then(t,a){return n=!0,(i||=e(r)).then(t,a)},catch(t){return n=!0,(i||=e(r)).catch(t)},finally(t){return n=!0,(i||=e(r)).finally(t)},[Symbol.toStringTag]:`Promise`}}function c(){return window.__vitest_browser_runner__}function l(){let e=window.__vitest_worker__;if(!e)throw Error(`Worker state is not found. This is an issue with Vitest. Please, open an issue.`);return e}function u(e){if(e?.timeout!=null)return e.timeout;if(l().config.browser.providerOptions.actionTimeout==null)return c().runner._deadline?.derive()}function d(e){let t=u(e);return t==null?e:{...e,timeout:t}}function f(t){if(!e.isFakeTimers())return t;let{setInterval:n,clearInterval:r}=i(),a=n(()=>{e.isFakeTimers()&&e.advanceTimersByTime(50)},50);return t.finally(()=>r(a))}class p{[Symbol.toStringTag]=`Action`;#e;#t;#n;#r;#i;#a=!1;constructor(e,t,n,r){this.#e=e,this.#t=t,this.#n=n,this.#r=r??Error(`STACK_TRACE_ERROR`);let i=l().current;if(r||!i||i.type!==`test`){this.#i=this.#o();return}i.onFinished??=[],i.onFinished.push(()=>{if(!this.#a){let e=Error(`The call was not awaited. This method is asynchronous and must be awaited; otherwise, the call will not start to avoid unhandled rejections.`);throw e.stack=this.#r.stack?.replace(this.#r.message,e.message),e}})}async#o(){let e=u(this.#n),t=e==null?this.#n:{...this.#n,timeout:e},n=typeof this.#t==`function`?await this.#t(t):[...this.#t,t],r=f(c().commands.triggerCommand(this.#e,n,this.#r)),i=c().runner._deadline;return i&&e!=null?i.track(this.#e.slice(9),r,e,this.#r):r}#s(){return this.#a=!0,this.#i??=this.#o()}then(e,t){return this.#s().then(e,t)}catch(e){return this.#s().catch(e)}finally(e){return this.#s().finally(e)}}class m extends p{constructor(e,t,n,r,i){super(t,[e,...n],r,i)}}class h extends p{constructor(e,t,n,r){super(`__vitest_upload`,async n=>[e,await g(t),n],n,r)}}function g(e){return Promise.all((Array.isArray(e)?e:[e]).map(async e=>{if(typeof e==`string`)return e;let t=await new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(Error(`Failed to read file: ${e.name}`)),r.readAsDataURL(e)});return{name:e.name,mimeType:e.type,base64:t.slice(t.indexOf(`,`)+1)}}))}function _(e){"@babel/helpers - typeof";return _=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},_(e)}function v(e,t){if(_(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(_(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function y(e){var t=v(e,`string`);return _(t)==`symbol`?t:t+``}function b(e,t,n){return(t=y(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const x=function(e,t,n){return e>=t&&e<=n};function S(e){return x(e,48,57)}function ee(e){return S(e)||x(e,65,70)||x(e,97,102)}function C(e){return x(e,65,90)}function te(e){return x(e,97,122)}function ne(e){return C(e)||te(e)}function re(e){return e>=128}function ie(e){return ne(e)||re(e)||e===95}function ae(e){return ie(e)||S(e)||e===45}function oe(e){return x(e,0,8)||e===11||x(e,14,31)||e===127}function se(e){return e===10}function w(e){return se(e)||e===9||e===32}var T=class extends Error{constructor(e){super(e),this.name=`InvalidCharacterError`}};function ce(e){let t=[];for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r===13&&e.charCodeAt(n+1)===10&&(r=10,n++),(r===13||r===12)&&(r=10),r===0&&(r=65533),x(r,55296,56319)&&x(e.charCodeAt(n+1),56320,57343)){let t=r-55296,i=e.charCodeAt(n+1)-56320;r=2**16+t*1024+i,n++}t.push(r)}return t}function E(e){if(e<=65535)return String.fromCharCode(e);e-=2**16;let t=Math.floor(e/1024)+55296,n=e%1024+56320;return String.fromCharCode(t)+String.fromCharCode(n)}function le(e){let t=ce(e),n=-1,r=[],i,a=function(e){return e>=t.length?-1:t[e]},o=function(e){if(e===void 0&&(e=1),e>3)throw`Spec Error: no more than three codepoints of lookahead.`;return a(n+e)},s=function(e){return e===void 0&&(e=1),n+=e,i=a(n),!0},c=function(){return--n,!0},l=function(e){return e===void 0&&(e=i),e===-1},u=function(){if(d(),s(),w(i)){for(;w(o());)s();return new fe}if(i===34)return m();if(i===35){if(ae(o())||_(o(1),o(2))){let e=new Pe(``);return y(o(1),o(2),o(3))&&(e.type=`id`),e.value=te(),e}return new k(i)}return i===36?o()===61?(s(),new De):new k(i):i===39?m():i===40?new Se:i===41?new Ce:i===42?o()===61?(s(),new Oe):new k(i):i===43?C()?(c(),f()):new k(i):i===44?new _e:i===45?C()?(c(),f()):o(1)===45&&o(2)===62?(s(2),new me):b()?(c(),p()):new k(i):i===46?C()?(c(),f()):new k(i):i===58?new he:i===59?new ge:i===60?o(1)===33&&o(2)===45&&o(3)===45?(s(3),new pe):new k(i):i===64?y(o(1),o(2),o(3))?new Ne(te()):new k(i):i===91?new be:i===92?v()?(c(),p()):new k(i):i===93?new xe:i===94?o()===61?(s(),new Ee):new k(i):i===123?new ve:i===124?o()===61?(s(),new Te):o()===124?(s(),new ke):new k(i):i===125?new ye:i===126?o()===61?(s(),new we):new k(i):S(i)?(c(),f()):ie(i)?(c(),p()):l()?new Ae:new k(i)},d=function(){for(;o(1)===47&&o(2)===42;)for(s(2);;){if(s(),i===42&&o()===47){s();break}if(l())return}},f=function(){let e=ne();if(y(o(1),o(2),o(3))){let t=new ze;return t.value=e.value,t.repr=e.repr,t.type=e.type,t.unit=te(),t}if(o()===37){s();let t=new Re;return t.value=e.value,t.repr=e.repr,t}{let t=new Le;return t.value=e.value,t.repr=e.repr,t.type=e.type,t}},p=function(){let e=te();if(e.toLowerCase()===`url`&&o()===40){for(s();w(o(1))&&w(o(2));)s();return o()===34||o()===39||w(o())&&(o(2)===34||o(2)===39)?new Me(e):h()}return o()===40?(s(),new Me(e)):new je(e)},m=function(e){e===void 0&&(e=i);let t=``;for(;s();)if(i===e||l())return new Fe(t);else if(se(i))return c(),new ue;else i===92?l(o())||(se(o())?s():t+=E(g())):t+=E(i);throw Error(`Internal error`)},h=function(){let e=new Ie(``);for(;w(o());)s();if(l(o()))return e;for(;s();)if(i===41||l())return e;else if(w(i)){for(;w(o());)s();return o()===41||l(o())?(s(),e):(T(),new de)}else if(i===34||i===39||i===40||oe(i))return T(),new de;else if(i===92){if(v())e.value+=E(g());else return T(),new de}else e.value+=E(i);throw Error(`Internal error`)},g=function(){if(s(),ee(i)){let e=[i];for(let t=0;t<5&&ee(o());t++)s(),e.push(i);w(o())&&s();let t=Number.parseInt(e.map(e=>String.fromCharCode(e)).join(``),16);return t>1114111&&(t=65533),t}return l()?65533:i},_=function(e,t){return!(e!==92||se(t))},v=function(){return _(i,o())},y=function(e,t,n){return e===45?ie(t)||t===45||_(t,n):ie(e)?!0:e===92&&_(e,t)},b=function(){return y(i,o(1),o(2))},x=function(e,t,n){return e===43||e===45?!!(S(t)||t===46&&S(n)):e===46?!!S(t):!!S(e)},C=function(){return x(i,o(1),o(2))},te=function(){let e=``;for(;s();)if(ae(i))e+=E(i);else if(v())e+=E(g());else return c(),e;throw Error(`Internal parse error`)},ne=function(){let e=``,t=`integer`;for((o()===43||o()===45)&&(s(),e+=E(i));S(o());)s(),e+=E(i);if(o(1)===46&&S(o(2)))for(s(),e+=E(i),s(),e+=E(i),t=`number`;S(o());)s(),e+=E(i);let n=o(1),r=o(2),a=o(3);if((n===69||n===101)&&S(r))for(s(),e+=E(i),s(),e+=E(i),t=`number`;S(o());)s(),e+=E(i);else if((n===69||n===101)&&(r===43||r===45)&&S(a))for(s(),e+=E(i),s(),e+=E(i),s(),e+=E(i),t=`number`;S(o());)s(),e+=E(i);let c=re(e);return{type:t,value:c,repr:e}},re=function(e){return+e},T=function(){for(;s();)if(i===41||l())return;else v()&&g()},le=0;for(;!l(o());)if(r.push(u()),le++,le>t.length*2)throw Error(`I'm infinite-looping!`);return r}var D=class{constructor(){b(this,`tokenType`,``),b(this,`value`,void 0)}toJSON(){return{token:this.tokenType}}toString(){return this.tokenType}toSource(){return`${this}`}},ue=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`BADSTRING`)}},de=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`BADURL`)}},fe=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`WHITESPACE`)}toString(){return`WS`}toSource(){return` `}},pe=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`CDO`)}toSource(){return`<!--`}},me=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`CDC`)}toSource(){return`-->`}},he=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`:`)}},ge=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`;`)}},_e=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`,`)}},O=class extends D{constructor(...e){super(...e),b(this,`value`,``),b(this,`mirror`,``)}},ve=class extends O{constructor(){super(),b(this,`tokenType`,`{`),this.value=`{`,this.mirror=`}`}},ye=class extends O{constructor(){super(),b(this,`tokenType`,`}`),this.value=`}`,this.mirror=`{`}},be=class extends O{constructor(){super(),b(this,`tokenType`,`[`),this.value=`[`,this.mirror=`]`}},xe=class extends O{constructor(){super(),b(this,`tokenType`,`]`),this.value=`]`,this.mirror=`[`}},Se=class extends O{constructor(){super(),b(this,`tokenType`,`(`),this.value=`(`,this.mirror=`)`}},Ce=class extends O{constructor(){super(),b(this,`tokenType`,`)`),this.value=`)`,this.mirror=`(`}},we=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`~=`)}},Te=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`|=`)}},Ee=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`^=`)}},De=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`$=`)}},Oe=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`*=`)}},ke=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`||`)}},Ae=class extends D{constructor(...e){super(...e),b(this,`tokenType`,`EOF`)}toSource(){return``}},k=class extends D{constructor(e){super(),b(this,`tokenType`,`DELIM`),b(this,`value`,``),this.value=E(e)}toString(){return`DELIM(${this.value})`}toJSON(){let e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e}toSource(){return this.value===`\\`?`\\
2
+ `:this.value}},A=class extends D{constructor(...e){super(...e),b(this,`value`,``)}ASCIIMatch(e){return this.value.toLowerCase()===e.toLowerCase()}toJSON(){let e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e}},je=class extends A{constructor(e){super(),b(this,`tokenType`,`IDENT`),this.value=e}toString(){return`IDENT(${this.value})`}toSource(){return Be(this.value)}},Me=class extends A{constructor(e){super(),b(this,`tokenType`,`FUNCTION`),b(this,`mirror`,void 0),this.value=e,this.mirror=`)`}toString(){return`FUNCTION(${this.value})`}toSource(){return`${Be(this.value)}(`}},Ne=class extends A{constructor(e){super(),b(this,`tokenType`,`AT-KEYWORD`),this.value=e}toString(){return`AT(${this.value})`}toSource(){return`@${Be(this.value)}`}},Pe=class extends A{constructor(e){super(),b(this,`tokenType`,`HASH`),b(this,`type`,void 0),this.value=e,this.type=`unrestricted`}toString(){return`HASH(${this.value})`}toJSON(){let e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e.type=this.type,e}toSource(){return this.type===`id`?`#${Be(this.value)}`:`#${Ve(this.value)}`}},Fe=class extends A{constructor(e){super(),b(this,`tokenType`,`STRING`),this.value=e}toString(){return`"${He(this.value)}"`}},Ie=class extends A{constructor(e){super(),b(this,`tokenType`,`URL`),this.value=e}toString(){return`URL(${this.value})`}toSource(){return`url("${He(this.value)}")`}},Le=class extends D{constructor(){super(),b(this,`tokenType`,`NUMBER`),b(this,`type`,void 0),b(this,`repr`,void 0),this.type=`integer`,this.repr=``}toString(){return this.type===`integer`?`INT(${this.value})`:`NUMBER(${this.value})`}toJSON(){let e=super.toJSON();return e.value=this.value,e.type=this.type,e.repr=this.repr,e}toSource(){return this.repr}},Re=class extends D{constructor(){super(),b(this,`tokenType`,`PERCENTAGE`),b(this,`repr`,void 0),this.repr=``}toString(){return`PERCENTAGE(${this.value})`}toJSON(){let e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e.repr=this.repr,e}toSource(){return`${this.repr}%`}},ze=class extends D{constructor(){super(),b(this,`tokenType`,`DIMENSION`),b(this,`type`,void 0),b(this,`repr`,void 0),b(this,`unit`,void 0),this.type=`integer`,this.repr=``,this.unit=``}toString(){return`DIM(${this.value},${this.unit})`}toJSON(){let e=this.constructor.prototype.constructor.prototype.toJSON.call(this);return e.value=this.value,e.type=this.type,e.repr=this.repr,e.unit=this.unit,e}toSource(){let e=this.repr,t=Be(this.unit);return t[0].toLowerCase()===`e`&&(t[1]===`-`||x(t.charCodeAt(1),48,57))&&(t=`\\65 ${t.slice(1,t.length)}`),e+t}};function Be(e){e=`${e}`;let t=``,n=e.charCodeAt(0);for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);if(i===0)throw new T(`Invalid character: the input contains U+0000.`);x(i,1,31)||i===127||r===0&&x(i,48,57)||r===1&&x(i,48,57)&&n===45?t+=`\\${i.toString(16)} `:i>=128||i===45||i===95||x(i,48,57)||x(i,65,90)||x(i,97,122)?t+=e[r]:t+=`\\${e[r]}`}return t}function Ve(e){e=`${e}`;let t=``;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r===0)throw new T(`Invalid character: the input contains U+0000.`);r>=128||r===45||r===95||x(r,48,57)||x(r,65,90)||x(r,97,122)?t+=e[n]:t+=`\\${r.toString(16)} `}return t}function He(e){e=`${e}`;let t=``;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r===0)throw new T(`Invalid character: the input contains U+0000.`);x(r,1,31)||r===127?t+=`\\${r.toString(16)} `:t+=r===34||r===92?`\\${e[n]}`:e[n]}return t}var j=class extends Error{};function Ue(e,t){let n;try{n=le(e),n[n.length-1]instanceof Ae||n.push(new Ae)}catch(t){let n=`${t.message} while parsing selector "${e}"`,r=(t.stack||``).indexOf(t.message);throw r!==-1&&(t.stack=t.stack.substring(0,r)+n+t.stack.substring(r+t.message.length)),t.message=n,t}let r=n.find(e=>e instanceof Ne||e instanceof ue||e instanceof de||e instanceof ke||e instanceof pe||e instanceof me||e instanceof ge||e instanceof ve||e instanceof ye||e instanceof Ie||e instanceof Re);if(r)throw new j(`Unsupported token "${r.toSource()}" while parsing selector "${e}"`);let i=0,a=new Set;function o(){return new j(`Unexpected token "${n[i].toSource()}" while parsing selector "${e}"`)}function s(){for(;n[i]instanceof fe;)i++}function c(e=i){return n[e]instanceof je}function l(e=i){return n[e]instanceof Fe}function u(e=i){return n[e]instanceof Le}function d(e=i){return n[e]instanceof _e}function f(e=i){return n[e]instanceof Se}function p(e=i){return n[e]instanceof Ce}function m(e=i){return n[e]instanceof Me}function h(e=i){return n[e]instanceof k&&n[e].value===`*`}function g(e=i){return n[e]instanceof Ae}function _(e=i){return n[e]instanceof k&&[`>`,`+`,`~`].includes(n[e].value)}function v(e=i){return d(e)||p(e)||g(e)||_(e)||n[e]instanceof fe}function y(){let e=[b()];for(;s(),d();)i++,e.push(b());return e}function b(){return s(),u()||l()?n[i++].value:x()}function x(){let e={simples:[]};for(s(),_()?e.simples.push({selector:{functions:[{name:`scope`,args:[]}]},combinator:``}):e.simples.push({selector:S(),combinator:``});;){if(s(),_())e.simples[e.simples.length-1].combinator=n[i++].value,s();else if(v())break;e.simples.push({combinator:``,selector:S()})}return e}function S(){let e=``,r=[];for(;!v();)if(c()||h())e+=n[i++].toSource();else if(n[i]instanceof Pe)e+=n[i++].toSource();else if(n[i]instanceof k&&n[i].value===`.`){if(i++,c())e+=`.${n[i++].toSource()}`;else throw o()}else if(n[i]instanceof he){if(i++,c()){if(!t.has(n[i].value.toLowerCase()))e+=`:${n[i++].toSource()}`;else{let e=n[i++].value.toLowerCase();r.push({name:e,args:[]}),a.add(e)}}else if(m()){let c=n[i++].value.toLowerCase();if(t.has(c)?(r.push({name:c,args:y()}),a.add(c)):e+=`:${c}(${ee()})`,s(),!p())throw o();i++}else throw o()}else if(n[i]instanceof be){for(e+=`[`,i++;!(n[i]instanceof xe)&&!g();)e+=n[i++].toSource();if(!(n[i]instanceof xe))throw o();e+=`]`,i++}else throw o();if(!e&&!r.length)throw o();return{css:e||void 0,functions:r}}function ee(){let e=``,t=1;for(;!g()&&((f()||m())&&t++,p()&&t--,t);)e+=n[i++].toSource();return e}let C=y();if(!g())throw o();if(C.some(e=>typeof e!=`object`||!(`simples`in e)))throw new j(`Error while parsing selector "${e}"`);return{selector:C,names:Array.from(a)}}const We=new Set([`internal:has`,`internal:has-not`,`internal:and`,`internal:or`,`internal:chain`,`left-of`,`right-of`,`above`,`below`,`near`]),Ge=new Set([`left-of`,`right-of`,`above`,`below`,`near`]),Ke=new Set([`not`,`is`,`where`,`has`,`scope`,`light`,`visible`,`text`,`text-matches`,`text-is`,`has-text`,`above`,`below`,`right-of`,`left-of`,`near`,`nth-match`]);function qe(e){let t=Xe(e),n=[];for(let e of t.parts){if(e.name===`css`||e.name===`css:light`){e.name===`css:light`&&(e.body=`:light(${e.body})`);let t=Ue(e.body,Ke);n.push({name:`css`,body:t.selector,source:e.body});continue}if(We.has(e.name)){let t,r;try{let n=JSON.parse(`[${e.body}]`);if(!Array.isArray(n)||n.length<1||n.length>2||typeof n[0]!=`string`)throw new j(`Malformed selector: ${e.name}=${e.body}`);if(t=n[0],n.length===2){if(typeof n[1]!=`number`||!Ge.has(e.name))throw new j(`Malformed selector: ${e.name}=${e.body}`);r=n[1]}}catch{throw new j(`Malformed selector: ${e.name}=${e.body}`)}let i={name:e.name,source:e.body,body:{parsed:qe(t),distance:r}},a=[...i.body.parsed.parts].reverse().find(e=>e.name===`internal:control`&&e.body===`enter-frame`),o=a?i.body.parsed.parts.indexOf(a):-1;o!==-1&&Je(i.body.parsed.parts.slice(0,o+1),n.slice(0,o+1))&&i.body.parsed.parts.splice(0,o+1),n.push(i);continue}n.push({...e,source:e.body})}if(We.has(n[0].name))throw new j(`"${n[0].name}" selector cannot be first`);return{capture:t.capture,parts:n}}function Je(e,t){return M({parts:e})===M({parts:t})}function M(e,t){return typeof e==`string`?e:e.parts.map((n,r)=>{let i=!0;!t&&r!==e.capture&&(n.name===`css`||n.name===`xpath`&&n.source.startsWith(`//`)||n.source.startsWith(`..`))&&(i=!1);let a=i?`${n.name}=`:``;return`${r===e.capture?`*`:``}${a}${n.source}`}).join(` >> `)}function Ye(e,t){let n=(e,r)=>{for(let i of e.parts)t(i,r),We.has(i.name)&&n(i.body.parsed,!0)};n(e,!1)}function Xe(e){let t=0,n,r=0,i={parts:[]},a=()=>{let n=e.substring(r,t).trim(),a=n.indexOf(`=`),o,s;a!==-1&&n.substring(0,a).trim().match(/^[\w\-+:*]+$/)?(o=n.substring(0,a).trim(),s=n.substring(a+1)):n.length>1&&n[0]===`"`&&n[n.length-1]===`"`||n.length>1&&n[0]===`'`&&n[n.length-1]===`'`?(o=`text`,s=n):/^\(*\/\//.test(n)||n.startsWith(`..`)?(o=`xpath`,s=n):(o=`css`,s=n);let c=!1;if(o[0]===`*`&&(c=!0,o=o.substring(1)),i.parts.push({name:o,body:s}),c){if(i.capture!==void 0)throw new j(`Only one of the selectors can capture using * modifier`);i.capture=i.parts.length-1}};if(!e.includes(`>>`))return t=e.length,a(),i;let o=()=>{let n=e.substring(r,t).match(/^\s*text\s*=(.*)$/);return!!n&&!!n[1]};for(;t<e.length;){let i=e[t];i===`\\`&&t+1<e.length?t+=2:i===n?(n=void 0,t++):!n&&(i===`"`||i===`'`||i==="`")&&!o()?(n=i,t++):!n&&i===`>`&&e[t+1]===`>`?(a(),t+=2,r=t):t++}return a(),i}function Ze(e,t){let n=0,r=e.length===0,i=()=>e[n]||``,a=()=>{let t=i();return++n,r=n>=e.length,t},o=t=>{throw r?new j(`Unexpected end of selector while parsing selector \`${e}\``):new j(`Error while parsing selector \`${e}\` - unexpected symbol "${i()}" at position ${n}${t?` during ${t}`:``}`)};function s(){for(;!r&&/\s/.test(i());)a()}function c(e){return e>=`€`||e>=`0`&&e<=`9`||e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e>=`0`&&e<=`9`||e===`_`||e===`-`}function l(){let e=``;for(s();!r&&c(i());)e+=a();return e}function u(e){let t=a();for(t!==e&&o(`parsing quoted string`);!r&&i()!==e;)i()===`\\`&&a(),t+=a();return i()!==e&&o(`parsing quoted string`),t+=a(),t}function d(){a()!==`/`&&o(`parsing regular expression`);let t=``,n=!1;for(;!r;){if(i()===`\\`)t+=a(),r&&o(`parsing regular expression`);else if(n&&i()===`]`)n=!1;else if(!n&&i()===`[`)n=!0;else if(!n&&i()===`/`)break;t+=a()}a()!==`/`&&o(`parsing regular expression`);let s=``;for(;!r&&i().match(/[dgimsuy]/);)s+=a();try{return new RegExp(t,s)}catch(t){throw new j(`Error while parsing selector \`${e}\`: ${t.message}`)}}function f(){let e=``;return s(),e=i()===`'`||i()===`"`?u(i()).slice(1,-1):l(),e||o(`parsing property path`),e}function p(){s();let e=``;return r||(e+=a()),!r&&e!==`=`&&(e+=a()),[`=`,`*=`,`^=`,`$=`,`|=`,`~=`].includes(e)||o(`parsing operator`),e}function m(){a();let t=[];for(t.push(f()),s();i()===`.`;)a(),t.push(f()),s();if(i()===`]`)return a(),{name:t.join(`.`),jsonPath:t,op:`<truthy>`,value:null,caseSensitive:!1};let n=p(),l,m=!0;if(s(),i()===`/`){if(n!==`=`)throw new j(`Error while parsing selector \`${e}\` - cannot use ${n} in attribute with regular expression`);l=d()}else if(i()===`'`||i()===`"`)l=u(i()).slice(1,-1),s(),i()===`i`||i()===`I`?(m=!1,a()):(i()===`s`||i()===`S`)&&(m=!0,a());else{for(l=``;!r&&(c(i())||i()===`+`||i()===`.`);)l+=a();l===`true`?l=!0:l===`false`&&(l=!1)}if(s(),i()!==`]`&&o(`parsing attribute value`),a(),n!==`=`&&typeof l!=`string`)throw new j(`Error while parsing selector \`${e}\` - cannot use ${n} in attribute with non-string matching value - ${l}`);return{name:t.join(`.`),jsonPath:t,op:n,value:l,caseSensitive:m}}let h={name:``,attributes:[]};for(h.name=l(),s();i()===`[`;)h.attributes.push(m()),s();if(r||o(void 0),!h.name&&!h.attributes.length)throw new j(`Error while parsing selector \`${e}\` - selector cannot be empty`);return h}function Qe(e,t=`'`){let n=JSON.stringify(e),r=n.substring(1,n.length-1).replace(/\\"/g,`"`);if(t===`'`)return t+r.replace(/'/g,`\\'`)+t;if(t===`"`)return t+r.replace(/"/g,`\\"`)+t;if(t==="`")return t+r.replace(/`/g,"`")+t;throw Error(`Invalid escape char`)}function N(e){let t=``;for(let n=0;n<e.length;n++)t+=et(e,n);return t}function $e(e){return`"${N(e).replace(/\\ /g,` `)}"`}function et(e,t){let n=e.charCodeAt(t);return n===0?`�`:n>=1&&n<=31||n>=48&&n<=57&&(t===0||t===1&&e.charCodeAt(0)===45)?`\\${n.toString(16)} `:t===0&&n===45&&e.length===1?`\\${e.charAt(t)}`:n>=128||n===45||n===95||n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122?e.charAt(t):`\\${e.charAt(t)}`}function P(e){return e.replace(/[\u200b\u00ad]/g,``).trim().replace(/\s+/g,` `)}function tt(e){return e.replace(/(^|[^\\])(\\\\)*\\(['"`])/g,`$1$2$3`)}function nt(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function F(e,t){return typeof e==`string`?`${JSON.stringify(e)}${t?`s`:`i`}`:nt(e)}function I(e,t){return typeof e==`string`?`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"${t?`s`:`i`}`:nt(e)}function rt(e,t,n=``){if(e.length<=t)return e;let r=[...e];return r.length>t?r.slice(0,t-n.length).join(``)+n:r.join(``)}function it(e,t){return rt(e,t,`…`)}function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function L(e){if(e.parentElement)return e.parentElement;if(e.parentNode&&e.parentNode.nodeType===11&&e.parentNode.host)return e.parentNode.host}function ot(e){let t=e;for(;t.parentNode;)t=t.parentNode;if(t.nodeType===11||t.nodeType===9)return t}function st(e){for(;e.parentElement;)e=e.parentElement;return L(e)}function ct(e,t){for(;e;){let n=e.closest(t);if(n)return n;e=st(e)}}function R(e,t){return e.ownerDocument&&e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,t):void 0}function lt(e,t){if(t??=R(e),!t)return!0;if(Element.prototype.checkVisibility&&Q.options.browser!==`webkit`){if(!e.checkVisibility())return!1}else{let t=e.closest(`details,summary`);if(t!==e&&t?.nodeName===`DETAILS`&&!t.open)return!1}return t.visibility===`visible`}function ut(e){let t=R(e);if(!t)return!0;if(t.display===`contents`){for(let t=e.firstChild;t;t=t.nextSibling)if(t.nodeType===1&&ut(t)||t.nodeType===3&&dt(t))return!0;return!1}if(!lt(e,t))return!1;let n=e.getBoundingClientRect();return n.width>0&&n.height>0}function dt(e){let t=e.ownerDocument.createRange();t.selectNode(e);let n=t.getBoundingClientRect();return n.width>0&&n.height>0}function z(e){return e instanceof HTMLFormElement?`FORM`:e.tagName.toUpperCase()}function ft(e){return e.hasAttribute(`aria-label`)||e.hasAttribute(`aria-labelledby`)}const pt=`article:not([role]), aside:not([role]), main:not([role]), nav:not([role]), section:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]`,mt=new Map([[`aria-atomic`,void 0],[`aria-busy`,void 0],[`aria-controls`,void 0],[`aria-current`,void 0],[`aria-describedby`,void 0],[`aria-details`,void 0],[`aria-dropeffect`,void 0],[`aria-flowto`,void 0],[`aria-grabbed`,void 0],[`aria-hidden`,void 0],[`aria-keyshortcuts`,void 0],[`aria-label`,new Set([`caption`,`code`,`deletion`,`emphasis`,`generic`,`insertion`,`paragraph`,`presentation`,`strong`,`subscript`,`superscript`])],[`aria-labelledby`,new Set([`caption`,`code`,`deletion`,`emphasis`,`generic`,`insertion`,`paragraph`,`presentation`,`strong`,`subscript`,`superscript`])],[`aria-live`,void 0],[`aria-owns`,void 0],[`aria-relevant`,void 0],[`aria-roledescription`,new Set([`generic`])]]);function ht(e,t){return[...mt].some(([n,r])=>!r?.has(t||``)&&e.hasAttribute(n))}function gt(e){return!Number.isNaN(Number(String(e.getAttribute(`tabindex`))))}function _t(e){return!nn(e)&&(vt(e)||gt(e))}function vt(e){let t=z(e);return[`BUTTON`,`DETAILS`,`SELECT`,`TEXTAREA`].includes(t)?!0:t===`A`||t===`AREA`?e.hasAttribute(`href`):t===`INPUT`&&!e.hidden}const yt={A:e=>e.hasAttribute(`href`)?`link`:null,AREA:e=>e.hasAttribute(`href`)?`link`:null,ARTICLE:()=>`article`,ASIDE:()=>`complementary`,BLOCKQUOTE:()=>`blockquote`,BUTTON:()=>`button`,CAPTION:()=>`caption`,CODE:()=>`code`,DATALIST:()=>`listbox`,DD:()=>`definition`,DEL:()=>`deletion`,DETAILS:()=>`group`,DFN:()=>`term`,DIALOG:()=>`dialog`,DT:()=>`term`,EM:()=>`emphasis`,FIELDSET:()=>`group`,FIGURE:()=>`figure`,FOOTER:e=>ct(e,pt)?null:`contentinfo`,FORM:e=>ft(e)?`form`:null,H1:()=>`heading`,H2:()=>`heading`,H3:()=>`heading`,H4:()=>`heading`,H5:()=>`heading`,H6:()=>`heading`,HEADER:e=>ct(e,pt)?null:`banner`,HR:()=>`separator`,HTML:()=>`document`,IMG:e=>e.getAttribute(`alt`)===``&&!e.getAttribute(`title`)&&!ht(e)&&!gt(e)?`presentation`:`img`,INPUT:e=>{let t=e.type.toLowerCase();if(t===`search`)return e.hasAttribute(`list`)?`combobox`:`searchbox`;if([`email`,`tel`,`text`,`url`,``].includes(t)){let t=H(e,e.getAttribute(`list`))[0];return t&&z(t)===`DATALIST`?`combobox`:`textbox`}return t===`hidden`?``:t===`file`?`button`:{button:`button`,checkbox:`checkbox`,image:`button`,number:`spinbutton`,radio:`radio`,range:`slider`,reset:`button`,submit:`button`}[t]||`textbox`},INS:()=>`insertion`,LI:()=>`listitem`,MAIN:()=>`main`,MARK:()=>`mark`,MATH:()=>`math`,MENU:()=>`list`,METER:()=>`meter`,NAV:()=>`navigation`,OL:()=>`list`,OPTGROUP:()=>`group`,OPTION:()=>`option`,OUTPUT:()=>`status`,P:()=>`paragraph`,PROGRESS:()=>`progressbar`,SECTION:e=>ft(e)?`region`:null,SELECT:e=>e.hasAttribute(`multiple`)||e.size>1?`listbox`:`combobox`,STRONG:()=>`strong`,SUB:()=>`subscript`,SUP:()=>`superscript`,SVG:()=>`img`,TABLE:()=>`table`,TBODY:()=>`rowgroup`,TD:e=>{let t=ct(e,`table`),n=t?Tt(t):``;return n===`grid`||n===`treegrid`?`gridcell`:`cell`},TEXTAREA:()=>`textbox`,TFOOT:()=>`rowgroup`,TH:e=>{if(e.getAttribute(`scope`)===`col`)return`columnheader`;if(e.getAttribute(`scope`)===`row`)return`rowheader`;let t=ct(e,`table`),n=t?Tt(t):``;return n===`grid`||n===`treegrid`?`gridcell`:`cell`},THEAD:()=>`rowgroup`,TIME:()=>`time`,TR:()=>`row`,UL:()=>`list`},bt={DD:[`DL`,`DIV`],DIV:[`DL`],DT:[`DL`,`DIV`],LI:[`OL`,`UL`],TBODY:[`TABLE`],TD:[`TR`],TFOOT:[`TABLE`],TH:[`TR`],THEAD:[`TABLE`],TR:[`THEAD`,`TBODY`,`TFOOT`,`TABLE`]};function xt(e){let t=yt[z(e)]?.call(yt,e)||``;if(!t)return null;let n=e;for(;n;){let e=L(n),t=bt[z(n)];if(!t||!e||!t.includes(z(e)))break;let r=Tt(e);if((r===`none`||r===`presentation`)&&!Et(e,r))return r;n=e}return t}const St=`alert.alertdialog.application.article.banner.blockquote.button.caption.cell.checkbox.code.columnheader.combobox.command.complementary.composite.contentinfo.definition.deletion.dialog.directory.document.emphasis.feed.figure.form.generic.grid.gridcell.group.heading.img.input.insertion.landmark.link.list.listbox.listitem.log.main.marquee.math.meter.menu.menubar.menuitem.menuitemcheckbox.menuitemradio.navigation.none.note.option.paragraph.presentation.progressbar.radio.radiogroup.range.region.roletype.row.rowgroup.rowheader.scrollbar.search.searchbox.section.sectionhead.select.separator.slider.spinbutton.status.strong.structure.subscript.superscript.switch.tab.table.tablist.tabpanel.term.textbox.time.timer.toolbar.tooltip.tree.treegrid.treeitem.widget.window`.split(`.`),Ct=[`command`,`composite`,`input`,`landmark`,`range`,`roletype`,`section`,`sectionhead`,`select`,`structure`,`widget`,`window`],wt=St.filter(e=>!Ct.includes(e));function Tt(e){return(e.getAttribute(`role`)||``).split(` `).map(e=>e.trim()).find(e=>wt.includes(e))||null}function Et(e,t){return ht(e,t)||_t(e)}function B(e){let t=Tt(e);if(!t)return xt(e);if(t===`none`||t===`presentation`){let t=xt(e);if(Et(e,t))return t}return t}function Dt(e){return e===null?void 0:e.toLowerCase()===`true`}function Ot(e){return[`STYLE`,`SCRIPT`,`NOSCRIPT`,`TEMPLATE`].includes(z(e))}function V(e){if(Ot(e))return!0;let t=R(e),n=e.nodeName===`SLOT`;if(t?.display===`contents`&&!n){for(let t=e.firstChild;t;t=t.nextSibling)if(t.nodeType===1&&!V(t)||t.nodeType===3&&dt(t))return!1;return!0}return!(e.nodeName===`OPTION`&&e.closest(`select`))&&!n&&!lt(e,t)||kt(e)}function kt(e){let t=dn?.get(e);if(t===void 0){if(t=!1,e.parentElement&&e.parentElement.shadowRoot&&!e.assignedSlot&&(t=!0),!t){let n=R(e);t=!n||n.display===`none`||Dt(e.getAttribute(`aria-hidden`))===!0}if(!t){let n=L(e);n&&(t=kt(n))}dn?.set(e,t)}return t}function H(e,t){if(!t)return[];let n=ot(e);if(!n)return[];try{let e=t.split(` `).filter(e=>!!e),r=new Set;for(let t of e){let e=n.querySelector(`#${CSS.escape(t)}`);e&&r.add(e)}return[...r]}catch{return[]}}function U(e){return e.trim()}function At(e){return e.split(`\xA0`).map(e=>e.replace(/\r\n/g,`
3
+ `).replace(/[\u200b\u00ad]/g,``).replace(/\s\s*/g,` `)).join(`\xA0`).trim()}function jt(e,t){let n=[...e.querySelectorAll(t)];for(let r of H(e,e.getAttribute(`aria-owns`)))r.matches(t)&&n.push(r),n.push(...r.querySelectorAll(t));return n}function Mt(e,t){let n=t===`::before`?fn:pn;if(n?.has(e))return n?.get(e)||``;let r=Nt(R(e,t));return n&&n.set(e,r),r}function Nt(e){if(!e)return``;let t=e.content;if(t[0]===`'`&&t[t.length-1]===`'`||t[0]===`"`&&t[t.length-1]===`"`){let n=t.substring(1,t.length-1);return(e.display||`inline`)===`inline`?n:` ${n} `}return``}function Pt(e){let t=e.getAttribute(`aria-labelledby`);return t===null?null:H(e,t)}function Ft(e,t){let n=[`button`,`cell`,`checkbox`,`columnheader`,`gridcell`,`heading`,`link`,`menuitem`,`menuitemcheckbox`,`menuitemradio`,`option`,`radio`,`row`,`rowheader`,`switch`,`tab`,`tooltip`,`treeitem`].includes(e),r=t&&[``,`caption`,`code`,`contentinfo`,`definition`,`deletion`,`emphasis`,`insertion`,`list`,`listitem`,`mark`,`none`,`paragraph`,`presentation`,`region`,`row`,`rowgroup`,`section`,`strong`,`subscript`,`superscript`,`table`,`term`,`time`].includes(e);return n||r}function It(e,t){let n=t?cn:sn,r=n?.get(e);return r===void 0&&(r=``,[`caption`,`code`,`definition`,`deletion`,`emphasis`,`generic`,`insertion`,`mark`,`paragraph`,`presentation`,`strong`,`subscript`,`suggestion`,`superscript`,`term`,`time`].includes(B(e)||``)||(r=At(W(e,{includeHidden:t,visitedElements:new Set,embeddedInDescribedBy:void 0,embeddedInLabelledBy:void 0,embeddedInLabel:void 0,embeddedInNativeTextAlternative:void 0,embeddedInTargetElement:`self`}))),n?.set(e,r)),r}function Lt(e,t){let n=un,r=n?.get(e);return r===void 0&&(r=``,r=e.hasAttribute(`aria-describedby`)?At(H(e,e.getAttribute(`aria-describedby`)).map(e=>W(e,{includeHidden:t,visitedElements:new Set,embeddedInDescribedBy:{element:e,hidden:V(e)}})).join(` `)):e.hasAttribute(`aria-description`)?At(e.getAttribute(`aria-description`)||``):At(e.getAttribute(`title`)||``),n?.set(e,r)),r}const Rt=[`application`,`checkbox`,`combobox`,`gridcell`,`listbox`,`radiogroup`,`slider`,`spinbutton`,`textbox`,`tree`,`columnheader`,`rowheader`,`searchbox`,`switch`,`treegrid`];function zt(e){let t=B(e)||``;if(!t||!Rt.includes(t))return`false`;let n=e.getAttribute(`aria-invalid`);return!n||n.trim()===``||n.toLocaleLowerCase()===`false`?`false`:n===`true`||n===`grammar`||n===`spelling`?n:`true`}function Bt(e){return`validity`in e&&e.validity?.valid===!1}function Vt(e){let t=ln,n=ln?.get(e);if(n===void 0){n=``;let r=zt(e)!==`false`,i=Bt(e);(r||i)&&(n=H(e,e.getAttribute(`aria-errormessage`)).map(e=>At(W(e,{visitedElements:new Set,embeddedInDescribedBy:{element:e,hidden:V(e)}}))).join(` `).trim()),t?.set(e,n)}return n}function W(e,t){if(t.visitedElements.has(e))return``;let n={...t,embeddedInTargetElement:t.embeddedInTargetElement===`self`?`descendant`:t.embeddedInTargetElement};if(!t.includeHidden){let n=!!t.embeddedInLabelledBy?.hidden||!!t.embeddedInDescribedBy?.hidden||!!t.embeddedInNativeTextAlternative?.hidden||!!t.embeddedInLabel?.hidden;if(Ot(e)||!n&&V(e))return t.visitedElements.add(e),``}let r=Pt(e);if(!t.embeddedInLabelledBy){let e=(r||[]).map(e=>W(e,{...t,embeddedInLabelledBy:{element:e,hidden:V(e)},embeddedInDescribedBy:void 0,embeddedInTargetElement:void 0,embeddedInLabel:void 0,embeddedInNativeTextAlternative:void 0})).join(` `);if(e)return e}let i=B(e)||``,a=z(e);if(t.embeddedInLabel||t.embeddedInLabelledBy||t.embeddedInTargetElement===`descendant`){let o=[...e.labels||[]].includes(e),s=(r||[]).includes(e);if(!o&&!s){if(i===`textbox`)return t.visitedElements.add(e),a===`INPUT`||a===`TEXTAREA`?e.value:e.textContent||``;if([`combobox`,`listbox`].includes(i)){t.visitedElements.add(e);let r;if(a===`SELECT`)r=[...e.selectedOptions],!r.length&&e.options.length&&r.push(e.options[0]);else{let t=i===`combobox`?jt(e,`*`).find(e=>B(e)===`listbox`):e;r=t?jt(t,`[aria-selected="true"]`).filter(e=>B(e)===`option`):[]}return!r.length&&a===`INPUT`?e.value:r.map(e=>W(e,n)).join(` `)}if([`progressbar`,`scrollbar`,`slider`,`spinbutton`,`meter`].includes(i))return t.visitedElements.add(e),e.hasAttribute(`aria-valuetext`)?e.getAttribute(`aria-valuetext`)||``:e.hasAttribute(`aria-valuenow`)?e.getAttribute(`aria-valuenow`)||``:e.getAttribute(`value`)||``;if([`menu`].includes(i))return t.visitedElements.add(e),``}}let o=e.getAttribute(`aria-label`)||``;if(U(o))return t.visitedElements.add(e),o;if(![`presentation`,`none`].includes(i)){if(a===`INPUT`&&[`button`,`submit`,`reset`].includes(e.type)){t.visitedElements.add(e);let n=e.value||``;return U(n)?n:e.type===`submit`?`Submit`:e.type===`reset`?`Reset`:e.getAttribute(`title`)||``}if(a===`INPUT`&&e.type===`image`){t.visitedElements.add(e);let n=e.labels||[];if(n.length&&!t.embeddedInLabelledBy)return on(n,t);let r=e.getAttribute(`alt`)||``;if(U(r))return r;let i=e.getAttribute(`title`)||``;return U(i)?i:`Submit`}if(!r&&a===`BUTTON`){t.visitedElements.add(e);let n=e.labels||[];if(n.length)return on(n,t)}if(!r&&a===`OUTPUT`){t.visitedElements.add(e);let n=e.labels||[];return n.length?on(n,t):e.getAttribute(`title`)||``}if(!r&&(a===`TEXTAREA`||a===`SELECT`||a===`INPUT`)){t.visitedElements.add(e);let n=e.labels||[];if(n.length)return on(n,t);let r=a===`INPUT`&&[`text`,`password`,`search`,`tel`,`email`,`url`].includes(e.type)||a===`TEXTAREA`,i=e.getAttribute(`placeholder`)||``,o=e.getAttribute(`title`)||``;return!r||o?o:i}if(!r&&a===`FIELDSET`){t.visitedElements.add(e);for(let t=e.firstElementChild;t;t=t.nextElementSibling)if(z(t)===`LEGEND`)return W(t,{...n,embeddedInNativeTextAlternative:{element:t,hidden:V(t)}});return e.getAttribute(`title`)||``}if(!r&&a===`FIGURE`){t.visitedElements.add(e);for(let t=e.firstElementChild;t;t=t.nextElementSibling)if(z(t)===`FIGCAPTION`)return W(t,{...n,embeddedInNativeTextAlternative:{element:t,hidden:V(t)}});return e.getAttribute(`title`)||``}if(a===`IMG`){t.visitedElements.add(e);let n=e.getAttribute(`alt`)||``;return U(n)?n:e.getAttribute(`title`)||``}if(a===`TABLE`){t.visitedElements.add(e);for(let t=e.firstElementChild;t;t=t.nextElementSibling)if(z(t)===`CAPTION`)return W(t,{...n,embeddedInNativeTextAlternative:{element:t,hidden:V(t)}});let r=e.getAttribute(`summary`)||``;if(r)return r}if(a===`AREA`){t.visitedElements.add(e);let n=e.getAttribute(`alt`)||``;return U(n)?n:e.getAttribute(`title`)||``}if(a===`SVG`||e.ownerSVGElement){t.visitedElements.add(e);for(let t=e.firstElementChild;t;t=t.nextElementSibling)if(z(t)===`TITLE`&&t.ownerSVGElement)return W(t,{...n,embeddedInLabelledBy:{element:t,hidden:V(t)}})}if(e.ownerSVGElement&&a===`A`){let n=e.getAttribute(`xlink:title`)||``;if(U(n))return t.visitedElements.add(e),n}}let s=a===`SUMMARY`&&![`presentation`,`none`].includes(i);if(Ft(i,t.embeddedInTargetElement===`descendant`)||s||t.embeddedInLabelledBy||t.embeddedInDescribedBy||t.embeddedInLabel||t.embeddedInNativeTextAlternative){t.visitedElements.add(e);let r=Ht(e,n);if(t.embeddedInTargetElement===`self`?U(r):r)return r}if(![`presentation`,`none`].includes(i)||a===`IFRAME`){t.visitedElements.add(e);let n=e.getAttribute(`title`)||``;if(U(n))return n}return t.visitedElements.add(e),``}function Ht(e,t){let n=[],r=(e,r)=>{if(!(r&&e.assignedSlot)){if(e.nodeType===1){let r=R(e)?.display||`inline`,i=W(e,t);(r!==`inline`||e.nodeName===`BR`)&&(i=` `+i+` `),n.push(i)}else e.nodeType===3&&n.push(e.textContent||``)}};n.push(Mt(e,`::before`));let i=e.nodeName===`SLOT`?e.assignedNodes():[];if(i.length)for(let e of i)r(e,!1);else{for(let t=e.firstChild;t;t=t.nextSibling)r(t,!0);if(e.shadowRoot)for(let t=e.shadowRoot.firstChild;t;t=t.nextSibling)r(t,!0);for(let t of H(e,e.getAttribute(`aria-owns`)))r(t,!0)}return n.push(Mt(e,`::after`)),n.join(``)}const Ut=[`gridcell`,`option`,`row`,`tab`,`rowheader`,`columnheader`,`treeitem`];function Wt(e){return z(e)===`OPTION`?e.selected:Ut.includes(B(e)||``)?Dt(e.getAttribute(`aria-selected`))===!0:!1}const Gt=[`checkbox`,`menuitemcheckbox`,`option`,`radio`,`switch`,`menuitemradio`,`treeitem`];function Kt(e){let t=qt(e);return t!==`error`&&t}function qt(e,t){let n=z(e);if(n===`INPUT`&&e.indeterminate)return`mixed`;if(n===`INPUT`&&[`checkbox`,`radio`].includes(e.type))return e.checked;if(Gt.includes(B(e)||``)){let t=e.getAttribute(`aria-checked`);return t===`true`||t===`mixed`&&`mixed`}return`error`}const Jt=[`button`];function Yt(e){if(Jt.includes(B(e)||``)){let t=e.getAttribute(`aria-pressed`);if(t===`true`)return!0;if(t===`mixed`)return`mixed`}return!1}const Xt=[`application`,`button`,`checkbox`,`combobox`,`gridcell`,`link`,`listbox`,`menuitem`,`row`,`rowheader`,`tab`,`treeitem`,`columnheader`,`menuitemcheckbox`,`menuitemradio`,`rowheader`,`switch`];function Zt(e){if(z(e)===`DETAILS`)return e.open;if(Xt.includes(B(e)||``)){let t=e.getAttribute(`aria-expanded`);return t===null?`none`:t===`true`}return`none`}const Qt=[`heading`,`listitem`,`row`,`treeitem`];function $t(e){let t={H1:1,H2:2,H3:3,H4:4,H5:5,H6:6}[z(e)];if(t)return t;if(Qt.includes(B(e)||``)){let t=e.getAttribute(`aria-level`),n=t===null?NaN:Number(t);if(Number.isInteger(n)&&n>=1)return n}return 0}const en=`application.button.composite.gridcell.group.input.link.menuitem.scrollbar.separator.tab.checkbox.columnheader.combobox.grid.listbox.menu.menubar.menuitemcheckbox.menuitemradio.option.radio.radiogroup.row.rowheader.searchbox.select.slider.spinbutton.switch.tablist.textbox.toolbar.tree.treegrid.treeitem`.split(`.`);function tn(e){return nn(e)||an(e)}function nn(e){return[`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`OPTION`,`OPTGROUP`].includes(e.tagName)&&(e.hasAttribute(`disabled`)||rn(e))}function rn(e){let t=e?.closest(`FIELDSET[DISABLED]`);if(!t)return!1;let n=t.querySelector(`:scope > LEGEND`);return!n||!n.contains(e)}function an(e){if(!e)return!1;if(en.includes(B(e)||``)){let t=(e.getAttribute(`aria-disabled`)||``).toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}return an(L(e))}function on(e,t){return[...e].map(e=>W(e,{...t,embeddedInLabel:{element:e,hidden:V(e)},embeddedInNativeTextAlternative:void 0,embeddedInLabelledBy:void 0,embeddedInDescribedBy:void 0,embeddedInTargetElement:void 0})).filter(e=>!!e).join(` `)}let sn,cn,ln,un,dn,fn,pn,mn=0;function hn(){++mn,sn??=new Map,cn??=new Map,un??=new Map,ln??=new Map,dn??=new Map,fn??=new Map,pn??=new Map}function gn(){--mn||(sn=void 0,cn=void 0,un=void 0,ln=void 0,dn=void 0,fn=void 0,pn=void 0)}function _n(e,t){let n=typeof e==`string`&&!t.caseSensitive?e.toUpperCase():e,r=typeof t.value==`string`&&!t.caseSensitive?t.value.toUpperCase():t.value;return t.op===`<truthy>`?!!n:t.op===`=`?r instanceof RegExp?typeof n==`string`&&!!n.match(r):n===r:typeof n!=`string`||typeof r!=`string`?!1:t.op===`*=`?n.includes(r):t.op===`^=`?n.startsWith(r):t.op===`$=`?n.endsWith(r):t.op===`|=`?n===r||n.startsWith(`${r}-`):t.op===`~=`&&n.split(` `).includes(r)}function vn(e){let t=e.ownerDocument;return e.nodeName===`SCRIPT`||e.nodeName===`NOSCRIPT`||e.nodeName===`STYLE`||t.head&&t.head.contains(e)}function G(e,t){let n=e.get(t);if(n===void 0){if(n={full:``,normalized:``,immediate:[]},!vn(t)){let r=``;if(t instanceof HTMLInputElement&&(t.type===`submit`||t.type===`button`))n={full:t.value,normalized:P(t.value),immediate:[t.value]};else{for(let i=t.firstChild;i;i=i.nextSibling)i.nodeType===Node.TEXT_NODE?(n.full+=i.nodeValue||``,r+=i.nodeValue||``):(r&&n.immediate.push(r),r=``,i.nodeType===Node.ELEMENT_NODE&&(n.full+=G(e,i).full));r&&n.immediate.push(r),t.shadowRoot&&(n.full+=G(e,t.shadowRoot).full),n.full&&(n.normalized=P(n.full))}}e.set(t,n)}return n}function yn(e,t,n){if(vn(t)||!n(G(e,t)))return`none`;for(let r=t.firstChild;r;r=r.nextSibling)if(r.nodeType===Node.ELEMENT_NODE&&n(G(e,r)))return`selfAndChildren`;return t.shadowRoot&&n(G(e,t.shadowRoot))?`selfAndChildren`:`self`}function bn(e,t){let n=Pt(t);if(n)return n.map(t=>G(e,t));let r=t.getAttribute(`aria-label`);if(r!==null&&r.trim())return[{full:r,normalized:P(r),immediate:[r]}];let i=t.nodeName===`INPUT`&&t.type!==`hidden`;if([`BUTTON`,`METER`,`OUTPUT`,`PROGRESS`,`SELECT`,`TEXTAREA`].includes(t.nodeName)||i){let n=t.labels;if(n)return[...n].map(t=>G(e,t))}return[]}const xn=[`selected`,`checked`,`pressed`,`expanded`,`level`,`disabled`,`name`,`include-hidden`];xn.sort();function Sn(e,t,n){if(!t.includes(n))throw Error(`"${e}" attribute is only supported for roles: ${t.slice().sort().map(e=>`"${e}"`).join(`, `)}`)}function K(e,t){if(e.op!==`<truthy>`&&!t.includes(e.value))throw Error(`"${e.name}" must be one of ${t.map(e=>JSON.stringify(e)).join(`, `)}`)}function q(e,t){if(!t.includes(e.op))throw Error(`"${e.name}" does not support "${e.op}" matcher`)}function Cn(e,t){let n={role:t};for(let r of e)switch(r.name){case`checked`:Sn(r.name,Gt,t),K(r,[!0,!1,`mixed`]),q(r,[`<truthy>`,`=`]),n.checked=r.op===`<truthy>`||r.value;break;case`pressed`:Sn(r.name,Jt,t),K(r,[!0,!1,`mixed`]),q(r,[`<truthy>`,`=`]),n.pressed=r.op===`<truthy>`||r.value;break;case`selected`:Sn(r.name,Ut,t),K(r,[!0,!1]),q(r,[`<truthy>`,`=`]),n.selected=r.op===`<truthy>`||r.value;break;case`expanded`:Sn(r.name,Xt,t),K(r,[!0,!1]),q(r,[`<truthy>`,`=`]),n.expanded=r.op===`<truthy>`||r.value;break;case`level`:if(Sn(r.name,Qt,t),typeof r.value==`string`&&(r.value=+r.value),r.op!==`=`||typeof r.value!=`number`||Number.isNaN(r.value))throw Error(`"level" attribute must be compared to a number`);n.level=r.value;break;case`disabled`:K(r,[!0,!1]),q(r,[`<truthy>`,`=`]),n.disabled=r.op===`<truthy>`||r.value;break;case`name`:if(r.op===`<truthy>`)throw Error(`"name" attribute must have a value`);if(typeof r.value!=`string`&&!(r.value instanceof RegExp))throw TypeError(`"name" attribute must be a string or a regular expression`);n.name=r.value,n.nameOp=r.op,n.exact=r.caseSensitive;break;case`include-hidden`:K(r,[!0,!1]),q(r,[`<truthy>`,`=`]),n.includeHidden=r.op===`<truthy>`||r.value;break;default:throw Error(`Unknown attribute "${r.name}", must be one of ${xn.map(e=>`"${e}"`).join(`, `)}.`)}return n}function wn(e,t,n){let r=[],i=e=>{if(B(e)===t.role&&(t.selected===void 0||Wt(e)===t.selected)&&(t.checked===void 0||Kt(e)===t.checked)&&(t.pressed===void 0||Yt(e)===t.pressed)&&(t.expanded===void 0||Zt(e)===t.expanded)&&(t.level===void 0||$t(e)===t.level)&&(t.disabled===void 0||tn(e)===t.disabled)&&(t.includeHidden||!V(e))){if(t.name!==void 0){let r=P(It(e,!!t.includeHidden));if(typeof t.name==`string`&&(t.name=P(t.name)),n&&!t.exact&&t.nameOp===`=`&&(t.nameOp=`*=`),!_n(r,{op:t.nameOp||`=`,value:t.name,caseSensitive:!!t.exact}))return}r.push(e)}},a=e=>{let t=[];e.shadowRoot&&t.push(e.shadowRoot);for(let n of e.querySelectorAll(`*`))i(n),n.shadowRoot&&t.push(n.shadowRoot);t.forEach(a)};return a(e),r}function Tn(e){return{queryAll:(t,n)=>{let r=Ze(n),i=r.name.toLowerCase();if(!i)throw Error(`Role must not be empty`);let a=Cn(r.attributes,i);hn();try{return wn(t,a,e)}finally{gn()}}}}function En(e,t,n=!1){return Dn(e,t,n)[0]}function Dn(e,t,n=!1,r=20,i){try{return J(new kn[e](i),qe(t),n,r)}catch{return[t]}}function J(e,t,n=!1,r=20){let i=[...t.parts];for(let e=0;e<i.length-1;e++)if(i[e].name===`nth`&&i[e+1].name===`internal:control`&&i[e+1].body===`enter-frame`){let[t]=i.splice(e,1);i.splice(e+1,0,t)}let a=[],o=n?`frame-locator`:`page`;for(let t=0;t<i.length;t++){let n=i[t],s=o;if(o=`locator`,n.name===`nth`){n.body===`0`?a.push([e.generateLocator(s,`first`,``),e.generateLocator(s,`nth`,`0`)]):n.body===`-1`?a.push([e.generateLocator(s,`last`,``),e.generateLocator(s,`nth`,`-1`)]):a.push([e.generateLocator(s,`nth`,n.body)]);continue}if(n.name===`internal:text`){let{exact:t,text:r}=Y(n.body);a.push([e.generateLocator(s,`text`,r,{exact:t})]);continue}if(n.name===`internal:has-text`){let{exact:t,text:r}=Y(n.body);if(!t){a.push([e.generateLocator(s,`has-text`,r,{exact:t})]);continue}}if(n.name===`internal:has-not-text`){let{exact:t,text:r}=Y(n.body);if(!t){a.push([e.generateLocator(s,`has-not-text`,r,{exact:t})]);continue}}if(n.name===`internal:has`){let t=J(e,n.body.parsed,!1,r);a.push(t.map(t=>e.generateLocator(s,`has`,t)));continue}if(n.name===`internal:has-not`){let t=J(e,n.body.parsed,!1,r);a.push(t.map(t=>e.generateLocator(s,`hasNot`,t)));continue}if(n.name===`internal:and`){let t=J(e,n.body.parsed,!1,r);a.push(t.map(t=>e.generateLocator(s,`and`,t)));continue}if(n.name===`internal:or`){let t=J(e,n.body.parsed,!1,r);a.push(t.map(t=>e.generateLocator(s,`or`,t)));continue}if(n.name===`internal:chain`){let t=J(e,n.body.parsed,!1,r);a.push(t.map(t=>e.generateLocator(s,`chain`,t)));continue}if(n.name===`internal:label`){let{exact:t,text:r}=Y(n.body);a.push([e.generateLocator(s,`label`,r,{exact:t})]);continue}if(n.name===`internal:role`){let t=Ze(n.body),r={attrs:[]};for(let e of t.attributes)e.name===`name`?(r.exact=e.caseSensitive,r.name=e.value):(e.name===`level`&&typeof e.value==`string`&&(e.value=+e.value),r.attrs.push({name:e.name===`include-hidden`?`includeHidden`:e.name,value:e.value}));a.push([e.generateLocator(s,`role`,t.name,r)]);continue}if(n.name===`internal:testid`){let{value:t}=Ze(n.body).attributes[0];a.push([e.generateLocator(s,`test-id`,t)]);continue}if(n.name===`internal:attr`){let{name:t,value:r,caseSensitive:i}=Ze(n.body).attributes[0],o=r,c=!!i;if(t===`placeholder`){a.push([e.generateLocator(s,`placeholder`,o,{exact:c})]);continue}if(t===`alt`){a.push([e.generateLocator(s,`alt`,o,{exact:c})]);continue}if(t===`title`){a.push([e.generateLocator(s,`title`,o,{exact:c})]);continue}}let c=`default`,l=i[t+1];l&&l.name===`internal:control`&&l.body===`enter-frame`&&(c=`frame`,o=`frame-locator`,t++);let u=M({parts:[n]}),d=e.generateLocator(s,c,u);if(c==="default"&&l&&[`internal:has-text`,`internal:has-not-text`].includes(l.name)){let{exact:n,text:r}=Y(l.body);if(!n){let i=e.generateLocator(`locator`,l.name===`internal:has-text`?`has-text`:`has-not-text`,r,{exact:n}),o={};l.name===`internal:has-text`?o.hasText=r:o.hasNotText=r;let c=e.generateLocator(s,`default`,u,o);a.push([e.chainLocators([d,i]),c]),t++;continue}}let f;if([`xpath`,`css`].includes(n.name)){let t=M({parts:[n]},!0);f=e.generateLocator(s,c,t)}a.push([d,f].filter(Boolean))}return On(e,a,r)}function On(e,t,n){let r=t.map(()=>``),i=[],a=o=>{if(o===t.length)return i.push(e.chainLocators(r)),r.length<n;for(let e of t[o])if(r[o]=e,!a(o+1))return!1;return!0};return a(0),i}function Y(e){let t=!1,n=e.match(/^\/(.*)\/([igm]*)$/);return n?{text:new RegExp(n[1],n[2])}:(e.endsWith(`"`)?(e=JSON.parse(e),t=!0):e.endsWith(`"s`)?(e=JSON.parse(e.substring(0,e.length-1)),t=!0):e.endsWith(`"i`)&&(e=JSON.parse(e.substring(0,e.length-1)),t=!1),{exact:t,text:e})}const kn={javascript:class{constructor(e){this.preferredQuote=e}generateLocator(e,t,n,r={}){switch(t){case`default`:return r.hasText===void 0?r.hasNotText===void 0?`locator(${this.quote(n)})`:`locator(${this.quote(n)}, { hasNotText: ${this.toHasText(r.hasNotText)} })`:`locator(${this.quote(n)}, { hasText: ${this.toHasText(r.hasText)} })`;case`frame`:return`frameLocator(${this.quote(n)})`;case`nth`:return`nth(${n})`;case`first`:return`first()`;case`last`:return`last()`;case`role`:{let e=[];An(r.name)?e.push(`name: ${this.regexToSourceString(r.name)}`):typeof r.name==`string`&&(e.push(`name: ${this.quote(r.name)}`),r.exact!=null&&Q.options.exact!==r.exact&&e.push(`exact: ${r.exact}`));for(let{name:t,value:n}of r.attrs)e.push(`${t}: ${typeof n==`string`?this.quote(n):n}`);let t=e.length?`, { ${e.join(`, `)} }`:``;return`getByRole(${this.quote(n)}${t})`}case`has-text`:return`filter({ hasText: ${this.toHasText(n)} })`;case`has-not-text`:return`filter({ hasNotText: ${this.toHasText(n)} })`;case`has`:return`filter({ has: ${n} })`;case`hasNot`:return`filter({ hasNot: ${n} })`;case`and`:return`and(${n})`;case`or`:return`or(${n})`;case`chain`:return`locator(${n})`;case`test-id`:{let e=this.toTestIdValue(n);return e.startsWith(`'__vitest_`)&&e.endsWith(`__'`)?`page`:`getByTestId(${e})`}case`text`:return this.toCallWithExact(`getByText`,n,!!r.exact);case`alt`:return this.toCallWithExact(`getByAltText`,n,!!r.exact);case`placeholder`:return this.toCallWithExact(`getByPlaceholder`,n,!!r.exact);case`label`:return this.toCallWithExact(`getByLabel`,n,!!r.exact);case`title`:return this.toCallWithExact(`getByTitle`,n,!!r.exact);default:throw Error(`Unknown selector kind ${t}`)}}chainLocators(e){return e.join(`.`)}regexToSourceString(e){return tt(String(e))}toCallWithExact(e,t,n){return An(t)?`${e}(${this.regexToSourceString(t)})`:n!=null&&Q.options.exact!==n?`${e}(${this.quote(t)}, { exact: ${n} })`:`${e}(${this.quote(t)})`}toHasText(e){return An(e)?this.regexToSourceString(e):this.quote(e)}toTestIdValue(e){return An(e)?this.regexToSourceString(e):this.quote(e)}quote(e){return Qe(e,this.preferredQuote??`'`)}}};function An(e){return e instanceof RegExp}const jn=new Map,Mn=new Map,Nn=1e4;function Pn(e,t,n){e._evaluator.begin(),hn();try{return Hn(In(e,t,n)||Bn(e,t,n))}finally{jn.clear(),Mn.clear(),gn(),e._evaluator.end()}}function Fn(e){return e.filter(e=>e[0].selector[0]!==`/`)}function In(e,t,n){if(t.ownerDocument.documentElement===t)return[{engine:`css`,selector:`html`,score:1}];let r=(r,a)=>{let o=r===t,s=a?Rn(e,r,r===t):[];r!==t&&(s=Fn(s));let c=Ln(e,r,n).map(e=>[e]),l=Un(e,t.ownerDocument,r,[...s,...c],o);s=Fn(s);let u=t=>{let n=a&&!t.length,s=[...t,...c].filter(e=>!l||X(e)<X(l)),u=s[0];if(u)for(let t=L(r);t;t=L(t)){let a=i(t,n);if(!a||l&&X([...a,...u])>=X(l))continue;if(u=Un(e,t,r,s,o),!u)return;let c=[...a,...u];(!l||X(c)<X(l))&&(l=c)}};return u(s),r===t&&s.length&&u([]),l},i=(e,t)=>{let n=t?jn:Mn,i=n.get(e);return i===void 0&&(i=r(e,t),n.set(e,i)),i};return r(t,!n.noText)}function Ln(e,t,n){let r=[];for(let e of[`data-testid`,`data-test-id`,`data-test`])e!==n.testIdAttributeName&&t.getAttribute(e)&&r.push({engine:`css`,selector:`[${e}=${$e(t.getAttribute(e))}]`,score:2});if(!n.noCSSId){let e=t.getAttribute(`id`);e&&!Wn(e)&&r.push({engine:`css`,selector:zn(e),score:500})}if(r.push({engine:`css`,selector:N(t.nodeName.toLowerCase()),score:530}),t.nodeName===`IFRAME`){for(let e of[`name`,`title`])t.getAttribute(e)&&r.push({engine:`css`,selector:`${N(t.nodeName.toLowerCase())}[${e}=${$e(t.getAttribute(e))}]`,score:10});return t.getAttribute(n.testIdAttributeName)&&r.push({engine:`css`,selector:`[${n.testIdAttributeName}=${$e(t.getAttribute(n.testIdAttributeName))}]`,score:1}),Vn([r]),r}if(t.getAttribute(n.testIdAttributeName)&&r.push({engine:`internal:testid`,selector:`[${n.testIdAttributeName}=${I(t.getAttribute(n.testIdAttributeName),!0)}]`,score:1}),t.nodeName===`INPUT`||t.nodeName===`TEXTAREA`){let e=t;if(e.placeholder){r.push({engine:`internal:attr`,selector:`[placeholder=${I(e.placeholder,!0)}]`,score:105});for(let t of Z(e.placeholder))r.push({engine:`internal:attr`,selector:`[placeholder=${I(t.text,!1)}]`,score:100-t.scoreBouns})}}let i=bn(e._evaluator._cacheText,t);for(let e of i){let t=e.normalized;r.push({engine:`internal:label`,selector:F(t,!0),score:125});for(let e of Z(t))r.push({engine:`internal:label`,selector:F(e.text,!1),score:120-e.scoreBouns})}let a=B(t);return a&&![`none`,`presentation`].includes(a)&&r.push({engine:`internal:role`,selector:a,score:510}),t.getAttribute(`name`)&&[`BUTTON`,`FORM`,`FIELDSET`,`FRAME`,`IFRAME`,`INPUT`,`KEYGEN`,`OBJECT`,`OUTPUT`,`SELECT`,`TEXTAREA`,`MAP`,`META`,`PARAM`].includes(t.nodeName)&&r.push({engine:`css`,selector:`${N(t.nodeName.toLowerCase())}[name=${$e(t.getAttribute(`name`))}]`,score:520}),[`INPUT`,`TEXTAREA`].includes(t.nodeName)&&t.getAttribute(`type`)!==`hidden`&&t.getAttribute(`type`)&&r.push({engine:`css`,selector:`${N(t.nodeName.toLowerCase())}[type=${$e(t.getAttribute(`type`))}]`,score:520}),[`INPUT`,`TEXTAREA`,`SELECT`].includes(t.nodeName)&&t.getAttribute(`type`)!==`hidden`&&r.push({engine:`css`,selector:N(t.nodeName.toLowerCase()),score:521}),Vn([r]),r}function Rn(e,t,n){if(t.nodeName===`SELECT`)return[];let r=[],i=t.getAttribute(`title`);if(i){r.push([{engine:`internal:attr`,selector:`[title=${I(i,!0)}]`,score:205}]);for(let e of Z(i))r.push([{engine:`internal:attr`,selector:`[title=${I(e.text,!1)}]`,score:200-e.scoreBouns}])}let a=t.getAttribute(`alt`);if(a&&[`APPLET`,`AREA`,`IMG`,`INPUT`].includes(t.nodeName)){r.push([{engine:`internal:attr`,selector:`[alt=${I(a,!0)}]`,score:165}]);for(let e of Z(a))r.push([{engine:`internal:attr`,selector:`[alt=${I(e.text,!1)}]`,score:160-e.scoreBouns}])}let o=G(e._evaluator._cacheText,t).normalized;if(o){let e=Z(o);if(n){o.length<=80&&r.push([{engine:`internal:text`,selector:F(o,!0),score:185}]);for(let t of e)r.push([{engine:`internal:text`,selector:F(t.text,!1),score:180-t.scoreBouns}])}let i={engine:`css`,selector:N(t.nodeName.toLowerCase()),score:530};for(let t of e)r.push([i,{engine:`internal:has-text`,selector:F(t.text,!1),score:180-t.scoreBouns}]);if(o.length<=80){let e=RegExp(`^${at(o)}$`);r.push([i,{engine:`internal:has-text`,selector:F(e,!1),score:250}])}}let s=B(t);if(s&&![`none`,`presentation`].includes(s)){let e=It(t,!1);if(e){r.push([{engine:`internal:role`,selector:`${s}[name=${I(e,!0)}]`,score:145}]);for(let t of Z(e))r.push([{engine:`internal:role`,selector:`${s}[name=${I(t.text,!1)}]`,score:140-t.scoreBouns}])}}return Vn(r),r}function zn(e){return/^[a-z][\w\-]+$/i.test(e)?`#${e}`:`[id="${N(e)}"]`}function Bn(e,t,n){let r=t.ownerDocument,i=[];function a(n){let a=i.slice();n&&a.unshift(n);let o=a.join(` > `),s=e.parseSelector(o);return e.querySelector(s,r,!1)===t?o:void 0}function o(n){let i={engine:`css`,selector:n,score:1e7},a=e.parseSelector(n),o=e.querySelectorAll(a,r);return o.length===1?[i]:[i,{engine:`nth`,selector:String(o.indexOf(t)),score:Nn}]}for(let e=t;e&&e!==r;e=L(e)){let t=e.nodeName.toLowerCase(),r=``;if(e.id&&!n.noCSSId){let t=zn(e.id),n=a(t);if(n)return o(n);r=t}let s=e.parentNode,c=[...e.classList];for(let e=0;e<c.length;++e){let t=`.${N(c.slice(0,e+1).join(`.`))}`,n=a(t);if(n)return o(n);!r&&s&&s.querySelectorAll(t).length===1&&(r=t)}if(s){let n=[...s.children],i=n.filter(e=>e.nodeName.toLowerCase()===t).indexOf(e)===0?N(t):`${N(t)}:nth-child(${1+n.indexOf(e)})`,c=a(i);if(c)return o(c);r||=i}else r||=N(t);i.unshift(r)}return o(a())}function Vn(e){for(let t of e)for(let e of t)e.score>50&&e.score<300&&(e.score+=Math.min(10,e.selector.length/10|0))}function Hn(e){let t=[],n=``;for(let{engine:r,selector:i}of e)t.length&&(n!==`css`||r!==`css`||i.startsWith(`:nth-match(`))&&t.push(`>>`),n=r,r===`css`?t.push(i):t.push(`${r}=${i}`);return t.join(` `)}function X(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n].score*(e.length-n);return t}function Un(e,t,n,r,i){let a=r.map(e=>({tokens:e,score:X(e)}));a.sort((e,t)=>e.score-t.score);let o=null;for(let{tokens:r}of a){let a=e.parseSelector(Hn(r)),s=e.querySelectorAll(a,t);if(s[0]===n&&s.length===1)return r;let c=s.indexOf(n);if(!i||o||c===-1||s.length>5)continue;let l={engine:`nth`,selector:String(c),score:Nn};o=[...r,l]}return o}function Wn(e){let t,n=0;for(let r=0;r<e.length;++r){let i=e[r],a;if(i!==`-`&&i!==`_`){if(a=i>=`a`&&i<=`z`?`lower`:i>=`A`&&i<=`Z`?`upper`:i>=`0`&&i<=`9`?`digit`:`other`,a===`lower`&&t===`upper`){t=a;continue}t&&t!==a&&++n,t=a}}return n>=e.length/4}function Gn(e,t){if(e.length<=t)return e;e=e.substring(0,t);let n=e.match(/^(.*)\b(.+)$/);return n?n[1].trimEnd():``}function Z(e){let t=[];{let n=e.match(/^([\d.,]+)[^.,\w]/),r=n?n[1].length:0;if(r){let n=Gn(e.substring(r).trimStart(),80);t.push({text:n,scoreBouns:n.length<=30?2:1})}}{let n=e.match(/[^.,\w]([\d.,]+)$/),r=n?n[1].length:0;if(r){let n=Gn(e.substring(0,e.length-r).trimEnd(),80);t.push({text:n,scoreBouns:n.length<=30?2:1})}}return e.length<=30?t.push({text:e,scoreBouns:0}):(t.push({text:Gn(e,80),scoreBouns:0}),t.push({text:Gn(e,30),scoreBouns:1})),t=t.filter(e=>e.text),t.length||t.push({text:e.substring(0,80),scoreBouns:0}),t}function Kn(e,t,n){let r=e.left-t.right;if(!(r<0||n!==void 0&&r>n))return r+Math.max(t.bottom-e.bottom,0)+Math.max(e.top-t.top,0)}function qn(e,t,n){let r=t.left-e.right;if(!(r<0||n!==void 0&&r>n))return r+Math.max(t.bottom-e.bottom,0)+Math.max(e.top-t.top,0)}function Jn(e,t,n){let r=t.top-e.bottom;if(!(r<0||n!==void 0&&r>n))return r+Math.max(e.left-t.left,0)+Math.max(t.right-e.right,0)}function Yn(e,t,n){let r=e.top-t.bottom;if(!(r<0||n!==void 0&&r>n))return r+Math.max(e.left-t.left,0)+Math.max(t.right-e.right,0)}function Xn(e,t,n){let r=n===void 0?50:n,i=0;return e.left-t.right>=0&&(i+=e.left-t.right),t.left-e.right>=0&&(i+=t.left-e.right),t.top-e.bottom>=0&&(i+=t.top-e.bottom),e.top-t.bottom>=0&&(i+=e.top-t.bottom),i>r?void 0:i}const Zn=[`left-of`,`right-of`,`above`,`below`,`near`];function Qn(e,t,n,r){let i=t.getBoundingClientRect(),a={"left-of":qn,"right-of":Kn,above:Jn,below:Yn,near:Xn}[e],o;for(let e of n){if(e===t)continue;let n=a(i,e.getBoundingClientRect(),r);n!==void 0&&(o===void 0||n<o)&&(o=n)}return o}var $n=class{constructor(e){b(this,`_engines`,new Map),b(this,`_cacheQueryCSS`,new Map),b(this,`_cacheMatches`,new Map),b(this,`_cacheQuery`,new Map),b(this,`_cacheMatchesSimple`,new Map),b(this,`_cacheMatchesParents`,new Map),b(this,`_cacheCallMatches`,new Map),b(this,`_cacheCallQuery`,new Map),b(this,`_cacheQuerySimple`,new Map),b(this,`_cacheText`,new Map),b(this,`_scoreMap`,void 0),b(this,`_retainCacheCounter`,0);for(let[t,n]of e)this._engines.set(t,n);this._engines.set(`not`,rr),this._engines.set(`is`,er),this._engines.set(`where`,er),this._engines.set(`has`,tr),this._engines.set(`scope`,nr),this._engines.set(`light`,ir),this._engines.set(`visible`,ar),this._engines.set(`text`,or),this._engines.set(`text-is`,sr),this._engines.set(`text-matches`,cr),this._engines.set(`has-text`,lr),this._engines.set(`right-of`,ur(`right-of`)),this._engines.set(`left-of`,ur(`left-of`)),this._engines.set(`above`,ur(`above`)),this._engines.set(`below`,ur(`below`)),this._engines.set(`near`,ur(`near`)),this._engines.set(`nth-match`,dr);let t=[...this._engines.keys()];t.sort();let n=[...Ke];if(n.sort(),t.join(`|`)!==n.join(`|`))throw Error(`Please keep customCSSNames in sync with evaluator engines: ${t.join(`|`)} vs ${n.join(`|`)}`)}begin(){++this._retainCacheCounter}end(){--this._retainCacheCounter,this._retainCacheCounter||(this._cacheQueryCSS.clear(),this._cacheMatches.clear(),this._cacheQuery.clear(),this._cacheMatchesSimple.clear(),this._cacheMatchesParents.clear(),this._cacheCallMatches.clear(),this._cacheCallQuery.clear(),this._cacheQuerySimple.clear(),this._cacheText.clear())}_cached(e,t,n,r){e.has(t)||e.set(t,[]);let i=e.get(t),a=i.find(e=>n.every((t,n)=>e.rest[n]===t));if(a)return a.result;let o=r();return i.push({rest:n,result:o}),o}_checkSelector(e){if(!(typeof e==`object`&&e&&(Array.isArray(e)||`simples`in e&&e.simples.length)))throw Error(`Malformed selector "${e}"`);return e}matches(e,t,n){let r=this._checkSelector(t);this.begin();try{return this._cached(this._cacheMatches,e,[r,n.scope,n.pierceShadow,n.originalScope],()=>Array.isArray(r)?this._matchesEngine(er,e,r,n):(this._hasScopeClause(r)&&(n=this._expandContextForScopeMatching(n)),this._matchesSimple(e,r.simples[r.simples.length-1].selector,n)?this._matchesParents(e,r,r.simples.length-2,n):!1))}finally{this.end()}}query(e,t){let n=this._checkSelector(t);this.begin();try{return this._cached(this._cacheQuery,n,[e.scope,e.pierceShadow,e.originalScope],()=>{if(Array.isArray(n))return this._queryEngine(er,e,n);this._hasScopeClause(n)&&(e=this._expandContextForScopeMatching(e));let t=this._scoreMap;this._scoreMap=new Map;let r=this._querySimple(e,n.simples[n.simples.length-1].selector);return r=r.filter(t=>this._matchesParents(t,n,n.simples.length-2,e)),this._scoreMap.size&&r.sort((e,t)=>{let n=this._scoreMap.get(e),r=this._scoreMap.get(t);return n===r?0:n===void 0?1:r===void 0?-1:n-r}),this._scoreMap=t,r})}finally{this.end()}}_markScore(e,t){this._scoreMap&&this._scoreMap.set(e,t)}_hasScopeClause(e){return e.simples.some(e=>e.selector.functions.some(e=>e.name===`scope`))}_expandContextForScopeMatching(e){if(e.scope.nodeType!==1)return e;let t=L(e.scope);return t?{...e,scope:t,originalScope:e.originalScope||e.scope}:e}_matchesSimple(e,t,n){return this._cached(this._cacheMatchesSimple,e,[t,n.scope,n.pierceShadow,n.originalScope],()=>{if(e===n.scope||t.css&&!this._matchesCSS(e,t.css))return!1;for(let r of t.functions)if(!this._matchesEngine(this._getEngine(r.name),e,r.args,n))return!1;return!0})}_querySimple(e,t){return t.functions.length?this._cached(this._cacheQuerySimple,t,[e.scope,e.pierceShadow,e.originalScope],()=>{let n=t.css,r=t.functions;n===`*`&&r.length&&(n=void 0);let i,a=-1;n===void 0?(a=r.findIndex(e=>this._getEngine(e.name).query!==void 0),a===-1&&(a=0),i=this._queryEngine(this._getEngine(r[a].name),e,r[a].args)):i=this._queryCSS(e,n);for(let t=0;t<r.length;t++){if(t===a)continue;let n=this._getEngine(r[t].name);n.matches!==void 0&&(i=i.filter(i=>this._matchesEngine(n,i,r[t].args,e)))}for(let t=0;t<r.length;t++){if(t===a)continue;let n=this._getEngine(r[t].name);n.matches===void 0&&(i=i.filter(i=>this._matchesEngine(n,i,r[t].args,e)))}return i}):this._queryCSS(e,t.css||`*`)}_matchesParents(e,t,n,r){return n<0||this._cached(this._cacheMatchesParents,e,[t,n,r.scope,r.pierceShadow,r.originalScope],()=>{let{selector:i,combinator:a}=t.simples[n];if(a===`>`){let a=fr(e,r);return!a||!this._matchesSimple(a,i,r)?!1:this._matchesParents(a,t,n-1,r)}if(a===`+`){let a=pr(e,r);return!a||!this._matchesSimple(a,i,r)?!1:this._matchesParents(a,t,n-1,r)}if(a===``){let a=fr(e,r);for(;a;){if(this._matchesSimple(a,i,r)){if(this._matchesParents(a,t,n-1,r))return!0;if(t.simples[n-1].combinator===``)break}a=fr(a,r)}return!1}if(a===`~`){let a=pr(e,r);for(;a;){if(this._matchesSimple(a,i,r)){if(this._matchesParents(a,t,n-1,r))return!0;if(t.simples[n-1].combinator===`~`)break}a=pr(a,r)}return!1}if(a===`>=`){let a=e;for(;a;){if(this._matchesSimple(a,i,r)){if(this._matchesParents(a,t,n-1,r))return!0;if(t.simples[n-1].combinator===``)break}a=fr(a,r)}return!1}throw Error(`Unsupported combinator "${a}"`)})}_matchesEngine(e,t,n,r){if(e.matches)return this._callMatches(e,t,n,r);if(e.query)return this._callQuery(e,n,r).includes(t);throw Error(`Selector engine should implement "matches" or "query"`)}_queryEngine(e,t,n){if(e.query)return this._callQuery(e,n,t);if(e.matches)return this._queryCSS(t,`*`).filter(r=>this._callMatches(e,r,n,t));throw Error(`Selector engine should implement "matches" or "query"`)}_callMatches(e,t,n,r){return this._cached(this._cacheCallMatches,t,[e,r.scope,r.pierceShadow,r.originalScope,...n],()=>e.matches(t,n,r,this))}_callQuery(e,t,n){return this._cached(this._cacheCallQuery,e,[n.scope,n.pierceShadow,n.originalScope,...t],()=>e.query(n,t,this))}_matchesCSS(e,t){return e.matches(t)}_queryCSS(e,t){return this._cached(this._cacheQueryCSS,t,[e.scope,e.pierceShadow,e.originalScope],()=>{let n=[];function r(i){if(n=n.concat([...i.querySelectorAll(t)]),e.pierceShadow){i.shadowRoot&&r(i.shadowRoot);for(let e of i.querySelectorAll(`*`))e.shadowRoot&&r(e.shadowRoot)}}return r(e.scope),n})}_getEngine(e){let t=this._engines.get(e);if(!t)throw Error(`Unknown selector engine "${e}"`);return t}};const er={matches(e,t,n,r){if(t.length===0)throw Error(`"is" engine expects non-empty selector list`);return t.some(t=>r.matches(e,t,n))},query(e,t,n){if(t.length===0)throw Error(`"is" engine expects non-empty selector list`);let r=[];for(let i of t)r=r.concat(n.query(e,i));return t.length===1?r:mr(r)}},tr={matches(e,t,n,r){if(t.length===0)throw Error(`"has" engine expects non-empty selector list`);return r.query({...n,scope:e},t).length>0}},nr={matches(e,t,n,r){if(t.length!==0)throw Error(`"scope" engine expects no arguments`);let i=n.originalScope||n.scope;return i.nodeType===9?e===i.documentElement:e===i},query(e,t,n){if(t.length!==0)throw Error(`"scope" engine expects no arguments`);let r=e.originalScope||e.scope;if(r.nodeType===9){let e=r.documentElement;return e?[e]:[]}return r.nodeType===1?[r]:[]}},rr={matches(e,t,n,r){if(t.length===0)throw Error(`"not" engine expects non-empty selector list`);return!r.matches(e,t,n)}},ir={query(e,t,n){return n.query({...e,pierceShadow:!1},t)},matches(e,t,n,r){return r.matches(e,t,{...n,pierceShadow:!1})}},ar={matches(e,t,n,r){if(t.length)throw Error(`"visible" engine expects no arguments`);return ut(e)}},or={matches(e,t,n,r){if(t.length!==1||typeof t[0]!=`string`)throw Error(`"text" engine expects a single string`);let i=P(t[0]).toLowerCase();return yn(r._cacheText,e,e=>e.normalized.toLowerCase().includes(i))===`self`}},sr={matches(e,t,n,r){if(t.length!==1||typeof t[0]!=`string`)throw Error(`"text-is" engine expects a single string`);let i=P(t[0]);return yn(r._cacheText,e,e=>!i&&!e.immediate.length||e.immediate.some(e=>P(e)===i))!==`none`}},cr={matches(e,t,n,r){if(t.length===0||typeof t[0]!=`string`||t.length>2||t.length===2&&typeof t[1]!=`string`)throw Error(`"text-matches" engine expects a regexp body and optional regexp flags`);let i=new RegExp(t[0],t.length===2?t[1]:void 0);return yn(r._cacheText,e,e=>i.test(e.full))===`self`}},lr={matches(e,t,n,r){if(t.length!==1||typeof t[0]!=`string`)throw Error(`"has-text" engine expects a single string`);if(vn(e))return!1;let i=P(t[0]).toLowerCase();return(e=>e.normalized.toLowerCase().includes(i))(G(r._cacheText,e))}};function ur(e){return{matches(t,n,r,i){let a=n.length&&typeof n[n.length-1]==`number`?n[n.length-1]:void 0,o=a===void 0?n:n.slice(0,n.length-1);if(n.length<1+(a===void 0?0:1))throw Error(`"${e}" engine expects a selector list and optional maximum distance in pixels`);let s=Qn(e,t,i.query(r,o),a);return s!==void 0&&(i._markScore(t,s),!0)}}}const dr={query(e,t,n){let r=t[t.length-1];if(t.length<2)throw Error(`"nth-match" engine expects non-empty selector list and an index argument`);if(typeof r!=`number`||r<1)throw Error(`"nth-match" engine expects a one-based index as the last argument`);let i=er.query(e,t.slice(0,t.length-1),n);return r--,r<i.length?[i[r]]:[]}};function fr(e,t){if(e!==t.scope)return t.pierceShadow?L(e):e.parentElement||void 0}function pr(e,t){if(e!==t.scope)return e.previousElementSibling||void 0}function mr(e){let t=new Map,n=[],r=[];function i(e){let r=t.get(e);if(r)return r;let a=L(e);return a?i(a).children.push(e):n.push(e),r={children:[],taken:!1},t.set(e,r),r}for(let t of e)i(t).taken=!0;function a(e){let n=t.get(e);if(n.taken&&r.push(e),n.children.length>1){let t=new Set(n.children);n.children=[];let r=e.firstElementChild;for(;r&&n.children.length<t.size;)t.has(r)&&n.children.push(r),r=r.nextElementSibling;for(r=e.shadowRoot?e.shadowRoot.firstElementChild:null;r&&n.children.length<t.size;)t.has(r)&&n.children.push(r),r=r.nextElementSibling}n.children.forEach(a)}return n.forEach(a),r}function hr(e,t,n){return`internal:attr=[${e}=${I(t,n?.exact??Q.options.exact)}]`}function gr(e,t){return`internal:testid=[${e}=${I(t,!0)}]`}function _r(e,t){return`internal:label=${F(e,t?.exact??Q.options.exact)}`}function vr(e,t){return hr(`alt`,e,t)}function yr(e,t){return hr(`title`,e,t)}function br(e,t){return hr(`placeholder`,e,t)}function xr(e,t){return`internal:text=${F(e,t?.exact??Q.options.exact)}`}function Sr(e,t={}){let n=[];return t.checked!==void 0&&n.push([`checked`,String(t.checked)]),t.disabled!==void 0&&n.push([`disabled`,String(t.disabled)]),t.selected!==void 0&&n.push([`selected`,String(t.selected)]),t.expanded!==void 0&&n.push([`expanded`,String(t.expanded)]),t.includeHidden!==void 0&&n.push([`include-hidden`,String(t.includeHidden)]),t.level!==void 0&&n.push([`level`,String(t.level)]),t.name!==void 0&&n.push([`name`,I(t.name,t.exact??Q.options.exact)]),t.pressed!==void 0&&n.push([`pressed`,String(t.pressed)]),`internal:role=${e}${n.map(([e,t])=>`[${e}=${t}]`).join(``)}`}var Q=class e{static create(t){return Object.assign(e.options,t),e.singleton||=new e}constructor(){b(this,`_engines`,void 0),b(this,`_evaluator`,void 0),this._evaluator=new $n(new Map),this._engines=new Map,this._engines.set(`xpath`,Or),this._engines.set(`xpath:light`,Or),this._engines.set(`role`,Tn(!1)),this._engines.set(`text`,this._createTextEngine(!0,!1)),this._engines.set(`text:light`,this._createTextEngine(!1,!1)),this._engines.set(`id`,this._createAttributeEngine(`id`,!0)),this._engines.set(`id:light`,this._createAttributeEngine(`id`,!1)),this._engines.set(`data-testid`,this._createAttributeEngine(`data-testid`,!0)),this._engines.set(`data-testid:light`,this._createAttributeEngine(`data-testid`,!1)),this._engines.set(`data-test-id`,this._createAttributeEngine(`data-test-id`,!0)),this._engines.set(`data-test-id:light`,this._createAttributeEngine(`data-test-id`,!1)),this._engines.set(`data-test`,this._createAttributeEngine(`data-test`,!0)),this._engines.set(`data-test:light`,this._createAttributeEngine(`data-test`,!1)),this._engines.set(`css`,this._createCSSEngine()),this._engines.set(`nth`,{queryAll:()=>[]}),this._engines.set(`visible`,this._createVisibleEngine()),this._engines.set(`internal:control`,this._createControlEngine()),this._engines.set(`internal:has`,this._createHasEngine()),this._engines.set(`internal:has-not`,this._createHasNotEngine()),this._engines.set(`internal:and`,{queryAll:()=>[]}),this._engines.set(`internal:or`,{queryAll:()=>[]}),this._engines.set(`internal:chain`,this._createInternalChainEngine()),this._engines.set(`internal:label`,this._createInternalLabelEngine()),this._engines.set(`internal:text`,this._createTextEngine(!0,!0)),this._engines.set(`internal:has-text`,this._createInternalHasTextEngine()),this._engines.set(`internal:has-not-text`,this._createInternalHasNotTextEngine()),this._engines.set(`internal:attr`,this._createNamedAttributeEngine()),this._engines.set(`internal:testid`,this._createNamedAttributeEngine()),this._engines.set(`internal:role`,Tn(!0))}queryLocatorSelector(e,t=document.documentElement,n=!0){return this.querySelector(this.parseSelector(e),t,n)}queryLocatorSelectorAll(e,t=document.documentElement){return this.querySelectorAll(this.parseSelector(e),t)}querySelector(e,t,n=!0){let r=this.querySelectorAll(e,t);if(n&&r.length>1)throw this.strictModeViolationError(e,r);return r[0]||null}queryAllByRole(e,t,n=document.documentElement){let r=this.parseSelector(Sr(e,t));return this.querySelectorAll(r,n)}queryAllByLabelText(e,t,n=document.documentElement){let r=this.parseSelector(_r(e,t));return this.querySelectorAll(r,n)}queryAllByTestId(t,n=document.documentElement){let r=this.parseSelector(gr(e.options.testIdAttribute,t));return this.querySelectorAll(r,n)}queryAllByText(e,t,n=document.documentElement){let r=this.parseSelector(xr(e,t));return this.querySelectorAll(r,n)}queryAllByTitle(e,t,n=document.documentElement){let r=this.parseSelector(yr(e,t));return this.querySelectorAll(r,n)}queryAllByPlaceholder(e,t,n=document.documentElement){let r=this.parseSelector(br(e,t));return this.querySelectorAll(r,n)}queryAllByAltText(e,t,n=document.documentElement){let r=this.parseSelector(vr(e,t));return this.querySelectorAll(r,n)}queryByRole(e,t,n=document.documentElement){let r=this.parseSelector(Sr(e,t));return this.querySelector(r,n,!1)}queryByLabelText(e,t,n=document.documentElement){let r=this.parseSelector(_r(e,t));return this.querySelector(r,n,!1)}queryByTestId(t,n=document.documentElement){let r=this.parseSelector(gr(e.options.testIdAttribute,t));return this.querySelector(r,n,!1)}queryByText(e,t,n=document.documentElement){let r=this.parseSelector(xr(e,t));return this.querySelector(r,n,!1)}queryByTitle(e,t,n=document.documentElement){let r=this.parseSelector(yr(e,t));return this.querySelector(r,n,!1)}queryByPlaceholder(e,t,n=document.documentElement){let r=this.parseSelector(br(e,t));return this.querySelector(r,n,!1)}queryByAltText(e,t,n=document.documentElement){let r=this.parseSelector(vr(e,t));return this.querySelector(r,n,!1)}strictModeViolationError(e,t){let n=t.slice(0,10).map(e=>({preview:this.previewNode(e),selector:this.generateSelectorSimple(e)})),r=n.map((e,t)=>`\n ${t+1}) ${e.preview} aka ${En(`javascript`,e.selector)}`);return n.length<t.length&&r.push(`
4
+ ...`),this.createStacklessError(`strict mode violation: ${En(`javascript`,M(e))} resolved to ${t.length} elements:${r.join(``)}\n`)}generateSelectorSimple(t,n){return Pn(this,t,{...n,testIdAttributeName:e.options.testIdAttribute})}parseSelector(e){let t=qe(e);return Ye(t,t=>{if(!this._engines.has(t.name))throw this.createStacklessError(`Unknown engine "${t.name}" while parsing selector ${e}`)}),t}previewNode(e){if(e.nodeType===Node.TEXT_NODE)return Cr(`#text=${e.nodeValue||``}`);if(e.nodeType!==Node.ELEMENT_NODE)return Cr(`<${e.nodeName.toLowerCase()} />`);let t=e,n=[];for(let e=0;e<t.attributes.length;e++){let{name:r,value:i}=t.attributes[e];r!==`style`&&(!i&&wr.has(r)?n.push(` ${r}`):n.push(` ${r}="${i}"`))}n.sort((e,t)=>e.length-t.length);let r=it(n.join(``),500);if(Tr.has(t.nodeName))return Cr(`<${t.nodeName.toLowerCase()}${r}/>`);let i=t.childNodes,a=!1;if(i.length<=5){a=!0;for(let e=0;e<i.length;e++)a&&=i[e].nodeType===Node.TEXT_NODE}let o=a?t.textContent||``:i.length?`…`:``;return Cr(`<${t.nodeName.toLowerCase()}${r}>${it(o,50)}</${t.nodeName.toLowerCase()}>`)}querySelectorAll(e,t){if(e.capture!==void 0){if(e.parts.some(e=>e.name===`nth`))throw this.createStacklessError(`Can't query n-th element in a request with the capture.`);let n={parts:e.parts.slice(0,e.capture+1)};if(e.capture<e.parts.length-1){let t={parts:e.parts.slice(e.capture+1)},r={name:`internal:has`,body:{parsed:t},source:M(t)};n.parts.push(r)}return this.querySelectorAll(n,t)}if(!t.querySelectorAll)throw this.createStacklessError(`Node is not queryable.`);if(e.capture!==void 0)throw this.createStacklessError(`Internal error: there should not be a capture in the selector.`);if(t.nodeType===11&&e.parts.length===1&&e.parts[0].name===`css`&&e.parts[0].source===`:scope`)return[t];this._evaluator.begin();try{let n=new Set([t]);for(let r of e.parts)if(r.name===`nth`)n=this._queryNth(n,r);else if(r.name===`internal:and`){let e=this.querySelectorAll(r.body.parsed,t);n=new Set(e.filter(e=>n.has(e)))}else if(r.name===`internal:or`){let e=this.querySelectorAll(r.body.parsed,t);n=new Set(mr(new Set([...n,...e])))}else if(Zn.includes(r.name))n=this._queryLayoutSelector(n,r,t);else{let e=new Set;for(let t of n){let n=this._queryEngineAll(r,t);for(let t of n)e.add(t)}n=e}return[...n]}finally{this._evaluator.end()}}_queryEngineAll(e,t){let n=this._engines.get(e.name).queryAll(t,e.body);for(let e of n)if(!(`nodeName`in e))throw this.createStacklessError(`Expected a Node but got ${Object.prototype.toString.call(e)}`);return n}_queryNth(e,t){let n=[...e],r=+t.body;return r===-1&&(r=n.length-1),new Set(n.slice(r,r+1))}_queryLayoutSelector(e,t,n){let r=t.name,i=t.body,a=[],o=this.querySelectorAll(i.parsed,n);for(let t of e){let e=Qn(r,t,o,i.distance);e!==void 0&&a.push({element:t,score:e})}return a.sort((e,t)=>e.score-t.score),new Set(a.map(e=>e.element))}createStacklessError(t){if(e.options.browser===`firefox`){let e=Error(`Error: ${t}`);return e.stack=``,e}let n=Error(t);return delete n.stack,n}_createTextEngine(e,t){return{queryAll:(n,r)=>{let{matcher:i,kind:a}=Dr(r,t),o=[],s=null,c=e=>{if(a===`lax`&&s&&s.contains(e))return!1;let n=yn(this._evaluator._cacheText,e,i);n===`none`&&(s=e),(n===`self`||n===`selfAndChildren`&&a===`strict`&&!t)&&o.push(e)};n.nodeType===Node.ELEMENT_NODE&&c(n);let l=this._evaluator._queryCSS({scope:n,pierceShadow:e},`*`);for(let e of l)c(e);return o}}}_createAttributeEngine(e,t){let n=t=>[{simples:[{selector:{css:`[${e}=${JSON.stringify(t)}]`,functions:[]},combinator:``}]}];return{queryAll:(e,r)=>this._evaluator.query({scope:e,pierceShadow:t},n(r))}}_createCSSEngine(){return{queryAll:(e,t)=>this._evaluator.query({scope:e,pierceShadow:!0},t)}}_createNamedAttributeEngine(){return{queryAll:(e,t)=>{let n=Ze(t);if(n.name||n.attributes.length!==1)throw Error(`Malformed attribute selector: ${t}`);let{name:r,value:i,caseSensitive:a}=n.attributes[0],o=a?null:i.toLowerCase(),s;return s=i instanceof RegExp?e=>!!e.match(i):a?e=>e===i:e=>e.toLowerCase().includes(o),this._evaluator._queryCSS({scope:e,pierceShadow:!0},`[${r}]`).filter(e=>s(e.getAttribute(r)))}}}_createVisibleEngine(){return{queryAll:(e,t)=>e.nodeType===1&&ut(e)===!!t?[e]:[]}}_createControlEngine(){return{queryAll:(e,t)=>{if(t===`enter-frame`&&e instanceof HTMLIFrameElement){let t=e.contentDocument?.documentElement;return t?[t]:[]}return[]}}}_createHasEngine(){return{queryAll:(e,t)=>e.nodeType===1&&this.querySelector(t.parsed,e,!1)?[e]:[]}}_createHasNotEngine(){return{queryAll:(e,t)=>e.nodeType===1?this.querySelector(t.parsed,e,!1)?[]:[e]:[]}}_createInternalChainEngine(){return{queryAll:(e,t)=>this.querySelectorAll(t.parsed,e)}}_createInternalLabelEngine(){return{queryAll:(e,t)=>{let{matcher:n}=Dr(t,!0);return this._evaluator._queryCSS({scope:e,pierceShadow:!0},`*`).filter(e=>bn(this._evaluator._cacheText,e).some(e=>n(e)))}}}_createInternalHasTextEngine(){return{queryAll:(e,t)=>{if(e.nodeType!==1)return[];let n=e,r=G(this._evaluator._cacheText,n),{matcher:i}=Dr(t,!0);return i(r)?[n]:[]}}}_createInternalHasNotTextEngine(){return{queryAll:(e,t)=>{if(e.nodeType!==1)return[];let n=e,r=G(this._evaluator._cacheText,n),{matcher:i}=Dr(t,!0);return i(r)?[]:[n]}}}};b(Q,`options`,{testIdAttribute:`data-testid`,browser:`chromium`,exact:!1}),b(Q,`singleton`,null);function Cr(e){return e.replace(/\n/g,`↵`).replace(/\t/g,`⇆`)}const wr=new Set([`checked`,`selected`,`disabled`,`readonly`,`multiple`]),Tr=new Set([`AREA`,`BASE`,`BR`,`COL`,`COMMAND`,`EMBED`,`HR`,`IMG`,`INPUT`,`KEYGEN`,`LINK`,`MENUITEM`,`META`,`PARAM`,`SOURCE`,`TRACK`,`WBR`]);function Er(e){if(e=e.substring(1,e.length-1),!e.includes(`\\`))return e;let t=[],n=0;for(;n<e.length;)e[n]===`\\`&&n+1<e.length&&n++,t.push(e[n++]);return t.join(``)}function Dr(e,t){if(e[0]===`/`&&e.lastIndexOf(`/`)>0){let t=e.lastIndexOf(`/`),n=new RegExp(e.substring(1,t),e.substring(t+1));return{matcher:e=>n.test(e.full),kind:`regex`}}let n=t?JSON.parse.bind(JSON):Er,r=!1;return e.length>1&&e[0]===`"`&&e[e.length-1]===`"`?(e=n(e),r=!0):t&&e.length>1&&e[0]===`"`&&e[e.length-2]===`"`&&e[e.length-1]===`i`?(e=n(e.substring(0,e.length-1)),r=!1):t&&e.length>1&&e[0]===`"`&&e[e.length-2]===`"`&&e[e.length-1]===`s`?(e=n(e.substring(0,e.length-1)),r=!0):e.length>1&&e[0]===`'`&&e[e.length-1]===`'`&&(e=n(e),r=!0),e=P(e),r?t?{kind:`strict`,matcher:t=>t.normalized===e}:{matcher:t=>!e&&!t.immediate.length||t.immediate.some(t=>P(t)===e),kind:`strict`}:(e=e.toLowerCase(),{kind:`lax`,matcher:t=>t.normalized.toLowerCase().includes(e)})}const Or={queryAll(e,t){t.startsWith(`/`)&&e.nodeType!==Node.DOCUMENT_NODE&&(t=`.${t}`);let n=[],r=e.ownerDocument||e;if(!r)return n;let i=r.evaluate(t,e,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE);for(let e=i.iterateNext();e;e=i.iterateNext())e.nodeType===Node.ELEMENT_NODE&&n.push(e);return n}},kr=[`:hover`,`:active`,`:focus`,`:focus-visible`,`:focus-within`,`:popover-open`];function Ar(){return Math.random().toString(36).slice(2)}async function jr(e,t){let n=c().browserTraceAttempts.get(e.id),r=o()-n.startTime,i=Mr(t.element),a={...t,startTime:r,snapshot:i},{retry:s,repeats:u}=n,{recordCanvas:d}=c().config.browser.traceView,f={retry:s,repeats:u,recordCanvas:d,entries:[a]};await l().rpc.triggerCommand(c().sessionId,`__vitest_recordBrowserTrace`,void 0,[{testId:e.id,data:f}])}function Mr(e){let{snapshot:t,createMirror:n}=c().browserTraceDomSnapshot,r=c().config.browser.traceView,i=c().selectorEngine,a=n(),o={serialized:t(document,{mirror:a,inlineImages:r.inlineImages,recordCanvas:r.recordCanvas}),viewport:{width:window.innerWidth,height:window.innerHeight},scroll:{x:window.scrollX,y:window.scrollY},pseudoClassIds:{}};if(r.ariaSnapshot){let{generateAriaTree:e,renderAriaTree:t}=c().aria;o.ariaSnapshot=t(e(document.body))}for(let e of kr){let t=document.querySelectorAll(e),n=Array.from(t,e=>a.getId(e)).filter(e=>e!==-1);o.pseudoClassIds[e]=n}if(e)try{let t=i.querySelectorAll(i.parseSelector(e._pwSelector??e.selector),document.documentElement).map(e=>a.getId(e)).filter(e=>e!==-1);t.length>0?(o.selectorIds=t,o.selectorResolution=`matched`):o.selectorResolution=`missing`}catch(e){o.selectorResolution=`error`,o.selectorError=e instanceof Error?e.message:String(e)}return o}function Nr(e){if(!e||!(e instanceof Element))throw Error(`Expected DOM element to be an instance of Element, received ${typeof e}`);return Fr(e)}function Pr(e){return e.split(``).map(e=>{let t=e.charCodeAt(0);return e===` `||e===`#`||e===`.`||e===`:`||e===`[`||e===`]`||e===`>`||e===`+`||e===`~`||e===`\\`?`\\${e}`:t>=65536?`\\${t.toString(16).toUpperCase().padStart(6,`0`)} `:t<32||t===127||t>=128?`\\${t.toString(16).toUpperCase().padStart(2,`0`)} `:e}).join(``)}function Fr(e){let t=[],n,r=!1;for(;n=Ir(e);){n.shadowRoot&&(r=!0);let i=e.tagName;if(e.id)t.push(`#${Pr(e.id)}`);else if(!e.nextElementSibling&&!e.previousElementSibling)t.push(i.toLowerCase());else{let r=0,a=0,o=0;for(let t of n.children)r++,t.tagName===i&&a++,t===e&&(o=r);a>1?t.push(`${i.toLowerCase()}:nth-child(${o})`):t.push(i.toLowerCase())}e=n}return`${c().provider===`webdriverio`&&r?`>>>`:``}${t.reverse().join(` > `)}`}function Ir(e){let t=e.parentNode;return t instanceof ShadowRoot?t.host:t}function Lr(){let e=window.frameElement;if(!e)throw Error(`Cannot find iframe element. This is a bug in Vitest. Please, open a new issue with reproduction.`);return e}function Rr(){let e=Lr();return new DOMMatrix(getComputedStyle(e).transform).a}function zr(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function Br(e,t){return typeof e==`string`?`${JSON.stringify(e)}i`:zr(e)}const Vr=c().provider,Hr=Symbol.for(`$$vitest:locator-resolved`);async function Ur(e,t){if(!e)throw Error(`Expected element or locator to be defined.`);if(e instanceof Element){let t=Nr(e);return{selector:t,locator:a._asLocator(`javascript`,t)}}if(Gr(e)){if(Vr===`playwright`||Hr in e)return e.serialize();let n=Nr(await e.findElement(t));return{selector:n,locator:a._asLocator(`javascript`,n)}}throw Error(`Expected element or locator to be an instance of Element or Locator.`)}const Wr=Symbol.for(`$$vitest:locator`);function Gr(e){return!!e&&typeof e==`object`&&Wr in e}function Kr(e){let t;if(e.delta)t=e.delta;else switch(e.direction){case`up`:t={y:-100};break;case`down`:t={y:100};break;case`left`:t={x:-100};break;case`right`:t={x:100}}return{delta:t,times:e.times}}a._asLocator=En;const qr=Date.now,Jr=[0,20,50,100,100,500];function Yr(e){let{setTimeout:t}=i();return new Promise(n=>t(n,e))}const $=Q.create({exact:t.config.browser.locators.exact,browser:(e=>{switch(e){case`edge`:case`chrome`:return`chromium`;case`safari`:return`webkit`;default:return e}})(t.config.browser.name),testIdAttribute:t.config.browser.locators.testIdAttribute});c().selectorEngine=$;const Xr=Symbol.for(`$$vitest:locator`);class Zr{_parsedSelector;_container;_pwSelector;_pwLocator;_errorSource;constructor(){Object.defineProperty(this,Xr,{enumerable:!1,writable:!1,configurable:!1,value:Xr})}click(e){return this.action(`__vitest_click`,[],e)}dblClick(e){return this.action(`__vitest_dblClick`,[],e)}tripleClick(e){return this.action(`__vitest_tripleClick`,[],e)}wheel(e){return s(async t=>{await f(c().commands.triggerCommand(`__vitest_wheel`,[this.serialize(),Kr(e)],t));let n=c().config.browser.name;if(n===`chromium`||n===`chrome`)return f(new Promise(e=>{requestAnimationFrame(()=>{e()})}))})}clear(e){return this.action(`__vitest_clear`,[],e)}hover(e){return this.action(`__vitest_hover`,[],e)}unhover(e){return this.action(`__vitest_hover`,[],e,{selector:`html > body`,locator:`locator('body')`})}fill(e,t){return this.action(`__vitest_fill`,[e],t)}upload(e,t){return new h(this.serialize(),e,t,this._errorSource)}dropTo(e,t={}){return this.action(`__vitest_dragAndDrop`,[e.toJSON()],t,this.toJSON())}selectOptions(e,t){let n=(Array.isArray(e)?e:[e]).map(e=>typeof e==`string`?e:{element:Gr(e)?e.serialize():{selector:Nr(e),locator:a._asLocator(`javascript`,$.generateSelectorSimple(e))}});return this.action(`__vitest_selectOptions`,[n],t)}screenshot(e){return n.screenshot({...e,element:this})}mark(e,t){let n=l().current,r=!!n&&c().activeTraceTaskIds.has(n.id),i=!!n&&c().browserTraceAttempts.has(n.id);return!n||!r&&!i?Promise.resolve():s(async a=>(i&&await jr(n,{name:e,kind:t?.kind??`mark`,element:this.serialize(),stack:t?.stack??a?.stack}),r?c().commands.triggerCommand(`__vitest_markTrace`,[{name:e,element:this.serialize(),stack:t?.stack??a?.stack}],a):Promise.resolve()))}getByRole(e,t){return this.locator(Sr(e,t))}getByAltText(e,t){return this.locator(vr(e,t))}getByLabelText(e,t){return this.locator(_r(e,t))}getByPlaceholder(e,t){return this.locator(br(e,t))}getByTestId(e){return this.locator(gr(t.config.browser.locators.testIdAttribute,e))}getByText(e,t){return this.locator(xr(e,t))}getByTitle(e,t){return this.locator(yr(e,t))}filter(e){let t=[];if(e?.hasText&&t.push(`internal:has-text=${Br(e.hasText)}`),e?.hasNotText&&t.push(`internal:has-not-text=${Br(e.hasNotText)}`),e?.has){let n=e.has;t.push(`internal:has=${JSON.stringify(n._pwSelector||n.selector)}`)}if(e?.hasNot){let n=e.hasNot;t.push(`internal:has-not=${JSON.stringify(n._pwSelector||n.selector)}`)}if(!t.length)throw Error(`Locator.filter expects at least one filter. None provided.`);return this.locator(t.join(` >> `))}and(e){return this.locator(`internal:and=${JSON.stringify(e._pwSelector||e.selector)}`)}or(e){return this.locator(`internal:or=${JSON.stringify(e._pwSelector||e.selector)}`)}query(){let e=this._parsedSelector||=$.parseSelector(this._pwSelector||this.selector);return $.querySelector(e,document.documentElement,!0)}element(){let e=this.query();if(!e)throw r.getElementError(this,this._container||document.body);return e}elements(){let e=this._parsedSelector||=$.parseSelector(this._pwSelector||this.selector);return $.querySelectorAll(e,document.documentElement)}get length(){return this.elements().length}all(){return this.elements().map(e=>this.elementLocator(e))}nth(e){return this.locator(`nth=${e}`)}first(){return this.nth(0)}last(){return this.nth(-1)}toString(){return this.selector}serialize(){return{selector:this.selector,locator:this.asLocator(),_pwSelector:this._pwSelector}}asLocator(){return this._pwLocator||=En(`javascript`,this._pwSelector||this.selector)}toJSON(){return this.serialize()}async findElement(t={}){let n=u(t),i=t?.strict??!0,a=qr(),o=0;for(;;){let t=this.elements();if(t.length===1)return t[0];if(t.length>1){if(i)throw $r(this,t);return t[0]}let s=qr()-a;if(n!=null&&s>=n)throw r.getElementError(this,this._container||document.body);let c=Jr[Math.min(o++,Jr.length-1)],l=n==null?c:Math.min(c,n-s);e.isFakeTimers()&&e.advanceTimersByTime(l),await Yr(l)}}action(e,t,n,r=this.serialize()){return new m(r,e,t,n,this._errorSource)}}function Qr(e){return c().commands.triggerCommand(e.name,e.arguments,e.errorSource)}function $r(e,t){let n=t.slice(0,10).map(e=>({preview:$.previewNode(e),selector:$.generateSelectorSimple(e)})),r=n.map((e,t)=>`\n ${t+1}) ${e.preview} aka ${En(`javascript`,e.selector)}`);return n.length<t.length&&r.push(`
5
+ ...`),Error(`strict mode violation: ${e.asLocator()} resolved to ${t.length} elements:${r.join(``)}\n`)}export{u as A,o as B,l as C,Ar as D,jr as E,Nr as F,s as G,vr as H,_r as I,br as J,Sr as K,Zr as L,gr as M,xr as N,yr as O,Rr as P,d as Q,$ as R,Qr as S,b as _,It as a,Kt as b,en as c,tn as d,Xt as e,Zt as f,B as g,Qt as h,V as i,$t as j,Gt as k,Jt as l,Yt as m,P as n,Ut as o,Wt as p,R as q,Mt as r,hn as s,gn as t,c as u,ut as v,Lt as w,Vt as x,N as y,Ur as z};
package/dist/locators.js CHANGED
@@ -1 +1 @@
1
- export{L as Locator,F as convertElementToCssSelector,G as ensureAwaited,H as getByAltTextSelector,I as getByLabelSelector,J as getByPlaceholderSelector,K as getByRoleSelector,M as getByTestIdSelector,N as getByTextSelector,O as getByTitleSelector,P as getIframeScale,Q as processTimeoutOptions,R as selectorEngine,S as triggerCommandWithTrace}from"./locators-BHr21v4S.js";import"vitest/browser";import"vitest/internal/browser";
1
+ export{L as Locator,F as convertElementToCssSelector,G as ensureAwaited,H as getByAltTextSelector,I as getByLabelSelector,J as getByPlaceholderSelector,K as getByRoleSelector,M as getByTestIdSelector,N as getByTextSelector,O as getByTitleSelector,P as getIframeScale,Q as processTimeoutOptions,R as selectorEngine,S as triggerCommandWithTrace}from"./locators-7Z9PPr-9.js";import"vitest";import"vitest/browser";import"vitest/internal/browser";
package/dist/types.d.ts CHANGED
@@ -2,6 +2,13 @@ import type { MockedModuleSerialized, ServerIdResolution, ServerMockResolution }
2
2
  import type { BirpcReturn } from "birpc";
3
3
  import type { AfterSuiteRunMeta, BaselineData, BrowserTesterOptions, CancelReason, RunnerTestFile, SnapshotResult, RunnerTaskEventPack as TaskEventPack, RunnerTaskResultPack as TaskResultPack, TestArtifact, TestBenchmark, TestExecutionMethod, UserConsoleLog } from "vitest";
4
4
  import type { MarkOptions } from "vitest/browser";
5
+ interface OrchestratorCapabilities {
6
+ /** the browser accepts an import map after a module has loaded */
7
+ lateImportMaps: boolean;
8
+ }
9
+ export interface MockImportMap {
10
+ imports: Record<string, string>;
11
+ }
5
12
  export interface WebSocketBrowserHandlers {
6
13
  resolveSnapshotPath: (testPath: string) => string;
7
14
  resolveSnapshotRawPath: (testPath: string, rawPath: string) => string;
@@ -14,7 +21,7 @@ export interface WebSocketBrowserHandlers {
14
21
  readBenchmarkResult: (relativePath: string) => Promise<BaselineData | null>;
15
22
  writeBenchmarkResult: (relativePath: string, data: BaselineData) => Promise<void>;
16
23
  onAfterSuiteRun: (meta: AfterSuiteRunMeta) => void;
17
- onOrchestratorReady: () => void;
24
+ onOrchestratorReady: (capabilities: OrchestratorCapabilities) => void;
18
25
  cancelCurrentRun: (reason: CancelReason) => void;
19
26
  getCountOfFailedTests: () => number;
20
27
  readSnapshotFile: (id: string) => Promise<string | null>;
@@ -34,7 +41,12 @@ export interface WebSocketBrowserHandlers {
34
41
  mappings: "";
35
42
  } | undefined;
36
43
  wdioSwitchContext: (direction: "iframe" | "parent") => void;
37
- registerMock: (sessionId: string, mock: MockedModuleSerialized) => void;
44
+ registerMock: (sessionId: string, mock: MockedModuleSerialized, context: {
45
+ /** the module that called `vi.mock` */
46
+ importer: string;
47
+ /** the test file that is running; its static `vi.unmock` calls cancel mocks from other modules */
48
+ testFile?: string;
49
+ }) => Promise<MockImportMap | undefined>;
38
50
  unregisterMock: (sessionId: string, id: string) => void;
39
51
  clearMocks: (sessionId: string) => void;
40
52
  sendCdpEvent: (sessionId: string, event: string, payload?: Record<string, unknown>) => unknown;