@multiplatform.one/config 7.4.0 → 7.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/vitest.js +0 -2
- package/package.json +2 -2
- package/src/vitest.spec.ts +76 -0
- package/src/vitest.ts +7 -12
- package/types/vitest.d.ts.map +1 -1
package/lib/vitest.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/config",
|
|
3
|
-
"version": "7.4.
|
|
3
|
+
"version": "7.4.1",
|
|
4
4
|
"description": "Shared build and test configuration presets for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"config",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"vite-plugin-external": "^6.2.2",
|
|
88
88
|
"vite-plugin-i18next-loader": "^3.1.3",
|
|
89
89
|
"vitest": "^4.1.5",
|
|
90
|
-
"@multiplatform.one/utils": "7.4.
|
|
90
|
+
"@multiplatform.one/utils": "7.4.1"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"tsdown": "^0.21.10",
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createVitestConfig — resolve.extensions must never prefer a .test.* sibling.
|
|
3
|
+
*
|
|
4
|
+
* Regression guard for MPO-11: the defaults listed ".test.ts" / ".test.tsx"
|
|
5
|
+
* first, so vite resolved an extensionless `import "./foo"` to foo.test.ts
|
|
6
|
+
* whenever both files existed. That pulled the test file's own imports into the
|
|
7
|
+
* module graph and killed the lookout unit job with "Cannot bundle Node.js
|
|
8
|
+
* built-in node:test imported from src/format.test.ts".
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import { afterAll, describe, expect, it } from "vitest";
|
|
14
|
+
import { createServer, type ViteDevServer } from "vite";
|
|
15
|
+
import { createVitestConfig } from "./vitest.js";
|
|
16
|
+
|
|
17
|
+
const fixtureDir = path.resolve(
|
|
18
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
19
|
+
"../tests/fixtures/extensionless-resolve",
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const servers: ViteDevServer[] = [];
|
|
23
|
+
|
|
24
|
+
afterAll(async () => {
|
|
25
|
+
await Promise.all(servers.map((server) => server.close()));
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a specifier through a real vite pipeline built from the produced
|
|
30
|
+
* config, so the assertion exercises vite's own extension probing rather than
|
|
31
|
+
* re-implementing it.
|
|
32
|
+
*/
|
|
33
|
+
async function resolveThroughVite(specifier: string, importer: string) {
|
|
34
|
+
const config = createVitestConfig({ tamaguiConfig: false, dedupeReact: false });
|
|
35
|
+
const server = await createServer({
|
|
36
|
+
configFile: false,
|
|
37
|
+
logLevel: "silent",
|
|
38
|
+
root: fixtureDir,
|
|
39
|
+
server: { middlewareMode: true },
|
|
40
|
+
resolve: config.resolve,
|
|
41
|
+
});
|
|
42
|
+
servers.push(server);
|
|
43
|
+
const environment = server.environments?.client ?? server.environments?.ssr;
|
|
44
|
+
const container = environment ? environment.pluginContainer : (server as any).pluginContainer;
|
|
45
|
+
const resolved = await container.resolveId(specifier, importer);
|
|
46
|
+
return resolved?.id ?? null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
describe("resolve.extensions", () => {
|
|
50
|
+
it("does not list any .test.* extension", () => {
|
|
51
|
+
const extensions = createVitestConfig().resolve?.extensions ?? [];
|
|
52
|
+
expect(extensions.filter((extension) => extension.startsWith(".test."))).toEqual([]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("still resolves platform-specific and plain source extensions, web first", () => {
|
|
56
|
+
const extensions = createVitestConfig().resolve?.extensions ?? [];
|
|
57
|
+
expect(extensions).toEqual([
|
|
58
|
+
".web.ts",
|
|
59
|
+
".web.tsx",
|
|
60
|
+
".web.js",
|
|
61
|
+
".web.jsx",
|
|
62
|
+
".ts",
|
|
63
|
+
".tsx",
|
|
64
|
+
".js",
|
|
65
|
+
".jsx",
|
|
66
|
+
]);
|
|
67
|
+
expect(extensions.indexOf(".web.ts")).toBeLessThan(extensions.indexOf(".ts"));
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("resolves an extensionless ./foo to foo.ts even when foo.test.ts sits beside it", async () => {
|
|
71
|
+
const id = await resolveThroughVite("./foo", path.join(fixtureDir, "entry.ts"));
|
|
72
|
+
expect(id).toBeTruthy();
|
|
73
|
+
expect(path.basename(id!)).toBe("foo.ts");
|
|
74
|
+
expect(id).not.toContain(".test.");
|
|
75
|
+
});
|
|
76
|
+
});
|
package/src/vitest.ts
CHANGED
|
@@ -217,18 +217,13 @@ export function createVitestConfig(options: CreateVitestConfigOptions = {}): Use
|
|
|
217
217
|
plugins,
|
|
218
218
|
test: testConfig,
|
|
219
219
|
resolve: {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
".ts",
|
|
228
|
-
".tsx",
|
|
229
|
-
".js",
|
|
230
|
-
".jsx",
|
|
231
|
-
],
|
|
220
|
+
// Never list .test.* here. Vite tries these suffixes in order for an
|
|
221
|
+
// extensionless specifier, so a leading ".test.ts" makes `import "./foo"`
|
|
222
|
+
// resolve to foo.test.ts instead of foo.ts whenever both exist. That drags
|
|
223
|
+
// the test file (and whatever it imports, e.g. node:test) into the module
|
|
224
|
+
// graph and vitest dies with "Cannot bundle Node.js built-in node:test".
|
|
225
|
+
// Test files are collected by test.include globs, not by resolution.
|
|
226
|
+
extensions: [".web.ts", ".web.tsx", ".web.js", ".web.jsx", ".ts", ".tsx", ".js", ".jsx"],
|
|
232
227
|
mainFields: ["browser", "module", "main"],
|
|
233
228
|
alias: {
|
|
234
229
|
...resolveAliases,
|
package/types/vitest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IAE7C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAEF;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IAE7C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAEF;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,UAAU,CA8ItF"}
|