@gasket/plugin-nextjs
Version:
Adds Next support to your application
53 lines (52 loc) • 1.74 kB
JavaScript
/// <reference types="@gasket/plugin-fastify" />
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _setupnextapp = require("./utils/setup-next-app.cjs");
/**
* Adds the buildId to Fastify via `decorate`
* @param {import('fastify').FastifyInstance} fastifyApp
* Fastify application instance
* @param {any} app - Next.js application instance (Next.js doesn't expose public types for server instances)
*/ function registerBuildId(fastifyApp, app) {
const buildIdKey = [
'buildId',
app.name
].filter(Boolean).join('/');
fastifyApp.decorate(buildIdKey, app.buildId);
}
/**
* Adds the `onResponse` hook to set NEXT_LOCALE
* @param {import('fastify').FastifyInstance} fastifyApp
* Fastify application instance
*/ function addNextLocaleHook(fastifyApp) {
fastifyApp.addHook('onResponse', function setNextLocale(req, res, next) {
const locale = /** @type {any} */ res?.locals?.gasketData?.intl?.locale;
if (locale) {
req.headers.cookie = (req.headers.cookie || '') + `;NEXT_LOCALE=${locale}`;
}
next();
});
}
/** @type {import('@gasket/core').HookHandler<'fastify'>} */ async function fastifyHandler(gasket, fastifyApp) {
const app = await (0, _setupnextapp.setupNextApp)(gasket);
registerBuildId(fastifyApp, app);
await gasket.exec('nextFastify', {
next: app,
fastify: fastifyApp
});
addNextLocaleHook(fastifyApp);
(0, _setupnextapp.setupNextHandling)(app, fastifyApp, gasket);
}
const _default = {
timing: {
last: true
},
handler: fastifyHandler
};