Skip to content
Compare
Choose a tag to compare
@galvez galvez released this 19 Feb 08:03
· 171 commits to dev since this release

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 by createHtmlTemplateFunction(), now always returns a Readable. And any parameter passed to it can also be a Readable. In addition, placeholders now also support the dot notation, and receive app (the Fastify plugin scope), req, reply, client and route as part of their default context in the default createRouteHandler() definition . For the following index.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's default 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 or createRenderFunction was provided.
    • ssrManifest contains the parsed JSON from the ssr-manifest.json file (production only).

Breaking changes

  • The default call signature of reply.render() in createRouteHandler() 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() and createErrorHandler() 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.

  1. 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.