@vitest/browser 3.2.4 → 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/__vitest__/assets/{index-X8b7Z_4p.css → index-B0yz5e_c.css} +1 -1
- package/dist/client/__vitest__/assets/{index-D_ryMEPs.js → index-B2adRzgr.js} +34 -34
- package/dist/client/__vitest__/index.html +2 -2
- package/dist/index.js +53 -9
- package/dist/providers.js +1 -1
- package/dist/{webdriver-KA1WiV0q.js → webdriver-BStCVush.js} +4 -13
- package/package.json +8 -8
|
@@ -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/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 = "") {
|
|
@@ -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,
|
|
@@ -3056,10 +3078,21 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3056
3078
|
vitest.state.catchError(err, "RPC Error");
|
|
3057
3079
|
}
|
|
3058
3080
|
function checkFileAccess(path) {
|
|
3059
|
-
if (!isFileServingAllowed(path, vite)) {
|
|
3081
|
+
if (!isFileServingAllowed(slash(path), vite)) {
|
|
3060
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.`);
|
|
3061
3083
|
}
|
|
3062
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
|
+
}
|
|
3063
3096
|
function setupClient(project, rpcId, ws) {
|
|
3064
3097
|
const mockResolver = new ServerMockResolver(globalServer.vite, { moduleDirectories: project.config.server?.deps?.moduleDirectories });
|
|
3065
3098
|
const mocker = project.browser?.provider.mocker;
|
|
@@ -3123,11 +3156,19 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3123
3156
|
},
|
|
3124
3157
|
async saveSnapshotFile(id, content) {
|
|
3125
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
|
+
}
|
|
3126
3163
|
await promises.mkdir(dirname(id), { recursive: true });
|
|
3127
3164
|
return promises.writeFile(id, content, "utf-8");
|
|
3128
3165
|
},
|
|
3129
3166
|
async removeSnapshotFile(id) {
|
|
3130
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
|
+
}
|
|
3131
3172
|
if (!existsSync(id)) {
|
|
3132
3173
|
throw new Error(`Snapshot file "${id}" does not exist.`);
|
|
3133
3174
|
}
|
|
@@ -3178,7 +3219,8 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3178
3219
|
project,
|
|
3179
3220
|
provider,
|
|
3180
3221
|
contextId: sessionId,
|
|
3181
|
-
sessionId
|
|
3222
|
+
sessionId,
|
|
3223
|
+
__ensureCDPHandler: () => globalServer.ensureCDPHandler(sessionId, rpcId)
|
|
3182
3224
|
}, provider.getCommandsContext(sessionId));
|
|
3183
3225
|
return await commands[command](context, ...payload);
|
|
3184
3226
|
},
|
|
@@ -3240,10 +3282,12 @@ function setupBrowserRpc(globalServer, defaultMockerRegistry) {
|
|
|
3240
3282
|
return mocker.delete(sessionId, id);
|
|
3241
3283
|
},
|
|
3242
3284
|
async sendCdpEvent(sessionId, event, payload) {
|
|
3285
|
+
assertCdpAllowed(project);
|
|
3243
3286
|
const cdp = await globalServer.ensureCDPHandler(sessionId, rpcId);
|
|
3244
3287
|
return cdp.send(event, payload);
|
|
3245
3288
|
},
|
|
3246
3289
|
async trackCdpEvent(sessionId, type, event, listenerId) {
|
|
3290
|
+
assertCdpAllowed(project);
|
|
3247
3291
|
const cdp = await globalServer.ensureCDPHandler(sessionId, rpcId);
|
|
3248
3292
|
cdp[type](event, listenerId);
|
|
3249
3293
|
}
|
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';
|
|
@@ -298,19 +298,10 @@ class PlaywrightBrowserProvider {
|
|
|
298
298
|
const page = this.getPage(sessionid);
|
|
299
299
|
const cdp = await page.context().newCDPSession(page);
|
|
300
300
|
return {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
on(event, listener) {
|
|
306
|
-
cdp.on(event, listener);
|
|
307
|
-
},
|
|
308
|
-
off(event, listener) {
|
|
309
|
-
cdp.off(event, listener);
|
|
310
|
-
},
|
|
311
|
-
once(event, listener) {
|
|
312
|
-
cdp.once(event, listener);
|
|
313
|
-
}
|
|
301
|
+
send: cdp.send.bind(cdp),
|
|
302
|
+
on: cdp.on.bind(cdp),
|
|
303
|
+
off: cdp.off.bind(cdp),
|
|
304
|
+
once: cdp.once.bind(cdp)
|
|
314
305
|
};
|
|
315
306
|
}
|
|
316
307
|
async close() {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitest/browser",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.5",
|
|
5
5
|
"description": "Browser running for Vitest",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://opencollective.com/vitest",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"playwright": "*",
|
|
68
68
|
"webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0",
|
|
69
|
-
"vitest": "3.2.
|
|
69
|
+
"vitest": "3.2.5"
|
|
70
70
|
},
|
|
71
71
|
"peerDependenciesMeta": {
|
|
72
72
|
"playwright": {
|
|
@@ -86,8 +86,8 @@
|
|
|
86
86
|
"sirv": "^3.0.1",
|
|
87
87
|
"tinyrainbow": "^2.0.0",
|
|
88
88
|
"ws": "^8.18.2",
|
|
89
|
-
"@vitest/mocker": "3.2.
|
|
90
|
-
"@vitest/utils": "3.2.
|
|
89
|
+
"@vitest/mocker": "3.2.5",
|
|
90
|
+
"@vitest/utils": "3.2.5"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@types/ws": "^8.18.1",
|
|
@@ -103,10 +103,10 @@
|
|
|
103
103
|
"playwright-core": "^1.53.0",
|
|
104
104
|
"safaridriver": "^1.0.0",
|
|
105
105
|
"webdriverio": "^9.15.0",
|
|
106
|
-
"@vitest/
|
|
107
|
-
"@vitest/
|
|
108
|
-
"vitest": "3.2.
|
|
109
|
-
"
|
|
106
|
+
"@vitest/runner": "3.2.5",
|
|
107
|
+
"@vitest/ui": "3.2.5",
|
|
108
|
+
"@vitest/ws-client": "3.2.5",
|
|
109
|
+
"vitest": "3.2.5"
|
|
110
110
|
},
|
|
111
111
|
"scripts": {
|
|
112
112
|
"build": "rimraf dist && pnpm build:node && pnpm build:client",
|