@vitest/browser 0.24.2 → 0.24.3

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.
Binary file
@@ -0,0 +1,5 @@
1
+ <svg width="165" height="165" viewBox="0 0 165 165" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M120.831 57.2543L84.693 109.505C84.3099 110.059 83.7558 110.474 83.1148 110.687C82.4738 110.9 81.7809 110.898 81.1412 110.684C80.5015 110.469 79.95 110.052 79.5702 109.497C79.1905 108.941 79.0032 108.277 79.037 107.606L80.4833 78.7582L57.1343 73.8064C56.6353 73.7007 56.1704 73.474 55.7807 73.1465C55.391 72.8191 55.0885 72.4009 54.9001 71.929C54.7117 71.4571 54.6432 70.9461 54.7006 70.4412C54.758 69.9364 54.9395 69.4532 55.2291 69.0345L91.3675 16.7837C91.7507 16.2294 92.3048 15.8145 92.9458 15.6018C93.5869 15.3891 94.2798 15.3902 94.9196 15.6051C95.5593 15.8199 96.1109 16.2367 96.4906 16.7923C96.8703 17.3478 97.0575 18.0117 97.0236 18.6833L95.5773 47.5314L118.926 52.4828C119.425 52.5885 119.89 52.8152 120.28 53.1426C120.67 53.4701 120.972 53.8883 121.16 54.3602C121.349 54.8321 121.417 55.3431 121.36 55.8479C121.303 56.3528 121.121 56.836 120.831 57.2547L120.831 57.2543Z" fill="#FCC72B"/>
3
+ <path d="M82.9866 153.343C82.0254 153.344 81.0735 153.156 80.1855 152.788C79.2975 152.42 78.4909 151.88 77.8122 151.2L43.6658 117.056C42.2998 115.683 41.5341 113.824 41.5366 111.887C41.5392 109.95 42.3098 108.092 43.6796 106.723C45.0493 105.353 46.9064 104.582 48.8435 104.579C50.7807 104.577 52.6399 105.342 54.0134 106.708L82.9866 135.678L146.105 72.5626C147.481 71.2088 149.336 70.4536 151.266 70.4615C153.197 70.4693 155.046 71.2396 156.41 72.6045C157.775 73.9695 158.546 75.8184 158.554 77.7487C158.561 79.679 157.806 81.5342 156.452 82.9101L88.1597 151.2C87.4811 151.881 86.6747 152.42 85.7869 152.788C84.8992 153.156 83.9475 153.344 82.9866 153.343Z" fill="#729B1B"/>
4
+ <path d="M82.9572 153.343C83.9184 153.344 84.8703 153.156 85.7583 152.788C86.6463 152.42 87.4528 151.88 88.1316 151.2L122.278 117.056C123.644 115.683 124.41 113.824 124.407 111.887C124.405 109.95 123.634 108.092 122.264 106.723C120.894 105.353 119.037 104.582 117.1 104.579C115.163 104.577 113.304 105.342 111.93 106.708L82.9572 135.678L19.8389 72.5626C18.4629 71.2088 16.6077 70.4536 14.6775 70.4615C12.7472 70.4693 10.8982 71.2396 9.53331 72.6045C8.16839 73.9695 7.39811 75.8184 7.39025 77.7487C7.38239 79.679 8.13759 81.5342 9.49135 82.9101L77.784 151.2C78.4627 151.881 79.2691 152.42 80.1568 152.788C81.0446 153.156 81.9963 153.344 82.9572 153.343Z" fill="#729B1B" fill-opacity="0.5"/>
5
+ </svg>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="/__vitest__/favicon.svg" type="image/svg+xml">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vitest</title>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Readex+Pro:wght@300;400&display=swap" rel="stylesheet">
11
+ <script>
12
+ (function() {
13
+ const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
14
+ const setting = localStorage.getItem('vueuse-color-scheme') || 'auto'
15
+ if (setting === 'dark' || (prefersDark && setting !== 'light'))
16
+ document.documentElement.classList.toggle('dark', true)
17
+ })()
18
+ </script>
19
+ <script type="module" crossorigin src="/__vitest__/assets/index.51497caa.js"></script>
20
+ <link rel="stylesheet" href="/__vitest__/assets/index.3fea3d37.css">
21
+ </head>
22
+ <body>
23
+ <div id="app"></div>
24
+
25
+ </body>
26
+ </html>
@@ -0,0 +1,488 @@
1
+ (function polyfill() {
2
+ const relList = document.createElement("link").relList;
3
+ if (relList && relList.supports && relList.supports("modulepreload")) {
4
+ return;
5
+ }
6
+ for (const link of document.querySelectorAll('link[rel="modulepreload"]')) {
7
+ processPreload(link);
8
+ }
9
+ new MutationObserver((mutations) => {
10
+ for (const mutation of mutations) {
11
+ if (mutation.type !== "childList") {
12
+ continue;
13
+ }
14
+ for (const node of mutation.addedNodes) {
15
+ if (node.tagName === "LINK" && node.rel === "modulepreload")
16
+ processPreload(node);
17
+ }
18
+ }
19
+ }).observe(document, { childList: true, subtree: true });
20
+ function getFetchOpts(script) {
21
+ const fetchOpts = {};
22
+ if (script.integrity)
23
+ fetchOpts.integrity = script.integrity;
24
+ if (script.referrerpolicy)
25
+ fetchOpts.referrerPolicy = script.referrerpolicy;
26
+ if (script.crossorigin === "use-credentials")
27
+ fetchOpts.credentials = "include";
28
+ else if (script.crossorigin === "anonymous")
29
+ fetchOpts.credentials = "omit";
30
+ else
31
+ fetchOpts.credentials = "same-origin";
32
+ return fetchOpts;
33
+ }
34
+ function processPreload(link) {
35
+ if (link.ep)
36
+ return;
37
+ link.ep = true;
38
+ const fetchOpts = getFetchOpts(link);
39
+ fetch(link.href, fetchOpts);
40
+ }
41
+ })();
42
+ const scriptRel = "modulepreload";
43
+ const assetsURL = function(dep) {
44
+ return "/" + dep;
45
+ };
46
+ const seen = {};
47
+ const __vitePreload = function preload(baseModule, deps, importerUrl) {
48
+ if (!deps || deps.length === 0) {
49
+ return baseModule();
50
+ }
51
+ return Promise.all(deps.map((dep) => {
52
+ dep = assetsURL(dep);
53
+ if (dep in seen)
54
+ return;
55
+ seen[dep] = true;
56
+ const isCss = dep.endsWith(".css");
57
+ const cssSelector = isCss ? '[rel="stylesheet"]' : "";
58
+ if (document.querySelector(`link[href="${dep}"]${cssSelector}`)) {
59
+ return;
60
+ }
61
+ const link = document.createElement("link");
62
+ link.rel = isCss ? "stylesheet" : scriptRel;
63
+ if (!isCss) {
64
+ link.as = "script";
65
+ link.crossOrigin = "";
66
+ }
67
+ link.href = dep;
68
+ document.head.appendChild(link);
69
+ if (isCss) {
70
+ return new Promise((res, rej) => {
71
+ link.addEventListener("load", res);
72
+ link.addEventListener("error", () => rej(new Error(`Unable to preload CSS for ${dep}`)));
73
+ });
74
+ }
75
+ })).then(() => baseModule());
76
+ };
77
+ const DEFAULT_TIMEOUT = 6e4;
78
+ function createBirpc(functions, options) {
79
+ const {
80
+ post,
81
+ on,
82
+ eventNames = [],
83
+ serialize = (i) => i,
84
+ deserialize = (i) => i,
85
+ timeout = DEFAULT_TIMEOUT
86
+ } = options;
87
+ const rpcPromiseMap = /* @__PURE__ */ new Map();
88
+ const rpc = new Proxy({}, {
89
+ get(_, method) {
90
+ const sendEvent = (...args) => {
91
+ post(serialize({ m: method, a: args, t: "q" }));
92
+ };
93
+ if (eventNames.includes(method)) {
94
+ sendEvent.asEvent = sendEvent;
95
+ return sendEvent;
96
+ }
97
+ const sendCall = (...args) => {
98
+ return new Promise((resolve, reject) => {
99
+ const id = nanoid();
100
+ rpcPromiseMap.set(id, { resolve, reject });
101
+ post(serialize({ m: method, a: args, i: id, t: "q" }));
102
+ if (timeout >= 0) {
103
+ setTimeout(() => {
104
+ reject(new Error(`[birpc] timeout on calling "${method}"`));
105
+ rpcPromiseMap.delete(id);
106
+ }, timeout);
107
+ }
108
+ });
109
+ };
110
+ sendCall.asEvent = sendEvent;
111
+ return sendCall;
112
+ }
113
+ });
114
+ on(async (data, ...extra) => {
115
+ const msg = deserialize(data);
116
+ if (msg.t === "q") {
117
+ const { m: method, a: args } = msg;
118
+ let result, error;
119
+ try {
120
+ result = await functions[method].apply(rpc, args);
121
+ } catch (e) {
122
+ error = e;
123
+ }
124
+ if (msg.i)
125
+ post(serialize({ t: "s", i: msg.i, r: result, e: error }), ...extra);
126
+ } else {
127
+ const { i: ack, r: result, e: error } = msg;
128
+ const promise = rpcPromiseMap.get(ack);
129
+ if (error)
130
+ promise == null ? void 0 : promise.reject(error);
131
+ else
132
+ promise == null ? void 0 : promise.resolve(result);
133
+ rpcPromiseMap.delete(ack);
134
+ }
135
+ });
136
+ return rpc;
137
+ }
138
+ const urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
139
+ function nanoid(size = 21) {
140
+ let id = "";
141
+ let i = size;
142
+ while (i--)
143
+ id += urlAlphabet[Math.random() * 64 | 0];
144
+ return id;
145
+ }
146
+ /*! (c) 2020 Andrea Giammarchi */
147
+ const { parse: $parse, stringify: $stringify } = JSON;
148
+ const { keys } = Object;
149
+ const Primitive = String;
150
+ const primitive = "string";
151
+ const ignore = {};
152
+ const object = "object";
153
+ const noop = (_, value) => value;
154
+ const primitives = (value) => value instanceof Primitive ? Primitive(value) : value;
155
+ const Primitives = (_, value) => typeof value === primitive ? new Primitive(value) : value;
156
+ const revive = (input, parsed, output, $) => {
157
+ const lazy = [];
158
+ for (let ke = keys(output), { length } = ke, y = 0; y < length; y++) {
159
+ const k = ke[y];
160
+ const value = output[k];
161
+ if (value instanceof Primitive) {
162
+ const tmp = input[value];
163
+ if (typeof tmp === object && !parsed.has(tmp)) {
164
+ parsed.add(tmp);
165
+ output[k] = ignore;
166
+ lazy.push({ k, a: [input, parsed, tmp, $] });
167
+ } else
168
+ output[k] = $.call(output, k, tmp);
169
+ } else if (output[k] !== ignore)
170
+ output[k] = $.call(output, k, value);
171
+ }
172
+ for (let { length } = lazy, i = 0; i < length; i++) {
173
+ const { k, a } = lazy[i];
174
+ output[k] = $.call(output, k, revive.apply(null, a));
175
+ }
176
+ return output;
177
+ };
178
+ const set = (known, input, value) => {
179
+ const index = Primitive(input.push(value) - 1);
180
+ known.set(value, index);
181
+ return index;
182
+ };
183
+ const parse = (text, reviver) => {
184
+ const input = $parse(text, Primitives).map(primitives);
185
+ const value = input[0];
186
+ const $ = reviver || noop;
187
+ const tmp = typeof value === object && value ? revive(input, /* @__PURE__ */ new Set(), value, $) : value;
188
+ return $.call({ "": tmp }, "", tmp);
189
+ };
190
+ const stringify = (value, replacer, space) => {
191
+ const $ = replacer && typeof replacer === object ? (k, v) => k === "" || -1 < replacer.indexOf(k) ? v : void 0 : replacer || noop;
192
+ const known = /* @__PURE__ */ new Map();
193
+ const input = [];
194
+ const output = [];
195
+ let i = +set(known, input, $.call({ "": value }, "", value));
196
+ let firstRun = !i;
197
+ while (i < input.length) {
198
+ firstRun = true;
199
+ output[i] = $stringify(input[i++], replace, space);
200
+ }
201
+ return "[" + output.join(",") + "]";
202
+ function replace(key, value2) {
203
+ if (firstRun) {
204
+ firstRun = !firstRun;
205
+ return value2;
206
+ }
207
+ const after = $.call(this, key, value2);
208
+ switch (typeof after) {
209
+ case object:
210
+ if (after === null)
211
+ return after;
212
+ case primitive:
213
+ return known.get(after) || set(known, input, after);
214
+ }
215
+ return after;
216
+ }
217
+ };
218
+ const isAggregateError = (err) => {
219
+ if (typeof AggregateError !== "undefined" && err instanceof AggregateError)
220
+ return true;
221
+ return err instanceof Error && "errors" in err;
222
+ };
223
+ class StateManager {
224
+ constructor() {
225
+ this.filesMap = /* @__PURE__ */ new Map();
226
+ this.pathsSet = /* @__PURE__ */ new Set();
227
+ this.collectingPromise = void 0;
228
+ this.idMap = /* @__PURE__ */ new Map();
229
+ this.taskFileMap = /* @__PURE__ */ new WeakMap();
230
+ this.errorsSet = /* @__PURE__ */ new Set();
231
+ }
232
+ catchError(err, type) {
233
+ if (isAggregateError(err))
234
+ return err.errors.forEach((error) => this.catchError(error, type));
235
+ err.type = type;
236
+ this.errorsSet.add(err);
237
+ }
238
+ clearErrors() {
239
+ this.errorsSet.clear();
240
+ }
241
+ getUnhandledErrors() {
242
+ return Array.from(this.errorsSet.values());
243
+ }
244
+ startCollectingPaths() {
245
+ let _resolve;
246
+ const promise = new Promise((resolve) => {
247
+ _resolve = resolve;
248
+ });
249
+ this.collectingPromise = { promise, resolve: _resolve };
250
+ }
251
+ finishCollectingPaths() {
252
+ var _a;
253
+ (_a = this.collectingPromise) == null ? void 0 : _a.resolve();
254
+ this.collectingPromise = void 0;
255
+ }
256
+ async getPaths() {
257
+ var _a;
258
+ await ((_a = this.collectingPromise) == null ? void 0 : _a.promise);
259
+ return Array.from(this.pathsSet);
260
+ }
261
+ getFiles(keys2) {
262
+ if (keys2)
263
+ return keys2.map((key) => this.filesMap.get(key)).filter(Boolean);
264
+ return Array.from(this.filesMap.values());
265
+ }
266
+ getFilepaths() {
267
+ return Array.from(this.filesMap.keys());
268
+ }
269
+ getFailedFilepaths() {
270
+ return this.getFiles().filter((i) => {
271
+ var _a;
272
+ return ((_a = i.result) == null ? void 0 : _a.state) === "fail";
273
+ }).map((i) => i.filepath);
274
+ }
275
+ collectPaths(paths = []) {
276
+ paths.forEach((path) => {
277
+ this.pathsSet.add(path);
278
+ });
279
+ }
280
+ collectFiles(files = []) {
281
+ files.forEach((file) => {
282
+ this.filesMap.set(file.filepath, file);
283
+ this.updateId(file);
284
+ });
285
+ }
286
+ clearFiles(paths = []) {
287
+ paths.forEach((path) => {
288
+ this.filesMap.delete(path);
289
+ });
290
+ }
291
+ updateId(task) {
292
+ if (this.idMap.get(task.id) === task)
293
+ return;
294
+ this.idMap.set(task.id, task);
295
+ if (task.type === "suite") {
296
+ task.tasks.forEach((task2) => {
297
+ this.updateId(task2);
298
+ });
299
+ }
300
+ }
301
+ updateTasks(packs) {
302
+ for (const [id, result] of packs) {
303
+ if (this.idMap.has(id))
304
+ this.idMap.get(id).result = result;
305
+ }
306
+ }
307
+ updateUserLog(log) {
308
+ const task = log.taskId && this.idMap.get(log.taskId);
309
+ if (task) {
310
+ if (!task.logs)
311
+ task.logs = [];
312
+ task.logs.push(log);
313
+ }
314
+ }
315
+ }
316
+ const RealDate = Date;
317
+ class MockDate extends RealDate {
318
+ constructor(y, m, d, h, M, s, ms) {
319
+ super();
320
+ let date;
321
+ switch (arguments.length) {
322
+ case 0:
323
+ date = new RealDate();
324
+ break;
325
+ case 1:
326
+ date = new RealDate(y);
327
+ break;
328
+ default:
329
+ d = typeof d === "undefined" ? 1 : d;
330
+ h = h || 0;
331
+ M = M || 0;
332
+ s = s || 0;
333
+ ms = ms || 0;
334
+ date = new RealDate(y, m, d, h, M, s, ms);
335
+ break;
336
+ }
337
+ return date;
338
+ }
339
+ }
340
+ MockDate.UTC = RealDate.UTC;
341
+ MockDate.now = function() {
342
+ return new MockDate().valueOf();
343
+ };
344
+ MockDate.parse = function(dateString) {
345
+ return RealDate.parse(dateString);
346
+ };
347
+ MockDate.toString = function() {
348
+ return RealDate.toString();
349
+ };
350
+ function createClient(url, options = {}) {
351
+ const {
352
+ handlers = {},
353
+ autoReconnect = true,
354
+ reconnectInterval = 2e3,
355
+ reconnectTries = 10,
356
+ reactive = (v) => v,
357
+ WebSocketConstructor = globalThis.WebSocket
358
+ } = options;
359
+ let tries = reconnectTries;
360
+ const ctx = reactive({
361
+ ws: new WebSocketConstructor(url),
362
+ state: new StateManager(),
363
+ waitForConnection,
364
+ reconnect
365
+ });
366
+ ctx.state.filesMap = reactive(ctx.state.filesMap);
367
+ ctx.state.idMap = reactive(ctx.state.idMap);
368
+ let onMessage;
369
+ const functions = {
370
+ onPathsCollected(paths) {
371
+ var _a;
372
+ ctx.state.collectPaths(paths);
373
+ (_a = handlers.onPathsCollected) == null ? void 0 : _a.call(handlers, paths);
374
+ },
375
+ onCollected(files) {
376
+ var _a;
377
+ ctx.state.collectFiles(files);
378
+ (_a = handlers.onCollected) == null ? void 0 : _a.call(handlers, files);
379
+ },
380
+ onTaskUpdate(packs) {
381
+ var _a;
382
+ ctx.state.updateTasks(packs);
383
+ (_a = handlers.onTaskUpdate) == null ? void 0 : _a.call(handlers, packs);
384
+ },
385
+ onUserConsoleLog(log) {
386
+ ctx.state.updateUserLog(log);
387
+ },
388
+ onFinished(files) {
389
+ var _a;
390
+ (_a = handlers.onFinished) == null ? void 0 : _a.call(handlers, files);
391
+ }
392
+ };
393
+ const birpcHandlers = {
394
+ post: (msg) => ctx.ws.send(msg),
395
+ on: (fn) => onMessage = fn,
396
+ serialize: stringify,
397
+ deserialize: parse
398
+ };
399
+ ctx.rpc = createBirpc(
400
+ functions,
401
+ birpcHandlers
402
+ );
403
+ let openPromise;
404
+ function reconnect(reset = false) {
405
+ if (reset)
406
+ tries = reconnectTries;
407
+ ctx.ws = new WebSocketConstructor(url);
408
+ registerWS();
409
+ }
410
+ function registerWS() {
411
+ openPromise = new Promise((resolve) => {
412
+ ctx.ws.addEventListener("open", () => {
413
+ tries = reconnectTries;
414
+ resolve();
415
+ });
416
+ });
417
+ ctx.ws.addEventListener("message", (v) => {
418
+ onMessage(v.data);
419
+ });
420
+ ctx.ws.addEventListener("close", () => {
421
+ tries -= 1;
422
+ if (autoReconnect && tries > 0)
423
+ setTimeout(reconnect, reconnectInterval);
424
+ });
425
+ }
426
+ registerWS();
427
+ function waitForConnection() {
428
+ return openPromise;
429
+ }
430
+ return ctx;
431
+ }
432
+ globalThis.process = { env: {}, argv: [], stdout: { write: () => {
433
+ } } };
434
+ globalThis.global = globalThis;
435
+ const PORT = location.port;
436
+ const HOST = [location.hostname, PORT].filter(Boolean).join(":");
437
+ const ENTRY_URL = `${location.protocol === "https:" ? "wss:" : "ws:"}//${HOST}/__vitest_api__`;
438
+ let config;
439
+ const browserHashMap = /* @__PURE__ */ new Map();
440
+ const client = createClient(ENTRY_URL, {
441
+ handlers: {
442
+ async onPathsCollected(paths) {
443
+ if (!paths)
444
+ return;
445
+ const now = `${new Date().getTime()}`;
446
+ paths.forEach((i) => {
447
+ browserHashMap.set(i, now);
448
+ });
449
+ await runTests(paths, config, client);
450
+ }
451
+ }
452
+ });
453
+ const ws = client.ws;
454
+ async function loadConfig() {
455
+ let retries = 5;
456
+ do {
457
+ try {
458
+ await new Promise((resolve) => setTimeout(resolve, 150));
459
+ config = await client.rpc.getConfig();
460
+ return;
461
+ } catch (_) {
462
+ }
463
+ } while (--retries > 0);
464
+ throw new Error("cannot load configuration after 5 retries");
465
+ }
466
+ ws.addEventListener("open", async () => {
467
+ await loadConfig();
468
+ globalThis.__vitest_worker__ = {
469
+ config,
470
+ browserHashMap,
471
+ rpc: client.rpc
472
+ };
473
+ globalThis.__vitest_mocker__ = {};
474
+ const paths = await client.rpc.getPaths();
475
+ const now = `${new Date().getTime()}`;
476
+ paths.forEach((i) => browserHashMap.set(i, now));
477
+ const iFrame = document.getElementById("vitest-ui");
478
+ iFrame.setAttribute("src", "/__vitest__/");
479
+ await runTests(paths, config, client);
480
+ });
481
+ async function runTests(paths, config2, client2) {
482
+ const name = "/__vitest_index__";
483
+ const { startTests, setupGlobalEnv } = await __vitePreload(() => import(name), true ? [] : void 0);
484
+ await setupGlobalEnv(config2);
485
+ await startTests(paths, config2);
486
+ await client2.rpc.onFinished();
487
+ await client2.rpc.onWatcherStart();
488
+ }
@@ -0,0 +1,5 @@
1
+ <svg width="165" height="165" viewBox="0 0 165 165" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M120.831 57.2543L84.693 109.505C84.3099 110.059 83.7558 110.474 83.1148 110.687C82.4738 110.9 81.7809 110.898 81.1412 110.684C80.5015 110.469 79.95 110.052 79.5702 109.497C79.1905 108.941 79.0032 108.277 79.037 107.606L80.4833 78.7582L57.1343 73.8064C56.6353 73.7007 56.1704 73.474 55.7807 73.1465C55.391 72.8191 55.0885 72.4009 54.9001 71.929C54.7117 71.4571 54.6432 70.9461 54.7006 70.4412C54.758 69.9364 54.9395 69.4532 55.2291 69.0345L91.3675 16.7837C91.7507 16.2294 92.3048 15.8145 92.9458 15.6018C93.5869 15.3891 94.2798 15.3902 94.9196 15.6051C95.5593 15.8199 96.1109 16.2367 96.4906 16.7923C96.8703 17.3478 97.0575 18.0117 97.0236 18.6833L95.5773 47.5314L118.926 52.4828C119.425 52.5885 119.89 52.8152 120.28 53.1426C120.67 53.4701 120.972 53.8883 121.16 54.3602C121.349 54.8321 121.417 55.3431 121.36 55.8479C121.303 56.3528 121.121 56.836 120.831 57.2547L120.831 57.2543Z" fill="#FCC72B"/>
3
+ <path d="M82.9866 153.343C82.0254 153.344 81.0735 153.156 80.1855 152.788C79.2975 152.42 78.4909 151.88 77.8122 151.2L43.6658 117.056C42.2998 115.683 41.5341 113.824 41.5366 111.887C41.5392 109.95 42.3098 108.092 43.6796 106.723C45.0493 105.353 46.9064 104.582 48.8435 104.579C50.7807 104.577 52.6399 105.342 54.0134 106.708L82.9866 135.678L146.105 72.5626C147.481 71.2088 149.336 70.4536 151.266 70.4615C153.197 70.4693 155.046 71.2396 156.41 72.6045C157.775 73.9695 158.546 75.8184 158.554 77.7487C158.561 79.679 157.806 81.5342 156.452 82.9101L88.1597 151.2C87.4811 151.881 86.6747 152.42 85.7869 152.788C84.8992 153.156 83.9475 153.344 82.9866 153.343Z" fill="#729B1B"/>
4
+ <path d="M82.9572 153.343C83.9184 153.344 84.8703 153.156 85.7583 152.788C86.6463 152.42 87.4528 151.88 88.1316 151.2L122.278 117.056C123.644 115.683 124.41 113.824 124.407 111.887C124.405 109.95 123.634 108.092 122.264 106.723C120.894 105.353 119.037 104.582 117.1 104.579C115.163 104.577 113.304 105.342 111.93 106.708L82.9572 135.678L19.8389 72.5626C18.4629 71.2088 16.6077 70.4536 14.6775 70.4615C12.7472 70.4693 10.8982 71.2396 9.53331 72.6045C8.16839 73.9695 7.39811 75.8184 7.39025 77.7487C7.38239 79.679 8.13759 81.5342 9.49135 82.9101L77.784 151.2C78.4627 151.881 79.2691 152.42 80.1568 152.788C81.0446 153.156 81.9963 153.344 82.9572 153.343Z" fill="#729B1B" fill-opacity="0.5"/>
5
+ </svg>
@@ -0,0 +1,30 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vitest Browser Runner</title>
8
+ <style>
9
+ html {
10
+ overflow: hidden;
11
+ padding: 0;
12
+ margin: 0;
13
+ }
14
+ body {
15
+ padding: 0;
16
+ margin: 0;
17
+ }
18
+ #vitest-ui {
19
+ width: 100vw;
20
+ height: 100vh;
21
+ border: none;
22
+ }
23
+ </style>
24
+ <script type="module" crossorigin src="/assets/index.ba53c6ec.js"></script>
25
+ </head>
26
+ <body>
27
+ <iframe id="vitest-ui" src=""></iframe>
28
+
29
+ </body>
30
+ </html>
@@ -0,0 +1,5 @@
1
+ import { Plugin } from 'vite';
2
+
3
+ declare const _default: (base?: string) => Plugin[];
4
+
5
+ export { _default as default };
package/dist/index.js ADDED
@@ -0,0 +1,70 @@
1
+ import { fileURLToPath } from 'url';
2
+ import { resolve } from 'path';
3
+ import { builtinModules } from 'module';
4
+ import { polyfillPath } from 'modern-node-polyfills';
5
+ import sirv from 'sirv';
6
+ import { resolvePath } from 'mlly';
7
+
8
+ const stubs = [
9
+ "fs",
10
+ "local-pkg",
11
+ "module",
12
+ "noop",
13
+ "perf_hooks",
14
+ "console"
15
+ ];
16
+ const polyfills = [
17
+ "util",
18
+ "tty",
19
+ "process",
20
+ "path",
21
+ "buffer"
22
+ ];
23
+ var index = (base = "/") => {
24
+ const pkgRoot = resolve(fileURLToPath(import.meta.url), "../..");
25
+ const distRoot = resolve(pkgRoot, "dist");
26
+ return [
27
+ {
28
+ enforce: "pre",
29
+ name: "vitest:browser",
30
+ async resolveId(id, _, ctx) {
31
+ if (ctx.ssr)
32
+ return;
33
+ if (id === "/__vitest_index__") {
34
+ const result = await resolvePath("vitest/browser");
35
+ return result;
36
+ }
37
+ if (stubs.includes(id))
38
+ return resolve(pkgRoot, "stubs", id);
39
+ if (polyfills.includes(id))
40
+ return polyfillPath(normalizeId(id));
41
+ return null;
42
+ },
43
+ async configureServer(server) {
44
+ server.middlewares.use(
45
+ base,
46
+ sirv(resolve(distRoot, "client"), {
47
+ single: false,
48
+ dev: true
49
+ })
50
+ );
51
+ }
52
+ },
53
+ {
54
+ name: "modern-node-polyfills",
55
+ async resolveId(id, _, ctx) {
56
+ if (ctx.ssr || !builtinModules.includes(id))
57
+ return;
58
+ id = normalizeId(id);
59
+ return { id: await polyfillPath(id), moduleSideEffects: false };
60
+ }
61
+ }
62
+ ];
63
+ };
64
+ function normalizeId(id, base) {
65
+ if (base && id.startsWith(base))
66
+ id = `/${id.slice(base.length)}`;
67
+ return id.replace(/^\/@id\/__x00__/, "\0").replace(/^\/@id\//, "").replace(/^__vite-browser-external:/, "").replace(/^node:/, "").replace(/[?&]v=\w+/, "?").replace(/\?$/, "");
68
+ }
69
+
70
+ export { index as default };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/browser",
3
3
  "type": "module",
4
- "version": "0.24.2",
4
+ "version": "0.24.3",
5
5
  "description": "Browser running for Vitest",
6
6
  "repository": {
7
7
  "type": "git",
@@ -32,10 +32,10 @@
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/ws": "^8.5.3",
35
- "@vitest/ws-client": "0.24.2",
35
+ "@vitest/ws-client": "0.24.3",
36
36
  "picocolors": "^1.0.0",
37
37
  "rollup": "^2.79.1",
38
- "vitest": "0.24.2"
38
+ "vitest": "0.24.3"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "rimraf dist && pnpm build:node && pnpm build:client && pnpm copy",