vitest 0.34.1 → 0.34.2
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/LICENSE.md +28 -0
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +1 -1
- package/dist/child.js +11 -6
- package/dist/{chunk-api-setup.644415c3.js → chunk-api-setup.cc5282f7.js} +25 -15
- package/dist/{chunk-install-pkg.dd40cbef.js → chunk-install-pkg.7e19b3a0.js} +6 -3
- package/dist/{chunk-integrations-globals.877c84db.js → chunk-integrations-globals.522ae1ae.js} +4 -3
- package/dist/cli.js +6 -3
- package/dist/config.d.ts +1 -1
- package/dist/coverage.d.ts +1 -1
- package/dist/entry-vm.js +4 -3
- package/dist/entry.js +4 -3
- package/dist/environments.d.ts +1 -1
- package/dist/environments.js +11 -2
- package/dist/execute.d.ts +139 -0
- package/dist/execute.js +1 -1
- package/dist/index.d.ts +10 -9
- package/dist/index.js +5 -4
- package/dist/loader.js +9 -528
- package/dist/node.d.ts +2 -2
- package/dist/node.js +6 -3
- package/dist/runners.d.ts +1 -1
- package/dist/runners.js +3 -2
- package/dist/{types-3c7dbfa5.d.ts → types-63abf2e0.d.ts} +63 -2
- package/dist/{vendor-environments.443ecd82.js → vendor-environments.37f266a9.js} +13 -6
- package/dist/{vendor-execute.9ab1c1a7.js → vendor-execute.4fc8203a.js} +409 -206
- package/dist/vendor-index.0b5b3600.js +2062 -0
- package/dist/{vendor-index.eff408fd.js → vendor-index.b5efbd68.js} +1 -1
- package/dist/{vendor-node.caa511fc.js → vendor-node.7b1bd3c5.js} +194 -121
- package/dist/vendor-tasks.f9d75aed.js +14 -0
- package/dist/{vendor-vi.271667ef.js → vendor-vi.f8055ff2.js} +2 -1
- package/dist/vm.js +14 -6
- package/dist/worker.js +12 -6
- package/package.json +7 -7
- package/dist/vendor-source-map.e6c1997b.js +0 -747
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterAll, afterEach, beforeAll, beforeEach, describe, it, onTestFailed, suite, test } from '@vitest/runner';
|
|
2
|
-
import { e as bench, c as createExpect, d as globalExpect, v as vi, f as vitest } from './vendor-vi.
|
|
2
|
+
import { e as bench, c as createExpect, d as globalExpect, v as vi, f as vitest } from './vendor-vi.f8055ff2.js';
|
|
3
3
|
import { i as isFirstRun, r as runOnce } from './vendor-run-once.3e5ef7d7.js';
|
|
4
4
|
import * as chai from 'chai';
|
|
5
5
|
import { assert, should } from 'chai';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolve, relative, isAbsolute, dirname, basename, normalize, join, extname, toNamespacedPath } from 'pathe';
|
|
2
|
-
import { loadConfigFromFile,
|
|
2
|
+
import { loadConfigFromFile, version as version$2, searchForWorkspaceRoot, createServer, mergeConfig } from 'vite';
|
|
3
3
|
import path$a from 'node:path';
|
|
4
4
|
import url, { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
5
|
import process$1 from 'node:process';
|
|
@@ -31,8 +31,9 @@ import { createDefer, getSafeTimers, notNullish, shuffle, inspect, positionToOff
|
|
|
31
31
|
import { isPackageExists, resolveModule } from 'local-pkg';
|
|
32
32
|
import { isCI } from 'std-env';
|
|
33
33
|
import { performance } from 'node:perf_hooks';
|
|
34
|
-
import { g as getFullName, h as hasFailedSnapshot
|
|
34
|
+
import { g as getFullName, h as hasFailedSnapshot } from './vendor-tasks.f9d75aed.js';
|
|
35
35
|
import { getTests, hasFailed, getSuites, generateHash, calculateSuiteHash, someTasksAreOnly, interpretTaskModes, getTasks } from '@vitest/runner/utils';
|
|
36
|
+
import { parseErrorStacktrace, TraceMap, generatedPositionFor } from '@vitest/utils/source-map';
|
|
36
37
|
import { createRequire, builtinModules } from 'node:module';
|
|
37
38
|
import { createHash } from 'node:crypto';
|
|
38
39
|
import { o as onExit, e as execa } from './vendor-index.1f85e5f1.js';
|
|
@@ -42,7 +43,7 @@ import { parse as parse$4 } from 'acorn';
|
|
|
42
43
|
import { ancestor, simple, findNodeAround } from 'acorn-walk';
|
|
43
44
|
import MagicString from 'magic-string';
|
|
44
45
|
import { stripLiteral } from 'strip-literal';
|
|
45
|
-
import { g as getEnvPackageName } from './vendor-environments.
|
|
46
|
+
import { g as getEnvPackageName } from './vendor-environments.37f266a9.js';
|
|
46
47
|
import readline from 'node:readline';
|
|
47
48
|
import require$$0$2 from 'readline';
|
|
48
49
|
|
|
@@ -61,7 +62,7 @@ function _mergeNamespaces(n, m) {
|
|
|
61
62
|
return Object.freeze(n);
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
var version$1 = "0.34.
|
|
65
|
+
var version$1 = "0.34.2";
|
|
65
66
|
|
|
66
67
|
const __dirname$1 = url.fileURLToPath(new URL(".", import.meta.url));
|
|
67
68
|
async function ensurePackageInstalled(dependency, root) {
|
|
@@ -80,7 +81,7 @@ async function ensurePackageInstalled(dependency, root) {
|
|
|
80
81
|
message: c.reset(`Do you want to install ${c.green(dependency)}?`)
|
|
81
82
|
});
|
|
82
83
|
if (install) {
|
|
83
|
-
await (await import('./chunk-install-pkg.
|
|
84
|
+
await (await import('./chunk-install-pkg.7e19b3a0.js')).installPackage(dependency, { dev: true });
|
|
84
85
|
process.stderr.write(c.yellow(`
|
|
85
86
|
Package ${dependency} installed, re-run the command to start.
|
|
86
87
|
`));
|
|
@@ -7085,13 +7086,14 @@ async function groupFilesByEnv(files) {
|
|
|
7085
7086
|
env || (env = project.config.environment || "node");
|
|
7086
7087
|
const transformMode = getTransformMode(project.config.testTransformMode, file);
|
|
7087
7088
|
const envOptions = JSON.parse(((_b = code.match(/@(?:vitest|jest)-environment-options\s+?(.+)/)) == null ? void 0 : _b[1]) || "null");
|
|
7089
|
+
const envKey = env === "happy-dom" ? "happyDOM" : env;
|
|
7088
7090
|
return {
|
|
7089
7091
|
file,
|
|
7090
7092
|
project,
|
|
7091
7093
|
environment: {
|
|
7092
7094
|
name: env,
|
|
7093
7095
|
transformMode,
|
|
7094
|
-
options: envOptions ? { [
|
|
7096
|
+
options: envOptions ? { [envKey]: envOptions } : null
|
|
7095
7097
|
}
|
|
7096
7098
|
};
|
|
7097
7099
|
}));
|
|
@@ -7126,6 +7128,9 @@ function createMethodsRPC(project) {
|
|
|
7126
7128
|
resolveId(id, importer, transformMode) {
|
|
7127
7129
|
return project.vitenode.resolveId(id, importer, transformMode);
|
|
7128
7130
|
},
|
|
7131
|
+
transform(id, environment) {
|
|
7132
|
+
return project.vitenode.transformModule(id, environment);
|
|
7133
|
+
},
|
|
7129
7134
|
onPathsCollected(paths) {
|
|
7130
7135
|
ctx.state.collectPaths(paths);
|
|
7131
7136
|
project.report("onPathsCollected", paths);
|
|
@@ -7479,7 +7484,7 @@ function createBrowserPool(ctx) {
|
|
|
7479
7484
|
}
|
|
7480
7485
|
|
|
7481
7486
|
const workerPath = pathToFileURL(resolve(distDir, "./vm.js")).href;
|
|
7482
|
-
const
|
|
7487
|
+
const suppressWarningsPath = resolve(rootDir, "./suppress-warnings.cjs");
|
|
7483
7488
|
function createWorkerChannel(project) {
|
|
7484
7489
|
const channel = new MessageChannel();
|
|
7485
7490
|
const port = channel.port2;
|
|
@@ -7515,7 +7520,7 @@ function createVmThreadsPool(ctx, { execArgv, env }) {
|
|
|
7515
7520
|
"--experimental-import-meta-resolve",
|
|
7516
7521
|
"--experimental-vm-modules",
|
|
7517
7522
|
"--require",
|
|
7518
|
-
|
|
7523
|
+
suppressWarningsPath,
|
|
7519
7524
|
...execArgv
|
|
7520
7525
|
],
|
|
7521
7526
|
terminateTimeout: ctx.config.teardownTimeout,
|
|
@@ -10301,6 +10306,16 @@ class StateManager {
|
|
|
10301
10306
|
err.type = type;
|
|
10302
10307
|
else
|
|
10303
10308
|
err = { type, message: err };
|
|
10309
|
+
const _err = err;
|
|
10310
|
+
if (_err && typeof _err === "object" && _err.code === "VITEST_PENDING") {
|
|
10311
|
+
const task = this.idMap.get(_err.taskId);
|
|
10312
|
+
if (task) {
|
|
10313
|
+
task.mode = "skip";
|
|
10314
|
+
task.result ?? (task.result = { state: "skip" });
|
|
10315
|
+
task.result.state = "skip";
|
|
10316
|
+
}
|
|
10317
|
+
return;
|
|
10318
|
+
}
|
|
10304
10319
|
this.errorsSet.add(err);
|
|
10305
10320
|
}
|
|
10306
10321
|
clearErrors() {
|
|
@@ -10376,6 +10391,8 @@ class StateManager {
|
|
|
10376
10391
|
if (task) {
|
|
10377
10392
|
task.result = result;
|
|
10378
10393
|
task.meta = meta;
|
|
10394
|
+
if ((result == null ? void 0 : result.state) === "skip")
|
|
10395
|
+
task.mode = "skip";
|
|
10379
10396
|
}
|
|
10380
10397
|
}
|
|
10381
10398
|
}
|
|
@@ -10774,7 +10791,7 @@ function resolveApiServerConfig(options) {
|
|
|
10774
10791
|
return api;
|
|
10775
10792
|
}
|
|
10776
10793
|
function resolveConfig(mode, options, viteConfig) {
|
|
10777
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
10794
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
10778
10795
|
if (options.dom) {
|
|
10779
10796
|
if (((_a = viteConfig.test) == null ? void 0 : _a.environment) != null && viteConfig.test.environment !== "happy-dom") {
|
|
10780
10797
|
console.warn(
|
|
@@ -10829,8 +10846,12 @@ function resolveConfig(mode, options, viteConfig) {
|
|
|
10829
10846
|
});
|
|
10830
10847
|
if (!resolved.deps.moduleDirectories.includes("/node_modules/"))
|
|
10831
10848
|
resolved.deps.moduleDirectories.push("/node_modules/");
|
|
10849
|
+
(_c = resolved.deps).web ?? (_c.web = {});
|
|
10850
|
+
(_d = resolved.deps.web).transformAssets ?? (_d.transformAssets = true);
|
|
10851
|
+
(_e = resolved.deps.web).transformCss ?? (_e.transformCss = true);
|
|
10852
|
+
(_f = resolved.deps.web).transformGlobPattern ?? (_f.transformGlobPattern = []);
|
|
10832
10853
|
resolved.server ?? (resolved.server = {});
|
|
10833
|
-
(
|
|
10854
|
+
(_g = resolved.server).deps ?? (_g.deps = {});
|
|
10834
10855
|
const deprecatedDepsOptions = ["inline", "external", "fallbackCJS"];
|
|
10835
10856
|
deprecatedDepsOptions.forEach((option) => {
|
|
10836
10857
|
if (resolved.deps[option] === void 0)
|
|
@@ -10853,11 +10874,11 @@ function resolveConfig(mode, options, viteConfig) {
|
|
|
10853
10874
|
if ((ssrOptions == null ? void 0 : ssrOptions.noExternal) === true && resolved.server.deps.inline == null) {
|
|
10854
10875
|
resolved.server.deps.inline = true;
|
|
10855
10876
|
} else {
|
|
10856
|
-
(
|
|
10877
|
+
(_h = resolved.server.deps).inline ?? (_h.inline = []);
|
|
10857
10878
|
resolved.server.deps.inline.push(...extraInlineDeps);
|
|
10858
10879
|
}
|
|
10859
10880
|
}
|
|
10860
|
-
(
|
|
10881
|
+
(_i = resolved.server.deps).moduleDirectories ?? (_i.moduleDirectories = []);
|
|
10861
10882
|
resolved.server.deps.moduleDirectories.push(...resolved.deps.moduleDirectories);
|
|
10862
10883
|
if (resolved.runner) {
|
|
10863
10884
|
resolved.runner = resolveModule(resolved.runner, { paths: [resolved.root] }) ?? resolve(resolved.root, resolved.runner);
|
|
@@ -10879,10 +10900,16 @@ function resolveConfig(mode, options, viteConfig) {
|
|
|
10879
10900
|
// resolved inside the worker
|
|
10880
10901
|
snapshotEnvironment: null
|
|
10881
10902
|
};
|
|
10882
|
-
|
|
10883
|
-
|
|
10884
|
-
|
|
10885
|
-
|
|
10903
|
+
const memory = totalmem();
|
|
10904
|
+
const limit = getWorkerMemoryLimit(resolved);
|
|
10905
|
+
if (typeof memory === "number") {
|
|
10906
|
+
resolved.experimentalVmWorkerMemoryLimit = stringToBytes(
|
|
10907
|
+
limit,
|
|
10908
|
+
resolved.watch ? memory / 2 : memory
|
|
10909
|
+
);
|
|
10910
|
+
} else if (limit > 1) {
|
|
10911
|
+
resolved.experimentalVmWorkerMemoryLimit = stringToBytes(limit);
|
|
10912
|
+
} else ;
|
|
10886
10913
|
if (options.resolveSnapshotPath)
|
|
10887
10914
|
delete resolved.resolveSnapshotPath;
|
|
10888
10915
|
if (process.env.VITEST_MAX_THREADS)
|
|
@@ -10938,19 +10965,19 @@ function resolveConfig(mode, options, viteConfig) {
|
|
|
10938
10965
|
resolved.passWithNoTests ?? (resolved.passWithNoTests = true);
|
|
10939
10966
|
resolved.css ?? (resolved.css = {});
|
|
10940
10967
|
if (typeof resolved.css === "object") {
|
|
10941
|
-
(
|
|
10942
|
-
(
|
|
10968
|
+
(_j = resolved.css).modules ?? (_j.modules = {});
|
|
10969
|
+
(_k = resolved.css.modules).classNameStrategy ?? (_k.classNameStrategy = "stable");
|
|
10943
10970
|
}
|
|
10944
10971
|
resolved.cache ?? (resolved.cache = { dir: "" });
|
|
10945
10972
|
if (resolved.cache)
|
|
10946
10973
|
resolved.cache.dir = VitestCache.resolveCacheDir(resolved.root, resolved.cache.dir);
|
|
10947
10974
|
resolved.sequence ?? (resolved.sequence = {});
|
|
10948
|
-
if (!((
|
|
10975
|
+
if (!((_l = resolved.sequence) == null ? void 0 : _l.sequencer)) {
|
|
10949
10976
|
resolved.sequence.sequencer = resolved.sequence.shuffle ? RandomSequencer : BaseSequencer;
|
|
10950
10977
|
}
|
|
10951
|
-
(
|
|
10978
|
+
(_m = resolved.sequence).hooks ?? (_m.hooks = "parallel");
|
|
10952
10979
|
if (resolved.sequence.sequencer === RandomSequencer)
|
|
10953
|
-
(
|
|
10980
|
+
(_n = resolved.sequence).seed ?? (_n.seed = Date.now());
|
|
10954
10981
|
resolved.typecheck = {
|
|
10955
10982
|
...configDefaults.typecheck,
|
|
10956
10983
|
...resolved.typecheck
|
|
@@ -10961,9 +10988,9 @@ function resolveConfig(mode, options, viteConfig) {
|
|
|
10961
10988
|
resolved.exclude = resolved.typecheck.exclude;
|
|
10962
10989
|
}
|
|
10963
10990
|
resolved.browser ?? (resolved.browser = {});
|
|
10964
|
-
(
|
|
10965
|
-
(
|
|
10966
|
-
(
|
|
10991
|
+
(_o = resolved.browser).enabled ?? (_o.enabled = false);
|
|
10992
|
+
(_p = resolved.browser).headless ?? (_p.headless = isCI);
|
|
10993
|
+
(_q = resolved.browser).slowHijackESM ?? (_q.slowHijackESM = true);
|
|
10967
10994
|
resolved.browser.api = resolveApiServerConfig(resolved.browser) || {
|
|
10968
10995
|
port: defaultBrowserPort
|
|
10969
10996
|
};
|
|
@@ -11528,7 +11555,7 @@ createLogUpdate(process$1.stdout);
|
|
|
11528
11555
|
|
|
11529
11556
|
createLogUpdate(process$1.stderr);
|
|
11530
11557
|
|
|
11531
|
-
var version = "0.34.
|
|
11558
|
+
var version = "0.34.2";
|
|
11532
11559
|
|
|
11533
11560
|
const A=r=>r!==null&&typeof r=="object",a=(r,t)=>Object.assign(new Error(`[${r}]: ${t}`),{code:r}),_$1="ERR_INVALID_PACKAGE_CONFIG",E="ERR_INVALID_PACKAGE_TARGET",I="ERR_PACKAGE_PATH_NOT_EXPORTED",R$1=/^\d+$/,O=/^(\.{1,2}|node_modules)$/i,w=/\/|\\/;var h=(r=>(r.Export="exports",r.Import="imports",r))(h||{});const f=(r,t,e,o,c)=>{if(t==null)return [];if(typeof t=="string"){const[n,...i]=t.split(w);if(n===".."||i.some(l=>O.test(l)))throw a(E,`Invalid "${r}" target "${t}" defined in the package config`);return [c?t.replace(/\*/g,c):t]}if(Array.isArray(t))return t.flatMap(n=>f(r,n,e,o,c));if(A(t)){for(const n of Object.keys(t)){if(R$1.test(n))throw a(_$1,"Cannot contain numeric property keys");if(n==="default"||o.includes(n))return f(r,t[n],e,o,c)}return []}throw a(E,`Invalid "${r}" target "${t}"`)},s="*",m=(r,t)=>{const e=r.indexOf(s),o=t.indexOf(s);return e===o?t.length>r.length:o>e};function d$1(r,t){if(!t.includes(s)&&r.hasOwnProperty(t))return [t];let e,o;for(const c of Object.keys(r))if(c.includes(s)){const[n,i,l]=c.split(s);if(l===void 0&&t.startsWith(n)&&t.endsWith(i)){const g=t.slice(n.length,-i.length||void 0);g&&(!e||m(e,c))&&(e=c,o=g);}}return [e,o]}const p=r=>Object.keys(r).reduce((t,e)=>{const o=e===""||e[0]!==".";if(t===void 0||t===o)return o;throw a(_$1,'"exports" cannot contain some keys starting with "." and some not')},void 0),u=/^\w+:/,v=(r,t,e)=>{if(!r)throw new Error('"exports" is required');t=t===""?".":`./${t}`,(typeof r=="string"||Array.isArray(r)||A(r)&&p(r))&&(r={".":r});const[o,c]=d$1(r,t),n=f(h.Export,r[o],t,e,c);if(n.length===0)throw a(I,t==="."?'No "exports" main defined':`Package subpath '${t}' is not defined by "exports"`);for(const i of n)if(!i.startsWith("./")&&!u.test(i))throw a(E,`Invalid "exports" target "${i}" defined in the package config`);return n};
|
|
11534
11561
|
|
|
@@ -12126,10 +12153,12 @@ As a temporary workaround you can try to inline the package by updating your con
|
|
|
12126
12153
|
|
|
12127
12154
|
` + c.gray(c.dim("// vitest.config.js")) + "\n" + c.green(`export default {
|
|
12128
12155
|
test: {
|
|
12129
|
-
|
|
12130
|
-
|
|
12131
|
-
|
|
12132
|
-
|
|
12156
|
+
server: {
|
|
12157
|
+
deps: {
|
|
12158
|
+
inline: [
|
|
12159
|
+
${c.yellow(c.bold(`"${name}"`))}
|
|
12160
|
+
]
|
|
12161
|
+
}
|
|
12133
12162
|
}
|
|
12134
12163
|
}
|
|
12135
12164
|
}
|
|
@@ -12181,6 +12210,7 @@ function generateCodeFrame(source, indent = 0, lineNumber, columnNumber, range =
|
|
|
12181
12210
|
const start = positionToOffset(source, lineNumber, columnNumber);
|
|
12182
12211
|
const end = start;
|
|
12183
12212
|
const lines = source.split(lineSplitRE);
|
|
12213
|
+
const nl = /\r\n/.test(source) ? 2 : 1;
|
|
12184
12214
|
let count = 0;
|
|
12185
12215
|
let res = [];
|
|
12186
12216
|
const columns = ((_a = process.stdout) == null ? void 0 : _a.columns) || 80;
|
|
@@ -12188,7 +12218,7 @@ function generateCodeFrame(source, indent = 0, lineNumber, columnNumber, range =
|
|
|
12188
12218
|
return c.gray(`${String(no).padStart(3, " ")}| `);
|
|
12189
12219
|
}
|
|
12190
12220
|
for (let i = 0; i < lines.length; i++) {
|
|
12191
|
-
count += lines[i].length +
|
|
12221
|
+
count += lines[i].length + nl;
|
|
12192
12222
|
if (count >= start) {
|
|
12193
12223
|
for (let j = i - range; j <= i + range || end > count; j++) {
|
|
12194
12224
|
if (j < 0 || j >= lines.length)
|
|
@@ -12198,7 +12228,7 @@ function generateCodeFrame(source, indent = 0, lineNumber, columnNumber, range =
|
|
|
12198
12228
|
return "";
|
|
12199
12229
|
res.push(lineNo(j + 1) + cliTruncate(lines[j].replace(/\t/g, " "), columns - 5 - indent));
|
|
12200
12230
|
if (j === i) {
|
|
12201
|
-
const pad = start - (count - lineLength);
|
|
12231
|
+
const pad = start - (count - lineLength) + (nl - 1);
|
|
12202
12232
|
const length = Math.max(1, end > count ? lineLength - pad : end - start);
|
|
12203
12233
|
res.push(lineNo() + " ".repeat(pad) + c.red("^".repeat(length)));
|
|
12204
12234
|
} else if (j > i) {
|
|
@@ -12493,7 +12523,7 @@ ${err.message}`);
|
|
|
12493
12523
|
|
|
12494
12524
|
function MocksPlugin() {
|
|
12495
12525
|
return {
|
|
12496
|
-
name: "
|
|
12526
|
+
name: "vitest:mocks",
|
|
12497
12527
|
enforce: "post",
|
|
12498
12528
|
transform(code, id) {
|
|
12499
12529
|
return hoistMocks(code, id, this.parse);
|
|
@@ -12501,6 +12531,84 @@ function MocksPlugin() {
|
|
|
12501
12531
|
};
|
|
12502
12532
|
}
|
|
12503
12533
|
|
|
12534
|
+
function resolveOptimizerConfig(_testOptions, viteOptions, testConfig) {
|
|
12535
|
+
var _a;
|
|
12536
|
+
const testOptions = _testOptions || {};
|
|
12537
|
+
const newConfig = {};
|
|
12538
|
+
const [major, minor] = version$2.split(".").map(Number);
|
|
12539
|
+
const allowed = major >= 5 || major === 4 && minor >= 3;
|
|
12540
|
+
if (!allowed && (testOptions == null ? void 0 : testOptions.enabled) === true)
|
|
12541
|
+
console.warn(`Vitest: "deps.optimizer" is only available in Vite >= 4.3.0, current Vite version: ${version$2}`);
|
|
12542
|
+
else
|
|
12543
|
+
testOptions.enabled ?? (testOptions.enabled = true);
|
|
12544
|
+
if (!allowed || (testOptions == null ? void 0 : testOptions.enabled) !== true) {
|
|
12545
|
+
newConfig.cacheDir = void 0;
|
|
12546
|
+
newConfig.optimizeDeps = {
|
|
12547
|
+
// experimental in Vite >2.9.2, entries remains to help with older versions
|
|
12548
|
+
disabled: true,
|
|
12549
|
+
entries: []
|
|
12550
|
+
};
|
|
12551
|
+
} else {
|
|
12552
|
+
const cacheDir = testConfig.cache !== false ? (_a = testConfig.cache) == null ? void 0 : _a.dir : null;
|
|
12553
|
+
newConfig.cacheDir = cacheDir ?? "node_modules/.vitest";
|
|
12554
|
+
newConfig.optimizeDeps = {
|
|
12555
|
+
...viteOptions,
|
|
12556
|
+
...testOptions,
|
|
12557
|
+
noDiscovery: true,
|
|
12558
|
+
disabled: false,
|
|
12559
|
+
entries: [],
|
|
12560
|
+
exclude: ["vitest", ...builtinModules, ...testOptions.exclude || (viteOptions == null ? void 0 : viteOptions.exclude) || []],
|
|
12561
|
+
include: (testOptions.include || (viteOptions == null ? void 0 : viteOptions.include) || []).filter((n) => n !== "vitest")
|
|
12562
|
+
};
|
|
12563
|
+
}
|
|
12564
|
+
return newConfig;
|
|
12565
|
+
}
|
|
12566
|
+
function deleteDefineConfig(viteConfig) {
|
|
12567
|
+
const defines = {};
|
|
12568
|
+
if (viteConfig.define) {
|
|
12569
|
+
delete viteConfig.define["import.meta.vitest"];
|
|
12570
|
+
delete viteConfig.define["process.env"];
|
|
12571
|
+
delete viteConfig.define.process;
|
|
12572
|
+
delete viteConfig.define.global;
|
|
12573
|
+
}
|
|
12574
|
+
for (const key in viteConfig.define) {
|
|
12575
|
+
const val = viteConfig.define[key];
|
|
12576
|
+
let replacement;
|
|
12577
|
+
try {
|
|
12578
|
+
replacement = typeof val === "string" ? JSON.parse(val) : val;
|
|
12579
|
+
} catch {
|
|
12580
|
+
continue;
|
|
12581
|
+
}
|
|
12582
|
+
if (key.startsWith("import.meta.env.")) {
|
|
12583
|
+
const envKey = key.slice("import.meta.env.".length);
|
|
12584
|
+
process.env[envKey] = replacement;
|
|
12585
|
+
delete viteConfig.define[key];
|
|
12586
|
+
} else if (key.startsWith("process.env.")) {
|
|
12587
|
+
const envKey = key.slice("process.env.".length);
|
|
12588
|
+
process.env[envKey] = replacement;
|
|
12589
|
+
delete viteConfig.define[key];
|
|
12590
|
+
} else if (!key.includes(".")) {
|
|
12591
|
+
defines[key] = replacement;
|
|
12592
|
+
delete viteConfig.define[key];
|
|
12593
|
+
}
|
|
12594
|
+
}
|
|
12595
|
+
return defines;
|
|
12596
|
+
}
|
|
12597
|
+
function hijackVitePluginInject(viteConfig) {
|
|
12598
|
+
const processEnvPlugin = viteConfig.plugins.find((p) => p.name === "vite:client-inject");
|
|
12599
|
+
if (processEnvPlugin) {
|
|
12600
|
+
const originalTransform = processEnvPlugin.transform;
|
|
12601
|
+
processEnvPlugin.transform = function transform(code, id, options) {
|
|
12602
|
+
return originalTransform.call(this, code, id, { ...options, ssr: true });
|
|
12603
|
+
};
|
|
12604
|
+
}
|
|
12605
|
+
}
|
|
12606
|
+
function resolveFsAllow(projectRoot, rootConfigFile) {
|
|
12607
|
+
if (!rootConfigFile)
|
|
12608
|
+
return [searchForWorkspaceRoot(projectRoot)];
|
|
12609
|
+
return [dirname(rootConfigFile), searchForWorkspaceRoot(projectRoot)];
|
|
12610
|
+
}
|
|
12611
|
+
|
|
12504
12612
|
async function createBrowserServer(project, options) {
|
|
12505
12613
|
const root = project.config.root;
|
|
12506
12614
|
await ensurePackageInstalled("@vitest/browser", root);
|
|
@@ -12529,7 +12637,13 @@ async function createBrowserServer(project, options) {
|
|
|
12529
12637
|
};
|
|
12530
12638
|
config.server = server2;
|
|
12531
12639
|
(_b = config.server).fs ?? (_b.fs = {});
|
|
12532
|
-
config.server.fs.
|
|
12640
|
+
config.server.fs.allow = config.server.fs.allow || [];
|
|
12641
|
+
config.server.fs.allow.push(
|
|
12642
|
+
...resolveFsAllow(
|
|
12643
|
+
project.ctx.config.root,
|
|
12644
|
+
project.ctx.server.config.configFile
|
|
12645
|
+
)
|
|
12646
|
+
);
|
|
12533
12647
|
return {
|
|
12534
12648
|
resolve: {
|
|
12535
12649
|
alias: (_c = config.test) == null ? void 0 : _c.alias
|
|
@@ -12542,7 +12656,7 @@ async function createBrowserServer(project, options) {
|
|
|
12542
12656
|
});
|
|
12543
12657
|
await server.listen();
|
|
12544
12658
|
await server.watcher.close();
|
|
12545
|
-
(await import('./chunk-api-setup.
|
|
12659
|
+
(await import('./chunk-api-setup.cc5282f7.js')).setup(project, server);
|
|
12546
12660
|
return server;
|
|
12547
12661
|
}
|
|
12548
12662
|
|
|
@@ -12688,12 +12802,16 @@ function generateScopedClassName(strategy, name, filename) {
|
|
|
12688
12802
|
const cssLangs = "\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)";
|
|
12689
12803
|
const cssLangRE = new RegExp(cssLangs);
|
|
12690
12804
|
const cssModuleRE = new RegExp(`\\.module${cssLangs}`);
|
|
12805
|
+
const cssInlineRE = /[?&]inline(&|$)/;
|
|
12691
12806
|
function isCSS(id) {
|
|
12692
12807
|
return cssLangRE.test(id);
|
|
12693
12808
|
}
|
|
12694
12809
|
function isCSSModule(id) {
|
|
12695
12810
|
return cssModuleRE.test(id);
|
|
12696
12811
|
}
|
|
12812
|
+
function isInline(id) {
|
|
12813
|
+
return cssInlineRE.test(id);
|
|
12814
|
+
}
|
|
12697
12815
|
function getCSSModuleProxyReturn(strategy, filename) {
|
|
12698
12816
|
if (strategy === "non-scoped")
|
|
12699
12817
|
return "style";
|
|
@@ -12729,7 +12847,7 @@ function CSSEnablerPlugin(ctx) {
|
|
|
12729
12847
|
var _a;
|
|
12730
12848
|
if (!isCSS(id) || shouldProcessCSS(id))
|
|
12731
12849
|
return;
|
|
12732
|
-
if (isCSSModule(id)) {
|
|
12850
|
+
if (isCSSModule(id) && !isInline(id)) {
|
|
12733
12851
|
const scopeStrategy = typeof ctx.config.css !== "boolean" && ((_a = ctx.config.css.modules) == null ? void 0 : _a.classNameStrategy) || "stable";
|
|
12734
12852
|
const proxyReturn = getCSSModuleProxyReturn(scopeStrategy, relative(ctx.config.root, id));
|
|
12735
12853
|
const code = `export default new Proxy(Object.create(null), {
|
|
@@ -12747,7 +12865,7 @@ function CSSEnablerPlugin(ctx) {
|
|
|
12747
12865
|
|
|
12748
12866
|
function SsrReplacerPlugin() {
|
|
12749
12867
|
return {
|
|
12750
|
-
name: "vitest:
|
|
12868
|
+
name: "vitest:ssr-replacer",
|
|
12751
12869
|
enforce: "pre",
|
|
12752
12870
|
transform(code, id) {
|
|
12753
12871
|
if (!/\bimport\.meta\.env\b/.test(code) && !/\bimport\.meta\.url\b/.test(code))
|
|
@@ -12759,14 +12877,7 @@ function SsrReplacerPlugin() {
|
|
|
12759
12877
|
s || (s = new MagicString(code));
|
|
12760
12878
|
const startIndex = env.index;
|
|
12761
12879
|
const endIndex = startIndex + env[0].length;
|
|
12762
|
-
s.overwrite(startIndex, endIndex, "
|
|
12763
|
-
}
|
|
12764
|
-
const urls = cleanCode.matchAll(/\bimport\.meta\.url\b/g);
|
|
12765
|
-
for (const env of urls) {
|
|
12766
|
-
s || (s = new MagicString(code));
|
|
12767
|
-
const startIndex = env.index;
|
|
12768
|
-
const endIndex = startIndex + env[0].length;
|
|
12769
|
-
s.overwrite(startIndex, endIndex, "__vite_ssr_import_meta__.url");
|
|
12880
|
+
s.overwrite(startIndex, endIndex, "__vite_ssr_import_meta__.env");
|
|
12770
12881
|
}
|
|
12771
12882
|
if (s) {
|
|
12772
12883
|
return {
|
|
@@ -12851,70 +12962,6 @@ ${c.red(divider(c.bold(c.inverse(" Error during global setup "))))}`);
|
|
|
12851
12962
|
};
|
|
12852
12963
|
}
|
|
12853
12964
|
|
|
12854
|
-
function resolveOptimizerConfig(_testOptions, viteOptions, testConfig) {
|
|
12855
|
-
var _a;
|
|
12856
|
-
const testOptions = _testOptions || {};
|
|
12857
|
-
const newConfig = {};
|
|
12858
|
-
const [major, minor] = version$2.split(".").map(Number);
|
|
12859
|
-
const allowed = major >= 5 || major === 4 && minor >= 3;
|
|
12860
|
-
if (!allowed && (testOptions == null ? void 0 : testOptions.enabled) === true)
|
|
12861
|
-
console.warn(`Vitest: "deps.optimizer" is only available in Vite >= 4.3.0, current Vite version: ${version$2}`);
|
|
12862
|
-
else
|
|
12863
|
-
testOptions.enabled ?? (testOptions.enabled = true);
|
|
12864
|
-
if (!allowed || (testOptions == null ? void 0 : testOptions.enabled) !== true) {
|
|
12865
|
-
newConfig.cacheDir = void 0;
|
|
12866
|
-
newConfig.optimizeDeps = {
|
|
12867
|
-
// experimental in Vite >2.9.2, entries remains to help with older versions
|
|
12868
|
-
disabled: true,
|
|
12869
|
-
entries: []
|
|
12870
|
-
};
|
|
12871
|
-
} else {
|
|
12872
|
-
const cacheDir = testConfig.cache !== false ? (_a = testConfig.cache) == null ? void 0 : _a.dir : null;
|
|
12873
|
-
newConfig.cacheDir = cacheDir ?? "node_modules/.vitest";
|
|
12874
|
-
newConfig.optimizeDeps = {
|
|
12875
|
-
...viteOptions,
|
|
12876
|
-
...testOptions,
|
|
12877
|
-
noDiscovery: true,
|
|
12878
|
-
disabled: false,
|
|
12879
|
-
entries: [],
|
|
12880
|
-
exclude: ["vitest", ...builtinModules, ...testOptions.exclude || (viteOptions == null ? void 0 : viteOptions.exclude) || []],
|
|
12881
|
-
include: (testOptions.include || (viteOptions == null ? void 0 : viteOptions.include) || []).filter((n) => n !== "vitest")
|
|
12882
|
-
};
|
|
12883
|
-
}
|
|
12884
|
-
return newConfig;
|
|
12885
|
-
}
|
|
12886
|
-
function deleteDefineConfig(viteConfig) {
|
|
12887
|
-
const defines = {};
|
|
12888
|
-
if (viteConfig.define) {
|
|
12889
|
-
delete viteConfig.define["import.meta.vitest"];
|
|
12890
|
-
delete viteConfig.define["process.env"];
|
|
12891
|
-
delete viteConfig.define.process;
|
|
12892
|
-
delete viteConfig.define.global;
|
|
12893
|
-
}
|
|
12894
|
-
for (const key in viteConfig.define) {
|
|
12895
|
-
const val = viteConfig.define[key];
|
|
12896
|
-
let replacement;
|
|
12897
|
-
try {
|
|
12898
|
-
replacement = typeof val === "string" ? JSON.parse(val) : val;
|
|
12899
|
-
} catch {
|
|
12900
|
-
continue;
|
|
12901
|
-
}
|
|
12902
|
-
if (key.startsWith("import.meta.env.")) {
|
|
12903
|
-
const envKey = key.slice("import.meta.env.".length);
|
|
12904
|
-
process.env[envKey] = replacement;
|
|
12905
|
-
delete viteConfig.define[key];
|
|
12906
|
-
} else if (key.startsWith("process.env.")) {
|
|
12907
|
-
const envKey = key.slice("process.env.".length);
|
|
12908
|
-
process.env[envKey] = replacement;
|
|
12909
|
-
delete viteConfig.define[key];
|
|
12910
|
-
} else if (!key.includes(".")) {
|
|
12911
|
-
defines[key] = replacement;
|
|
12912
|
-
delete viteConfig.define[key];
|
|
12913
|
-
}
|
|
12914
|
-
}
|
|
12915
|
-
return defines;
|
|
12916
|
-
}
|
|
12917
|
-
|
|
12918
12965
|
function VitestResolver(ctx) {
|
|
12919
12966
|
return {
|
|
12920
12967
|
name: "vitest:resolve-root",
|
|
@@ -12978,7 +13025,13 @@ function WorkspaceVitestPlugin(project, options) {
|
|
|
12978
13025
|
},
|
|
12979
13026
|
open: false,
|
|
12980
13027
|
hmr: false,
|
|
12981
|
-
preTransformRequests: false
|
|
13028
|
+
preTransformRequests: false,
|
|
13029
|
+
fs: {
|
|
13030
|
+
allow: resolveFsAllow(
|
|
13031
|
+
project.ctx.config.root,
|
|
13032
|
+
project.ctx.server.config.configFile
|
|
13033
|
+
)
|
|
13034
|
+
}
|
|
12982
13035
|
},
|
|
12983
13036
|
test: {
|
|
12984
13037
|
env,
|
|
@@ -13005,6 +13058,9 @@ function WorkspaceVitestPlugin(project, options) {
|
|
|
13005
13058
|
};
|
|
13006
13059
|
return config;
|
|
13007
13060
|
},
|
|
13061
|
+
configResolved(viteConfig) {
|
|
13062
|
+
hijackVitePluginInject(viteConfig);
|
|
13063
|
+
},
|
|
13008
13064
|
async configureServer(server) {
|
|
13009
13065
|
try {
|
|
13010
13066
|
const options2 = deepMerge(
|
|
@@ -13118,12 +13174,12 @@ class WorkspaceProject {
|
|
|
13118
13174
|
}
|
|
13119
13175
|
async globFiles(include, exclude, cwd) {
|
|
13120
13176
|
const globOptions = {
|
|
13121
|
-
absolute: true,
|
|
13122
13177
|
dot: true,
|
|
13123
13178
|
cwd,
|
|
13124
13179
|
ignore: exclude
|
|
13125
13180
|
};
|
|
13126
|
-
|
|
13181
|
+
const files = await fg(include, globOptions);
|
|
13182
|
+
return files.map((file) => resolve(cwd, file));
|
|
13127
13183
|
}
|
|
13128
13184
|
async isTargetFile(id, source) {
|
|
13129
13185
|
var _a;
|
|
@@ -13252,10 +13308,10 @@ class WorkspaceProject {
|
|
|
13252
13308
|
...this.config.deps,
|
|
13253
13309
|
optimizer: {
|
|
13254
13310
|
web: {
|
|
13255
|
-
enabled: ((_c = (_b = (_a = this.config.deps) == null ? void 0 : _a.optimizer) == null ? void 0 : _b.web) == null ? void 0 : _c.enabled) ??
|
|
13311
|
+
enabled: ((_c = (_b = (_a = this.config.deps) == null ? void 0 : _a.optimizer) == null ? void 0 : _b.web) == null ? void 0 : _c.enabled) ?? true
|
|
13256
13312
|
},
|
|
13257
13313
|
ssr: {
|
|
13258
|
-
enabled: ((_f = (_e = (_d = this.config.deps) == null ? void 0 : _d.optimizer) == null ? void 0 : _e.ssr) == null ? void 0 : _f.enabled) ??
|
|
13314
|
+
enabled: ((_f = (_e = (_d = this.config.deps) == null ? void 0 : _d.optimizer) == null ? void 0 : _e.ssr) == null ? void 0 : _f.enabled) ?? true
|
|
13259
13315
|
}
|
|
13260
13316
|
}
|
|
13261
13317
|
},
|
|
@@ -13333,7 +13389,7 @@ class Vitest {
|
|
|
13333
13389
|
isFirstRun = true;
|
|
13334
13390
|
restartsCount = 0;
|
|
13335
13391
|
runner = void 0;
|
|
13336
|
-
|
|
13392
|
+
coreWorkspaceProject;
|
|
13337
13393
|
projects = [];
|
|
13338
13394
|
projectsTestFiles = /* @__PURE__ */ new Map();
|
|
13339
13395
|
_onRestartListeners = [];
|
|
@@ -13401,11 +13457,11 @@ class Vitest {
|
|
|
13401
13457
|
runner: this.runner,
|
|
13402
13458
|
server: this.vitenode
|
|
13403
13459
|
});
|
|
13404
|
-
this.
|
|
13460
|
+
this.coreWorkspaceProject = coreWorkspace;
|
|
13405
13461
|
return coreWorkspace;
|
|
13406
13462
|
}
|
|
13407
13463
|
getCoreWorkspaceProject() {
|
|
13408
|
-
return this.
|
|
13464
|
+
return this.coreWorkspaceProject || null;
|
|
13409
13465
|
}
|
|
13410
13466
|
getProjectByTaskId(taskId) {
|
|
13411
13467
|
var _a;
|
|
@@ -13439,7 +13495,7 @@ class Vitest {
|
|
|
13439
13495
|
onlyFiles: false,
|
|
13440
13496
|
markDirectories: true,
|
|
13441
13497
|
cwd: this.config.root,
|
|
13442
|
-
ignore: ["**/node_modules/**"]
|
|
13498
|
+
ignore: ["**/node_modules/**", "**/*.timestamp-*"]
|
|
13443
13499
|
};
|
|
13444
13500
|
const workspacesFs = await fg(workspaceGlobMatches, globOptions);
|
|
13445
13501
|
const resolvedWorkspacesPaths = await Promise.all(workspacesFs.filter((file) => {
|
|
@@ -13459,6 +13515,18 @@ class Vitest {
|
|
|
13459
13515
|
}
|
|
13460
13516
|
return filepath;
|
|
13461
13517
|
}));
|
|
13518
|
+
const workspacesByFolder = resolvedWorkspacesPaths.reduce((configByFolder, filepath) => {
|
|
13519
|
+
const dir = dirname(filepath);
|
|
13520
|
+
configByFolder[dir] ?? (configByFolder[dir] = []);
|
|
13521
|
+
configByFolder[dir].push(filepath);
|
|
13522
|
+
return configByFolder;
|
|
13523
|
+
}, {});
|
|
13524
|
+
const filteredWorkspaces = Object.values(workspacesByFolder).map((configFiles2) => {
|
|
13525
|
+
if (configFiles2.length === 1)
|
|
13526
|
+
return configFiles2[0];
|
|
13527
|
+
const vitestConfig = configFiles2.find((configFile) => basename(configFile).startsWith("vitest.config"));
|
|
13528
|
+
return vitestConfig || configFiles2[0];
|
|
13529
|
+
});
|
|
13462
13530
|
const overridesOptions = [
|
|
13463
13531
|
"logHeapUsage",
|
|
13464
13532
|
"allowOnly",
|
|
@@ -13475,7 +13543,7 @@ class Vitest {
|
|
|
13475
13543
|
acc[name] = cliOptions[name];
|
|
13476
13544
|
return acc;
|
|
13477
13545
|
}, {});
|
|
13478
|
-
const projects =
|
|
13546
|
+
const projects = filteredWorkspaces.map(async (workspacePath) => {
|
|
13479
13547
|
if (this.server.config.configFile === workspacePath)
|
|
13480
13548
|
return this.createCoreWorkspace(options);
|
|
13481
13549
|
return initializeProject(workspacePath, this, { workspaceConfigPath, test: cliOverrides });
|
|
@@ -13841,7 +13909,7 @@ class Vitest {
|
|
|
13841
13909
|
async close() {
|
|
13842
13910
|
if (!this.closingPromise) {
|
|
13843
13911
|
const closePromises = this.projects.map((w) => w.close().then(() => w.server = void 0));
|
|
13844
|
-
if (this.
|
|
13912
|
+
if (!this.coreWorkspaceProject || !this.projects.includes(this.coreWorkspaceProject))
|
|
13845
13913
|
closePromises.push(this.server.close().then(() => this.server = void 0));
|
|
13846
13914
|
if (this.pool)
|
|
13847
13915
|
closePromises.push(this.pool.close().then(() => this.pool = void 0));
|
|
@@ -13974,7 +14042,10 @@ async function VitestPlugin(options = {}, ctx = new Vitest("test")) {
|
|
|
13974
14042
|
},
|
|
13975
14043
|
open,
|
|
13976
14044
|
hmr: false,
|
|
13977
|
-
preTransformRequests: false
|
|
14045
|
+
preTransformRequests: false,
|
|
14046
|
+
fs: {
|
|
14047
|
+
allow: resolveFsAllow(getRoot(), testConfig.config)
|
|
14048
|
+
}
|
|
13978
14049
|
}
|
|
13979
14050
|
};
|
|
13980
14051
|
if (process.platform === "darwin" && process.env.VITE_TEST_WATCHER_DEBUG) {
|
|
@@ -14028,6 +14099,7 @@ async function VitestPlugin(options = {}, ctx = new Vitest("test")) {
|
|
|
14028
14099
|
ignored: ["**/*"]
|
|
14029
14100
|
};
|
|
14030
14101
|
}
|
|
14102
|
+
hijackVitePluginInject(viteConfig);
|
|
14031
14103
|
},
|
|
14032
14104
|
async configureServer(server) {
|
|
14033
14105
|
if (options.watch && process.env.VITE_TEST_WATCHER_DEBUG) {
|
|
@@ -14038,7 +14110,7 @@ async function VitestPlugin(options = {}, ctx = new Vitest("test")) {
|
|
|
14038
14110
|
try {
|
|
14039
14111
|
await ctx.setServer(options, server, userConfig);
|
|
14040
14112
|
if (options.api && options.watch)
|
|
14041
|
-
(await import('./chunk-api-setup.
|
|
14113
|
+
(await import('./chunk-api-setup.cc5282f7.js')).setup(ctx);
|
|
14042
14114
|
} catch (err) {
|
|
14043
14115
|
await ctx.logger.printError(err, { fullStack: true });
|
|
14044
14116
|
process.exit(1);
|
|
@@ -14062,6 +14134,7 @@ async function createVitest(mode, options, viteOverrides = {}) {
|
|
|
14062
14134
|
const ctx = new Vitest(mode);
|
|
14063
14135
|
const root = resolve(options.root || process.cwd());
|
|
14064
14136
|
const configPath = options.config === false ? false : options.config ? resolve(root, options.config) : await findUp(configFiles, { cwd: root });
|
|
14137
|
+
options.config = configPath;
|
|
14065
14138
|
const config = {
|
|
14066
14139
|
logLevel: "error",
|
|
14067
14140
|
configFile: configPath,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getNames, getTests } from '@vitest/runner/utils';
|
|
2
|
+
import '@vitest/utils';
|
|
3
|
+
|
|
4
|
+
function hasFailedSnapshot(suite) {
|
|
5
|
+
return getTests(suite).some((s) => {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
return (_b = (_a = s.result) == null ? void 0 : _a.errors) == null ? void 0 : _b.some((e) => typeof (e == null ? void 0 : e.message) === "string" && e.message.match(/Snapshot .* mismatched/));
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function getFullName(task, separator = " > ") {
|
|
11
|
+
return getNames(task).join(separator);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { getFullName as g, hasFailedSnapshot as h };
|