diff --git a/CHANGELOG.md b/CHANGELOG.md index 09d5f2e791..9f28fa1b34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +### [4.1.3](https://www.github.com/netlify/netlify-plugin-nextjs/compare/v4.1.2...v4.1.3) (2022-01-13) + + +### Bug Fixes + +* handle `routes-manifest`s without `staticRoutes` defined ([#1120](https://www.github.com/netlify/netlify-plugin-nextjs/issues/1120)) ([96f3ccb](https://www.github.com/netlify/netlify-plugin-nextjs/commit/96f3ccb977e66dcd2b1a7911df24357501d18435)) + ### [4.1.2](https://www.github.com/netlify/netlify-plugin-nextjs/compare/v4.1.1...v4.1.2) (2022-01-11) diff --git a/package-lock.json b/package-lock.json index 811f22b269..0e146f4939 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@netlify/plugin-nextjs", - "version": "4.1.2", + "version": "4.1.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@netlify/plugin-nextjs", - "version": "4.1.2", + "version": "4.1.3", "license": "MIT", "dependencies": { "@netlify/functions": "^0.10.0", @@ -30,8 +30,8 @@ "@babel/core": "^7.15.8", "@babel/preset-env": "^7.15.8", "@babel/preset-typescript": "^7.16.0", - "@netlify/build": "^26.1.0", - "@netlify/eslint-config-node": "^4.1.0", + "@netlify/build": "^26.1.1", + "@netlify/eslint-config-node": "^4.1.2", "@testing-library/cypress": "^8.0.1", "@types/fs-extra": "^9.0.13", "@types/jest": "^27.0.2", @@ -3425,9 +3425,9 @@ "dev": true }, "node_modules/@netlify/build": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-26.1.0.tgz", - "integrity": "sha512-BZEC/8jUizGkZboc7RGGTC23KcFUH9MawpfH5ecFVM30gzL3LEdAOFZS/xvgffC3s5s2vsnZenslICowUpJueA==", + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-26.1.1.tgz", + "integrity": "sha512-bFVNUXElPPkKOMn3/d4mxmsaxpe4QJC376yuXqZIhKMn37JCDPAfE2sBkFgMK9TjsWNqYKfsIhUtUnjFB6y2gA==", "dev": true, "dependencies": { "@bugsnag/js": "^7.0.0", @@ -3435,8 +3435,8 @@ "@netlify/config": "^17.0.0", "@netlify/functions-utils": "^4.0.0", "@netlify/git-utils": "^4.0.0", - "@netlify/plugin-edge-handlers": "^3.0.0", - "@netlify/plugins-list": "^6.2.0", + "@netlify/plugin-edge-handlers": "^3.0.2", + "@netlify/plugins-list": "^6.2.1", "@netlify/run-utils": "^4.0.0", "@netlify/zip-it-and-ship-it": "^5.4.0", "@sindresorhus/slugify": "^1.1.0", @@ -3453,7 +3453,6 @@ "keep-func-props": "^3.0.0", "locate-path": "^6.0.0", "log-process-errors": "^6.0.0", - "make-dir": "^3.0.2", "map-obj": "^4.0.0", "memoize-one": "^6.0.0", "os-name": "^4.0.1", @@ -3922,9 +3921,9 @@ } }, "node_modules/@netlify/eslint-config-node": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.1.0.tgz", - "integrity": "sha512-7I+5Eli0IbLj+3flcxuOX5PyrApXicGAKohWKD7KCx/wSv2buN21kC0c1+Du8Uj5ykVCbHxfpwR59MnDNsZGBw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.1.2.tgz", + "integrity": "sha512-QAxFDj88ENOmT7K2HhpP3OVsaadBDgTZYaivo3Mbj/1O8PWkLRZJ12Bftw21d+rbfrF/OmcUrqN8AX8yl30Fng==", "dev": true, "dependencies": { "@babel/core": "^7.13.8", @@ -3952,7 +3951,7 @@ "eslint-plugin-unicorn": "^40.0.0", "eslint-plugin-you-dont-need-lodash-underscore": "^6.10.0", "execa": "^5.0.0", - "husky": "^4.3.0", + "husky": "^7.0.4", "is-ci": "^3.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.1.2", @@ -4034,6 +4033,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@netlify/eslint-config-node/node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/@netlify/eslint-config-node/node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -4308,9 +4322,9 @@ "dev": true }, "node_modules/@netlify/plugin-edge-handlers": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.0.tgz", - "integrity": "sha512-lolaK+xaY0Hud4tE89baA9FrwxebTvSTVTeQAEK3a9yj1o0jZrEzaBW9kGZ89lwANb4Mghz3PLaksOlEH179MA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.2.tgz", + "integrity": "sha512-MEJ2A5+5/EB5aqB1S/4vfEA30BKJnDpQ1yT439u9GvvFz6iDrMEi3IrlUdmevrnG6W9j1hYqvvCPPrBSnXLaeg==", "dev": true, "dependencies": { "@babel/core": "^7.11.4", @@ -4323,14 +4337,12 @@ "@types/node": "^16.0.0", "buffer-es6": "^4.9.3", "del": "^6.0.0", - "make-dir": "^3.1.0", "node-fetch": "^2.6.1", "path-type": "^4.0.0", "process-es6": "^0.11.6", "rollup": "^2.23.1", "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.1.5" + "rollup-plugin-terser": "^7.0.2" }, "bin": { "plugin-build-edge-handlers": "src/cli.js" @@ -4404,9 +4416,9 @@ } }, "node_modules/@netlify/plugins-list": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.2.0.tgz", - "integrity": "sha512-ZkrNrq1A/pVt32XsSLye9We0v+f0yqnOMD32Yu17KoMsL6AVF0KOyiAqjuJFNOZlusTkLgmZuMAbtmriybP0AQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.2.1.tgz", + "integrity": "sha512-/sXe4hjTFgKnRDFDiqU1qLvRCc+JtOqTLFf3aMNA6Xp7bSKGtTYJFOwTpPIUUOyLaDqbBdU3IOjemc6EtyC8qg==", "dev": true, "engines": { "node": "^12.20.0 || ^14.14.0 || >=16.0.0" @@ -28132,9 +28144,9 @@ "dev": true }, "@netlify/build": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-26.1.0.tgz", - "integrity": "sha512-BZEC/8jUizGkZboc7RGGTC23KcFUH9MawpfH5ecFVM30gzL3LEdAOFZS/xvgffC3s5s2vsnZenslICowUpJueA==", + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-26.1.1.tgz", + "integrity": "sha512-bFVNUXElPPkKOMn3/d4mxmsaxpe4QJC376yuXqZIhKMn37JCDPAfE2sBkFgMK9TjsWNqYKfsIhUtUnjFB6y2gA==", "dev": true, "requires": { "@bugsnag/js": "^7.0.0", @@ -28142,8 +28154,8 @@ "@netlify/config": "^17.0.0", "@netlify/functions-utils": "^4.0.0", "@netlify/git-utils": "^4.0.0", - "@netlify/plugin-edge-handlers": "^3.0.0", - "@netlify/plugins-list": "^6.2.0", + "@netlify/plugin-edge-handlers": "^3.0.2", + "@netlify/plugins-list": "^6.2.1", "@netlify/run-utils": "^4.0.0", "@netlify/zip-it-and-ship-it": "^5.4.0", "@sindresorhus/slugify": "^1.1.0", @@ -28160,7 +28172,6 @@ "keep-func-props": "^3.0.0", "locate-path": "^6.0.0", "log-process-errors": "^6.0.0", - "make-dir": "^3.0.2", "map-obj": "^4.0.0", "memoize-one": "^6.0.0", "os-name": "^4.0.1", @@ -28490,9 +28501,9 @@ "dev": true }, "@netlify/eslint-config-node": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.1.0.tgz", - "integrity": "sha512-7I+5Eli0IbLj+3flcxuOX5PyrApXicGAKohWKD7KCx/wSv2buN21kC0c1+Du8Uj5ykVCbHxfpwR59MnDNsZGBw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@netlify/eslint-config-node/-/eslint-config-node-4.1.2.tgz", + "integrity": "sha512-QAxFDj88ENOmT7K2HhpP3OVsaadBDgTZYaivo3Mbj/1O8PWkLRZJ12Bftw21d+rbfrF/OmcUrqN8AX8yl30Fng==", "dev": true, "requires": { "@babel/core": "^7.13.8", @@ -28520,7 +28531,7 @@ "eslint-plugin-unicorn": "^40.0.0", "eslint-plugin-you-dont-need-lodash-underscore": "^6.10.0", "execa": "^5.0.0", - "husky": "^4.3.0", + "husky": "^7.0.4", "is-ci": "^3.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.1.2", @@ -28574,6 +28585,12 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, "is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -28776,9 +28793,9 @@ "dev": true }, "@netlify/plugin-edge-handlers": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.0.tgz", - "integrity": "sha512-lolaK+xaY0Hud4tE89baA9FrwxebTvSTVTeQAEK3a9yj1o0jZrEzaBW9kGZ89lwANb4Mghz3PLaksOlEH179MA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@netlify/plugin-edge-handlers/-/plugin-edge-handlers-3.0.2.tgz", + "integrity": "sha512-MEJ2A5+5/EB5aqB1S/4vfEA30BKJnDpQ1yT439u9GvvFz6iDrMEi3IrlUdmevrnG6W9j1hYqvvCPPrBSnXLaeg==", "dev": true, "requires": { "@babel/core": "^7.11.4", @@ -28791,14 +28808,12 @@ "@types/node": "^16.0.0", "buffer-es6": "^4.9.3", "del": "^6.0.0", - "make-dir": "^3.1.0", "node-fetch": "^2.6.1", "path-type": "^4.0.0", "process-es6": "^0.11.6", "rollup": "^2.23.1", "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "typescript": "^4.1.5" + "rollup-plugin-terser": "^7.0.2" }, "dependencies": { "@types/node": { @@ -28850,9 +28865,9 @@ } }, "@netlify/plugins-list": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.2.0.tgz", - "integrity": "sha512-ZkrNrq1A/pVt32XsSLye9We0v+f0yqnOMD32Yu17KoMsL6AVF0KOyiAqjuJFNOZlusTkLgmZuMAbtmriybP0AQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.2.1.tgz", + "integrity": "sha512-/sXe4hjTFgKnRDFDiqU1qLvRCc+JtOqTLFf3aMNA6Xp7bSKGtTYJFOwTpPIUUOyLaDqbBdU3IOjemc6EtyC8qg==", "dev": true }, "@netlify/run-utils": { diff --git a/package.json b/package.json index 3eac7f4ed7..25112ac1fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@netlify/plugin-nextjs", - "version": "4.1.2", + "version": "4.1.3", "description": "Run Next.js seamlessly on Netlify", "main": "lib/index.js", "files": [ @@ -74,8 +74,8 @@ "@babel/core": "^7.15.8", "@babel/preset-env": "^7.15.8", "@babel/preset-typescript": "^7.16.0", - "@netlify/build": "^26.1.0", - "@netlify/eslint-config-node": "^4.1.0", + "@netlify/build": "^26.1.1", + "@netlify/eslint-config-node": "^4.1.2", "@testing-library/cypress": "^8.0.1", "@types/fs-extra": "^9.0.13", "@types/jest": "^27.0.2", diff --git a/src/helpers/redirects.ts b/src/helpers/redirects.ts index e43cf52e13..2cf6e7e5b9 100644 --- a/src/helpers/redirects.ts +++ b/src/helpers/redirects.ts @@ -139,8 +139,8 @@ export const generateRedirects = async ({ ) } }) - // Add rewrites for all static SSR routes - staticRoutes.forEach((route) => { + // Add rewrites for all static SSR routes. This is Next 12+ + staticRoutes?.forEach((route) => { if (staticRoutePaths.has(route.page) || isApiRoute(route.page)) { // Prerendered static routes are either handled by the CDN or are ISR return diff --git a/src/helpers/types.ts b/src/helpers/types.ts index 80501c6618..2ab68af1d6 100644 --- a/src/helpers/types.ts +++ b/src/helpers/types.ts @@ -46,7 +46,7 @@ export interface RoutesManifest { redirects: Redirect[] headers: Header[] dynamicRoutes: DynamicRoute[] - staticRoutes: StaticRoute[] + staticRoutes?: StaticRoute[] dataRoutes: DataRoute[] i18n: I18n rewrites: Rewrites diff --git a/test/index.js b/test/index.js index c9449266be..7539a494c3 100644 --- a/test/index.js +++ b/test/index.js @@ -409,6 +409,16 @@ describe('onBuild()', () => { expect(readFileSync(handlerFile, 'utf8')).toMatch(`require("../../../.next/required-server-files.json")`) expect(readFileSync(odbHandlerFile, 'utf8')).toMatch(`require("../../../.next/required-server-files.json")`) }) + + test('handles empty routesManifest.staticRoutes', async () => { + await moveNextDist() + const manifestPath = path.resolve('.next/routes-manifest.json') + const routesManifest = await readJson(manifestPath) + delete routesManifest.staticRoutes + await writeJSON(manifestPath, routesManifest) + // The function is supposed to return undefined, but we want to check if it throws + expect(await plugin.onBuild(defaultArgs)).toBeUndefined() + }) }) describe('onPostBuild', () => {