Skip to content

Commit 2e9ad49

Browse files
authored
Add vite support via worker-based .yak.ts evaluation (#476)
1 parent 8144e16 commit 2e9ad49

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2055
-111
lines changed

.changeset/nine-pens-own.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"next-yak": minor
3+
---
4+
5+
Evaluate TypeScript files inside Node.js workers with types stripped out

e2e/README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ e2e/
1717
│ └── test.ts # Playwright test
1818
└── bundlers/
1919
└── <name>/
20-
└── package.json # Bundler dependencies (excluded from .tmp)
20+
├── package.json # Bundler dependencies (excluded from .tmp)
21+
├── playwright.config.ts # Playwright config (excluded from .tmp)
22+
├── vite.config.ts # Bundler config ──┐
23+
├── index.html # Entry point ├─ copied to .tmp
24+
└── main.tsx # App bootstrap ──┘
2125
```
2226

2327
## How it works
@@ -30,7 +34,11 @@ For each (bundler x case), `run.ts`:
3034
## Running
3135

3236
```bash
33-
pnpm --filter next-yak-e2e test # all bundlers x all cases
37+
pnpm --filter next-yak-e2e test # all bundlers x all cases
38+
pnpm --filter next-yak-e2e test next-app-webpack # just Next.js with webpack
39+
pnpm --filter next-yak-e2e test vite # just Vite
40+
41+
pnpm --filter next-yak-e2e test vite yak-file-mixin # just Vite with the "yak-file-mixin" case
3442
```
3543

3644
## Adding a test case

e2e/bundlers/vite/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head><meta charset="UTF-8" /><title>next-yak e2e</title></head>
4+
<body>
5+
<div id="root"></div>
6+
<script type="module" src="./main.tsx"></script>
7+
</body>
8+
</html>

e2e/bundlers/vite/main.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { createRoot } from "react-dom/client";
2+
import App from "./App.tsx";
3+
4+
createRoot(document.getElementById("root")!).render(<App />);

e2e/bundlers/vite/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "e2e-vite",
3+
"private": true,
4+
"type": "module",
5+
"dependencies": {
6+
"next-yak": "workspace:*",
7+
"react": "catalog:dev",
8+
"react-dom": "catalog:dev"
9+
},
10+
"devDependencies": {
11+
"vite": "catalog:dev",
12+
"@vitejs/plugin-react-swc": "catalog:dev",
13+
"@types/react": "catalog:dev",
14+
"@types/react-dom": "catalog:dev",
15+
"typescript": "catalog:dev"
16+
}
17+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { resolve } from "node:path";
2+
import { basePlaywrightConfig } from "../../playwright-base.ts";
3+
4+
const viteBin =
5+
resolve(import.meta.dirname, "node_modules/.bin/vite") +
6+
(process.platform === "win32" ? ".cmd" : "");
7+
8+
export default basePlaywrightConfig({
9+
name: "vite",
10+
url: "/index.html",
11+
webServer: {
12+
port: 5173,
13+
command: `"${viteBin}" --port 5173`,
14+
timeout: 30_000,
15+
},
16+
});

e2e/bundlers/vite/vite.config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import react from "@vitejs/plugin-react-swc";
2+
import { viteYak } from "next-yak/vite";
3+
import { defineConfig } from "vite";
4+
5+
export default defineConfig({
6+
plugins: [react(), viteYak()],
7+
});

e2e/bundlers/vite8/index.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<title>next-yak e2e</title>
6+
</head>
7+
<body>
8+
<div id="root"></div>
9+
<script type="module" src="./main.tsx"></script>
10+
</body>
11+
</html>

e2e/bundlers/vite8/main.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { createRoot } from "react-dom/client";
2+
import App from "./App.tsx";
3+
4+
createRoot(document.getElementById("root")!).render(<App />);

e2e/bundlers/vite8/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "e2e-vite8",
3+
"private": true,
4+
"type": "module",
5+
"dependencies": {
6+
"next-yak": "workspace:*",
7+
"react": "catalog:dev",
8+
"react-dom": "catalog:dev"
9+
},
10+
"devDependencies": {
11+
"vite": "8.0.0-beta.13",
12+
"@vitejs/plugin-react-swc": "catalog:dev",
13+
"@types/react": "catalog:dev",
14+
"@types/react-dom": "catalog:dev",
15+
"typescript": "catalog:dev"
16+
}
17+
}

0 commit comments

Comments
 (0)