Skip to content

Commit c312e57

Browse files
authored
* release: @fastify/[email protected] * bump: @fastify/[email protected]
1 parent 4a1f454 commit c312e57

File tree

22 files changed

+290
-9
lines changed

22 files changed

+290
-9
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "example-react-vanilla-ts-src",
3+
"type": "module",
4+
"scripts": {
5+
"dev": "tsx src/server.ts --dev",
6+
"start": "NODE_ENV=production node build/server.js",
7+
"build": "pnpm build:server && pnpm build:client",
8+
"build:client": "vite build",
9+
"build:server": "tsc",
10+
"lint": "oxlint",
11+
"test": "tsx --test"
12+
},
13+
"dependencies": {
14+
"@fastify/vite": "workspace:^",
15+
"fastify": "catalog:",
16+
"react": "catalog:",
17+
"react-dom": "catalog:"
18+
},
19+
"devDependencies": {
20+
"@types/node": "^22.13.17",
21+
"@types/react": "^19.1.2",
22+
"@types/react-dom": "^19.1.2",
23+
"@vitejs/plugin-react": "catalog:",
24+
"oxlint": "catalog:",
25+
"tsx": "catalog:",
26+
"typescript": "catalog:",
27+
"vite": "catalog:"
28+
}
29+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function App() {
2+
return (
3+
<div>
4+
<h1>Hello world from React and @fastify/vite!</h1>
5+
</div>
6+
)
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<!-- head -->
7+
</head>
8+
<!-- hydration -->
9+
<div id="root"><!-- element --></div>
10+
<script type="module" src="/mount.tsx"></script>
11+
</html>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import React from 'react'
2+
import ReactDOM from 'react-dom/client'
3+
import { App } from './App'
4+
5+
ReactDOM.createRoot(document.getElementById('root')!).render(
6+
<React.StrictMode>
7+
<App />
8+
</React.StrictMode>
9+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"extends": "../../tsconfig.json",
3+
"compilerOptions": {
4+
"allowImportingTsExtensions": true,
5+
"allowJs": false,
6+
"jsx": "react-jsx",
7+
"lib": ["DOM", "DOM.Iterable", "ESNext"],
8+
"module": "ESNext",
9+
"moduleResolution": "bundler",
10+
"noEmit": true,
11+
"target": "ES2023",
12+
"types": ["vite/client"]
13+
},
14+
"include": ["**/*"],
15+
"exclude": []
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import test from 'node:test'
2+
import { resolve } from 'node:path'
3+
import { makeBuildTest, makeIndexTest } from '../../test-factories.mjs'
4+
import { main } from './server.ts'
5+
6+
const viteConfigLocation = resolve(import.meta.dirname, '..')
7+
8+
test('react-vanilla-spa-ts', async (t) => {
9+
await t.test('build production bundle', makeBuildTest({ cwd: viteConfigLocation }))
10+
await t.test('render index page in production', makeIndexTest({ main, dev: false }))
11+
await t.test('render index page in development', makeIndexTest({ main, dev: true }))
12+
})
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
import { resolve } from 'node:path'
3+
import Fastify from 'fastify'
4+
import FastifyVite from '@fastify/vite'
5+
6+
7+
export async function main (dev?: boolean) {
8+
const server = Fastify()
9+
10+
await server.register(FastifyVite, {
11+
// The compiled server will live in <root>/build which is the same depth as <root>/src,
12+
// so we can use import.meta.dirname here
13+
root: resolve(import.meta.dirname, '..'),
14+
distDir: resolve(import.meta.dirname, '..', 'build'), // Must match build.outDir in Vite config
15+
dev: dev || process.argv.includes('--dev'),
16+
spa: true,
17+
})
18+
19+
server.get('/', (req, reply) => {
20+
return reply.html()
21+
})
22+
23+
await server.vite.ready()
24+
return server
25+
}
26+
27+
if (process.argv[1] === import.meta.filename) {
28+
const server = await main()
29+
await server.listen({ port: 3000 })
30+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"compilerOptions": {
3+
"allowJs": true,
4+
"allowSyntheticDefaultImports": true,
5+
"checkJs": false,
6+
"esModuleInterop": true,
7+
"forceConsistentCasingInFileNames": true,
8+
"incremental": true,
9+
"isolatedModules": true,
10+
"lib": ["ESNext"],
11+
"module": "NodeNext",
12+
"moduleResolution": "NodeNext",
13+
"outDir": "build",
14+
"noFallthroughCasesInSwitch": true,
15+
"noUnusedLocals": true,
16+
"removeComments": true,
17+
"resolveJsonModule": true,
18+
"rootDir": "src",
19+
"skipLibCheck": true,
20+
"sourceMap": true,
21+
"strict": true,
22+
"target": "ESNext",
23+
"verbatimModuleSyntax": true
24+
},
25+
"include": ["src"],
26+
"exclude": ["src/client/**/*", "src/**/*.test.ts"]
27+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { resolve } from 'node:path'
2+
import viteFastify from '@fastify/vite/plugin'
3+
import viteReact from '@vitejs/plugin-react'
4+
5+
export default {
6+
root: resolve(import.meta.dirname, 'src', 'client'),
7+
plugins: [
8+
viteFastify({ spa: true }),
9+
viteReact()
10+
],
11+
build: {
12+
emptyOutDir: true,
13+
// Forces Vite to use a top-level dist folder,
14+
// outside the project root defined above
15+
outDir: resolve(import.meta.dirname, 'build'),
16+
},
17+
}

examples/react-vanilla-ts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"dev": "tsx src/server.ts --dev",
66
"start": "NODE_ENV=production node build/server.js",
77
"build": "pnpm build:server && pnpm build:client",
8-
"build:client": "vite build --app --emptyOutDir",
8+
"build:client": "vite build --app",
99
"build:server": "tsc",
1010
"lint": "oxlint",
1111
"test": "tsx --test"

0 commit comments

Comments
 (0)