1import { cloudflareTest } from "@cloudflare/vitest-plugin";
2import path from "node:path";
3import { loadEnv } from "vite";
4import { defineConfig } from "vitest/config";
5
6const sourceRoot = (...parts: Array<string>) =>
7 path.resolve(import.meta.dirname, "src", ...parts);
8
9const coreRoot = sourceRoot("core");
10const rolldownRoot = sourceRoot("rolldown");
11const viteRoot = sourceRoot("vite");
12const workersSharedRoot = sourceRoot("internal/workers-shared");
13const workflowsSharedRoot = sourceRoot("internal/workflows-shared");
14
15export default defineConfig({
16 test: {
17 maxWorkers: process.platform === "win32" ? 2 : undefined,
18 projects: [
19 {
20 root: coreRoot,
21 test: {
22 name: "core",
23 include: ["test/**/*.test.ts"],
24 setupFiles: ["./test/setup.ts"],
25 pool: "forks",
26 testTimeout: 30_000,
27 hookTimeout: 30_000,
28 retry: process.env.CI ? 2 : 0,
29 },
30 },
31 {
32 root: rolldownRoot,
33 test: {
34 name: "rolldown",
35 env: loadEnv("test", rolldownRoot, "TEST"),
36 include: ["test/**/*.test.ts"],
37 setupFiles: ["./test/setup.ts"],
38 testTimeout: 60_000,
39 hookTimeout: 60_000,
40 pool: "forks",
41 fileParallelism: true,
42 },
43 },
44 {
45 root: viteRoot,
46 resolve: {
47 alias: {
48 "#": viteRoot,
49 },
50 },
51 test: {
52 name: "vite",
53 env: loadEnv("test", viteRoot, "TEST"),
54 include: ["test/**/*.test.ts"],
55 setupFiles: ["./test/setup.ts"],
56 testTimeout: 60_000,
57 hookTimeout: 60_000,
58 pool: "forks",
59 fileParallelism: true,
60 },
61 },
62 {
63 root: workersSharedRoot,
64 test: {
65 name: "workers-shared-node",
66 include: ["node/**/*.test.ts", "shared/**/*.test.ts"],
67 environment: "node",
68 },
69 },
70 {
71 root: workersSharedRoot,
72 plugins: [
73 cloudflareTest({
74 wrangler: {
75 configPath: sourceRoot(
76 "internal/workers-shared/workers/asset-worker/wrangler.jsonc",
77 ),
78 },
79 }),
80 ],
81 test: {
82 name: "workers-shared-assets",
83 include: ["workers/asset-worker/tests/**/*.test.ts"],
84 globals: true,
85 testTimeout: 50_000,
86 },
87 },
88 {
89 root: workersSharedRoot,
90 plugins: [
91 cloudflareTest({
92 wrangler: {
93 configPath: sourceRoot(
94 "internal/workers-shared/workers/router-worker/wrangler.jsonc",
95 ),
96 },
97 }),
98 ],
99 test: {
100 name: "workers-shared-router",
101 include: ["workers/router-worker/tests/**/*.test.ts"],
102 testTimeout: 50_000,
103 },
104 },
105 {
106 root: workflowsSharedRoot,
107 plugins: [
108 cloudflareTest({
109 miniflare: {
110 compatibilityFlags: ["service_binding_extra_handlers"],
111 },
112 wrangler: {
113 configPath: sourceRoot(
114 "internal/workflows-shared/wrangler.jsonc",
115 ),
116 },
117 }),
118 ],
119 test: {
120 name: "workflows-shared",
121 include: ["test/**/*.test.ts"],
122 testTimeout: 50_000,
123 },
124 },
125 ],
126 },
127});