@vitest/browser 3.1.2 → 3.2.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
@@ -13,12 +13,12 @@ import { fileURLToPath } from 'node:url';
13
13
  import crypto from 'node:crypto';
14
14
  import { mkdir, readFile as readFile$1 } from 'node:fs/promises';
15
15
  import { parseErrorStacktrace, parseStacktrace } from '@vitest/utils/source-map';
16
- import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-BzjiKqT8.js';
17
- import { resolve as resolve$1, dirname as dirname$1, basename as basename$1, normalize as normalize$1 } from 'node:path';
16
+ import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-D7k26Na7.js';
17
+ import { resolve as resolve$1, basename as basename$1, dirname as dirname$1, normalize as normalize$1 } from 'node:path';
18
18
  import { WebSocketServer } from 'ws';
19
19
  import * as nodeos from 'node:os';
20
20
 
21
- var version = "3.1.2";
21
+ var version = "3.2.0-beta.1";
22
22
 
23
23
  const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
24
24
  function normalizeWindowsPath(input = "") {
@@ -360,6 +360,9 @@ async function resolveOrchestrator(globalServer, url, res) {
360
360
  if (!browserProject) {
361
361
  return;
362
362
  }
363
+ if (sessionId && sessionId !== "none" && !globalServer.vitest._browserSessions.sessionIds.has(sessionId)) {
364
+ return;
365
+ }
363
366
  const injectorJs = typeof globalServer.injectorJs === "string" ? globalServer.injectorJs : await globalServer.injectorJs;
364
367
  const injector = replacer(injectorJs, {
365
368
  __VITEST_PROVIDER__: JSON.stringify(browserProject.config.browser.provider || "preview"),
@@ -1620,16 +1623,16 @@ function assertFileAccess(path, project) {
1620
1623
  throw new Error(`Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`);
1621
1624
  }
1622
1625
  }
1623
- const readFile = async ({ project, testPath = process.cwd() }, path, options = {}) => {
1624
- const filepath = resolve$1(dirname$1(testPath), path);
1626
+ const readFile = async ({ project }, path, options = {}) => {
1627
+ const filepath = resolve$1(project.config.root, path);
1625
1628
  assertFileAccess(filepath, project);
1626
1629
  if (typeof options === "object" && !options.encoding) {
1627
1630
  options.encoding = "utf-8";
1628
1631
  }
1629
1632
  return promises.readFile(filepath, options);
1630
1633
  };
1631
- const writeFile = async ({ project, testPath = process.cwd() }, path, data, options) => {
1632
- const filepath = resolve$1(dirname$1(testPath), path);
1634
+ const writeFile = async ({ project }, path, data, options) => {
1635
+ const filepath = resolve$1(project.config.root, path);
1633
1636
  assertFileAccess(filepath, project);
1634
1637
  const dir = dirname$1(filepath);
1635
1638
  if (!fs.existsSync(dir)) {
@@ -1637,13 +1640,13 @@ const writeFile = async ({ project, testPath = process.cwd() }, path, data, opti
1637
1640
  }
1638
1641
  await promises.writeFile(filepath, data, options);
1639
1642
  };
1640
- const removeFile = async ({ project, testPath = process.cwd() }, path) => {
1641
- const filepath = resolve$1(dirname$1(testPath), path);
1643
+ const removeFile = async ({ project }, path) => {
1644
+ const filepath = resolve$1(project.config.root, path);
1642
1645
  assertFileAccess(filepath, project);
1643
1646
  await promises.rm(filepath);
1644
1647
  };
1645
- const _fileInfo = async ({ project, testPath = process.cwd() }, path, encoding) => {
1646
- const filepath = resolve$1(dirname$1(testPath), path);
1648
+ const _fileInfo = async ({ project }, path, encoding) => {
1649
+ const filepath = resolve$1(project.config.root, path);
1647
1650
  assertFileAccess(filepath, project);
1648
1651
  const content = await promises.readFile(filepath, encoding || "base64");
1649
1652
  return {
@@ -2442,7 +2445,7 @@ const type = async (context, selector, text, options = {}) => {
2442
2445
  return { unreleased: Array.from(unreleased) };
2443
2446
  };
2444
2447
 
2445
- const upload = async (context, selector, files) => {
2448
+ const upload = async (context, selector, files, options) => {
2446
2449
  const testPath = context.testPath;
2447
2450
  if (!testPath) {
2448
2451
  throw new Error(`Cannot upload files outside of a test`);
@@ -2460,7 +2463,7 @@ const upload = async (context, selector, files) => {
2460
2463
  buffer: Buffer.from(file.base64, "base64")
2461
2464
  };
2462
2465
  });
2463
- await iframe.locator(selector).setInputFiles(playwrightFiles);
2466
+ await iframe.locator(selector).setInputFiles(playwrightFiles, options);
2464
2467
  } else if (context.provider instanceof WebdriverBrowserProvider) {
2465
2468
  for (const file of files) {
2466
2469
  if (typeof file !== "string") {
@@ -2623,7 +2626,7 @@ class ParentBrowserProject {
2623
2626
  if (mod) {
2624
2627
  return id;
2625
2628
  }
2626
- const resolvedPath = resolve(project.config.root, id.slice(1));
2629
+ const resolvedPath = resolve(this.vite.config.root, id.slice(1));
2627
2630
  const modUrl = this.vite.moduleGraph.getModuleById(resolvedPath);
2628
2631
  if (modUrl) {
2629
2632
  return resolvedPath;
@@ -2951,6 +2954,10 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
2951
2954
  if (!sessionId || !rpcId || projectName == null) {
2952
2955
  return error(new Error(`[vitest] Invalid URL ${request.url}. "projectName", "sessionId" and "rpcId" queries are required.`));
2953
2956
  }
2957
+ if (!vitest._browserSessions.sessionIds.has(sessionId)) {
2958
+ const ids = [...vitest._browserSessions.sessionIds].join(", ");
2959
+ return error(new Error(`[vitest] Unknown session id "${sessionId}". Expected one of ${ids}.`));
2960
+ }
2954
2961
  if (type === "orchestrator") {
2955
2962
  const session = vitest._browserSessions.getSession(sessionId);
2956
2963
  session?.connected();
@@ -3060,7 +3067,7 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
3060
3067
  const mod = globalServer.vite.moduleGraph.getModuleById(id);
3061
3068
  return mod?.transformResult?.map;
3062
3069
  },
3063
- onCancel(reason) {
3070
+ cancelCurrentRun(reason) {
3064
3071
  vitest.cancelCurrentRun(reason);
3065
3072
  },
3066
3073
  async resolveId(id, importer) {
@@ -3252,6 +3259,7 @@ function createBrowserPool(vitest) {
3252
3259
  if (isCancelled) {
3253
3260
  return;
3254
3261
  }
3262
+ debug?.("provider is ready for %s project", project.name);
3255
3263
  const pool = ensurePool(project);
3256
3264
  vitest.state.clearFiles(project, files);
3257
3265
  providers.add(project.browser.provider);
@@ -3272,12 +3280,14 @@ function createBrowserPool(vitest) {
3272
3280
  name: "browser",
3273
3281
  async close() {
3274
3282
  await Promise.all([...providers].map((provider) => provider.close()));
3283
+ vitest._browserSessions.sessionIds.clear();
3275
3284
  providers.clear();
3276
3285
  vitest.projects.forEach((project) => {
3277
3286
  project.browser?.state.orchestrators.forEach((orchestrator) => {
3278
3287
  orchestrator.$close();
3279
3288
  });
3280
3289
  });
3290
+ debug?.("browser pool closed all providers");
3281
3291
  },
3282
3292
  runTests: (files) => runWorkspaceTests("run", files),
3283
3293
  collectTests: (files) => runWorkspaceTests("collect", files)
@@ -3309,6 +3319,7 @@ class BrowserPool {
3309
3319
  async runTests(method, files) {
3310
3320
  this._promise ??= createDefer();
3311
3321
  if (!files.length) {
3322
+ debug?.("no tests found, finishing test run immediately");
3312
3323
  this._promise.resolve();
3313
3324
  return this._promise;
3314
3325
  }
@@ -3321,18 +3332,23 @@ class BrowserPool {
3321
3332
  }
3322
3333
  });
3323
3334
  if (this.orchestrators.size >= this.options.maxWorkers) {
3335
+ debug?.("all orchestrators are ready, not creating more");
3324
3336
  return this._promise;
3325
3337
  }
3326
3338
  const workerCount = Math.min(this.options.maxWorkers - this.orchestrators.size, files.length);
3327
3339
  const promises = [];
3328
3340
  for (let i = 0; i < workerCount; i++) {
3329
3341
  const sessionId = crypto.randomUUID();
3342
+ this.project.vitest._browserSessions.sessionIds.add(sessionId);
3343
+ const project = this.project.name;
3344
+ debug?.("[%s] creating session for %s", sessionId, project);
3330
3345
  const page = this.openPage(sessionId).then(() => {
3331
3346
  this.runNextTest(method, sessionId);
3332
3347
  });
3333
3348
  promises.push(page);
3334
3349
  }
3335
3350
  await Promise.all(promises);
3351
+ debug?.("all sessions are created");
3336
3352
  return this._promise;
3337
3353
  }
3338
3354
  async openPage(sessionId) {
@@ -3354,7 +3370,9 @@ class BrowserPool {
3354
3370
  if (this.readySessions.size === this.orchestrators.size) {
3355
3371
  this._promise?.resolve();
3356
3372
  this._promise = undefined;
3357
- debug?.("all tests finished running");
3373
+ debug?.("[%s] all tests finished running", sessionId);
3374
+ } else {
3375
+ debug?.(`did not finish sessions for ${sessionId}: |ready - %s| |overall - %s|`, [...this.readySessions].join(", "), [...this.orchestrators.keys()].join(", "));
3358
3376
  }
3359
3377
  }
3360
3378
  runNextTest(method, sessionId) {
@@ -3388,6 +3406,7 @@ class BrowserPool {
3388
3406
  this.cancel();
3389
3407
  this._promise?.resolve();
3390
3408
  this._promise = undefined;
3409
+ debug?.("[%s] browser connection was closed", sessionId);
3391
3410
  return;
3392
3411
  }
3393
3412
  debug?.("[%s] error during %s test run: %s", sessionId, file, error);
@@ -3425,6 +3444,7 @@ async function createBrowserServer(project, configFile, prePlugins = [], postPlu
3425
3444
  const vite = await createViteServer({
3426
3445
  ...project.options,
3427
3446
  base: "/",
3447
+ root: project.config.root,
3428
3448
  logLevel,
3429
3449
  customLogger: {
3430
3450
  ...logger,
@@ -1 +1 @@
1
- import"@vitest/browser/context";import"../public-utils-xf4CCUzp.js";export{L as Locator,s as selectorEngine}from"../index-C34csx3Z.js";import"vitest/utils";
1
+ import"@vitest/browser/context";import"../public-utils-DUr23h1p.js";export{L as Locator,s as selectorEngine}from"../index-C3ICQ6zz.js";import"vitest/utils";
@@ -1 +1 @@
1
- import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector}from"../public-utils-xf4CCUzp.js";import{s as selectorEngine,L as Locator,p as processTimeoutOptions,g as getIframeScale}from"../index-C34csx3Z.js";import"vitest/utils";page.extend({getByLabelText(e,_){return new PlaywrightLocator(getByLabelSelector(e,_))},getByRole(e,_){return new PlaywrightLocator(getByRoleSelector(e,_))},getByTestId(e){return new PlaywrightLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,_){return new PlaywrightLocator(getByAltTextSelector(e,_))},getByPlaceholder(e,_){return new PlaywrightLocator(getByPlaceholderSelector(e,_))},getByText(e,_){return new PlaywrightLocator(getByTextSelector(e,_))},getByTitle(e,_){return new PlaywrightLocator(getByTitleSelector(e,_))},elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)}});class PlaywrightLocator extends Locator{constructor(e,_){super(),this.selector=e,this._container=_}click(e){return super.click(processTimeoutOptions(processClickOptions(e)))}dblClick(e){return super.dblClick(processTimeoutOptions(processClickOptions(e)))}tripleClick(e){return super.tripleClick(processTimeoutOptions(processClickOptions(e)))}selectOptions(e,_){return super.selectOptions(e,processTimeoutOptions(_))}clear(e){return super.clear(processTimeoutOptions(e))}hover(e){return super.hover(processTimeoutOptions(processHoverOptions(e)))}upload(e,_){return super.upload(e,processTimeoutOptions(_))}fill(e,_){return super.fill(e,processTimeoutOptions(_))}dropTo(e,_){return super.dropTo(e,processTimeoutOptions(processDragAndDropOptions(_)))}locator(e){return new PlaywrightLocator(`${this.selector} >> ${e}`,this._container)}elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)}}function processDragAndDropOptions(e){if(!e)return e;let _=e;return _.sourcePosition&&=processPlaywrightPosition(_.sourcePosition),_.targetPosition&&=processPlaywrightPosition(_.targetPosition),e}function processHoverOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),e}function processClickOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),_}function processPlaywrightPosition(e){let _=getIframeScale();return e.x!=null&&(e.x*=_),e.y!=null&&(e.y*=_),e}
1
+ import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector}from"../public-utils-DUr23h1p.js";import{s as selectorEngine,L as Locator,p as processTimeoutOptions,g as getIframeScale}from"../index-C3ICQ6zz.js";import"vitest/utils";page.extend({getByLabelText(e,_){return new PlaywrightLocator(getByLabelSelector(e,_))},getByRole(e,_){return new PlaywrightLocator(getByRoleSelector(e,_))},getByTestId(e){return new PlaywrightLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,_){return new PlaywrightLocator(getByAltTextSelector(e,_))},getByPlaceholder(e,_){return new PlaywrightLocator(getByPlaceholderSelector(e,_))},getByText(e,_){return new PlaywrightLocator(getByTextSelector(e,_))},getByTitle(e,_){return new PlaywrightLocator(getByTitleSelector(e,_))},elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)}});class PlaywrightLocator extends Locator{constructor(e,_){super(),this.selector=e,this._container=_}click(e){return super.click(processTimeoutOptions(processClickOptions(e)))}dblClick(e){return super.dblClick(processTimeoutOptions(processClickOptions(e)))}tripleClick(e){return super.tripleClick(processTimeoutOptions(processClickOptions(e)))}selectOptions(e,_){return super.selectOptions(e,processTimeoutOptions(_))}clear(e){return super.clear(processTimeoutOptions(e))}hover(e){return super.hover(processTimeoutOptions(processHoverOptions(e)))}upload(e,_){return super.upload(e,processTimeoutOptions(_))}fill(e,_){return super.fill(e,processTimeoutOptions(_))}dropTo(e,_){return super.dropTo(e,processTimeoutOptions(processDragAndDropOptions(_)))}locator(e){return new PlaywrightLocator(`${this.selector} >> ${e}`,this._container)}elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)}}function processDragAndDropOptions(e){if(!e)return e;let _=e;return _.sourcePosition&&=processPlaywrightPosition(_.sourcePosition),_.targetPosition&&=processPlaywrightPosition(_.targetPosition),e}function processHoverOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),e}function processClickOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),_}function processPlaywrightPosition(e){let _=getIframeScale();return e.x!=null&&(e.x*=_),e.y!=null&&(e.y*=_),e}
@@ -1 +1 @@
1
- import{page,server,userEvent}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-xf4CCUzp.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector}from"../index-C34csx3Z.js";import"vitest/utils";page.extend({getByLabelText(e,m){return new PreviewLocator(getByLabelSelector(e,m))},getByRole(e,m){return new PreviewLocator(getByRoleSelector(e,m))},getByTestId(e){return new PreviewLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,m){return new PreviewLocator(getByAltTextSelector(e,m))},getByPlaceholder(e,m){return new PreviewLocator(getByPlaceholderSelector(e,m))},getByText(e,m){return new PreviewLocator(getByTextSelector(e,m))},getByTitle(e,m){return new PreviewLocator(getByTitleSelector(e,m))},elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}});class PreviewLocator extends Locator{constructor(e,m){super(),this._pwSelector=e,this._container=m}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);return e.join(`, `)}click(){return userEvent.click(this.element())}dblClick(){return userEvent.dblClick(this.element())}tripleClick(){return userEvent.tripleClick(this.element())}hover(){return userEvent.hover(this.element())}unhover(){return userEvent.unhover(this.element())}async fill(e){return userEvent.fill(this.element(),e)}async upload(e){return userEvent.upload(this.element(),e)}selectOptions(e){return userEvent.selectOptions(this.element(),e)}clear(){return userEvent.clear(this.element())}locator(e){return new PreviewLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}}
1
+ import{page,server,userEvent}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-DUr23h1p.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector}from"../index-C3ICQ6zz.js";import"vitest/utils";page.extend({getByLabelText(e,m){return new PreviewLocator(getByLabelSelector(e,m))},getByRole(e,m){return new PreviewLocator(getByRoleSelector(e,m))},getByTestId(e){return new PreviewLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,m){return new PreviewLocator(getByAltTextSelector(e,m))},getByPlaceholder(e,m){return new PreviewLocator(getByPlaceholderSelector(e,m))},getByText(e,m){return new PreviewLocator(getByTextSelector(e,m))},getByTitle(e,m){return new PreviewLocator(getByTitleSelector(e,m))},elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}});class PreviewLocator extends Locator{constructor(e,m){super(),this._pwSelector=e,this._container=m}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);return e.join(`, `)}click(){return userEvent.click(this.element())}dblClick(){return userEvent.dblClick(this.element())}tripleClick(){return userEvent.tripleClick(this.element())}hover(){return userEvent.hover(this.element())}unhover(){return userEvent.unhover(this.element())}async fill(e){return userEvent.fill(this.element(),e)}async upload(e){return userEvent.upload(this.element(),e)}selectOptions(e){return userEvent.selectOptions(this.element(),e)}clear(){return userEvent.clear(this.element())}locator(e){return new PreviewLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}}
@@ -1 +1 @@
1
- import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-xf4CCUzp.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-C34csx3Z.js";import"vitest/utils";page.extend({getByLabelText(e,g){return new WebdriverIOLocator(getByLabelSelector(e,g))},getByRole(e,g){return new WebdriverIOLocator(getByRoleSelector(e,g))},getByTestId(e){return new WebdriverIOLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,g){return new WebdriverIOLocator(getByAltTextSelector(e,g))},getByPlaceholder(e,g){return new WebdriverIOLocator(getByPlaceholderSelector(e,g))},getByText(e,g){return new WebdriverIOLocator(getByTextSelector(e,g))},getByTitle(e,g){return new WebdriverIOLocator(getByTitleSelector(e,g))},elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e))}});class WebdriverIOLocator extends Locator{constructor(e,g){super(),this._pwSelector=e,this._container=g}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);return e.join(`, `)}click(e){return super.click(processClickOptions(e))}dblClick(e){return super.dblClick(processClickOptions(e))}tripleClick(e){return super.tripleClick(processClickOptions(e))}selectOptions(e,g){let _=getWebdriverioSelectOptions(this.element(),e);return this.triggerCommand(`__vitest_selectOptions`,this.selector,_,g)}hover(e){return super.hover(processHoverOptions(e))}dropTo(e,g){return super.dropTo(e,processDragAndDropOptions(g))}locator(e){return new WebdriverIOLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e),e)}}function getWebdriverioSelectOptions(e,g){let _=[...e.querySelectorAll(`option`)],v=Array.isArray(g)?g:[g];if(!v.length)return[];if(v.length>1)throw Error(`Provider "webdriverio" doesn't support selecting multiple values at once`);let y=v[0];if(typeof y!=`string`){let e=`element`in y?y.element():y,g=_.indexOf(e);if(g===-1)throw Error(`The element ${selectorEngine.previewNode(e)} was not found in the "select" options.`);return[{index:g}]}let b=_.findIndex(e=>e.value===y);if(b!==-1)return[{index:b}];let x=_.findIndex(e=>e.textContent?.trim()===y||e.ariaLabel===y);if(x===-1)throw Error(`The option "${y}" was not found in the "select" options.`);return[{index:x}]}function processClickOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e;if(g.x!=null||g.y!=null){let e={};g.x!=null&&(g.x=scaleCoordinate(g.x,e)),g.y!=null&&(g.y=scaleCoordinate(g.y,e))}return e}function processHoverOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e,_={};return g.xOffset!=null&&(g.xOffset=scaleCoordinate(g.xOffset,_)),g.yOffset!=null&&(g.yOffset=scaleCoordinate(g.yOffset,_)),e}function processDragAndDropOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g={},_=e;return _.sourceX!=null&&(_.sourceX=scaleCoordinate(_.sourceX,g)),_.sourceY!=null&&(_.sourceY=scaleCoordinate(_.sourceY,g)),_.targetX!=null&&(_.targetX=scaleCoordinate(_.targetX,g)),_.targetY!=null&&(_.targetY=scaleCoordinate(_.targetY,g)),e}function scaleCoordinate(e,g){return Math.round(e*getCachedScale(g))}function getCachedScale(e){return e.scale??=getIframeScale()}
1
+ import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-DUr23h1p.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-C3ICQ6zz.js";import"vitest/utils";page.extend({getByLabelText(e,g){return new WebdriverIOLocator(getByLabelSelector(e,g))},getByRole(e,g){return new WebdriverIOLocator(getByRoleSelector(e,g))},getByTestId(e){return new WebdriverIOLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,g){return new WebdriverIOLocator(getByAltTextSelector(e,g))},getByPlaceholder(e,g){return new WebdriverIOLocator(getByPlaceholderSelector(e,g))},getByText(e,g){return new WebdriverIOLocator(getByTextSelector(e,g))},getByTitle(e,g){return new WebdriverIOLocator(getByTitleSelector(e,g))},elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e))}});class WebdriverIOLocator extends Locator{constructor(e,g){super(),this._pwSelector=e,this._container=g}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);return e.join(`, `)}click(e){return super.click(processClickOptions(e))}dblClick(e){return super.dblClick(processClickOptions(e))}tripleClick(e){return super.tripleClick(processClickOptions(e))}selectOptions(e,g){let _=getWebdriverioSelectOptions(this.element(),e);return this.triggerCommand(`__vitest_selectOptions`,this.selector,_,g)}hover(e){return super.hover(processHoverOptions(e))}dropTo(e,g){return super.dropTo(e,processDragAndDropOptions(g))}locator(e){return new WebdriverIOLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e),e)}}function getWebdriverioSelectOptions(e,g){let _=[...e.querySelectorAll(`option`)],v=Array.isArray(g)?g:[g];if(!v.length)return[];if(v.length>1)throw Error(`Provider "webdriverio" doesn't support selecting multiple values at once`);let y=v[0];if(typeof y!=`string`){let e=`element`in y?y.element():y,g=_.indexOf(e);if(g===-1)throw Error(`The element ${selectorEngine.previewNode(e)} was not found in the "select" options.`);return[{index:g}]}let b=_.findIndex(e=>e.value===y);if(b!==-1)return[{index:b}];let x=_.findIndex(e=>e.textContent?.trim()===y||e.ariaLabel===y);if(x===-1)throw Error(`The option "${y}" was not found in the "select" options.`);return[{index:x}]}function processClickOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e;if(g.x!=null||g.y!=null){let e={};g.x!=null&&(g.x=scaleCoordinate(g.x,e)),g.y!=null&&(g.y=scaleCoordinate(g.y,e))}return e}function processHoverOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e,_={};return g.xOffset!=null&&(g.xOffset=scaleCoordinate(g.xOffset,_)),g.yOffset!=null&&(g.yOffset=scaleCoordinate(g.yOffset,_)),e}function processDragAndDropOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g={},_=e;return _.sourceX!=null&&(_.sourceX=scaleCoordinate(_.sourceX,g)),_.sourceY!=null&&(_.sourceY=scaleCoordinate(_.sourceY,g)),_.targetX!=null&&(_.targetX=scaleCoordinate(_.targetX,g)),_.targetY!=null&&(_.targetY=scaleCoordinate(_.targetY,g)),e}function scaleCoordinate(e,g){return Math.round(e*getCachedScale(g))}function getCachedScale(e){return e.scale??=getIframeScale()}
package/dist/providers.js CHANGED
@@ -1,5 +1,7 @@
1
- import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-BzjiKqT8.js';
1
+ import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-D7k26Na7.js';
2
2
  import '@vitest/mocker/node';
3
+ import 'tinyrainbow';
4
+ import 'vitest/node';
3
5
 
4
6
  class PreviewBrowserProvider {
5
7
  name = "preview";