Skip to content

Commit 3030689

Browse files
committed
feat: subclass NextServer to override request handler
1 parent fec86a7 commit 3030689

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

packages/runtime/src/helpers/functions.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ export const generateFunctions = async (
4747
await ensureDir(join(functionsDir, functionName))
4848
await writeFile(join(functionsDir, functionName, `${functionName}.js`), apiHandlerSource)
4949
await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js'))
50+
await copyFile(
51+
join(__dirname, '..', '..', 'lib', 'templates', 'server.js'),
52+
join(functionsDir, functionName, 'server.js'),
53+
)
5054
await copyFile(
5155
join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'),
5256
join(functionsDir, functionName, 'handlerUtils.js'),
@@ -67,6 +71,10 @@ export const generateFunctions = async (
6771
await ensureDir(join(functionsDir, functionName))
6872
await writeFile(join(functionsDir, functionName, `${functionName}.js`), handlerSource)
6973
await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js'))
74+
await copyFile(
75+
join(__dirname, '..', '..', 'lib', 'templates', 'server.js'),
76+
join(functionsDir, functionName, 'server.js'),
77+
)
7078
await copyFile(
7179
join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'),
7280
join(functionsDir, functionName, 'handlerUtils.js'),

packages/runtime/src/templates/getHandler.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ import { outdent as javascript } from 'outdent'
55

66
import type { NextConfig } from '../helpers/config'
77

8-
import type { NextServerType } from './handlerUtils'
9-
108
/* eslint-disable @typescript-eslint/no-var-requires */
11-
129
const { promises } = require('fs')
1310
const { Server } = require('http')
1411
const path = require('path')
@@ -22,9 +19,9 @@ const {
2219
getMaxAge,
2320
getMultiValueHeaders,
2421
getPrefetchResponse,
25-
getNextServer,
2622
normalizePath,
2723
} = require('./handlerUtils')
24+
const { NetlifyNextServer } = require('./server')
2825
/* eslint-enable @typescript-eslint/no-var-requires */
2926

3027
type Mutable<T> = {
@@ -76,8 +73,7 @@ const makeHandler = (conf: NextConfig, app, pageRoot, staticManifest: Array<[str
7673
const port = Number.parseInt(url.port) || 80
7774
base = url.origin
7875

79-
const NextServer: NextServerType = getNextServer()
80-
const nextServer = new NextServer({
76+
const nextServer = new NetlifyNextServer({
8177
conf,
8278
dir,
8379
customServer: false,
@@ -180,6 +176,7 @@ export const getHandler = ({ isODB = false, publishDir = '../../../.next', appDi
180176
// We copy the file here rather than requiring from the node module
181177
const { Bridge } = require("./bridge");
182178
const { augmentFsModule, getMaxAge, getMultiValueHeaders, getPrefetchResponse, getNextServer, normalizePath } = require('./handlerUtils')
179+
const { NetlifyNextServer } = require('./server')
183180
184181
${isODB ? `const { builder } = require("@netlify/functions")` : ''}
185182
const { config } = require("${publishDir}/required-server-files.json")
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { NodeRequestHandler } from 'next/dist/server/next-server'
2+
3+
import { getNextServer, NextServerType } from './handlerUtils'
4+
5+
const NextServer: NextServerType = getNextServer()
6+
7+
class NetlifyNextServer extends NextServer {
8+
public getRequestHandler(): NodeRequestHandler {
9+
const handler = super.getRequestHandler()
10+
return (req, res, parsedUrl) => {
11+
if (req.headers['x-prerender-revalidate']) {
12+
console.log('Revalidate request')
13+
}
14+
return handler(req, res, parsedUrl)
15+
}
16+
}
17+
}
18+
19+
export { NetlifyNextServer }

0 commit comments

Comments
 (0)