Skip to content

Commit f0c15fb

Browse files
authored
Merge pull request #371 from gadget-inc/fastify-4
Upgrade to fastify 4 and company
2 parents 3d9fa5e + 192e673 commit f0c15fb

File tree

10 files changed

+476
-518
lines changed

10 files changed

+476
-518
lines changed

packages/fastify-renderer/package.json

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,21 @@
5757
"node": ">= 12.0.0"
5858
},
5959
"dependencies": {
60+
"@fastify/accepts": "^4.0.0",
61+
"@fastify/middie": "^8.0.0",
62+
"@fastify/static": "^6.4.0",
6063
"@opentelemetry/api": "^1.1.0",
6164
"@vitejs/plugin-react-refresh": "^1.3.6",
62-
"fastify-accepts": "^2.1.0",
63-
"fastify-express": "^0.3.3",
6465
"fastify-plugin": "^3.0.1",
65-
"fastify-static": "^4.6.1",
6666
"http-errors": "^1.8.1",
67-
"middie": "^5.4.0",
6867
"path-to-regexp": "^6.2.1",
6968
"sanitize-filename": "^1.6.3",
7069
"stream-template": "^0.0.10",
7170
"vite": "^2.9.14",
7271
"wouter": "^2.7.5"
7372
},
7473
"peerDependencies": {
75-
"fastify": "^3.13.0",
74+
"fastify": "^4.2.0",
7675
"react": "experimental",
7776
"react-dom": "experimental"
7877
},
@@ -93,12 +92,12 @@
9392
"eslint-plugin-prettier": "^3.4.1",
9493
"eslint-plugin-react": "^7.31.7",
9594
"eslint-plugin-react-hooks": "^4.6.0",
96-
"fastify": "^3.29.0",
95+
"fastify": "^4.2.0",
9796
"gitpkg": "^1.0.0-beta.2",
9897
"jest": "^28.1.3",
9998
"jest-playwright-preset": "^2.0.0",
10099
"npm-run-all": "^4.1.5",
101-
"pino-pretty": "^4.8.0",
100+
"pino-pretty": "^8.1.0",
102101
"prettier": "^2.7.1",
103102
"prettier-plugin-organize-imports": "^2.3.4",
104103
"react": "0.0.0-experimental-4ead6b530",

packages/fastify-renderer/src/node/Plugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable @typescript-eslint/require-await */
2+
import '@fastify/middie'
23
import fs from 'fs'
3-
import 'middie'
44
import path from 'path'
55
import { InlineConfig } from 'vite'
66
import { Template } from './DocumentTemplate'

packages/fastify-renderer/src/node/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* eslint-disable @typescript-eslint/require-await */
2+
import '@fastify/accepts'
3+
import '@fastify/middie'
4+
import fastifyStatic from '@fastify/static'
25
import { FastifyInstance, FastifyReply } from 'fastify'
3-
import 'fastify-accepts'
46
import fp from 'fastify-plugin'
5-
import fastifyStatic from 'fastify-static'
67
import { promises as fs } from 'fs'
7-
import 'middie'
88
import path from 'path'
99
import {
1010
build as viteBuild,
@@ -198,9 +198,9 @@ const FastifyRenderer = fp<FastifyRendererOptions>(
198198
})
199199
},
200200
{
201-
fastify: '3.x',
201+
fastify: '4.x',
202202
name: 'fastify-renderer',
203-
dependencies: ['fastify-accepts', 'middie'],
203+
dependencies: ['@fastify/accepts', 'middie'],
204204
}
205205
)
206206

packages/fastify-renderer/src/node/types.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22
import {
33
ContextConfigDefault,
44
FastifyInstance,
5+
FastifyLoggerInstance,
56
FastifyReply,
67
FastifyRequest,
8+
FastifySchema,
9+
FastifyTypeProvider,
10+
FastifyTypeProviderDefault,
711
RawReplyDefaultExpression,
812
RawRequestDefaultExpression,
913
RawServerBase,
1014
RawServerDefault,
11-
RequestGenericInterface,
1215
} from 'fastify'
16+
import { RouteGenericInterface } from 'fastify/types/route'
17+
import { FastifyRequestType, ResolveFastifyRequestType } from 'fastify/types/type-provider'
1318
import { IncomingMessage, Server, ServerResponse } from 'http'
1419
import { ReactElement } from 'react'
1520
import { ViteDevServer } from 'vite'
@@ -67,14 +72,31 @@ declare module 'fastify' {
6772
RawServer extends RawServerBase = RawServerDefault,
6873
RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
6974
RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
75+
TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault,
7076
Props = any
7177
> {
72-
<RequestGeneric extends RequestGenericInterface = RequestGenericInterface, ContextConfig = ContextConfigDefault>(
78+
<
79+
RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
80+
ContextConfig = ContextConfigDefault,
81+
SchemaCompiler = FastifySchema,
82+
RequestType extends FastifyRequestType = ResolveFastifyRequestType<TypeProvider, SchemaCompiler, RouteGeneric>,
83+
Logger extends FastifyLoggerInstance = FastifyLoggerInstance
84+
>(
7385
path: string,
74-
opts: RouteShorthandOptions<RawServer, RawRequest, RawReply, RequestGeneric, ContextConfig> & {
86+
opts: RouteShorthandOptions<
87+
RawServer,
88+
RawRequest,
89+
RawReply,
90+
RouteGeneric,
91+
ContextConfig,
92+
SchemaCompiler,
93+
TypeProvider,
94+
RequestType,
95+
Logger
96+
> & {
7597
render: string
7698
}, // this creates an overload that only applies these different types if the handler is for rendering
7799
handler: ServerRenderer<Props>
78-
): FastifyInstance<RawServer, RawRequest, RawReply>
100+
): FastifyInstance<RawServer, RawRequest, RawReply, Logger, TypeProvider>
79101
}
80102
}

packages/fastify-renderer/test/FastifyRenderer.spec.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ describe('FastifyRenderer', () => {
5757
})
5858

5959
test('should mount vite routes at a prefix to avoid collision with user routes', async () => {
60-
expect(server.printRoutes()).toMatch('/.vite/')
60+
expect(server.printRoutes()).toMatch('/.vite')
6161
})
6262

6363
test('should close vite devServer when fastify server is closing in dev mode', async () => {
@@ -67,7 +67,7 @@ describe('FastifyRenderer', () => {
6767

6868
server = await newFastify()
6969
await server.register(FastifyRenderer, { ...options, devMode: true })
70-
await server.listen(0)
70+
await server.listen({ port: 0 })
7171
await server.close()
7272

7373
expect(closeSpy).toHaveBeenCalled()
@@ -86,9 +86,10 @@ describe('FastifyRenderer', () => {
8686
const registerRouteSpy = jest.spyOn(FastifyRendererPlugin.prototype, 'register').mockImplementation(jest.fn())
8787

8888
server.get('/', { render: testComponent }, async (request, reply) => reply.send('Hello'))
89-
await server.inject({ method: 'GET', url: '/' })
89+
const response = await server.inject({ method: 'GET', url: '/' })
90+
expect(response.statusCode).toEqual(200)
9091

91-
expect(registerRouteSpy).toHaveBeenCalledTimes(1)
92+
expect(registerRouteSpy).toHaveBeenCalled()
9293
})
9394
})
9495

@@ -101,7 +102,7 @@ describe('build()', () => {
101102
test('should build client and server side assets', async () => {
102103
const server = await newFastify()
103104
await server.register(FastifyRenderer, options)
104-
await server.listen(0)
105+
await server.listen({ port: 0 })
105106

106107
jest.spyOn(fs, 'writeFile').mockImplementation(jest.fn())
107108
jest.spyOn(path, 'join').mockImplementation(jest.fn())

packages/fastify-renderer/test/helpers.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import fastifyAccepts from '@fastify/accepts'
2+
import fastifyMiddie from '@fastify/middie'
13
import fastify, { FastifyServerOptions } from 'fastify'
2-
import fastifyAccepts from 'fastify-accepts'
3-
import Middie from 'middie'
44
import path from 'path'
55
import { Readable } from 'stream'
66
import { FastifyRendererOptions, FastifyRendererPlugin } from '../src/node/Plugin'
@@ -11,9 +11,17 @@ import { Render } from '../src/node/renderers/Renderer'
1111
const logLevel = process.env.LOG_LEVEL || 'error'
1212

1313
export const newFastify = async (options?: FastifyServerOptions) => {
14-
const server = fastify({ ...options, logger: { level: logLevel, prettyPrint: true } })
14+
const server = fastify({
15+
...options,
16+
logger: {
17+
level: logLevel,
18+
transport: {
19+
target: 'pino-pretty',
20+
},
21+
},
22+
})
1523
await server.register(fastifyAccepts)
16-
await server.register(Middie)
24+
await server.register(fastifyMiddie)
1725
return server
1826
}
1927

packages/test-apps/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ beforeAll(async () => {
3838
// eslint-disable-next-line @typescript-eslint/no-var-requires
3939
const { server: fastifyServer } = require(serverEntrypoint)
4040
server = await fastifyServer()
41-
await server.listen(port)
41+
await server.listen({ port })
4242
}
4343
})
4444

packages/test-apps/simple-react/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
},
1010
"license": "MIT",
1111
"dependencies": {
12-
"fastify": "^3.29.0",
12+
"fastify": "^4.2.0",
1313
"fastify-renderer": "*",
1414
"react": "*",
1515
"react-dom": "*"
1616
},
1717
"devDependencies": {
1818
"@playwright/test": "^1.25.0",
19+
"@swc/core": "^1.2.208",
20+
"@swc/jest": "^0.2.21",
1921
"html-validator": "^5.1.18"
2022
}
2123
}

packages/test-apps/simple-react/server.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ export const server = async () => {
88
const server = await newFastify({
99
logger: {
1010
level: process.env.LOG_LEVEL ?? process.env.NODE_ENV == 'test' ? 'warn' : 'info',
11-
prettyPrint: true,
11+
transport: {
12+
target: 'pino-pretty',
13+
},
1214
},
1315
})
1416

@@ -110,7 +112,7 @@ export const server = async () => {
110112
if (require.main === module) {
111113
void server().then((server) => {
112114
console.warn(server.printRoutes())
113-
return server.listen(3000).then((address) => {
115+
return server.listen({ port: 3000 }).then((address) => {
114116
console.warn(`Test server listening on ${address}`)
115117
})
116118
})

0 commit comments

Comments
 (0)