This is the sixth major release of @fastify/vite
.
It has important changes that required the introduction of a couple of breaking changes, thus the new major release.
Both @fastify/[email protected]
and @fastify/[email protected]
still require @fastify/vite@5
to run.
Updated versions of these packages will be released soon.
New features
-
Type definitions have been comprehensively expanded, hat off to @Gehbt.
-
The default
reply.html()
function, returned bycreateHtmlTemplateFunction()
, now always returns aReadable
. And any parameter passed to it can also be aReadable
. In addition, placeholders now also support the dot notation, and receiveapp
(the Fastify plugin scope),req
,reply
,client
androute
as part of their default context in the defaultcreateRouteHandler()
definition . For the followingindex.html
:<head><!-- req.head --></head>
The following
reply.html()
call should work:import { Readable } from 'node:stream' async function * head () { yield '<title>Streaming title</title>' } req.head = Redable.from(head()) reply.html({ req })
-
If no
createRenderFunction
function is provided,createRouteHandler()
will now by default call the route module'sdefault
export, as follows:createRouteHandler({ client, route }, scope, config) { // ... return async (req, reply) => { const page = await route.default({ app: scope, req, reply }) return reply.html({ app: scope, req, reply, route, client, element: page, }) }
-
The plugin's config object now has two injected readonly properties:
hasRenderFunction
indicates whether orcreateRenderFunction
was provided.ssrManifest
contains the parsed JSON from thessr-manifest.json
file (production only).
Breaking changes
-
The default call signature of
reply.render()
increateRouteHandler()
changed as follows:- const page = await reply.render(scope, req, reply) - return reply.html(page) + const page = await reply.render({ + app: scope, + req, + reply, + route, + client, + })
-
The default call signature of
createRouteHandler()
andcreateErrorHandler()
have changed as follows:- createRouteHandler (client, scope, config) { + createRouteHandler({ client, route }, scope, config) { - createErrorHandler (client, scope, config) { + createErrorHandler({ client, route }, scope, config) {
In both cases, route
is a reference to the route module, and client
is a reference to the client module.
Fixes
Many thanks to the contributors!
Miscellaneous
Node v20+ is now used in development.
Vitest has been replaced with Node's native test runner.
ESLint has been replaced with Biome for speed1.
-
Biome is lacking a formatting option that makes it not fully StandardJS-compliant, but it's an acceptable compromise since it was possible to remove several ESLint plugins from the dependencies and still have superior performance. ↩