From 55d6022fcdf32b2e3f4e111ada0499e3eaeae5e8 Mon Sep 17 00:00:00 2001 From: Rob Stanford Date: Thu, 23 Feb 2023 11:19:44 +0000 Subject: [PATCH 01/10] feat: subclass NextServer to override request handler --- packages/runtime/src/helpers/functions.ts | 8 ++++++++ packages/runtime/src/templates/getHandler.ts | 9 +++------ packages/runtime/src/templates/server.ts | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 packages/runtime/src/templates/server.ts diff --git a/packages/runtime/src/helpers/functions.ts b/packages/runtime/src/helpers/functions.ts index f451abb321..d2923a8860 100644 --- a/packages/runtime/src/helpers/functions.ts +++ b/packages/runtime/src/helpers/functions.ts @@ -47,6 +47,10 @@ export const generateFunctions = async ( await ensureDir(join(functionsDir, functionName)) await writeFile(join(functionsDir, functionName, `${functionName}.js`), apiHandlerSource) await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js')) + await copyFile( + join(__dirname, '..', '..', 'lib', 'templates', 'server.js'), + join(functionsDir, functionName, 'server.js'), + ) await copyFile( join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'), join(functionsDir, functionName, 'handlerUtils.js'), @@ -67,6 +71,10 @@ export const generateFunctions = async ( await ensureDir(join(functionsDir, functionName)) await writeFile(join(functionsDir, functionName, `${functionName}.js`), handlerSource) await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js')) + await copyFile( + join(__dirname, '..', '..', 'lib', 'templates', 'server.js'), + join(functionsDir, functionName, 'server.js'), + ) await copyFile( join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'), join(functionsDir, functionName, 'handlerUtils.js'), diff --git a/packages/runtime/src/templates/getHandler.ts b/packages/runtime/src/templates/getHandler.ts index b5cc1b322b..9e6633feab 100644 --- a/packages/runtime/src/templates/getHandler.ts +++ b/packages/runtime/src/templates/getHandler.ts @@ -5,10 +5,7 @@ import { outdent as javascript } from 'outdent' import type { NextConfig } from '../helpers/config' -import type { NextServerType } from './handlerUtils' - /* eslint-disable @typescript-eslint/no-var-requires */ - const { promises } = require('fs') const { Server } = require('http') const path = require('path') @@ -22,9 +19,9 @@ const { getMaxAge, getMultiValueHeaders, getPrefetchResponse, - getNextServer, normalizePath, } = require('./handlerUtils') +const { NetlifyNextServer } = require('./server') /* eslint-enable @typescript-eslint/no-var-requires */ type Mutable = { @@ -76,8 +73,7 @@ const makeHandler = (conf: NextConfig, app, pageRoot, staticManifest: Array<[str const port = Number.parseInt(url.port) || 80 base = url.origin - const NextServer: NextServerType = getNextServer() - const nextServer = new NextServer({ + const nextServer = new NetlifyNextServer({ conf, dir, customServer: false, @@ -180,6 +176,7 @@ export const getHandler = ({ isODB = false, publishDir = '../../../.next', appDi // We copy the file here rather than requiring from the node module const { Bridge } = require("./bridge"); const { augmentFsModule, getMaxAge, getMultiValueHeaders, getPrefetchResponse, getNextServer, normalizePath } = require('./handlerUtils') + const { NetlifyNextServer } = require('./server') ${isODB ? `const { builder } = require("@netlify/functions")` : ''} const { config } = require("${publishDir}/required-server-files.json") diff --git a/packages/runtime/src/templates/server.ts b/packages/runtime/src/templates/server.ts new file mode 100644 index 0000000000..84f35ed3da --- /dev/null +++ b/packages/runtime/src/templates/server.ts @@ -0,0 +1,19 @@ +import { NodeRequestHandler } from 'next/dist/server/next-server' + +import { getNextServer, NextServerType } from './handlerUtils' + +const NextServer: NextServerType = getNextServer() + +class NetlifyNextServer extends NextServer { + public getRequestHandler(): NodeRequestHandler { + const handler = super.getRequestHandler() + return (req, res, parsedUrl) => { + if (req.headers['x-prerender-revalidate']) { + console.log('Revalidate request') + } + return handler(req, res, parsedUrl) + } + } +} + +export { NetlifyNextServer } From c3d560711a09f9897338e1df2af4abc7db749b42 Mon Sep 17 00:00:00 2001 From: Rob Stanford Date: Thu, 23 Feb 2023 11:19:58 +0000 Subject: [PATCH 02/10] feat: add revalidate API route --- demos/default/pages/api/revalidate.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 demos/default/pages/api/revalidate.js diff --git a/demos/default/pages/api/revalidate.js b/demos/default/pages/api/revalidate.js new file mode 100644 index 0000000000..ed5e0aa5ae --- /dev/null +++ b/demos/default/pages/api/revalidate.js @@ -0,0 +1,8 @@ +export default async function handler(req, res) { + try { + await res.revalidate('/getStaticProps/with-revalidate/') + return res.json({ revalidated: true }) + } catch (err) { + return res.status(500).send('Error revalidating') + } +} From 72ab895be865402fa0d92431f293129c70ae6c8b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Feb 2023 19:05:11 +0000 Subject: [PATCH 03/10] chore(deps): update dependency netlify-plugin-cypress to ^2.2.1 (#1939) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 243 ++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 73 insertions(+), 172 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf3ccbc7fc..fc70987034 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,7 @@ "jest-extended": "^3.2.0", "jest-fetch-mock": "^3.0.3", "jest-junit": "^14.0.1", - "netlify-plugin-cypress": "^2.2.0", + "netlify-plugin-cypress": "^2.2.1", "npm-run-all": "^4.1.5", "playwright-chromium": "^1.26.1", "prettier": "^2.1.2", @@ -10403,9 +10403,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.847576", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.847576.tgz", - "integrity": "sha512-0M8kobnSQE0Jmly7Mhbeq0W/PpZfnuK+WjN2ZRVPbGqYwCHCioAVp84H0TcLimgECcN5H976y5QiXMGBC9JKmg==", + "version": "0.0.1045489", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz", + "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==", "dev": true }, "node_modules/diff": { @@ -18278,16 +18278,16 @@ } }, "node_modules/netlify-plugin-cypress": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/netlify-plugin-cypress/-/netlify-plugin-cypress-2.2.0.tgz", - "integrity": "sha512-J8dt12slBztXLdEH9XCBiEgkbJjM1RVMcHmJrnRFydh2y0lGtGEN5OmMeCKKZ7Jvv7rrxMvVcuvtHNi+D4dq2Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/netlify-plugin-cypress/-/netlify-plugin-cypress-2.2.1.tgz", + "integrity": "sha512-No93crt1+vaszMQ2UDWbXVvdBSwN1MQZff9cW8YrpA/er+PixjV2h0JbHgsRLUl/7Pe+NGjlcP/txQvvViK2zw==", "dev": true, "dependencies": { "common-tags": "1.8.0", "debug": "4.1.1", "got": "10.7.0", "local-web-server": "^4.2.1", - "puppeteer": "^7.0.1", + "puppeteer": "18.1.0", "ramda": "0.27.1" }, "engines": { @@ -20239,109 +20239,56 @@ } }, "node_modules/puppeteer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-7.1.0.tgz", - "integrity": "sha512-lqOLzqCKdh7yUAHvK6LxgOpQrL8Bv1/jvS8MLDXxcNms2rlM3E8p/Wlwc7efbRZ0twxTzUeqjN5EqrTwxOwc9g==", - "deprecated": "Version no longer supported. Upgrade to @latest", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.1.0.tgz", + "integrity": "sha512-2RCVWIF+pZOSfksWlQU0Hh6CeUT5NYt66CDDgRyuReu6EvBAk1y+/Q7DuzYNvGChSecGMb7QPN0hkxAa3guAog==", + "deprecated": "< 19.2.0 is no longer supported", "dev": true, "hasInstallScript": true, "dependencies": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.847576", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1045489", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.9.0" }, "engines": { - "node": ">=8" + "node": ">=14.1.0" } }, - "node_modules/puppeteer/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/puppeteer/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true }, - "node_modules/puppeteer/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/puppeteer/node_modules/ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/puppeteer/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" + "node": ">=10.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/puppeteer/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -31979,9 +31926,9 @@ } }, "devtools-protocol": { - "version": "0.0.847576", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.847576.tgz", - "integrity": "sha512-0M8kobnSQE0Jmly7Mhbeq0W/PpZfnuK+WjN2ZRVPbGqYwCHCioAVp84H0TcLimgECcN5H976y5QiXMGBC9JKmg==", + "version": "0.0.1045489", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz", + "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==", "dev": true }, "diff": { @@ -37991,16 +37938,16 @@ } }, "netlify-plugin-cypress": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/netlify-plugin-cypress/-/netlify-plugin-cypress-2.2.0.tgz", - "integrity": "sha512-J8dt12slBztXLdEH9XCBiEgkbJjM1RVMcHmJrnRFydh2y0lGtGEN5OmMeCKKZ7Jvv7rrxMvVcuvtHNi+D4dq2Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/netlify-plugin-cypress/-/netlify-plugin-cypress-2.2.1.tgz", + "integrity": "sha512-No93crt1+vaszMQ2UDWbXVvdBSwN1MQZff9cW8YrpA/er+PixjV2h0JbHgsRLUl/7Pe+NGjlcP/txQvvViK2zw==", "dev": true, "requires": { "common-tags": "1.8.0", "debug": "4.1.1", "got": "10.7.0", "local-web-server": "^4.2.1", - "puppeteer": "^7.0.1", + "puppeteer": "18.1.0", "ramda": "0.27.1" }, "dependencies": { @@ -39417,82 +39364,36 @@ "dev": true }, "puppeteer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-7.1.0.tgz", - "integrity": "sha512-lqOLzqCKdh7yUAHvK6LxgOpQrL8Bv1/jvS8MLDXxcNms2rlM3E8p/Wlwc7efbRZ0twxTzUeqjN5EqrTwxOwc9g==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.1.0.tgz", + "integrity": "sha512-2RCVWIF+pZOSfksWlQU0Hh6CeUT5NYt66CDDgRyuReu6EvBAk1y+/Q7DuzYNvGChSecGMb7QPN0hkxAa3guAog==", "dev": true, "requires": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.847576", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1045489", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.9.0" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true + }, + "ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "dev": true, + "requires": {} } } }, diff --git a/package.json b/package.json index 33debedfd4..0a89579e89 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "jest-extended": "^3.2.0", "jest-fetch-mock": "^3.0.3", "jest-junit": "^14.0.1", - "netlify-plugin-cypress": "^2.2.0", + "netlify-plugin-cypress": "^2.2.1", "npm-run-all": "^4.1.5", "playwright-chromium": "^1.26.1", "prettier": "^2.1.2", From 56df9143d2c4660ac93dc69abf3d213ccc728a15 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 00:55:23 +0000 Subject: [PATCH 04/10] chore(deps): update dependency jest-extended to v3.2.4 (#1942) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 104 +++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc70987034..d3970fe64e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3067,12 +3067,12 @@ } }, "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.25.16" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -5611,9 +5611,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "dev": true }, "node_modules/@sindresorhus/is": { @@ -15481,9 +15481,9 @@ } }, "node_modules/jest-extended": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.3.tgz", - "integrity": "sha512-YcdjfFv3+N2AiWq4aG6gT/r1mfLtDKnbXs0hKXNlL/hf37TKQJTlh2zNwuMUYnvwKRRMtO/X9CfZU1EmOgUREA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.4.tgz", + "integrity": "sha512-lSEYhSmvXZG/7YXI7KO3LpiUiQ90gi5giwCJNDMMsX5a+/NZhdbQF2G4ALOBN+KcXVT3H6FPVPohAuMXooaLTQ==", "dev": true, "dependencies": { "jest-diff": "^29.0.0", @@ -15514,45 +15514,45 @@ } }, "node_modules/jest-extended/node_modules/diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-extended/node_modules/jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-extended/node_modules/jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-extended/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "dependencies": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -26469,12 +26469,12 @@ } }, "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", "dev": true, "requires": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.25.16" } }, "@jest/source-map": { @@ -28174,9 +28174,9 @@ } }, "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "dev": true }, "@sindresorhus/is": { @@ -35691,9 +35691,9 @@ } }, "jest-extended": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.3.tgz", - "integrity": "sha512-YcdjfFv3+N2AiWq4aG6gT/r1mfLtDKnbXs0hKXNlL/hf37TKQJTlh2zNwuMUYnvwKRRMtO/X9CfZU1EmOgUREA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.4.tgz", + "integrity": "sha512-lSEYhSmvXZG/7YXI7KO3LpiUiQ90gi5giwCJNDMMsX5a+/NZhdbQF2G4ALOBN+KcXVT3H6FPVPohAuMXooaLTQ==", "dev": true, "requires": { "jest-diff": "^29.0.0", @@ -35707,36 +35707,36 @@ "dev": true }, "diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, "jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", + "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.4.3" } }, "jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true }, "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", + "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "requires": { - "@jest/schemas": "^29.0.0", + "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } From 8fb014f704aeb3b26b7bd88921c958febd298db5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 01:01:28 +0000 Subject: [PATCH 05/10] chore(deps): update react monorepo (#1943) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- demos/nx-next-monorepo-demo/package-lock.json | 25 +++++++++++-------- demos/nx-next-monorepo-demo/package.json | 4 +-- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/demos/nx-next-monorepo-demo/package-lock.json b/demos/nx-next-monorepo-demo/package-lock.json index 8a810f8b5c..b08479df8b 100644 --- a/demos/nx-next-monorepo-demo/package-lock.json +++ b/demos/nx-next-monorepo-demo/package-lock.json @@ -30,8 +30,8 @@ "@testing-library/react": "13.4.0", "@types/jest": "28.1.8", "@types/node": "16.11.7", - "@types/react": "18.0.27", - "@types/react-dom": "18.0.6", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", "@typescript-eslint/eslint-plugin": "^5.36.1", "@typescript-eslint/parser": "^5.36.1", "babel-jest": "28.1.3", @@ -5434,9 +5434,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -5445,9 +5445,10 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.6", + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", "dev": true, - "license": "MIT", "dependencies": { "@types/react": "*" } @@ -19976,9 +19977,9 @@ "version": "1.2.4" }, "@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dev": true, "requires": { "@types/prop-types": "*", @@ -19987,7 +19988,9 @@ } }, "@types/react-dom": { - "version": "18.0.6", + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", "dev": true, "requires": { "@types/react": "*" diff --git a/demos/nx-next-monorepo-demo/package.json b/demos/nx-next-monorepo-demo/package.json index d31713e149..44df130f9f 100644 --- a/demos/nx-next-monorepo-demo/package.json +++ b/demos/nx-next-monorepo-demo/package.json @@ -30,8 +30,8 @@ "@testing-library/react": "13.4.0", "@types/jest": "28.1.8", "@types/node": "16.11.7", - "@types/react": "18.0.27", - "@types/react-dom": "18.0.6", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", "@typescript-eslint/eslint-plugin": "^5.36.1", "@typescript-eslint/parser": "^5.36.1", "babel-jest": "28.1.3", From bb41ab30e7557df98cb2b22e8bcb4f56ad0f0452 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 01:09:33 +0000 Subject: [PATCH 06/10] fix(deps): update dependency swr to v2.0.4 (#1944) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- demos/canary/package-lock.json | 14 +++++++------- demos/canary/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/demos/canary/package-lock.json b/demos/canary/package-lock.json index 95e34e6643..df7698f350 100644 --- a/demos/canary/package-lock.json +++ b/demos/canary/package-lock.json @@ -13,7 +13,7 @@ "react": "latest", "react-dom": "latest", "sass": "latest", - "swr": "2.0.1" + "swr": "2.0.4" }, "devDependencies": { "@netlify/plugin-nextjs": "file:plugin-wrapper", @@ -599,9 +599,9 @@ } }, "node_modules/swr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.0.1.tgz", - "integrity": "sha512-6z4FpS9dKAay7axedlStsPahEw25nuMlVh4GHkuPpGptbmEEP8v/+kr0GkAE/7ErUs25U2VFOnZQz3AWfkmXdw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.0.4.tgz", + "integrity": "sha512-4GUiTjknRUVuw4MWUHR7mzJ9G/DWL+yZz/TgWDfiA0OZ9tL6qyrTkN2wPeboBpL3OJTkej3pexh3mWCnv8cFkQ==", "dependencies": { "use-sync-external-store": "^1.2.0" }, @@ -969,9 +969,9 @@ } }, "swr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.0.1.tgz", - "integrity": "sha512-6z4FpS9dKAay7axedlStsPahEw25nuMlVh4GHkuPpGptbmEEP8v/+kr0GkAE/7ErUs25U2VFOnZQz3AWfkmXdw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.0.4.tgz", + "integrity": "sha512-4GUiTjknRUVuw4MWUHR7mzJ9G/DWL+yZz/TgWDfiA0OZ9tL6qyrTkN2wPeboBpL3OJTkej3pexh3mWCnv8cFkQ==", "requires": { "use-sync-external-store": "^1.2.0" } diff --git a/demos/canary/package.json b/demos/canary/package.json index bf545e59f7..0c4f01aaac 100644 --- a/demos/canary/package.json +++ b/demos/canary/package.json @@ -14,7 +14,7 @@ "react": "latest", "react-dom": "latest", "sass": "latest", - "swr": "2.0.1" + "swr": "2.0.4" }, "devDependencies": { "@netlify/plugin-nextjs": "file:plugin-wrapper", From 690f04ab97757594e60e10632f9b3ef57fed763c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Feb 2023 01:14:01 +0000 Subject: [PATCH 07/10] chore(deps): update actions/add-to-project action to v0.4.0 (#1945) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .github/workflows/add-to-project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/add-to-project.yml b/.github/workflows/add-to-project.yml index 7c0d2b8a70..5146f814f6 100644 --- a/.github/workflows/add-to-project.yml +++ b/.github/workflows/add-to-project.yml @@ -14,7 +14,7 @@ jobs: app_id: ${{ secrets.TOKENS_APP_ID }} private_key: ${{ secrets.TOKENS_PRIVATE_KEY }} - name: Add issue to Project - uses: actions/add-to-project@v0.3.0 + uses: actions/add-to-project@v0.4.0 with: project-url: https://github.com/orgs/netlify/projects/199 github-token: ${{ steps.generate_token.outputs.token }} From fec86a7f3eec27b77132e37431cee5da766af0f7 Mon Sep 17 00:00:00 2001 From: Sarah Etter Date: Mon, 27 Feb 2023 15:34:14 -0500 Subject: [PATCH 08/10] chore: fix typo in pull request template (#1938) --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 8417963c83..6e2ba17272 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,4 @@ - + ### Summary From 3030689493f9549ea5d0fdae3185bad38d573297 Mon Sep 17 00:00:00 2001 From: Rob Stanford Date: Thu, 23 Feb 2023 11:19:44 +0000 Subject: [PATCH 09/10] feat: subclass NextServer to override request handler --- packages/runtime/src/helpers/functions.ts | 8 ++++++++ packages/runtime/src/templates/getHandler.ts | 9 +++------ packages/runtime/src/templates/server.ts | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 packages/runtime/src/templates/server.ts diff --git a/packages/runtime/src/helpers/functions.ts b/packages/runtime/src/helpers/functions.ts index f451abb321..d2923a8860 100644 --- a/packages/runtime/src/helpers/functions.ts +++ b/packages/runtime/src/helpers/functions.ts @@ -47,6 +47,10 @@ export const generateFunctions = async ( await ensureDir(join(functionsDir, functionName)) await writeFile(join(functionsDir, functionName, `${functionName}.js`), apiHandlerSource) await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js')) + await copyFile( + join(__dirname, '..', '..', 'lib', 'templates', 'server.js'), + join(functionsDir, functionName, 'server.js'), + ) await copyFile( join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'), join(functionsDir, functionName, 'handlerUtils.js'), @@ -67,6 +71,10 @@ export const generateFunctions = async ( await ensureDir(join(functionsDir, functionName)) await writeFile(join(functionsDir, functionName, `${functionName}.js`), handlerSource) await copyFile(bridgeFile, join(functionsDir, functionName, 'bridge.js')) + await copyFile( + join(__dirname, '..', '..', 'lib', 'templates', 'server.js'), + join(functionsDir, functionName, 'server.js'), + ) await copyFile( join(__dirname, '..', '..', 'lib', 'templates', 'handlerUtils.js'), join(functionsDir, functionName, 'handlerUtils.js'), diff --git a/packages/runtime/src/templates/getHandler.ts b/packages/runtime/src/templates/getHandler.ts index b5cc1b322b..9e6633feab 100644 --- a/packages/runtime/src/templates/getHandler.ts +++ b/packages/runtime/src/templates/getHandler.ts @@ -5,10 +5,7 @@ import { outdent as javascript } from 'outdent' import type { NextConfig } from '../helpers/config' -import type { NextServerType } from './handlerUtils' - /* eslint-disable @typescript-eslint/no-var-requires */ - const { promises } = require('fs') const { Server } = require('http') const path = require('path') @@ -22,9 +19,9 @@ const { getMaxAge, getMultiValueHeaders, getPrefetchResponse, - getNextServer, normalizePath, } = require('./handlerUtils') +const { NetlifyNextServer } = require('./server') /* eslint-enable @typescript-eslint/no-var-requires */ type Mutable = { @@ -76,8 +73,7 @@ const makeHandler = (conf: NextConfig, app, pageRoot, staticManifest: Array<[str const port = Number.parseInt(url.port) || 80 base = url.origin - const NextServer: NextServerType = getNextServer() - const nextServer = new NextServer({ + const nextServer = new NetlifyNextServer({ conf, dir, customServer: false, @@ -180,6 +176,7 @@ export const getHandler = ({ isODB = false, publishDir = '../../../.next', appDi // We copy the file here rather than requiring from the node module const { Bridge } = require("./bridge"); const { augmentFsModule, getMaxAge, getMultiValueHeaders, getPrefetchResponse, getNextServer, normalizePath } = require('./handlerUtils') + const { NetlifyNextServer } = require('./server') ${isODB ? `const { builder } = require("@netlify/functions")` : ''} const { config } = require("${publishDir}/required-server-files.json") diff --git a/packages/runtime/src/templates/server.ts b/packages/runtime/src/templates/server.ts new file mode 100644 index 0000000000..84f35ed3da --- /dev/null +++ b/packages/runtime/src/templates/server.ts @@ -0,0 +1,19 @@ +import { NodeRequestHandler } from 'next/dist/server/next-server' + +import { getNextServer, NextServerType } from './handlerUtils' + +const NextServer: NextServerType = getNextServer() + +class NetlifyNextServer extends NextServer { + public getRequestHandler(): NodeRequestHandler { + const handler = super.getRequestHandler() + return (req, res, parsedUrl) => { + if (req.headers['x-prerender-revalidate']) { + console.log('Revalidate request') + } + return handler(req, res, parsedUrl) + } + } +} + +export { NetlifyNextServer } From 699ad3a24e17e77ee94705c7daa22ce7e79423cd Mon Sep 17 00:00:00 2001 From: Rob Stanford Date: Thu, 23 Feb 2023 11:19:58 +0000 Subject: [PATCH 10/10] feat: add revalidate API route --- demos/default/pages/api/revalidate.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 demos/default/pages/api/revalidate.js diff --git a/demos/default/pages/api/revalidate.js b/demos/default/pages/api/revalidate.js new file mode 100644 index 0000000000..ed5e0aa5ae --- /dev/null +++ b/demos/default/pages/api/revalidate.js @@ -0,0 +1,8 @@ +export default async function handler(req, res) { + try { + await res.revalidate('/getStaticProps/with-revalidate/') + return res.json({ revalidated: true }) + } catch (err) { + return res.status(500).send('Error revalidating') + } +}