@vitest/browser 3.2.3 → 3.2.5
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/client/.vite/manifest.json +2 -2
- package/dist/client/__vitest__/assets/{index-X8b7Z_4p.css → index-B0yz5e_c.css} +1 -1
- package/dist/client/__vitest__/assets/index-B2adRzgr.js +58 -0
- package/dist/client/__vitest__/index.html +2 -2
- package/dist/client/__vitest_browser__/{orchestrator-CNq5e39X.js → orchestrator-Bo1OwGWc.js} +22 -15
- package/dist/client/__vitest_browser__/{tester-Dvc2TYoi.js → tester-BYDMHqQ9.js} +0 -7
- package/dist/client/orchestrator.html +1 -1
- package/dist/client/tester/tester.html +1 -1
- package/dist/client.js +4 -2
- package/dist/expect-element.js +1 -1
- package/dist/{index-DWYk8Kxv.js → index-W1MM53zC.js} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +58 -12
- package/dist/locators/index.d.ts +1 -0
- package/dist/locators/index.js +1 -1
- package/dist/locators/playwright.js +1 -1
- package/dist/locators/preview.js +1 -1
- package/dist/locators/webdriverio.js +1 -1
- package/dist/providers.js +1 -1
- package/dist/{public-utils-CoUmok1j.js → public-utils-Kx5DUGWa.js} +2 -2
- package/dist/utils.js +1 -1
- package/dist/{webdriver-B1QbgqhC.js → webdriver-BStCVush.js} +6 -16
- package/package.json +12 -12
- package/dist/client/__vitest__/assets/index-_g5qy0bI.js +0 -58
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
})();
|
|
24
24
|
</script>
|
|
25
25
|
<!-- !LOAD_METADATA! -->
|
|
26
|
-
<script type="module" src="./assets/index-
|
|
27
|
-
<link rel="stylesheet" href="./assets/index-
|
|
26
|
+
<script type="module" src="./assets/index-B2adRzgr.js"></script>
|
|
27
|
+
<link rel="stylesheet" href="./assets/index-B0yz5e_c.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
30
|
<div id="app"></div>
|
package/dist/client/__vitest_browser__/{orchestrator-CNq5e39X.js → orchestrator-Bo1OwGWc.js}
RENAMED
|
@@ -475,8 +475,18 @@ function inspectAttribute([key, value], options) {
|
|
|
475
475
|
}
|
|
476
476
|
return `${options.stylize(String(key), "yellow")}=${options.stylize(`"${value}"`, "string")}`;
|
|
477
477
|
}
|
|
478
|
-
function
|
|
479
|
-
return inspectList(collection, options,
|
|
478
|
+
function inspectNodeCollection(collection, options) {
|
|
479
|
+
return inspectList(collection, options, inspectNode, "\n");
|
|
480
|
+
}
|
|
481
|
+
function inspectNode(node, options) {
|
|
482
|
+
switch (node.nodeType) {
|
|
483
|
+
case 1:
|
|
484
|
+
return inspectHTML(node, options);
|
|
485
|
+
case 3:
|
|
486
|
+
return options.inspect(node.data, options);
|
|
487
|
+
default:
|
|
488
|
+
return options.inspect(node, options);
|
|
489
|
+
}
|
|
480
490
|
}
|
|
481
491
|
function inspectHTML(element, options) {
|
|
482
492
|
const properties = element.getAttributeNames();
|
|
@@ -492,7 +502,7 @@ function inspectHTML(element, options) {
|
|
|
492
502
|
}
|
|
493
503
|
options.truncate -= propertyContents.length;
|
|
494
504
|
const truncate2 = options.truncate;
|
|
495
|
-
let children =
|
|
505
|
+
let children = inspectNodeCollection(element.children, options);
|
|
496
506
|
if (children && children.length > truncate2) {
|
|
497
507
|
children = `${truncator}(${element.children.length})`;
|
|
498
508
|
}
|
|
@@ -500,13 +510,7 @@ function inspectHTML(element, options) {
|
|
|
500
510
|
}
|
|
501
511
|
const symbolsSupported = typeof Symbol === "function" && typeof Symbol.for === "function";
|
|
502
512
|
const chaiInspect = symbolsSupported ? Symbol.for("chai/inspect") : "@@chai/inspect";
|
|
503
|
-
|
|
504
|
-
try {
|
|
505
|
-
const nodeUtil = require("util");
|
|
506
|
-
nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false;
|
|
507
|
-
} catch (noNodeInspect) {
|
|
508
|
-
nodeInspect = false;
|
|
509
|
-
}
|
|
513
|
+
const nodeInspect = Symbol.for("nodejs.util.inspect.custom");
|
|
510
514
|
const constructorMap = /* @__PURE__ */ new WeakMap();
|
|
511
515
|
const stringTagMap = {};
|
|
512
516
|
const baseTypesMap = {
|
|
@@ -548,14 +552,14 @@ const baseTypesMap = {
|
|
|
548
552
|
DataView: () => "",
|
|
549
553
|
ArrayBuffer: () => "",
|
|
550
554
|
Error: inspectObject,
|
|
551
|
-
HTMLCollection:
|
|
552
|
-
NodeList:
|
|
555
|
+
HTMLCollection: inspectNodeCollection,
|
|
556
|
+
NodeList: inspectNodeCollection
|
|
553
557
|
};
|
|
554
558
|
const inspectCustom = (value, options, type) => {
|
|
555
559
|
if (chaiInspect in value && typeof value[chaiInspect] === "function") {
|
|
556
560
|
return value[chaiInspect](options);
|
|
557
561
|
}
|
|
558
|
-
if (nodeInspect
|
|
562
|
+
if (nodeInspect in value && typeof value[nodeInspect] === "function") {
|
|
559
563
|
return value[nodeInspect](options.depth, options);
|
|
560
564
|
}
|
|
561
565
|
if ("inspect" in value && typeof value.inspect === "function") {
|
|
@@ -2575,14 +2579,17 @@ function createTaskCollector(fn, context) {
|
|
|
2575
2579
|
};
|
|
2576
2580
|
taskFn.extend = function(fixtures) {
|
|
2577
2581
|
const _context = mergeContextFixtures(fixtures, context || {}, runner);
|
|
2578
|
-
|
|
2582
|
+
const originalWrapper = fn;
|
|
2583
|
+
return createTest(function(name, optionsOrFn, optionsOrTest) {
|
|
2579
2584
|
const collector = getCurrentSuite();
|
|
2580
2585
|
const scopedFixtures = collector.fixtures();
|
|
2581
2586
|
const context2 = { ...this };
|
|
2582
2587
|
if (scopedFixtures) {
|
|
2583
2588
|
context2.fixtures = mergeScopedFixtures(context2.fixtures || [], scopedFixtures);
|
|
2584
2589
|
}
|
|
2585
|
-
|
|
2590
|
+
const { handler, options } = parseArguments(optionsOrFn, optionsOrTest);
|
|
2591
|
+
const timeout = options.timeout ?? void 0;
|
|
2592
|
+
originalWrapper.call(context2, formatName(name), handler, timeout);
|
|
2586
2593
|
}, _context);
|
|
2587
2594
|
};
|
|
2588
2595
|
const _test = createChainable([
|
|
@@ -2683,13 +2683,6 @@ try {
|
|
|
2683
2683
|
}
|
|
2684
2684
|
} catch (notNode) {
|
|
2685
2685
|
}
|
|
2686
|
-
let nodeInspect = false;
|
|
2687
|
-
try {
|
|
2688
|
-
const nodeUtil = require("util");
|
|
2689
|
-
nodeInspect = nodeUtil.inspect ? nodeUtil.inspect.custom : false;
|
|
2690
|
-
} catch (noNodeInspect) {
|
|
2691
|
-
nodeInspect = false;
|
|
2692
|
-
}
|
|
2693
2686
|
var jsTokens_1;
|
|
2694
2687
|
var hasRequiredJsTokens;
|
|
2695
2688
|
function requireJsTokens() {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{__VITEST_INJECTOR__}
|
|
27
27
|
{__VITEST_ERROR_CATCHER__}
|
|
28
28
|
{__VITEST_SCRIPTS__}
|
|
29
|
-
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-
|
|
29
|
+
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-Bo1OwGWc.js"></script>
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
|
|
31
31
|
</head>
|
|
32
32
|
<body>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" href="{__VITEST_FAVICON__}" type="image/svg+xml">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Vitest Browser Tester</title>
|
|
8
|
-
<script type="module" crossorigin src="/__vitest_browser__/tester-
|
|
8
|
+
<script type="module" crossorigin src="/__vitest_browser__/tester-BYDMHqQ9.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/client.js
CHANGED
|
@@ -29,8 +29,10 @@ function createBirpc(functions, options) {
|
|
|
29
29
|
return functions;
|
|
30
30
|
if (method === "$close")
|
|
31
31
|
return close;
|
|
32
|
+
if (method === "$closed")
|
|
33
|
+
return closed;
|
|
32
34
|
if (method === "then" && !eventNames.includes("then") && !("then" in functions))
|
|
33
|
-
return
|
|
35
|
+
return undefined;
|
|
34
36
|
const sendEvent = (...args) => {
|
|
35
37
|
post(serialize({ m: method, a: args, t: TYPE_REQUEST }));
|
|
36
38
|
};
|
|
@@ -45,7 +47,7 @@ function createBirpc(functions, options) {
|
|
|
45
47
|
try {
|
|
46
48
|
await _promise;
|
|
47
49
|
} finally {
|
|
48
|
-
_promise =
|
|
50
|
+
_promise = undefined;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
return new Promise((resolve, reject) => {
|
package/dist/expect-element.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{expect,chai}from"vitest";import{k as kAriaCheckedRoles,i as getAriaChecked,j as getAriaRole,l as getAriaDisabled,m as beginAriaCaches,n as endAriaCaches,o as isElementVisible$1,p as getElementAccessibleDescription,q as getElementAccessibleErrorMessage,r as getElementAccessibleName,s as cssEscape}from"./public-utils-
|
|
1
|
+
import{expect,chai}from"vitest";import{k as kAriaCheckedRoles,i as getAriaChecked,j as getAriaRole,l as getAriaDisabled,m as beginAriaCaches,n as endAriaCaches,o as isElementVisible$1,p as getElementAccessibleDescription,q as getElementAccessibleErrorMessage,r as getElementAccessibleName,s as cssEscape}from"./public-utils-Kx5DUGWa.js";import{L as Locator,p as processTimeoutOptions}from"./index-W1MM53zC.js";import{server}from"@vitest/browser/context";import"vitest/internal/browser";function getAriaCheckedRoles(){return[...kAriaCheckedRoles]}function getElementFromUserInput(_,K,q){if(_ instanceof Locator&&(_=_.element()),_ instanceof HTMLElement||_ instanceof SVGElement)return _;throw new UserInputElementTypeError(_,K,q)}function getNodeFromUserInput(_,K,q){if(_ instanceof Locator&&(_=_.element()),_ instanceof Node)return _;throw new UserInputNodeTypeError(_,K,q)}function getMessage(_,K,q,J,Y,X){return[`${K}\n`,`${q}:\n${_.utils.EXPECTED_COLOR(redent(display(_,J),2))}`,`${Y}:\n${_.utils.RECEIVED_COLOR(redent(display(_,X),2))}`].join(`
|
|
2
2
|
`)}function redent(_,K){return indentString(stripIndent(_),K)}function indentString(_,K){let q=/^(?!\s*$)/gm;return _.replace(q,` `.repeat(K))}function minIndent(_){let K=_.match(/^[ \t]*(?=\S)/gm);return K?K.reduce((_,K)=>Math.min(_,K.length),1/0):0}function stripIndent(_){let K=minIndent(_);if(K===0)return _;let q=RegExp(`^[ \\t]{${K}}`,`gm`);return _.replace(q,``)}function display(_,K){return typeof K==`string`?K:_.utils.stringify(K)}function toSentence(_,{wordConnector:K=`, `,lastWordConnector:q=` and `}={}){return[_.slice(0,-1).join(K),_[_.length-1]].join(_.length>1?q:``)}class GenericTypeError extends Error{constructor(_,K,q,J){super(),Error.captureStackTrace&&Error.captureStackTrace(this,q);let Y=``;try{Y=J.utils.printWithType(`Received`,K,J.utils.printReceived)}catch{}this.message=[J.utils.matcherHint(`${J.isNot?`.not`:``}.${q.name}`,`received`,``),``,`${J.utils.RECEIVED_COLOR(`received`)} value must ${_} or a Locator that returns ${_}.`,Y].join(`
|
|
3
3
|
`)}}class UserInputElementTypeError extends GenericTypeError{constructor(_,K,q){super(`an HTMLElement or an SVGElement`,_,K,q)}}class UserInputNodeTypeError extends GenericTypeError{constructor(_,K,q){super(`a Node`,_,K,q)}}function getTag(_){return _ instanceof HTMLFormElement?`FORM`:_.tagName.toUpperCase()}function isInputElement(_){return getTag(_)===`INPUT`}function getSingleElementValue(_){if(_)switch(getTag(_)){case`INPUT`:return getInputValue(_);case`SELECT`:return getSelectValue(_);default:return _.value??getAccessibleValue(_)}}function getSelectValue({multiple:_,options:K}){let q=[...K].filter(_=>_.selected);if(_)return[...q].map(_=>_.value);if(q.length!==0)return q[0].value}function getInputValue(_){switch(_.type){case`number`:return _.value===``?null:Number(_.value);case`checkbox`:return _.checked;default:return _.value}}const rolesSupportingValues=[`meter`,`progressbar`,`slider`,`spinbutton`];function getAccessibleValue(_){if(rolesSupportingValues.includes(_.getAttribute(`role`)||``))return Number(_.getAttribute(`aria-valuenow`))}function normalize(_){return _.replace(/\s+/g,` `).trim()}function matches(_,K){return K instanceof RegExp?K.test(_):_.includes(String(K))}function arrayAsSetComparison(_,K){if(Array.isArray(_)&&Array.isArray(K)){let q=new Set(K);for(let K of new Set(_))if(!q.has(K))return!1;return!0}}const supportedRoles=getAriaCheckedRoles();function toBeChecked(_){let K=getElementFromUserInput(_,toBeChecked,this),q=()=>isInputElement(K)&&[`checkbox`,`radio`].includes(K.type),X=()=>supportedRoles.includes(getAriaRole(K)||``)&&[`true`,`false`].includes(K.getAttribute(`aria-checked`)||``);if(!q()&&!X())return{pass:!1,message:()=>`only inputs with type="checkbox" or type="radio" or elements with ${supportedRolesSentence()} and a valid aria-checked attribute can be used with .toBeChecked(). Use .toHaveValue() instead`};let Z=getAriaChecked(K),Q=Z===!0;return{pass:Q,message:()=>{let _=Q?`is`:`is not`;return[this.utils.matcherHint(`${this.isNot?`.not`:``}.toBeChecked`,`element`,``),``,`Received element ${_} checked:`,` ${this.utils.printReceived(K.cloneNode(!1))}`].join(`
|
|
4
4
|
`)}}}function supportedRolesSentence(){return toSentence(supportedRoles.map(_=>`role="${_}"`),{lastWordConnector:` or `})}function toBeEmptyDOMElement(_){let K=getElementFromUserInput(_,toBeEmptyDOMElement,this);return{pass:isEmptyElement(K),message:()=>[this.utils.matcherHint(`${this.isNot?`.not`:``}.toBeEmptyDOMElement`,`element`,``),``,`Received:`,` ${this.utils.printReceived(K.innerHTML)}`].join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{server,page}from"@vitest/browser/context";import{I as Ivya,e as getByRoleSelector,c as getByAltTextSelector,f as getByLabelSelector,b as getByPlaceholderSelector,d as getByTestIdSelector,a as getByTextSelector,g as getByTitleSelector,h as getElementError}from"./public-utils-
|
|
1
|
+
import{server,page}from"@vitest/browser/context";import{I as Ivya,e as getByRoleSelector,c as getByAltTextSelector,f as getByLabelSelector,b as getByPlaceholderSelector,d as getByTestIdSelector,a as getByTextSelector,g as getByTitleSelector,h as getElementError}from"./public-utils-Kx5DUGWa.js";function ensureAwaited(e){let b=getWorkerState().current;if(!b||b.type!==`test`)return e();let x=!1,S=Error(`STACK_TRACE_ERROR`);b.onFinished??=[],b.onFinished.push(()=>{if(!x){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=S.stack?.replace(S.message,e.message),e}});let C;return{then(b,w){return x=!0,(C||=e(S)).then(b,w)},catch(b){return(C||=e(S)).catch(b)},finally(b){return(C||=e(S)).finally(b)},[Symbol.toStringTag]:`Promise`}}function getBrowserState(){return window.__vitest_browser_runner__}function getWorkerState(){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}const provider=getBrowserState().provider;function convertElementToCssSelector(e){if(!e||!(e instanceof Element))throw Error(`Expected DOM element to be an instance of Element, received ${typeof e}`);return getUniqueCssSelector(e)}function escapeIdForCSSSelector(e){return e.split(``).map(e=>{let b=e.charCodeAt(0);return e===` `||e===`#`||e===`.`||e===`:`||e===`[`||e===`]`||e===`>`||e===`+`||e===`~`||e===`\\`?`\\${e}`:b>=65536?`\\${b.toString(16).toUpperCase().padStart(6,`0`)} `:b<32||b===127||b>=128?`\\${b.toString(16).toUpperCase().padStart(2,`0`)} `:e}).join(``)}function getUniqueCssSelector(e){let b=[],x,S=!1;for(;x=getParent(e);){x.shadowRoot&&(S=!0);let C=e.tagName;if(e.id)b.push(`#${escapeIdForCSSSelector(e.id)}`);else if(!e.nextElementSibling&&!e.previousElementSibling)b.push(C.toLowerCase());else{let S=0,w=0,T=0;for(let b of x.children)S++,b.tagName===C&&w++,b===e&&(T=S);w>1?b.push(`${C.toLowerCase()}:nth-child(${T})`):b.push(C.toLowerCase())}e=x}return`${getBrowserState().provider===`webdriverio`&&S?`>>>`:``}${b.reverse().join(` > `)}`}function getParent(e){let b=e.parentNode;return b instanceof ShadowRoot?b.host:b}const now=Date.now;function processTimeoutOptions(e){if(e&&e.timeout!=null||provider!==`playwright`||getWorkerState().config.browser.providerOptions.actionTimeout!=null)return e;let b=getBrowserState().runner,x=b._currentTaskStartTime;if(!x)return e;let S=b._currentTaskTimeout;if(S===0||S==null||S===1/0)return e;e||={};let C=now(),w=x+S,T=w-C;return T<=0||(e.timeout=T-100),e}function getIframeScale(){let e=window.parent.document.querySelector(`iframe[data-vitest]`)?.parentElement;if(!e)throw Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`);let b=e.getAttribute(`data-scale`),x=Number(b);if(Number.isNaN(x))throw TypeError(`Cannot parse scale value from Tester element (${b}). This is a bug in Vitest. Please, open a new issue with reproduction.`);return x}function escapeRegexForSelector(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function escapeForTextSelector(e,b){return typeof e==`string`?`${JSON.stringify(e)}i`:escapeRegexForSelector(e)}const selectorEngine=Ivya.create({browser:(e=>{switch(e){case`edge`:case`chrome`:return`chromium`;case`safari`:return`webkit`;default:return e}})(server.config.browser.name),testIdAttribute:server.config.browser.locators.testIdAttribute});class Locator{_parsedSelector;_container;_pwSelector;click(e={}){return this.triggerCommand(`__vitest_click`,this.selector,e)}dblClick(e={}){return this.triggerCommand(`__vitest_dblClick`,this.selector,e)}tripleClick(e={}){return this.triggerCommand(`__vitest_tripleClick`,this.selector,e)}clear(e){return this.triggerCommand(`__vitest_clear`,this.selector,e)}hover(e){return this.triggerCommand(`__vitest_hover`,this.selector,e)}unhover(e){return this.triggerCommand(`__vitest_hover`,`html > body`,e)}fill(e,b){return this.triggerCommand(`__vitest_fill`,this.selector,e,b)}async upload(e,b){let x=(Array.isArray(e)?e:[e]).map(async e=>{if(typeof e==`string`)return e;let b=await new Promise((b,x)=>{let S=new FileReader;S.onload=()=>b(S.result),S.onerror=()=>x(Error(`Failed to read file: ${e.name}`)),S.readAsDataURL(e)});return{name:e.name,mimeType:e.type,base64:b}});return this.triggerCommand(`__vitest_upload`,this.selector,await Promise.all(x),b)}dropTo(e,b={}){return this.triggerCommand(`__vitest_dragAndDrop`,this.selector,e.selector,b)}selectOptions(e,b){let x=(Array.isArray(e)?e:[e]).map(e=>{if(typeof e!=`string`){let b=`element`in e?e.selector:selectorEngine.generateSelectorSimple(e);return{element:b}}return e});return this.triggerCommand(`__vitest_selectOptions`,this.selector,x,b)}screenshot(e){return page.screenshot({...e,element:this})}getByRole(e,b){return this.locator(getByRoleSelector(e,b))}getByAltText(e,b){return this.locator(getByAltTextSelector(e,b))}getByLabelText(e,b){return this.locator(getByLabelSelector(e,b))}getByPlaceholder(e,b){return this.locator(getByPlaceholderSelector(e,b))}getByTestId(b){return this.locator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,b))}getByText(e,b){return this.locator(getByTextSelector(e,b))}getByTitle(e,b){return this.locator(getByTitleSelector(e,b))}filter(e){let b=[];if(e?.hasText&&b.push(`internal:has-text=${escapeForTextSelector(e.hasText)}`),e?.hasNotText&&b.push(`internal:has-not-text=${escapeForTextSelector(e.hasNotText)}`),e?.has){let x=e.has;b.push(`internal:has=${JSON.stringify(x._pwSelector||x.selector)}`)}if(e?.hasNot){let x=e.hasNot;b.push(`internal:has-not=${JSON.stringify(x._pwSelector||x.selector)}`)}if(!b.length)throw Error(`Locator.filter expects at least one filter. None provided.`);return this.locator(b.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||=selectorEngine.parseSelector(this._pwSelector||this.selector);return selectorEngine.querySelector(e,document.documentElement,!0)}element(){let e=this.query();if(!e)throw getElementError(this._pwSelector||this.selector,this._container||document.body);return e}elements(){let e=this._parsedSelector||=selectorEngine.parseSelector(this._pwSelector||this.selector);return selectorEngine.querySelectorAll(e,document.documentElement)}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}toJSON(){return this.selector}triggerCommand(e,...b){let x=getBrowserState().commands;return ensureAwaited(S=>x.triggerCommand(e,b,S))}}export{Locator as L,getBrowserState as a,convertElementToCssSelector as c,getIframeScale as g,processTimeoutOptions as p,selectorEngine as s};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -13,13 +13,13 @@ import { fileURLToPath } from 'node:url';
|
|
|
13
13
|
import crypto from 'node:crypto';
|
|
14
14
|
import { mkdir, rm, 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-
|
|
16
|
+
import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-BStCVush.js';
|
|
17
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
|
import { performance } from 'node:perf_hooks';
|
|
21
21
|
|
|
22
|
-
var version = "3.2.
|
|
22
|
+
var version = "3.2.5";
|
|
23
23
|
|
|
24
24
|
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
|
|
25
25
|
function normalizeWindowsPath(input = "") {
|
|
@@ -746,7 +746,7 @@ var BrowserPlugin = (parentServer, base = "/") => {
|
|
|
746
746
|
"vitest > @vitest/snapshot > magic-string",
|
|
747
747
|
"vitest > chai",
|
|
748
748
|
"vitest > chai > loupe",
|
|
749
|
-
"vitest > strip-literal",
|
|
749
|
+
"vitest > @vitest/runner > strip-literal",
|
|
750
750
|
"vitest > @vitest/utils > loupe",
|
|
751
751
|
"@vitest/browser > @testing-library/user-event",
|
|
752
752
|
"@vitest/browser > @testing-library/dom"
|
|
@@ -836,7 +836,7 @@ var BrowserPlugin = (parentServer, base = "/") => {
|
|
|
836
836
|
viteConfig.esbuild.legalComments = "inline";
|
|
837
837
|
}
|
|
838
838
|
const defaultPort = parentServer.vitest._browserLastPort++;
|
|
839
|
-
const api = resolveApiServerConfig(viteConfig.test?.browser || {}, defaultPort);
|
|
839
|
+
const api = resolveApiServerConfig(viteConfig.test?.browser || {}, defaultPort, parentServer.vitest.config.api, parentServer.vitest.logger);
|
|
840
840
|
viteConfig.server = {
|
|
841
841
|
...viteConfig.server,
|
|
842
842
|
port: defaultPort,
|
|
@@ -1143,6 +1143,19 @@ const tripleClick = async (context, selector, options = {}) => {
|
|
|
1143
1143
|
}
|
|
1144
1144
|
};
|
|
1145
1145
|
|
|
1146
|
+
const _startV8Coverage = async (context) => {
|
|
1147
|
+
const session = await context.__ensureCDPHandler();
|
|
1148
|
+
await session.send("Profiler.enable");
|
|
1149
|
+
await session.send("Profiler.startPreciseCoverage", {
|
|
1150
|
+
callCount: true,
|
|
1151
|
+
detailed: true
|
|
1152
|
+
});
|
|
1153
|
+
};
|
|
1154
|
+
const _takeV8Coverage = async (context) => {
|
|
1155
|
+
const session = await context.__ensureCDPHandler();
|
|
1156
|
+
return session.send("Profiler.takePreciseCoverage");
|
|
1157
|
+
};
|
|
1158
|
+
|
|
1146
1159
|
const dragAndDrop = async (context, source, target, options_) => {
|
|
1147
1160
|
if (context.provider instanceof PlaywrightBrowserProvider) {
|
|
1148
1161
|
const frame = await context.frame();
|
|
@@ -1654,9 +1667,14 @@ function assertFileAccess(path, project) {
|
|
|
1654
1667
|
throw new Error(`Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`);
|
|
1655
1668
|
}
|
|
1656
1669
|
}
|
|
1670
|
+
function assertWrite(path, project) {
|
|
1671
|
+
if (!project.config.browser.api.allowWrite || !project.vitest.config.api.allowWrite) {
|
|
1672
|
+
throw new Error(`Cannot modify file "${path}". File writing is disabled because server is exposed to the internet, see https://vitest.dev/config/browser/api.`);
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1657
1675
|
const readFile = async ({ project }, path, options = {}) => {
|
|
1658
1676
|
const filepath = resolve$1(project.config.root, path);
|
|
1659
|
-
assertFileAccess(filepath, project);
|
|
1677
|
+
assertFileAccess(slash(filepath), project);
|
|
1660
1678
|
// never return a Buffer
|
|
1661
1679
|
if (typeof options === "object" && !options.encoding) {
|
|
1662
1680
|
options.encoding = "utf-8";
|
|
@@ -1664,8 +1682,9 @@ const readFile = async ({ project }, path, options = {}) => {
|
|
|
1664
1682
|
return promises.readFile(filepath, options);
|
|
1665
1683
|
};
|
|
1666
1684
|
const writeFile = async ({ project }, path, data, options) => {
|
|
1685
|
+
assertWrite(path, project);
|
|
1667
1686
|
const filepath = resolve$1(project.config.root, path);
|
|
1668
|
-
assertFileAccess(filepath, project);
|
|
1687
|
+
assertFileAccess(slash(filepath), project);
|
|
1669
1688
|
const dir = dirname$1(filepath);
|
|
1670
1689
|
if (!fs.existsSync(dir)) {
|
|
1671
1690
|
await promises.mkdir(dir, { recursive: true });
|
|
@@ -1673,13 +1692,14 @@ const writeFile = async ({ project }, path, data, options) => {
|
|
|
1673
1692
|
await promises.writeFile(filepath, data, options);
|
|
1674
1693
|
};
|
|
1675
1694
|
const removeFile = async ({ project }, path) => {
|
|
1695
|
+
assertWrite(path, project);
|
|
1676
1696
|
const filepath = resolve$1(project.config.root, path);
|
|
1677
|
-
assertFileAccess(filepath, project);
|
|
1697
|
+
assertFileAccess(slash(filepath), project);
|
|
1678
1698
|
await promises.rm(filepath);
|
|
1679
1699
|
};
|
|
1680
1700
|
const _fileInfo = async ({ project }, path, encoding) => {
|
|
1681
1701
|
const filepath = resolve$1(project.config.root, path);
|
|
1682
|
-
assertFileAccess(filepath, project);
|
|
1702
|
+
assertFileAccess(slash(filepath), project);
|
|
1683
1703
|
const content = await promises.readFile(filepath, encoding || "base64");
|
|
1684
1704
|
return {
|
|
1685
1705
|
content,
|
|
@@ -2537,6 +2557,8 @@ var builtinCommands = {
|
|
|
2537
2557
|
removeFile,
|
|
2538
2558
|
writeFile,
|
|
2539
2559
|
__vitest_fileInfo: _fileInfo,
|
|
2560
|
+
__vitest_startV8Coverage: _startV8Coverage,
|
|
2561
|
+
__vitest_takeV8Coverage: _takeV8Coverage,
|
|
2540
2562
|
__vitest_upload: upload,
|
|
2541
2563
|
__vitest_click: click,
|
|
2542
2564
|
__vitest_dblClick: dblClick,
|
|
@@ -2865,8 +2887,10 @@ function createBirpc(functions, options) {
|
|
|
2865
2887
|
return functions;
|
|
2866
2888
|
if (method === "$close")
|
|
2867
2889
|
return close;
|
|
2890
|
+
if (method === "$closed")
|
|
2891
|
+
return closed;
|
|
2868
2892
|
if (method === "then" && !eventNames.includes("then") && !("then" in functions))
|
|
2869
|
-
return
|
|
2893
|
+
return undefined;
|
|
2870
2894
|
const sendEvent = (...args) => {
|
|
2871
2895
|
post(serialize({ m: method, a: args, t: TYPE_REQUEST }));
|
|
2872
2896
|
};
|
|
@@ -2881,7 +2905,7 @@ function createBirpc(functions, options) {
|
|
|
2881
2905
|
try {
|
|
2882
2906
|
await _promise;
|
|
2883
2907
|
} finally {
|
|
2884
|
-
_promise =
|
|
2908
|
+
_promise = undefined;
|
|
2885
2909
|
}
|
|
2886
2910
|
}
|
|
2887
2911
|
return new Promise((resolve, reject) => {
|
|
@@ -3054,10 +3078,21 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3054
3078
|
vitest.state.catchError(err, "RPC Error");
|
|
3055
3079
|
}
|
|
3056
3080
|
function checkFileAccess(path) {
|
|
3057
|
-
if (!isFileServingAllowed(path, vite)) {
|
|
3081
|
+
if (!isFileServingAllowed(slash(path), vite)) {
|
|
3058
3082
|
throw new Error(`Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`);
|
|
3059
3083
|
}
|
|
3060
3084
|
}
|
|
3085
|
+
function canWrite(project) {
|
|
3086
|
+
return project.config.browser.api.allowWrite && project.vitest.config.browser.api.allowWrite && project.config.api.allowWrite && project.vitest.config.api.allowWrite;
|
|
3087
|
+
}
|
|
3088
|
+
function isCdpAllowed(project) {
|
|
3089
|
+
return project.config.api.allowExec && project.config.browser.api.allowExec && project.vitest.config.api.allowExec && project.vitest.config.browser.api.allowExec && project.config.api.allowWrite && project.config.browser.api.allowWrite && project.vitest.config.api.allowWrite && project.vitest.config.browser.api.allowWrite;
|
|
3090
|
+
}
|
|
3091
|
+
function assertCdpAllowed(project) {
|
|
3092
|
+
if (!isCdpAllowed(project)) {
|
|
3093
|
+
throw new Error(`Cannot use CDP because browser API write or exec operations are disabled. See https://vitest.dev/config/browser/api.`);
|
|
3094
|
+
}
|
|
3095
|
+
}
|
|
3061
3096
|
function setupClient(project, rpcId, ws) {
|
|
3062
3097
|
const mockResolver = new ServerMockResolver(globalServer.vite, { moduleDirectories: project.config.server?.deps?.moduleDirectories });
|
|
3063
3098
|
const mocker = project.browser?.provider.mocker;
|
|
@@ -3121,11 +3156,19 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3121
3156
|
},
|
|
3122
3157
|
async saveSnapshotFile(id, content) {
|
|
3123
3158
|
checkFileAccess(id);
|
|
3159
|
+
if (!canWrite(project)) {
|
|
3160
|
+
vitest.logger.error(`[vitest] Cannot save snapshot file "${id}". File writing is disabled because server is exposed to the internet, see https://vitest.dev/config/browser/api.`);
|
|
3161
|
+
return;
|
|
3162
|
+
}
|
|
3124
3163
|
await promises.mkdir(dirname(id), { recursive: true });
|
|
3125
3164
|
return promises.writeFile(id, content, "utf-8");
|
|
3126
3165
|
},
|
|
3127
3166
|
async removeSnapshotFile(id) {
|
|
3128
3167
|
checkFileAccess(id);
|
|
3168
|
+
if (!canWrite(project)) {
|
|
3169
|
+
vitest.logger.error(`[vitest] Cannot remove snapshot file "${id}". File writing is disabled because server is exposed to the internet, see https://vitest.dev/config/browser/api.`);
|
|
3170
|
+
return;
|
|
3171
|
+
}
|
|
3129
3172
|
if (!existsSync(id)) {
|
|
3130
3173
|
throw new Error(`Snapshot file "${id}" does not exist.`);
|
|
3131
3174
|
}
|
|
@@ -3176,7 +3219,8 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3176
3219
|
project,
|
|
3177
3220
|
provider,
|
|
3178
3221
|
contextId: sessionId,
|
|
3179
|
-
sessionId
|
|
3222
|
+
sessionId,
|
|
3223
|
+
__ensureCDPHandler: () => globalServer.ensureCDPHandler(sessionId, rpcId)
|
|
3180
3224
|
}, provider.getCommandsContext(sessionId));
|
|
3181
3225
|
return await commands[command](context, ...payload);
|
|
3182
3226
|
},
|
|
@@ -3238,10 +3282,12 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3238
3282
|
return mocker.delete(sessionId, id);
|
|
3239
3283
|
},
|
|
3240
3284
|
async sendCdpEvent(sessionId, event, payload) {
|
|
3285
|
+
assertCdpAllowed(project);
|
|
3241
3286
|
const cdp = await globalServer.ensureCDPHandler(sessionId, rpcId);
|
|
3242
3287
|
return cdp.send(event, payload);
|
|
3243
3288
|
},
|
|
3244
3289
|
async trackCdpEvent(sessionId, type, event, listenerId) {
|
|
3290
|
+
assertCdpAllowed(project);
|
|
3245
3291
|
const cdp = await globalServer.ensureCDPHandler(sessionId, rpcId);
|
|
3246
3292
|
cdp[type](event, listenerId);
|
|
3247
3293
|
}
|
package/dist/locators/index.d.ts
CHANGED
|
@@ -266,6 +266,7 @@ declare class Ivya {
|
|
|
266
266
|
private _createCSSEngine;
|
|
267
267
|
private _createNamedAttributeEngine;
|
|
268
268
|
private _createVisibleEngine;
|
|
269
|
+
private _createControlEngine;
|
|
269
270
|
private _createHasEngine;
|
|
270
271
|
private _createHasNotEngine;
|
|
271
272
|
private _createInternalChainEngine;
|
package/dist/locators/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"@vitest/browser/context";import"../public-utils-
|
|
1
|
+
import"@vitest/browser/context";import"../public-utils-Kx5DUGWa.js";export{L as Locator,s as selectorEngine}from"../index-W1MM53zC.js";import"vitest/internal/browser";
|
|
@@ -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-
|
|
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-Kx5DUGWa.js";import{s as selectorEngine,L as Locator,p as processTimeoutOptions,g as getIframeScale}from"../index-W1MM53zC.js";import"vitest/internal/browser";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,_))},_createLocator(e){return new PlaywrightLocator(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}
|
package/dist/locators/preview.js
CHANGED
|
@@ -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-
|
|
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-Kx5DUGWa.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector}from"../index-W1MM53zC.js";import"vitest/internal/browser";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))},_createLocator(e){return new PreviewLocator(e)},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-
|
|
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-Kx5DUGWa.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-W1MM53zC.js";import"vitest/internal/browser";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))},_createLocator(e){return new WebdriverIOLocator(e)},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,4 +1,4 @@
|
|
|
1
|
-
import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-
|
|
1
|
+
import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-BStCVush.js';
|
|
2
2
|
import '@vitest/mocker/node';
|
|
3
3
|
import 'tinyrainbow';
|
|
4
4
|
import 'vitest/node';
|