Skip to content

Conversation

ladderschool
Copy link

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to upgrade the relevant packages.
Fastify V5 also requires node>=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have found no issues running V5 in my production app. The only breaking change is how Fastify handles the logger, which this PR addresses, specifically in the createServerHelpers.ts file.

// v5
const loggerInstance = require('pino')();
const fastify = require('fastify')({
  loggerInstance
});

I have a test repository that I used to confirm these updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

I did notice though that I had to change the imports to:

import Fastify from 'fastify/fastify'

Could be a module resolution issue in tsconfig that I have? The Fastify docs don't mention anything in regards to that, though.

Tobbe added a commit to cedarjs/cedar that referenced this pull request Jun 7, 2025
Huge shoutout to @ladderschool who originally created this PR over at
the RedwoodGQL repo: redwoodjs/graphql#12046

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to
upgrade the relevant packages.
Fastify V5 also requires node >=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have
found no issues running V5 in my production app. The only breaking
change is how Fastify handles the logger, which this PR addresses,
specifically in the
[createServerHelpers.ts](https://github.com/redwoodjs/graphql/compare/main...ladderschool:redwood:main?expand=1#diff-2f9b7c2c7a03d2b1aca7d841ce3365a524a92b7bee07c5177272f1dbf1395d84)
file.

```js
// v5
const loggerInstance = require('pino')()
const fastify = require('fastify')({
  loggerInstance
})
```

There's a test repository that @ladderschool used to confirm these
updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

---------

Co-authored-by: ladderschool <ladderschooledu@gmail.com>
@ladderschool ladderschool marked this pull request as ready for review June 7, 2025 19:56
@ladderschool
Copy link
Author

I think @Tobbe's implementation in CedarJS is probably more type safe and easier to maintain down the line:

function isCustomLoggerInstance(
  logger: FastifyServerOptions['logger'] | FastifyServerOptions['loggerInstance'],
): logger is FastifyServerOptions['loggerInstance'] {
  return !!logger && typeof logger === 'object' && 'info' in logger;
}

const logger = options.logger ?? defaults.logger;

const resolvedOptions: ResolvedOptions = {
  apiRootPath: options.apiRootPath ?? defaults.apiRootPath,
  fastifyServerOptions: options.fastifyServerOptions ?? {
    requestTimeout: defaults.fastifyServerOptions.requestTimeout,
    logger: options.logger ?? defaults.logger,
    bodyLimit: defaults.fastifyServerOptions.bodyLimit,
  },
};

if (isCustomLoggerInstance(logger)) {
  resolvedOptions.fastifyServerOptions.loggerInstance = logger;
} else {
  resolvedOptions.fastifyServerOptions.logger = logger;
}

Tobbe added a commit to cedarjs/cedar that referenced this pull request Jun 8, 2025
Huge shoutout to @ladderschool who originally created this PR over at
the RedwoodGQL repo: redwoodjs/graphql#12046

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to
upgrade the relevant packages.
Fastify V5 also requires node >=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have
found no issues running V5 in my production app. The only breaking
change is how Fastify handles the logger, which this PR addresses,
specifically in the
[createServerHelpers.ts](https://github.com/redwoodjs/graphql/compare/main...ladderschool:redwood:main?expand=1#diff-2f9b7c2c7a03d2b1aca7d841ce3365a524a92b7bee07c5177272f1dbf1395d84)
file.

```js
// v5
const loggerInstance = require('pino')()
const fastify = require('fastify')({
  loggerInstance
})
```

There's a test repository that @ladderschool used to confirm these
updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

---------

Co-authored-by: ladderschool <ladderschooledu@gmail.com>
@Tobbe
Copy link
Contributor

Tobbe commented Jul 17, 2025

@ladderschool Do you want to update this PR to incorporate the improved implementation I have in CedarJS plus fixing the merge issues in yarn.lock, or are you happy to just use Cedar instead?

@ladderschool ladderschool reopened this Jul 20, 2025
@Tobbe Tobbe added this to the next-release-major milestone Jul 23, 2025
@Tobbe Tobbe added the release:breaking This PR is a breaking change label Jul 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release:breaking This PR is a breaking change
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants