diff --git a/.eslintignore b/.eslintignore
index 33b482eefb..17568bf9bf 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -4,5 +4,6 @@ test
lib
demos
packages/runtime/src/templates/edge
+packages/runtime/src/templates/edge-shared
packages/runtime/lib
packages/runtime/dist-types
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 032d621103..5e1acb3317 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,7 @@
{
"deno.enablePaths": [
"packages/runtime/src/templates/edge",
+ "packages/runtime/src/templates/edge-shared",
"demos/middleware/.netlify/edge-functions",
"demos/server-components/.netlify/edge-functions",
],
diff --git a/cypress/integration/middleware/standard.spec.ts b/cypress/integration/middleware/standard.spec.ts
index dd6b38dd97..6bc197bfa8 100644
--- a/cypress/integration/middleware/standard.spec.ts
+++ b/cypress/integration/middleware/standard.spec.ts
@@ -20,3 +20,26 @@ describe('Standard middleware', () => {
})
})
})
+
+describe('Middleware matchers', () => {
+ it('does not apply "has" matcher when headers are not sent', () => {
+ cy.request('/conditional').then((response) => {
+ expect(response.headers).not.to.have.property('x-is-deno', 'true')
+ expect(response.headers).not.to.have.property('x-modified-edge', 'true')
+ })
+ })
+
+ it('matches when headers are sent', () => {
+ cy.request({ url: '/conditional', headers: { 'x-my-header': 'my-value' } }).then((response) => {
+ expect(response.headers).to.have.property('x-is-deno', 'true')
+ expect(response.headers).to.have.property('x-modified-edge', 'true')
+ })
+ })
+
+ it('matches when headers are sent', () => {
+ cy.request('/_next/data/build-id/static.json').then((response) => {
+ expect(response.headers).to.have.property('x-is-deno', 'true')
+ expect(response.headers).to.have.property('x-modified-edge', 'true')
+ })
+ })
+})
diff --git a/demos/base-path/package.json b/demos/base-path/package.json
index aeafdb9690..c026033fe5 100644
--- a/demos/base-path/package.json
+++ b/demos/base-path/package.json
@@ -13,7 +13,7 @@
"typescript": "^4.6.3"
},
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
diff --git a/demos/canary/middleware.ts b/demos/canary/middleware.ts
new file mode 100644
index 0000000000..d695d442df
--- /dev/null
+++ b/demos/canary/middleware.ts
@@ -0,0 +1,13 @@
+import { NextResponse } from 'next/server'
+import type { NextRequest } from 'next/server'
+
+export async function middleware(req: NextRequest) {
+ const res = NextResponse.rewrite(new URL('/', req.url))
+ res.headers.set('x-response-header', 'set in middleware')
+ res.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false')
+ return res
+}
+
+export const config = {
+ matcher: ['/foo'],
+}
diff --git a/demos/canary/package-lock.json b/demos/canary/package-lock.json
index cd82d41a4e..1cb781bd7e 100644
--- a/demos/canary/package-lock.json
+++ b/demos/canary/package-lock.json
@@ -8,7 +8,7 @@
"name": "canary",
"version": "0.1.0",
"dependencies": {
- "next": "^12.2.6-canary.12",
+ "next": "^12.2.0",
"react": "18.1.0",
"react-dom": "18.1.0"
},
@@ -65,14 +65,14 @@
"license": "BSD-3-Clause"
},
"node_modules/@next/env": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.6-canary.12.tgz",
- "integrity": "sha512-oGA2TXjlIeW4V5xdEAO1X9XSkTLBwPm4eCK8co5jV+6sM+ePN07kwjAcfrgK/P3pyJJDr8jEl0/liT4ZNEIwUw=="
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz",
+ "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w=="
},
"node_modules/@next/swc-android-arm-eabi": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.6-canary.12.tgz",
- "integrity": "sha512-8FMluek7Q2+34SbIu2zTB6T/3kHwI3n/f6b7nTDHT6NNGPaVfA3BEHgL6kXix9oWU8aKf5t66UPmUTHDEouK7g==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz",
+ "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==",
"cpu": [
"arm"
],
@@ -85,9 +85,9 @@
}
},
"node_modules/@next/swc-android-arm64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.6-canary.12.tgz",
- "integrity": "sha512-B6quwKDfeUI2hcau1FXMpxJ3/l7jD03p9JfR7o/7PSob6jjaio+A8PBJUuvjCyRbmjcBnCz0Q51HagDDmfHV7w==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz",
+ "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==",
"cpu": [
"arm64"
],
@@ -100,9 +100,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.6-canary.12.tgz",
- "integrity": "sha512-n1mU6b+FxVSduIocM0d6Bojb0ZnpQvNbsIJzPbb/QVDwB9H1j0GfQfIWHanKPRXh2W2D90oyLcu0MBzi2VQmxQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz",
+ "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==",
"cpu": [
"arm64"
],
@@ -115,9 +115,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.6-canary.12.tgz",
- "integrity": "sha512-KL1bVS14V2cuo+zxX71/cpGhf/fjD7NEgYZl5urke2GooGCNSq30+6Ndp9GSyw44BEbCs1885sEY1BDMNj0ILQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz",
+ "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==",
"cpu": [
"x64"
],
@@ -130,9 +130,9 @@
}
},
"node_modules/@next/swc-freebsd-x64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.6-canary.12.tgz",
- "integrity": "sha512-kLRSsWO8LdRizHrduUeykWlHvyHpkGQP5W7rI6Z1qReAVSGd2rSa8BWUDr30O4n/ErNlyfH+6z3WqXDYiIv0yQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz",
+ "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==",
"cpu": [
"x64"
],
@@ -145,9 +145,9 @@
}
},
"node_modules/@next/swc-linux-arm-gnueabihf": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.6-canary.12.tgz",
- "integrity": "sha512-/djx+YxdPBz0G4mO8MaKALSbZc/lbJJi0s4WrHEQaJhFeXOgnvs+UC0OHxyyJAi+l9ImF3uFjhHGFyHaSzvYVw==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz",
+ "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==",
"cpu": [
"arm"
],
@@ -160,9 +160,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.6-canary.12.tgz",
- "integrity": "sha512-eEYzzp96hSqc8GSX9DiLLgx07fDZz6pLU5ozFz39g71/NodgZO0+cBZWDVkIGp6jXi5IzvkDoTYw4OCMed9NtQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz",
+ "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==",
"cpu": [
"arm64"
],
@@ -175,9 +175,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.6-canary.12.tgz",
- "integrity": "sha512-DkyxDLYV1RjuydSmgqN9nO4LaVjrtVkXgWvPgNjhLgRTJ+xJLwympvVPea4GdGEhF+VkzizUgHJeQfKoy/0tJA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz",
+ "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==",
"cpu": [
"arm64"
],
@@ -190,9 +190,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.6-canary.12.tgz",
- "integrity": "sha512-3h7uPxVCXqbTfbevTLnRjRAchoSDaAJQ9mJU+9sOUF++1Ct6C0bP/TsaWG7J9h0Q0zyoJ/RKAT0I9Kz3h9RHkQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz",
+ "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==",
"cpu": [
"x64"
],
@@ -205,9 +205,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.6-canary.12.tgz",
- "integrity": "sha512-hi5hdVSMh98vf7b7MSua4+8RnCrz4KnXW8A+6SmvVs50X9PR+dFe8GfrCEn0P3GAsvbtj3s6XjqIVsXByxNL5Q==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz",
+ "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==",
"cpu": [
"x64"
],
@@ -220,9 +220,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-7balFbuhk1eV5/sC/YzXy2tECwglYd41dpdgn43uwqoZBN/JzHX/jr0cp6oHZkOSu26m9n+ty9YyxthravXBcw==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz",
+ "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==",
"cpu": [
"arm64"
],
@@ -235,9 +235,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-ktExRLgdZy3bjiJVcrTNPwdY1PODcVE4y/FPW6iJZhaoytF65u9YG3JfAKtgfES/fwmE6LNacCBC2XlWEM+fiQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz",
+ "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==",
"cpu": [
"ia32"
],
@@ -250,9 +250,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-RPM3ZnP0iGF5eVpEmfA5yJpOyA5Zu66+IrH3bmUpE+MbrG7XzSH8pU+m6LUPQadiPeHbGG7CZfTTNu3YQZC5xA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz",
+ "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==",
"cpu": [
"x64"
],
@@ -300,9 +300,9 @@
}
},
"node_modules/@swc/helpers": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
- "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz",
+ "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==",
"dependencies": {
"tslib": "^2.4.0"
}
@@ -1084,16 +1084,16 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/next/-/next-12.2.6-canary.12.tgz",
- "integrity": "sha512-pmiDm9+7nPTobfXjXzwmiaYRo9T9xK3RAuhTgjwFnquRVQ1Bdm6oYyU+tP2YdvkveukMR9nD8CS61sBWtbzUNA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz",
+ "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==",
"dependencies": {
- "@next/env": "12.2.6-canary.12",
- "@swc/helpers": "0.4.11",
+ "@next/env": "12.2.0",
+ "@swc/helpers": "0.4.2",
"caniuse-lite": "^1.0.30001332",
- "postcss": "8.4.14",
- "styled-jsx": "5.0.6",
- "use-sync-external-store": "1.2.0"
+ "postcss": "8.4.5",
+ "styled-jsx": "5.0.2",
+ "use-sync-external-store": "1.1.0"
},
"bin": {
"next": "dist/bin/next"
@@ -1102,19 +1102,19 @@
"node": ">=12.22.0"
},
"optionalDependencies": {
- "@next/swc-android-arm-eabi": "12.2.6-canary.12",
- "@next/swc-android-arm64": "12.2.6-canary.12",
- "@next/swc-darwin-arm64": "12.2.6-canary.12",
- "@next/swc-darwin-x64": "12.2.6-canary.12",
- "@next/swc-freebsd-x64": "12.2.6-canary.12",
- "@next/swc-linux-arm-gnueabihf": "12.2.6-canary.12",
- "@next/swc-linux-arm64-gnu": "12.2.6-canary.12",
- "@next/swc-linux-arm64-musl": "12.2.6-canary.12",
- "@next/swc-linux-x64-gnu": "12.2.6-canary.12",
- "@next/swc-linux-x64-musl": "12.2.6-canary.12",
- "@next/swc-win32-arm64-msvc": "12.2.6-canary.12",
- "@next/swc-win32-ia32-msvc": "12.2.6-canary.12",
- "@next/swc-win32-x64-msvc": "12.2.6-canary.12"
+ "@next/swc-android-arm-eabi": "12.2.0",
+ "@next/swc-android-arm64": "12.2.0",
+ "@next/swc-darwin-arm64": "12.2.0",
+ "@next/swc-darwin-x64": "12.2.0",
+ "@next/swc-freebsd-x64": "12.2.0",
+ "@next/swc-linux-arm-gnueabihf": "12.2.0",
+ "@next/swc-linux-arm64-gnu": "12.2.0",
+ "@next/swc-linux-arm64-musl": "12.2.0",
+ "@next/swc-linux-x64-gnu": "12.2.0",
+ "@next/swc-linux-x64-musl": "12.2.0",
+ "@next/swc-win32-arm64-msvc": "12.2.0",
+ "@next/swc-win32-ia32-msvc": "12.2.0",
+ "@next/swc-win32-x64-msvc": "12.2.0"
},
"peerDependencies": {
"fibers": ">= 3.1.0",
@@ -1252,26 +1252,20 @@
}
},
"node_modules/postcss": {
- "version": "8.4.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
- "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- }
- ],
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"dependencies": {
- "nanoid": "^3.3.4",
+ "nanoid": "^3.1.30",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
}
},
"node_modules/prelude-ls": {
@@ -1463,9 +1457,9 @@
}
},
"node_modules/styled-jsx": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.6.tgz",
- "integrity": "sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
+ "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
"engines": {
"node": ">= 12.0.0"
},
@@ -1545,9 +1539,9 @@
}
},
"node_modules/use-sync-external-store": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
+ "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
@@ -1635,86 +1629,86 @@
"dev": true
},
"@next/env": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.6-canary.12.tgz",
- "integrity": "sha512-oGA2TXjlIeW4V5xdEAO1X9XSkTLBwPm4eCK8co5jV+6sM+ePN07kwjAcfrgK/P3pyJJDr8jEl0/liT4ZNEIwUw=="
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz",
+ "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w=="
},
"@next/swc-android-arm-eabi": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.6-canary.12.tgz",
- "integrity": "sha512-8FMluek7Q2+34SbIu2zTB6T/3kHwI3n/f6b7nTDHT6NNGPaVfA3BEHgL6kXix9oWU8aKf5t66UPmUTHDEouK7g==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz",
+ "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==",
"optional": true
},
"@next/swc-android-arm64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.6-canary.12.tgz",
- "integrity": "sha512-B6quwKDfeUI2hcau1FXMpxJ3/l7jD03p9JfR7o/7PSob6jjaio+A8PBJUuvjCyRbmjcBnCz0Q51HagDDmfHV7w==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz",
+ "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==",
"optional": true
},
"@next/swc-darwin-arm64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.6-canary.12.tgz",
- "integrity": "sha512-n1mU6b+FxVSduIocM0d6Bojb0ZnpQvNbsIJzPbb/QVDwB9H1j0GfQfIWHanKPRXh2W2D90oyLcu0MBzi2VQmxQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz",
+ "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==",
"optional": true
},
"@next/swc-darwin-x64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.6-canary.12.tgz",
- "integrity": "sha512-KL1bVS14V2cuo+zxX71/cpGhf/fjD7NEgYZl5urke2GooGCNSq30+6Ndp9GSyw44BEbCs1885sEY1BDMNj0ILQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz",
+ "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==",
"optional": true
},
"@next/swc-freebsd-x64": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.6-canary.12.tgz",
- "integrity": "sha512-kLRSsWO8LdRizHrduUeykWlHvyHpkGQP5W7rI6Z1qReAVSGd2rSa8BWUDr30O4n/ErNlyfH+6z3WqXDYiIv0yQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz",
+ "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==",
"optional": true
},
"@next/swc-linux-arm-gnueabihf": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.6-canary.12.tgz",
- "integrity": "sha512-/djx+YxdPBz0G4mO8MaKALSbZc/lbJJi0s4WrHEQaJhFeXOgnvs+UC0OHxyyJAi+l9ImF3uFjhHGFyHaSzvYVw==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz",
+ "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==",
"optional": true
},
"@next/swc-linux-arm64-gnu": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.6-canary.12.tgz",
- "integrity": "sha512-eEYzzp96hSqc8GSX9DiLLgx07fDZz6pLU5ozFz39g71/NodgZO0+cBZWDVkIGp6jXi5IzvkDoTYw4OCMed9NtQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz",
+ "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==",
"optional": true
},
"@next/swc-linux-arm64-musl": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.6-canary.12.tgz",
- "integrity": "sha512-DkyxDLYV1RjuydSmgqN9nO4LaVjrtVkXgWvPgNjhLgRTJ+xJLwympvVPea4GdGEhF+VkzizUgHJeQfKoy/0tJA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz",
+ "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==",
"optional": true
},
"@next/swc-linux-x64-gnu": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.6-canary.12.tgz",
- "integrity": "sha512-3h7uPxVCXqbTfbevTLnRjRAchoSDaAJQ9mJU+9sOUF++1Ct6C0bP/TsaWG7J9h0Q0zyoJ/RKAT0I9Kz3h9RHkQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz",
+ "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==",
"optional": true
},
"@next/swc-linux-x64-musl": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.6-canary.12.tgz",
- "integrity": "sha512-hi5hdVSMh98vf7b7MSua4+8RnCrz4KnXW8A+6SmvVs50X9PR+dFe8GfrCEn0P3GAsvbtj3s6XjqIVsXByxNL5Q==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz",
+ "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==",
"optional": true
},
"@next/swc-win32-arm64-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-7balFbuhk1eV5/sC/YzXy2tECwglYd41dpdgn43uwqoZBN/JzHX/jr0cp6oHZkOSu26m9n+ty9YyxthravXBcw==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz",
+ "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==",
"optional": true
},
"@next/swc-win32-ia32-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-ktExRLgdZy3bjiJVcrTNPwdY1PODcVE4y/FPW6iJZhaoytF65u9YG3JfAKtgfES/fwmE6LNacCBC2XlWEM+fiQ==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz",
+ "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==",
"optional": true
},
"@next/swc-win32-x64-msvc": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.6-canary.12.tgz",
- "integrity": "sha512-RPM3ZnP0iGF5eVpEmfA5yJpOyA5Zu66+IrH3bmUpE+MbrG7XzSH8pU+m6LUPQadiPeHbGG7CZfTTNu3YQZC5xA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz",
+ "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==",
"optional": true
},
"@nodelib/fs.scandir": {
@@ -1744,9 +1738,9 @@
}
},
"@swc/helpers": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
- "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz",
+ "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==",
"requires": {
"tslib": "^2.4.0"
}
@@ -1759,8 +1753,7 @@
},
"acorn-jsx": {
"version": "5.3.2",
- "dev": true,
- "requires": {}
+ "dev": true
},
"ajv": {
"version": "6.12.6",
@@ -2265,29 +2258,29 @@
"dev": true
},
"next": {
- "version": "12.2.6-canary.12",
- "resolved": "https://registry.npmjs.org/next/-/next-12.2.6-canary.12.tgz",
- "integrity": "sha512-pmiDm9+7nPTobfXjXzwmiaYRo9T9xK3RAuhTgjwFnquRVQ1Bdm6oYyU+tP2YdvkveukMR9nD8CS61sBWtbzUNA==",
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz",
+ "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==",
"requires": {
- "@next/env": "12.2.6-canary.12",
- "@next/swc-android-arm-eabi": "12.2.6-canary.12",
- "@next/swc-android-arm64": "12.2.6-canary.12",
- "@next/swc-darwin-arm64": "12.2.6-canary.12",
- "@next/swc-darwin-x64": "12.2.6-canary.12",
- "@next/swc-freebsd-x64": "12.2.6-canary.12",
- "@next/swc-linux-arm-gnueabihf": "12.2.6-canary.12",
- "@next/swc-linux-arm64-gnu": "12.2.6-canary.12",
- "@next/swc-linux-arm64-musl": "12.2.6-canary.12",
- "@next/swc-linux-x64-gnu": "12.2.6-canary.12",
- "@next/swc-linux-x64-musl": "12.2.6-canary.12",
- "@next/swc-win32-arm64-msvc": "12.2.6-canary.12",
- "@next/swc-win32-ia32-msvc": "12.2.6-canary.12",
- "@next/swc-win32-x64-msvc": "12.2.6-canary.12",
- "@swc/helpers": "0.4.11",
+ "@next/env": "12.2.0",
+ "@next/swc-android-arm-eabi": "12.2.0",
+ "@next/swc-android-arm64": "12.2.0",
+ "@next/swc-darwin-arm64": "12.2.0",
+ "@next/swc-darwin-x64": "12.2.0",
+ "@next/swc-freebsd-x64": "12.2.0",
+ "@next/swc-linux-arm-gnueabihf": "12.2.0",
+ "@next/swc-linux-arm64-gnu": "12.2.0",
+ "@next/swc-linux-arm64-musl": "12.2.0",
+ "@next/swc-linux-x64-gnu": "12.2.0",
+ "@next/swc-linux-x64-musl": "12.2.0",
+ "@next/swc-win32-arm64-msvc": "12.2.0",
+ "@next/swc-win32-ia32-msvc": "12.2.0",
+ "@next/swc-win32-x64-msvc": "12.2.0",
+ "@swc/helpers": "0.4.2",
"caniuse-lite": "^1.0.30001332",
- "postcss": "8.4.14",
- "styled-jsx": "5.0.6",
- "use-sync-external-store": "1.2.0"
+ "postcss": "8.4.5",
+ "styled-jsx": "5.0.2",
+ "use-sync-external-store": "1.1.0"
}
},
"once": {
@@ -2366,13 +2359,13 @@
"dev": true
},
"postcss": {
- "version": "8.4.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
- "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
"requires": {
- "nanoid": "^3.3.4",
+ "nanoid": "^3.1.30",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.0.1"
}
},
"prelude-ls": {
@@ -2472,10 +2465,9 @@
"dev": true
},
"styled-jsx": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.6.tgz",
- "integrity": "sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA==",
- "requires": {}
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
+ "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ=="
},
"supports-color": {
"version": "7.2.0",
@@ -2521,10 +2513,9 @@
}
},
"use-sync-external-store": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
- "requires": {}
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
+ "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ=="
},
"v8-compile-cache": {
"version": "2.3.0",
diff --git a/demos/canary/package.json b/demos/canary/package.json
index 64b65d6ef3..c0f8c9cab3 100644
--- a/demos/canary/package.json
+++ b/demos/canary/package.json
@@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
- "next": "^12.2.6-canary.12",
+ "next": "^12.2.0",
"react": "18.1.0",
"react-dom": "18.1.0"
},
diff --git a/demos/custom-routes/package.json b/demos/custom-routes/package.json
index d1f1ff6c8f..c2586faf96 100644
--- a/demos/custom-routes/package.json
+++ b/demos/custom-routes/package.json
@@ -14,7 +14,7 @@
"typescript": "^4.7.4"
},
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"scripts": {
"build": "next build",
diff --git a/demos/default/package.json b/demos/default/package.json
index ff29743785..5043dc7c48 100644
--- a/demos/default/package.json
+++ b/demos/default/package.json
@@ -20,7 +20,7 @@
"dependencies": {
"@reach/dialog": "^0.16.2",
"@reach/visually-hidden": "^0.16.0",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts
index 1344f60949..f670c665ae 100644
--- a/demos/middleware/middleware.ts
+++ b/demos/middleware/middleware.ts
@@ -18,6 +18,8 @@ export async function middleware(req: NextRequest) {
res.setPageProp('message', message)
res.setPageProp('showAd', true)
+ res.headers.set('x-modified-edge', 'true')
+ res.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false')
return res
}
@@ -39,6 +41,13 @@ export async function middleware(req: NextRequest) {
return response
}
+ if (pathname.startsWith('/conditional')) {
+ response = NextResponse.next()
+ response.headers.set('x-modified-edge', 'true')
+ response.headers.set('x-is-deno', 'Deno' in globalThis ? 'true' : 'false')
+ return response
+ }
+
if (pathname.startsWith('/shows')) {
if (pathname.startsWith('/shows/rewrite-absolute')) {
response = NextResponse.rewrite(new URL('/shows/100', req.url))
@@ -79,3 +88,22 @@ export async function middleware(req: NextRequest) {
return response
}
}
+
+export const config = {
+ matcher: [
+ '/api/:all*',
+ '/headers',
+ { source: '/static' },
+ { source: '/shows/:all*' },
+ {
+ source: '/conditional',
+ has: [
+ {
+ type: 'header',
+ key: 'x-my-header',
+ value: 'my-value',
+ },
+ ],
+ },
+ ],
+}
diff --git a/demos/middleware/package.json b/demos/middleware/package.json
index bef88c4795..a361e595ba 100644
--- a/demos/middleware/package.json
+++ b/demos/middleware/package.json
@@ -11,7 +11,7 @@
"dependencies": {
"@netlify/next": "*",
"@netlify/plugin-nextjs": "*",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},
@@ -24,4 +24,4 @@
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
-}
+}
\ No newline at end of file
diff --git a/demos/middleware/pages/conditional.js b/demos/middleware/pages/conditional.js
new file mode 100644
index 0000000000..97d062839d
--- /dev/null
+++ b/demos/middleware/pages/conditional.js
@@ -0,0 +1,11 @@
+import * as React from 'react'
+
+const Page = () => {
+ return (
+
+
Will set middleware headers only if request header is set
+
+ )
+}
+
+export default Page
diff --git a/demos/middleware/tsconfig.json b/demos/middleware/tsconfig.json
index 2ea20c6c5f..9b052cc0bd 100644
--- a/demos/middleware/tsconfig.json
+++ b/demos/middleware/tsconfig.json
@@ -17,11 +17,12 @@
},
"exclude": [
"node_modules",
- "../../src/templates/edge/*"
+ "../../src/templates/edge/*",
+ "../../src/templates/edge-shared/*"
],
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx"
]
-}
+}
\ No newline at end of file
diff --git a/demos/next-auth/package.json b/demos/next-auth/package.json
index f80956c131..5352f977c4 100644
--- a/demos/next-auth/package.json
+++ b/demos/next-auth/package.json
@@ -23,7 +23,7 @@
],
"license": "MIT",
"dependencies": {
- "next": "^12.2.0",
+ "next": "^12.3.0",
"next-auth": "^4.7.0",
"nodemailer": "^6.6.3",
"react": "^18.0.0",
diff --git a/demos/next-export/package.json b/demos/next-export/package.json
index d053ffaf92..a70a70e1fd 100644
--- a/demos/next-export/package.json
+++ b/demos/next-export/package.json
@@ -3,7 +3,7 @@
"version": "1.0.0",
"description": "",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
diff --git a/demos/next-i18next/package-lock.json b/demos/next-i18next/package-lock.json
index 97cb432c82..a303acef0a 100644
--- a/demos/next-i18next/package-lock.json
+++ b/demos/next-i18next/package-lock.json
@@ -8,7 +8,7 @@
"name": "next-i18next",
"version": "0.1.0",
"dependencies": {
- "next": "^12.2.0",
+ "next": "^12.3.0",
"next-i18next": "^11.0.0",
"react": "18.1.0",
"react-dom": "18.1.0"
@@ -5541,4 +5541,4 @@
"dev": true
}
}
-}
+}
\ No newline at end of file
diff --git a/demos/next-i18next/package.json b/demos/next-i18next/package.json
index a5447cc98c..1c7722adc3 100644
--- a/demos/next-i18next/package.json
+++ b/demos/next-i18next/package.json
@@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
- "next": "^12.2.0",
+ "next": "^12.3.0",
"next-i18next": "^11.0.0",
"react": "18.1.0",
"react-dom": "18.1.0"
@@ -18,4 +18,4 @@
"eslint": "8.22.0",
"eslint-config-next": "12.2.4"
}
-}
+}
\ No newline at end of file
diff --git a/demos/server-components/package.json b/demos/server-components/package.json
index c121f075e9..293ab369c0 100644
--- a/demos/server-components/package.json
+++ b/demos/server-components/package.json
@@ -11,7 +11,7 @@
"private": true,
"dependencies": {
"ms": "2.1.3",
- "next": "^12.2.0",
+ "next": "^12.2.1",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
@@ -24,4 +24,4 @@
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
-}
\ No newline at end of file
+}
diff --git a/demos/static-root/package.json b/demos/static-root/package.json
index dbf5cc7980..1a6e034c42 100644
--- a/demos/static-root/package.json
+++ b/demos/static-root/package.json
@@ -3,7 +3,7 @@
"version": "1.0.0",
"description": "",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
diff --git a/package-lock.json b/package-lock.json
index 8445adb027..36cbcde026 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,7 +21,7 @@
"demos/next-with-edge-functions"
],
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@babel/core": "^7.15.8",
@@ -65,7 +65,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
@@ -82,7 +82,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
@@ -114,7 +114,7 @@
"dependencies": {
"@reach/dialog": "^0.16.2",
"@reach/visually-hidden": "^0.16.0",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
@@ -192,7 +192,7 @@
"dependencies": {
"@netlify/next": "*",
"@netlify/plugin-nextjs": "*",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"react": "18.0.0",
"react-dom": "18.0.0"
},
@@ -211,7 +211,7 @@
"version": "0.0.0",
"license": "MIT",
"dependencies": {
- "next": "^12.2.0",
+ "next": "^12.3.0",
"next-auth": "^4.7.0",
"nodemailer": "^6.6.3",
"react": "^18.0.0",
@@ -247,7 +247,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
@@ -321,7 +321,7 @@
"license": "MIT",
"dependencies": {
"ms": "2.1.3",
- "next": "^12.2.0",
+ "next": "^12.2.1",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
@@ -340,7 +340,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"devDependencies": {
"@netlify/plugin-nextjs": "*",
@@ -4541,9 +4541,9 @@
}
},
"node_modules/@next/env": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.4.tgz",
- "integrity": "sha512-/gApFXWk5CCLFQJL5IYJXxPQuG5tz5nPX4l27A9Zm/+wJxiwFrRSP54AopDxIv4JRp/rGwcgk/lZS/0Clw8jYA=="
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.0.tgz",
+ "integrity": "sha512-PTJpjAFVbzBQ9xXpzMTroShvD5YDIIy46jQ7d4LrWpY+/5a8H90Tm8hE3Hvkc5RBRspVo7kvEOnqQms0A+2Q6w=="
},
"node_modules/@next/eslint-plugin-next": {
"version": "12.2.4",
@@ -4587,9 +4587,9 @@
}
},
"node_modules/@next/swc-android-arm-eabi": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.4.tgz",
- "integrity": "sha512-P4YSFNpmXXSnn3P1qsOAqz+MX3On9fHrlc8ovb/CFJJoU+YLCR53iCEwfw39e0IZEgDA7ttgr108plF8mxaX0g==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz",
+ "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==",
"cpu": [
"arm"
],
@@ -4602,9 +4602,9 @@
}
},
"node_modules/@next/swc-android-arm64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.4.tgz",
- "integrity": "sha512-4o2n14E18O+8xHlf6dgJsWPXN9gmSmfIe2Z0EqKDIPBBkFt/2CyrH0+vwHnL2l7xkDHhOGfZYcYIWVUR5aNu0A==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz",
+ "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==",
"cpu": [
"arm64"
],
@@ -4617,9 +4617,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.4.tgz",
- "integrity": "sha512-DcUO6MGBL9E3jj5o86MUnTOy4WawIJJhyCcFYO4f51sbl7+uPIYIx40eo98A6NwJEXazCqq1hLeqOaNTAIvDiQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.0.tgz",
+ "integrity": "sha512-9s4d3Mhii+WFce8o8Jok7WC3Bawkr9wEUU++SJRptjU1L5tsfYJMrSYCACHLhZujziNDLyExe4Hwwsccps1sfg==",
"cpu": [
"arm64"
],
@@ -4632,9 +4632,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.4.tgz",
- "integrity": "sha512-IUlFMqeLjdIzDorrGC2Dt+2Ae3DbKQbRzCzmDq4/CP1+jJGeDXo/2AHnlE+WYnwQAC4KtAz6pbVnd3KstZWsVA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz",
+ "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==",
"cpu": [
"x64"
],
@@ -4647,9 +4647,9 @@
}
},
"node_modules/@next/swc-freebsd-x64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.4.tgz",
- "integrity": "sha512-475vwyWcjnyDVDWLgAATP0HI8W1rwByc+uXk1B6KkAVFhkoDgH387LW0uNqxavK+VxCzj3avQXX/58XDvxtSlg==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz",
+ "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==",
"cpu": [
"x64"
],
@@ -4662,9 +4662,9 @@
}
},
"node_modules/@next/swc-linux-arm-gnueabihf": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.4.tgz",
- "integrity": "sha512-qZW+L3iG3XSGtlOPmD5RRWXyk6ZNdscLV0BQjuDvP+exTg+uixqHXOHz0/GVATIJEBQOF0Kew7jAXVXEP+iRTQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz",
+ "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==",
"cpu": [
"arm"
],
@@ -4677,9 +4677,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.4.tgz",
- "integrity": "sha512-fEPRjItWYaKyyG9N+2HIA59OBHIhk7WC+Rh+LwXsh0pQe870Ykpek3KQs0umjsrEGe57NyMomq3f80/N8taDvA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz",
+ "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==",
"cpu": [
"arm64"
],
@@ -4692,9 +4692,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.4.tgz",
- "integrity": "sha512-rnCTzXII0EBCcFn9P5s/Dho2kPUMSX/bP0iOAj8wEI/IxUEfEElbin89zJoNW30cycHu19xY8YP4K2+hzciPzQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz",
+ "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==",
"cpu": [
"arm64"
],
@@ -4707,9 +4707,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.4.tgz",
- "integrity": "sha512-PhXX6NSuIuhHInxPY2VkG2Bl7VllsD3Cjx+pQcS1wTym7Zt7UoLvn05PkRrkiyIkvR+UXnqPUM3TYiSbnemXEw==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz",
+ "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==",
"cpu": [
"x64"
],
@@ -4722,9 +4722,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.4.tgz",
- "integrity": "sha512-GmC/QROiUZpFirHRfPQqMyCXZ+5+ndbBZrMvL74HtQB/CKXB8K1VM+rvy9Gp/5OaU8Rxp48IcX79NOfI2LiXlA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz",
+ "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==",
"cpu": [
"x64"
],
@@ -4737,9 +4737,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.4.tgz",
- "integrity": "sha512-9XKoCXbNZuaMRPtcKQz3+hgVpkMosaLlcxHFXT8/j4w61k7/qvEbrkMDS9WHNrD/xVcLycwhPRgXcns2K1BdBQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz",
+ "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==",
"cpu": [
"arm64"
],
@@ -4752,9 +4752,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.4.tgz",
- "integrity": "sha512-hEyRieZKH9iw4AzvXaQ+Fyb98k0G/o9QcRGxA1/O/O/elf1+Qvuwb15phT8GbVtIeNziy66XTPOhKKfdr8KyUg==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz",
+ "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==",
"cpu": [
"ia32"
],
@@ -4767,9 +4767,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.4.tgz",
- "integrity": "sha512-5Pl1tdMJWLy4rvzU1ecx0nHWgDPqoYuvYoXE/5X0Clu9si/yOuBIj573F2kOTY7mu0LX2wgCJVSnyK0abHBxIw==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz",
+ "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==",
"cpu": [
"x64"
],
@@ -4927,9 +4927,9 @@
}
},
"node_modules/@swc/helpers": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz",
- "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
+ "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
"dependencies": {
"tslib": "^2.4.0"
}
@@ -5233,13 +5233,13 @@
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
- "devOptional": true
+ "dev": true
},
"node_modules/@types/react": {
"version": "17.0.49",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.49.tgz",
"integrity": "sha512-CCBPMZaPhcKkYUTqFs/hOWqKjPxhTEmnZWjlHHgIMop67DsXywf9B5Os9Hz8KSacjNOgIdnZVJamwl232uxoPg==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -5265,7 +5265,7 @@
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "devOptional": true
+ "dev": true
},
"node_modules/@types/sinonjs__fake-timers": {
"version": "8.1.1",
@@ -8796,7 +8796,7 @@
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
- "devOptional": true
+ "dev": true
},
"node_modules/custom-routes": {
"resolved": "demos/custom-routes",
@@ -12807,7 +12807,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
"integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
- "devOptional": true
+ "dev": true
},
"node_modules/import-fresh": {
"version": "3.3.0",
@@ -16898,15 +16898,15 @@
}
},
"node_modules/next": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/next/-/next-12.2.4.tgz",
- "integrity": "sha512-b1xlxEozmAWokAXzXsi5vlmU/IfJcFNIJA8dpU5UdkFbyDPio8wwb8mAQ/Y7rGtfTgG/t/u49BiyEA+xAgFvow==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/next/-/next-12.3.0.tgz",
+ "integrity": "sha512-GpzI6me9V1+XYtfK0Ae9WD0mKqHyzQlGq1xH1rzNIYMASo4Tkl4rTe9jSqtBpXFhOS33KohXs9ZY38Akkhdciw==",
"dependencies": {
- "@next/env": "12.2.4",
- "@swc/helpers": "0.4.3",
+ "@next/env": "12.3.0",
+ "@swc/helpers": "0.4.11",
"caniuse-lite": "^1.0.30001332",
"postcss": "8.4.14",
- "styled-jsx": "5.0.2",
+ "styled-jsx": "5.0.6",
"use-sync-external-store": "1.2.0"
},
"bin": {
@@ -16916,19 +16916,19 @@
"node": ">=12.22.0"
},
"optionalDependencies": {
- "@next/swc-android-arm-eabi": "12.2.4",
- "@next/swc-android-arm64": "12.2.4",
- "@next/swc-darwin-arm64": "12.2.4",
- "@next/swc-darwin-x64": "12.2.4",
- "@next/swc-freebsd-x64": "12.2.4",
- "@next/swc-linux-arm-gnueabihf": "12.2.4",
- "@next/swc-linux-arm64-gnu": "12.2.4",
- "@next/swc-linux-arm64-musl": "12.2.4",
- "@next/swc-linux-x64-gnu": "12.2.4",
- "@next/swc-linux-x64-musl": "12.2.4",
- "@next/swc-win32-arm64-msvc": "12.2.4",
- "@next/swc-win32-ia32-msvc": "12.2.4",
- "@next/swc-win32-x64-msvc": "12.2.4"
+ "@next/swc-android-arm-eabi": "12.3.0",
+ "@next/swc-android-arm64": "12.3.0",
+ "@next/swc-darwin-arm64": "12.3.0",
+ "@next/swc-darwin-x64": "12.3.0",
+ "@next/swc-freebsd-x64": "12.3.0",
+ "@next/swc-linux-arm-gnueabihf": "12.3.0",
+ "@next/swc-linux-arm64-gnu": "12.3.0",
+ "@next/swc-linux-arm64-musl": "12.3.0",
+ "@next/swc-linux-x64-gnu": "12.3.0",
+ "@next/swc-linux-x64-musl": "12.3.0",
+ "@next/swc-win32-arm64-msvc": "12.3.0",
+ "@next/swc-win32-ia32-msvc": "12.3.0",
+ "@next/swc-win32-x64-msvc": "12.3.0"
},
"peerDependencies": {
"fibers": ">= 3.1.0",
@@ -19998,7 +19998,7 @@
"version": "1.50.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.50.1.tgz",
"integrity": "sha512-noTnY41KnlW2A9P8sdwESpDmo+KBNkukI1i8+hOK3footBUcohNHtdOJbckp46XO95nuvcHDDZ+4tmOnpK3hjw==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -21163,9 +21163,9 @@
}
},
"node_modules/styled-jsx": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
- "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.6.tgz",
+ "integrity": "sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA==",
"engines": {
"node": ">= 12.0.0"
},
@@ -22986,7 +22986,7 @@
"license": "MIT",
"devDependencies": {
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
},
@@ -23029,7 +23029,7 @@
"@types/jest": "^27.4.1",
"@types/merge-stream": "^1.1.2",
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
},
@@ -23162,7 +23162,7 @@
"@types/fs-extra": "^9.0.13",
"@types/jest": "^27.4.1",
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
},
@@ -25500,8 +25500,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz",
"integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"chalk": {
"version": "5.0.1",
@@ -25843,8 +25842,7 @@
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
"integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-import-resolver-typescript": {
"version": "3.3.0",
@@ -25948,7 +25946,7 @@
"version": "file:packages/next",
"requires": {
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
@@ -25978,7 +25976,7 @@
"globby": "^11.0.4",
"merge-stream": "^2.0.0",
"moize": "^6.1.0",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"node-fetch": "^2.6.6",
"node-stream-zip": "^1.15.0",
"npm-run-all": "^4.1.5",
@@ -26245,9 +26243,9 @@
}
},
"@next/env": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.4.tgz",
- "integrity": "sha512-/gApFXWk5CCLFQJL5IYJXxPQuG5tz5nPX4l27A9Zm/+wJxiwFrRSP54AopDxIv4JRp/rGwcgk/lZS/0Clw8jYA=="
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.0.tgz",
+ "integrity": "sha512-PTJpjAFVbzBQ9xXpzMTroShvD5YDIIy46jQ7d4LrWpY+/5a8H90Tm8hE3Hvkc5RBRspVo7kvEOnqQms0A+2Q6w=="
},
"@next/eslint-plugin-next": {
"version": "12.2.4",
@@ -26284,81 +26282,81 @@
}
},
"@next/swc-android-arm-eabi": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.4.tgz",
- "integrity": "sha512-P4YSFNpmXXSnn3P1qsOAqz+MX3On9fHrlc8ovb/CFJJoU+YLCR53iCEwfw39e0IZEgDA7ttgr108plF8mxaX0g==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.0.tgz",
+ "integrity": "sha512-/PuirPnAKsYBw93w/7Q9hqy+KGOU9mjYprZ/faxMUJh/dc6v3rYLxkZKNG9nFPIW4QKNTCnhP40xF9hLnxO+xg==",
"optional": true
},
"@next/swc-android-arm64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.4.tgz",
- "integrity": "sha512-4o2n14E18O+8xHlf6dgJsWPXN9gmSmfIe2Z0EqKDIPBBkFt/2CyrH0+vwHnL2l7xkDHhOGfZYcYIWVUR5aNu0A==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.0.tgz",
+ "integrity": "sha512-OaI+FhAM6P9B6Ybwbn0Zl8YwWido0lLwhDBi9WiYCh4RQmIXAyVIoIJPHo4fP05+mXaJ/k1trvDvuURvHOq2qw==",
"optional": true
},
"@next/swc-darwin-arm64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.4.tgz",
- "integrity": "sha512-DcUO6MGBL9E3jj5o86MUnTOy4WawIJJhyCcFYO4f51sbl7+uPIYIx40eo98A6NwJEXazCqq1hLeqOaNTAIvDiQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.0.tgz",
+ "integrity": "sha512-9s4d3Mhii+WFce8o8Jok7WC3Bawkr9wEUU++SJRptjU1L5tsfYJMrSYCACHLhZujziNDLyExe4Hwwsccps1sfg==",
"optional": true
},
"@next/swc-darwin-x64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.4.tgz",
- "integrity": "sha512-IUlFMqeLjdIzDorrGC2Dt+2Ae3DbKQbRzCzmDq4/CP1+jJGeDXo/2AHnlE+WYnwQAC4KtAz6pbVnd3KstZWsVA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.0.tgz",
+ "integrity": "sha512-2scC4MqUTwGwok+wpVxP+zWp7WcCAVOtutki2E1n99rBOTnUOX6qXkgxSy083yBN6GqwuC/dzHeN7hIKjavfRA==",
"optional": true
},
"@next/swc-freebsd-x64": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.4.tgz",
- "integrity": "sha512-475vwyWcjnyDVDWLgAATP0HI8W1rwByc+uXk1B6KkAVFhkoDgH387LW0uNqxavK+VxCzj3avQXX/58XDvxtSlg==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.0.tgz",
+ "integrity": "sha512-xAlruUREij/bFa+qsE1tmsP28t7vz02N4ZDHt2lh3uJUniE0Ne9idyIDLc1Ed0IF2RjfgOp4ZVunuS3OM0sngw==",
"optional": true
},
"@next/swc-linux-arm-gnueabihf": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.4.tgz",
- "integrity": "sha512-qZW+L3iG3XSGtlOPmD5RRWXyk6ZNdscLV0BQjuDvP+exTg+uixqHXOHz0/GVATIJEBQOF0Kew7jAXVXEP+iRTQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.0.tgz",
+ "integrity": "sha512-jin2S4VT/cugc2dSZEUIabhYDJNgrUh7fufbdsaAezgcQzqfdfJqfxl4E9GuafzB4cbRPTaqA0V5uqbp0IyGkQ==",
"optional": true
},
"@next/swc-linux-arm64-gnu": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.4.tgz",
- "integrity": "sha512-fEPRjItWYaKyyG9N+2HIA59OBHIhk7WC+Rh+LwXsh0pQe870Ykpek3KQs0umjsrEGe57NyMomq3f80/N8taDvA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.0.tgz",
+ "integrity": "sha512-RqJHDKe0WImeUrdR0kayTkRWgp4vD/MS7g0r6Xuf8+ellOFH7JAAJffDW3ayuVZeMYOa7RvgNFcOoWnrTUl9Nw==",
"optional": true
},
"@next/swc-linux-arm64-musl": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.4.tgz",
- "integrity": "sha512-rnCTzXII0EBCcFn9P5s/Dho2kPUMSX/bP0iOAj8wEI/IxUEfEElbin89zJoNW30cycHu19xY8YP4K2+hzciPzQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.0.tgz",
+ "integrity": "sha512-nvNWoUieMjvDjpYJ/4SQe9lQs2xMj6ZRs8N+bmTrVu9leY2Fg3WD6W9p/1uU9hGO8u+OdF13wc4iRShu/WYIHg==",
"optional": true
},
"@next/swc-linux-x64-gnu": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.4.tgz",
- "integrity": "sha512-PhXX6NSuIuhHInxPY2VkG2Bl7VllsD3Cjx+pQcS1wTym7Zt7UoLvn05PkRrkiyIkvR+UXnqPUM3TYiSbnemXEw==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.0.tgz",
+ "integrity": "sha512-4ajhIuVU9PeQCMMhdDgZTLrHmjbOUFuIyg6J19hZqwEwDTSqQyrSLkbJs2Nd7IRiM6Ul/XyrtEFCpk4k+xD2+w==",
"optional": true
},
"@next/swc-linux-x64-musl": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.4.tgz",
- "integrity": "sha512-GmC/QROiUZpFirHRfPQqMyCXZ+5+ndbBZrMvL74HtQB/CKXB8K1VM+rvy9Gp/5OaU8Rxp48IcX79NOfI2LiXlA==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.0.tgz",
+ "integrity": "sha512-U092RBYbaGxoMAwpauePJEu2PuZSEoUCGJBvsptQr2/2XIMwAJDYM4c/M5NfYEsBr+yjvsYNsOpYfeQ88D82Yg==",
"optional": true
},
"@next/swc-win32-arm64-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.4.tgz",
- "integrity": "sha512-9XKoCXbNZuaMRPtcKQz3+hgVpkMosaLlcxHFXT8/j4w61k7/qvEbrkMDS9WHNrD/xVcLycwhPRgXcns2K1BdBQ==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.0.tgz",
+ "integrity": "sha512-pzSzaxjDEJe67bUok9Nxf9rykbJfHXW0owICFsPBsqHyc+cr8vpF7g9e2APTCddtVhvjkga9ILoZJ9NxWS7Yiw==",
"optional": true
},
"@next/swc-win32-ia32-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.4.tgz",
- "integrity": "sha512-hEyRieZKH9iw4AzvXaQ+Fyb98k0G/o9QcRGxA1/O/O/elf1+Qvuwb15phT8GbVtIeNziy66XTPOhKKfdr8KyUg==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.0.tgz",
+ "integrity": "sha512-MQGUpMbYhQmTZ06a9e0hPQJnxFMwETo2WtyAotY3GEzbNCQVbCGhsvqEKcl+ZEHgShlHXUWvSffq1ZscY6gK7A==",
"optional": true
},
"@next/swc-win32-x64-msvc": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.4.tgz",
- "integrity": "sha512-5Pl1tdMJWLy4rvzU1ecx0nHWgDPqoYuvYoXE/5X0Clu9si/yOuBIj573F2kOTY7mu0LX2wgCJVSnyK0abHBxIw==",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.0.tgz",
+ "integrity": "sha512-C/nw6OgQpEULWqs+wgMHXGvlJLguPRFFGqR2TAqWBerQ8J+Sg3z1ZTqwelkSi4FoqStGuZ2UdFHIDN1ySmR1xA==",
"optional": true
},
"@nodelib/fs.scandir": {
@@ -26467,9 +26465,9 @@
}
},
"@swc/helpers": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz",
- "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==",
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz",
+ "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==",
"requires": {
"tslib": "^2.4.0"
}
@@ -26757,13 +26755,13 @@
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
- "devOptional": true
+ "dev": true
},
"@types/react": {
"version": "17.0.49",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.49.tgz",
"integrity": "sha512-CCBPMZaPhcKkYUTqFs/hOWqKjPxhTEmnZWjlHHgIMop67DsXywf9B5Os9Hz8KSacjNOgIdnZVJamwl232uxoPg==",
- "devOptional": true,
+ "dev": true,
"requires": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -26789,7 +26787,7 @@
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "devOptional": true
+ "dev": true
},
"@types/sinonjs__fake-timers": {
"version": "8.1.1",
@@ -27097,8 +27095,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"acorn-walk": {
"version": "7.2.0",
@@ -27710,7 +27707,7 @@
"@types/node": "^17.0.25",
"husky": "^7.0.4",
"if-env": "^1.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
@@ -29450,7 +29447,7 @@
"version": "3.0.11",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
"integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==",
- "devOptional": true
+ "dev": true
},
"custom-routes": {
"version": "file:demos/custom-routes",
@@ -29462,7 +29459,7 @@
"@types/react": "^17.0.47",
"husky": "^7.0.4",
"if-env": "^1.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.7.4"
},
@@ -29794,7 +29791,7 @@
"critters": "^0.0.16",
"husky": "^7.0.4",
"if-env": "^1.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"react": "^18.0.0",
"react-dom": "^18.0.0",
@@ -30579,8 +30576,7 @@
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
"integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-formatter-codeframe": {
"version": "7.32.1",
@@ -31025,8 +31021,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz",
"integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-plugin-react": {
"version": "7.29.4",
@@ -31074,8 +31069,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz",
"integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-plugin-unicorn": {
"version": "43.0.2",
@@ -32540,7 +32534,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
"integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
- "devOptional": true
+ "dev": true
},
"import-fresh": {
"version": "3.3.0",
@@ -33612,8 +33606,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"jest-regex-util": {
"version": "27.5.1",
@@ -35321,7 +35314,7 @@
"@types/node": "^17.0.25",
"@types/react": "^17.0.43",
"husky": "^7.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"react": "18.0.0",
"react-dom": "18.0.0",
@@ -35684,28 +35677,28 @@
}
},
"next": {
- "version": "12.2.4",
- "resolved": "https://registry.npmjs.org/next/-/next-12.2.4.tgz",
- "integrity": "sha512-b1xlxEozmAWokAXzXsi5vlmU/IfJcFNIJA8dpU5UdkFbyDPio8wwb8mAQ/Y7rGtfTgG/t/u49BiyEA+xAgFvow==",
- "requires": {
- "@next/env": "12.2.4",
- "@next/swc-android-arm-eabi": "12.2.4",
- "@next/swc-android-arm64": "12.2.4",
- "@next/swc-darwin-arm64": "12.2.4",
- "@next/swc-darwin-x64": "12.2.4",
- "@next/swc-freebsd-x64": "12.2.4",
- "@next/swc-linux-arm-gnueabihf": "12.2.4",
- "@next/swc-linux-arm64-gnu": "12.2.4",
- "@next/swc-linux-arm64-musl": "12.2.4",
- "@next/swc-linux-x64-gnu": "12.2.4",
- "@next/swc-linux-x64-musl": "12.2.4",
- "@next/swc-win32-arm64-msvc": "12.2.4",
- "@next/swc-win32-ia32-msvc": "12.2.4",
- "@next/swc-win32-x64-msvc": "12.2.4",
- "@swc/helpers": "0.4.3",
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/next/-/next-12.3.0.tgz",
+ "integrity": "sha512-GpzI6me9V1+XYtfK0Ae9WD0mKqHyzQlGq1xH1rzNIYMASo4Tkl4rTe9jSqtBpXFhOS33KohXs9ZY38Akkhdciw==",
+ "requires": {
+ "@next/env": "12.3.0",
+ "@next/swc-android-arm-eabi": "12.3.0",
+ "@next/swc-android-arm64": "12.3.0",
+ "@next/swc-darwin-arm64": "12.3.0",
+ "@next/swc-darwin-x64": "12.3.0",
+ "@next/swc-freebsd-x64": "12.3.0",
+ "@next/swc-linux-arm-gnueabihf": "12.3.0",
+ "@next/swc-linux-arm64-gnu": "12.3.0",
+ "@next/swc-linux-arm64-musl": "12.3.0",
+ "@next/swc-linux-x64-gnu": "12.3.0",
+ "@next/swc-linux-x64-musl": "12.3.0",
+ "@next/swc-win32-arm64-msvc": "12.3.0",
+ "@next/swc-win32-ia32-msvc": "12.3.0",
+ "@next/swc-win32-x64-msvc": "12.3.0",
+ "@swc/helpers": "0.4.11",
"caniuse-lite": "^1.0.30001332",
"postcss": "8.4.14",
- "styled-jsx": "5.0.2",
+ "styled-jsx": "5.0.6",
"use-sync-external-store": "1.2.0"
}
},
@@ -35734,7 +35727,7 @@
"@types/node": "^17.0.14",
"@types/react": "^18.0.0",
"husky": "^7.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"next-auth": "^4.7.0",
"nodemailer": "^6.6.3",
"npm-run-all": "^4.1.5",
@@ -35765,7 +35758,7 @@
"@types/node": "^17.0.25",
"husky": "^7.0.4",
"if-env": "^1.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
@@ -38027,7 +38020,7 @@
"version": "1.50.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.50.1.tgz",
"integrity": "sha512-noTnY41KnlW2A9P8sdwESpDmo+KBNkukI1i8+hOK3footBUcohNHtdOJbckp46XO95nuvcHDDZ+4tmOnpK3hjw==",
- "devOptional": true,
+ "dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -38151,7 +38144,7 @@
"@types/node": "^17.0.25",
"husky": "^7.0.4",
"ms": "2.1.3",
- "next": "^12.2.0",
+ "next": "^12.2.1",
"npm-run-all": "^4.1.5",
"react": "^18.0.0",
"react-dom": "^18.0.0",
@@ -38736,7 +38729,7 @@
"@types/node": "^17.0.25",
"husky": "^7.0.4",
"if-env": "^1.0.4",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
}
@@ -38964,10 +38957,9 @@
"dev": true
},
"styled-jsx": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
- "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
- "requires": {}
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.6.tgz",
+ "integrity": "sha512-xOeROtkK5MGMDimBQ3J6iPId8q0t/BDoG5XN6oKkZClVz9ISF/hihN8OCn2LggMU6N32aXnrXBdn3auSqNS9fA=="
},
"supports-color": {
"version": "9.2.2",
@@ -39689,8 +39681,7 @@
"ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
- "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
- "requires": {}
+ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg=="
}
}
},
@@ -39798,8 +39789,7 @@
"use-sync-external-store": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
- "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
- "requires": {}
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="
},
"util-deprecate": {
"version": "1.0.2",
@@ -40203,8 +40193,7 @@
"version": "7.5.7",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
"integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"xdg-basedir": {
"version": "4.0.0",
diff --git a/package.json b/package.json
index e86eacaaff..4e213b5505 100644
--- a/package.json
+++ b/package.json
@@ -75,7 +75,7 @@
"typescript": "^4.3.4"
},
"dependencies": {
- "next": "^12.2.0"
+ "next": "^12.3.0"
},
"engines": {
"node": ">=16.0.0"
@@ -106,4 +106,4 @@
"demos/custom-routes",
"demos/next-with-edge-functions"
]
-}
+}
\ No newline at end of file
diff --git a/packages/next/package.json b/packages/next/package.json
index d511cb53ae..38b80c721e 100644
--- a/packages/next/package.json
+++ b/packages/next/package.json
@@ -8,7 +8,7 @@
],
"devDependencies": {
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
},
@@ -34,4 +34,4 @@
"engines": {
"node": ">=12.0.0"
}
-}
+}
\ No newline at end of file
diff --git a/packages/runtime/package.json b/packages/runtime/package.json
index f808624a84..f8e4481678 100644
--- a/packages/runtime/package.json
+++ b/packages/runtime/package.json
@@ -6,6 +6,7 @@
"files": [
"lib/**/*",
"src/templates/edge/*",
+ "src/templates/edge-shared/*",
"manifest.yml"
],
"dependencies": {
@@ -36,7 +37,7 @@
"@types/jest": "^27.4.1",
"@types/merge-stream": "^1.1.2",
"@types/node": "^17.0.25",
- "next": "^12.2.0",
+ "next": "^12.3.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.6.3"
},
@@ -62,4 +63,4 @@
"engines": {
"node": ">=12.0.0"
}
-}
+}
\ No newline at end of file
diff --git a/packages/runtime/src/helpers/edge.ts b/packages/runtime/src/helpers/edge.ts
index 071f0c1050..e9ae695bd9 100644
--- a/packages/runtime/src/helpers/edge.ts
+++ b/packages/runtime/src/helpers/edge.ts
@@ -3,10 +3,35 @@ import { promises as fs, existsSync } from 'fs'
import { resolve, join } from 'path'
import type { NetlifyConfig, NetlifyPluginConstants } from '@netlify/build'
-import { copyFile, emptyDir, ensureDir, readJSON, readJson, writeJSON, writeJson } from 'fs-extra'
+import { copy, copyFile, emptyDir, ensureDir, readJSON, readJson, writeJSON, writeJson } from 'fs-extra'
import type { MiddlewareManifest } from 'next/dist/build/webpack/plugins/middleware-plugin'
+import type { RouteHas } from 'next/dist/lib/load-custom-routes'
+
+// This is the format as of next@12.2
+interface EdgeFunctionDefinitionV1 {
+ env: string[]
+ files: string[]
+ name: string
+ page: string
+ regexp: string
+}
+
+export interface MiddlewareMatcher {
+ regexp: string
+ locale?: false
+ has?: RouteHas[]
+}
-type EdgeFunctionDefinition = MiddlewareManifest['middleware']['name']
+// This is the format after next@12.3.0
+interface EdgeFunctionDefinitionV2 {
+ env: string[]
+ files: string[]
+ name: string
+ page: string
+ matchers: MiddlewareMatcher[]
+}
+
+type EdgeFunctionDefinition = EdgeFunctionDefinitionV1 | EdgeFunctionDefinitionV2
export interface FunctionManifest {
version: 1
@@ -74,6 +99,8 @@ const getMiddlewareBundle = async ({
return chunks.join('\n')
}
+const getEdgeTemplatePath = (file: string) => join(__dirname, '..', '..', 'src', 'templates', 'edge', file)
+
const copyEdgeSourceFile = ({
file,
target,
@@ -82,10 +109,7 @@ const copyEdgeSourceFile = ({
file: string
edgeFunctionDir: string
target?: string
-}) => fs.copyFile(join(__dirname, '..', '..', 'src', 'templates', 'edge', file), join(edgeFunctionDir, target ?? file))
-
-// Edge functions don't support lookahead expressions
-const stripLookahead = (regex: string) => regex.replace('^/(?!_next)', '^/')
+}) => fs.copyFile(getEdgeTemplatePath(file), join(edgeFunctionDir, target ?? file))
const writeEdgeFunction = async ({
edgeFunctionDefinition,
@@ -95,10 +119,12 @@ const writeEdgeFunction = async ({
edgeFunctionDefinition: EdgeFunctionDefinition
edgeFunctionRoot: string
netlifyConfig: NetlifyConfig
-}): Promise<{
- function: string
- pattern: string
-}> => {
+}): Promise<
+ Array<{
+ function: string
+ pattern: string
+ }>
+> => {
const name = sanitizeName(edgeFunctionDefinition.name)
const edgeFunctionDir = join(edgeFunctionRoot, name)
@@ -116,27 +142,29 @@ const writeEdgeFunction = async ({
target: 'index.ts',
})
- await copyEdgeSourceFile({ edgeFunctionDir, file: 'utils.ts' })
- return {
- function: name,
- pattern: stripLookahead(edgeFunctionDefinition.regexp),
+ const matchers: EdgeFunctionDefinitionV2['matchers'] = []
+
+ // The v1 middleware manifest has a single regexp, but the v2 has an array of matchers
+ if ('regexp' in edgeFunctionDefinition) {
+ matchers.push({ regexp: edgeFunctionDefinition.regexp })
+ } else {
+ matchers.push(...edgeFunctionDefinition.matchers)
}
-}
+ await writeJson(join(edgeFunctionDir, 'matchers.json'), matchers)
-type NetlifyPluginConstantsWithEdgeFunctions = NetlifyPluginConstants & {
- // Until https://github.com/netlify/build/pull/4481 lands
- INTERNAL_EDGE_FUNCTIONS_SRC?: string
+ // We add a defintion for each matching path
+ return matchers.map((matcher) => {
+ const pattern = matcher.regexp
+ return { function: name, pattern }
+ })
}
-
-export const cleanupEdgeFunctions = async ({
+export const cleanupEdgeFunctions = ({
INTERNAL_EDGE_FUNCTIONS_SRC = '.netlify/edge-functions',
-}: NetlifyPluginConstantsWithEdgeFunctions) => {
- await emptyDir(INTERNAL_EDGE_FUNCTIONS_SRC)
-}
+}: NetlifyPluginConstants) => emptyDir(INTERNAL_EDGE_FUNCTIONS_SRC)
export const writeDevEdgeFunction = async ({
INTERNAL_EDGE_FUNCTIONS_SRC = '.netlify/edge-functions',
-}: NetlifyPluginConstantsWithEdgeFunctions) => {
+}: NetlifyPluginConstants) => {
const manifest: FunctionManifest = {
functions: [
{
@@ -168,6 +196,8 @@ export const writeEdgeFunctions = async (netlifyConfig: NetlifyConfig) => {
const edgeFunctionRoot = resolve('.netlify', 'edge-functions')
await emptyDir(edgeFunctionRoot)
+ await copy(getEdgeTemplatePath('../edge-shared'), join(edgeFunctionRoot, 'edge-shared'))
+
if (!process.env.NEXT_DISABLE_EDGE_IMAGES) {
console.log(
'Using Netlify Edge Functions for image format detection. Set env var "NEXT_DISABLE_EDGE_IMAGES=true" to disable.',
@@ -193,23 +223,23 @@ export const writeEdgeFunctions = async (netlifyConfig: NetlifyConfig) => {
for (const middleware of middlewareManifest.sortedMiddleware) {
const edgeFunctionDefinition = middlewareManifest.middleware[middleware]
- const functionDefinition = await writeEdgeFunction({
+ const functionDefinitions = await writeEdgeFunction({
edgeFunctionDefinition,
edgeFunctionRoot,
netlifyConfig,
})
- manifest.functions.push(functionDefinition)
+ manifest.functions.push(...functionDefinitions)
}
// Older versions of the manifest format don't have the functions field
// No, the version field was not incremented
if (typeof middlewareManifest.functions === 'object') {
for (const edgeFunctionDefinition of Object.values(middlewareManifest.functions)) {
- const functionDefinition = await writeEdgeFunction({
+ const functionDefinitions = await writeEdgeFunction({
edgeFunctionDefinition,
edgeFunctionRoot,
netlifyConfig,
})
- manifest.functions.push(functionDefinition)
+ manifest.functions.push(...functionDefinitions)
}
}
}
diff --git a/packages/runtime/src/helpers/utils.ts b/packages/runtime/src/helpers/utils.ts
index ba377002eb..852f375003 100644
--- a/packages/runtime/src/helpers/utils.ts
+++ b/packages/runtime/src/helpers/utils.ts
@@ -10,6 +10,10 @@ import { OPTIONAL_CATCH_ALL_REGEX, CATCH_ALL_REGEX, DYNAMIC_PARAMETER_REGEX, HAN
import { I18n } from './types'
+type ExperimentalConfigWithLegacy = ExperimentalConfig & {
+ images?: Pick
+}
+
export const toNetlifyRoute = (nextRoute: string): Array => {
const netlifyRoutes = [nextRoute]
@@ -209,7 +213,7 @@ export type ImagesConfig = Partial &
Required & {
remotePatterns?: RemotePattern[]
}
-export const getRemotePatterns = (experimental: ExperimentalConfig, images: ImagesConfig) => {
+export const getRemotePatterns = (experimental: ExperimentalConfigWithLegacy, images: ImagesConfig) => {
// Where remote patterns is configured pre-v12.2.5
if (experimental.images?.remotePatterns) {
return experimental.images.remotePatterns
diff --git a/packages/runtime/src/templates/edge-shared/next-utils.ts b/packages/runtime/src/templates/edge-shared/next-utils.ts
new file mode 100644
index 0000000000..5fdc34e7ce
--- /dev/null
+++ b/packages/runtime/src/templates/edge-shared/next-utils.ts
@@ -0,0 +1,396 @@
+/**
+ * Various router utils ported to Deno from Next.js source
+ * https://github.com/vercel/next.js/blob/7280c3ced186bb9a7ae3d7012613ef93f20b0fa9/packages/next/shared/lib/router/utils/
+ * Licence: https://github.com/vercel/next.js/blob/7280c3ced186bb9a7ae3d7012613ef93f20b0fa9/license.md
+ *
+ * Some types have been re-implemented to be more compatible with Deno or avoid chains of dependent files
+ */
+
+// Deno imports
+import type { Key } from 'https://deno.land/x/path_to_regexp@v6.2.1/index.ts'
+
+import { compile, pathToRegexp } from 'https://deno.land/x/path_to_regexp@v6.2.1/index.ts'
+import { getCookies } from 'https://deno.land/std@0.148.0/http/cookie.ts'
+
+// Inlined/re-implemented types
+
+export interface ParsedUrlQuery {
+ [key: string]: string | string[]
+}
+
+export interface Params {
+ // Yeah, best we get
+ // deno-lint-ignore no-explicit-any
+ [param: string]: any
+}
+
+export type RouteHas =
+ | {
+ type: 'header' | 'query' | 'cookie'
+ key: string
+ value?: string
+ }
+ | {
+ type: 'host'
+ key?: undefined
+ value: string
+ }
+
+export type Rewrite = {
+ source: string
+ destination: string
+ basePath?: false
+ locale?: false
+ has?: RouteHas[]
+ regex: string
+}
+
+export type Header = {
+ source: string
+ basePath?: false
+ locale?: false
+ headers: Array<{ key: string; value: string }>
+ has?: RouteHas[]
+ regex: string
+}
+export type Redirect = {
+ source: string
+ destination: string
+ basePath?: false
+ locale?: false
+ has?: RouteHas[]
+ statusCode?: number
+ permanent?: boolean
+ regex: string
+}
+
+export type DynamicRoute = {
+ page: string
+ regex: string
+ namedRegex?: string
+ routeKeys?: { [key: string]: string }
+}
+
+export type RoutesManifest = {
+ basePath: string
+ redirects: Redirect[]
+ headers: Header[]
+ rewrites: {
+ beforeFiles: Rewrite[]
+ afterFiles: Rewrite[]
+ fallback: Rewrite[]
+ }
+ dynamicRoutes: DynamicRoute[]
+}
+// escape-regexp.ts
+// regexp is based on https://github.com/sindresorhus/escape-string-regexp
+const reHasRegExp = /[|\\{}()[\]^$+*?.-]/
+const reReplaceRegExp = /[|\\{}()[\]^$+*?.-]/g
+
+export function escapeStringRegexp(str: string) {
+ // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23
+ if (reHasRegExp.test(str)) {
+ return str.replace(reReplaceRegExp, '\\$&')
+ }
+ return str
+}
+
+// querystring.ts
+export function searchParamsToUrlQuery(searchParams: URLSearchParams): ParsedUrlQuery {
+ const query: ParsedUrlQuery = {}
+ searchParams.forEach((value, key) => {
+ if (typeof query[key] === 'undefined') {
+ query[key] = value
+ } else if (Array.isArray(query[key])) {
+ ;(query[key] as string[]).push(value)
+ } else {
+ query[key] = [query[key] as string, value]
+ }
+ })
+ return query
+}
+
+// parse-url.ts
+interface ParsedUrl {
+ hash: string
+ hostname?: string | null
+ href: string
+ pathname: string
+ port?: string | null
+ protocol?: string | null
+ query: ParsedUrlQuery
+ search: string
+}
+
+export function parseUrl(url: string): ParsedUrl {
+ const parsedURL = url.startsWith('/') ? new URL(url, 'http://n') : new URL(url)
+ return {
+ hash: parsedURL.hash,
+ hostname: parsedURL.hostname,
+ href: parsedURL.href,
+ pathname: parsedURL.pathname,
+ port: parsedURL.port,
+ protocol: parsedURL.protocol,
+ query: searchParamsToUrlQuery(parsedURL.searchParams),
+ search: parsedURL.search,
+ }
+}
+
+// prepare-destination.ts
+// Changed to use WHATWG Fetch Request instead of IncomingMessage
+export function matchHas(req: Pick, has: RouteHas[], query: Params): false | Params {
+ const params: Params = {}
+ const cookies = getCookies(req.headers)
+ const url = new URL(req.url)
+ const allMatch = has.every((hasItem) => {
+ let value: undefined | string | null
+ let key = hasItem.key
+
+ switch (hasItem.type) {
+ case 'header': {
+ key = hasItem.key.toLowerCase()
+ value = req.headers.get(key)
+ break
+ }
+ case 'cookie': {
+ value = cookies[hasItem.key]
+ break
+ }
+ case 'query': {
+ value = query[hasItem.key]
+ break
+ }
+ case 'host': {
+ value = url.hostname
+ break
+ }
+ default: {
+ break
+ }
+ }
+ if (!hasItem.value && value && key) {
+ params[getSafeParamName(key)] = value
+ return true
+ } else if (value) {
+ const matcher = new RegExp(`^${hasItem.value}$`)
+ const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher)
+
+ if (matches) {
+ if (Array.isArray(matches)) {
+ if (matches.groups) {
+ Object.keys(matches.groups).forEach((groupKey) => {
+ params[groupKey] = matches.groups![groupKey]
+ })
+ } else if (hasItem.type === 'host' && matches[0]) {
+ params.host = matches[0]
+ }
+ }
+ return true
+ }
+ }
+ return false
+ })
+
+ if (allMatch) {
+ return params
+ }
+ return false
+}
+
+export function compileNonPath(value: string, params: Params): string {
+ if (!value.includes(':')) {
+ return value
+ }
+
+ for (const key of Object.keys(params)) {
+ if (value.includes(`:${key}`)) {
+ value = value
+ .replace(new RegExp(`:${key}\\*`, 'g'), `:${key}--ESCAPED_PARAM_ASTERISKS`)
+ .replace(new RegExp(`:${key}\\?`, 'g'), `:${key}--ESCAPED_PARAM_QUESTION`)
+ .replace(new RegExp(`:${key}\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`)
+ .replace(new RegExp(`:${key}(?!\\w)`, 'g'), `--ESCAPED_PARAM_COLON${key}`)
+ }
+ }
+ value = value
+ .replace(/(:|\*|\?|\+|\(|\)|\{|\})/g, '\\$1')
+ .replace(/--ESCAPED_PARAM_PLUS/g, '+')
+ .replace(/--ESCAPED_PARAM_COLON/g, ':')
+ .replace(/--ESCAPED_PARAM_QUESTION/g, '?')
+ .replace(/--ESCAPED_PARAM_ASTERISKS/g, '*')
+ // the value needs to start with a forward-slash to be compiled
+ // correctly
+ return compile(`/${value}`, { validate: false })(params).slice(1)
+}
+
+export function prepareDestination(args: {
+ appendParamsToQuery: boolean
+ destination: string
+ params: Params
+ query: ParsedUrlQuery
+}) {
+ const query = Object.assign({}, args.query)
+ delete query.__nextLocale
+ delete query.__nextDefaultLocale
+ delete query.__nextDataReq
+
+ let escapedDestination = args.destination
+
+ for (const param of Object.keys({ ...args.params, ...query })) {
+ escapedDestination = escapeSegment(escapedDestination, param)
+ }
+
+ const parsedDestination: ParsedUrl = parseUrl(escapedDestination)
+ const destQuery = parsedDestination.query
+ const destPath = unescapeSegments(`${parsedDestination.pathname!}${parsedDestination.hash || ''}`)
+ const destHostname = unescapeSegments(parsedDestination.hostname || '')
+ const destPathParamKeys: Key[] = []
+ const destHostnameParamKeys: Key[] = []
+ pathToRegexp(destPath, destPathParamKeys)
+ pathToRegexp(destHostname, destHostnameParamKeys)
+
+ const destParams: (string | number)[] = []
+
+ destPathParamKeys.forEach((key) => destParams.push(key.name))
+ destHostnameParamKeys.forEach((key) => destParams.push(key.name))
+
+ const destPathCompiler = compile(
+ destPath,
+ // we don't validate while compiling the destination since we should
+ // have already validated before we got to this point and validating
+ // breaks compiling destinations with named pattern params from the source
+ // e.g. /something:hello(.*) -> /another/:hello is broken with validation
+ // since compile validation is meant for reversing and not for inserting
+ // params from a separate path-regex into another
+ { validate: false },
+ )
+
+ const destHostnameCompiler = compile(destHostname, { validate: false })
+
+ // update any params in query values
+ for (const [key, strOrArray] of Object.entries(destQuery)) {
+ // the value needs to start with a forward-slash to be compiled
+ // correctly
+ if (Array.isArray(strOrArray)) {
+ destQuery[key] = strOrArray.map((value) => compileNonPath(unescapeSegments(value), args.params))
+ } else {
+ destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params)
+ }
+ }
+
+ // add path params to query if it's not a redirect and not
+ // already defined in destination query or path
+ const paramKeys = Object.keys(args.params).filter((name) => name !== 'nextInternalLocale')
+
+ if (args.appendParamsToQuery && !paramKeys.some((key) => destParams.includes(key))) {
+ for (const key of paramKeys) {
+ if (!(key in destQuery)) {
+ destQuery[key] = args.params[key]
+ }
+ }
+ }
+
+ let newUrl
+
+ try {
+ newUrl = destPathCompiler(args.params)
+
+ const [pathname, hash] = newUrl.split('#')
+ parsedDestination.hostname = destHostnameCompiler(args.params)
+ parsedDestination.pathname = pathname
+ parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`
+ delete (parsedDestination as any).search
+ } catch (err: any) {
+ if (err.message.match(/Expected .*? to not repeat, but got an array/)) {
+ throw new Error(
+ `To use a multi-match in the destination you must add \`*\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`,
+ )
+ }
+ throw err
+ }
+
+ // Query merge order lowest priority to highest
+ // 1. initial URL query values
+ // 2. path segment values
+ // 3. destination specified query values
+ parsedDestination.query = {
+ ...query,
+ ...parsedDestination.query,
+ }
+
+ return {
+ newUrl,
+ destQuery,
+ parsedDestination,
+ }
+}
+
+/**
+ * Ensure only a-zA-Z are used for param names for proper interpolating
+ * with path-to-regexp
+ */
+function getSafeParamName(paramName: string) {
+ let newParamName = ''
+
+ for (let i = 0; i < paramName.length; i++) {
+ const charCode = paramName.charCodeAt(i)
+
+ if (
+ (charCode > 64 && charCode < 91) || // A-Z
+ (charCode > 96 && charCode < 123) // a-z
+ ) {
+ newParamName += paramName[i]
+ }
+ }
+ return newParamName
+}
+
+function escapeSegment(str: string, segmentName: string) {
+ return str.replace(new RegExp(`:${escapeStringRegexp(segmentName)}`, 'g'), `__ESC_COLON_${segmentName}`)
+}
+
+function unescapeSegments(str: string) {
+ return str.replace(/__ESC_COLON_/gi, ':')
+}
+
+// is-dynamic.ts
+// Identify /[param]/ in route string
+const TEST_ROUTE = /\/\[[^/]+?\](?=\/|$)/
+
+export function isDynamicRoute(route: string): boolean {
+ return TEST_ROUTE.test(route)
+}
+
+// packages/next/shared/lib/router/utils/middleware-route-matcher.ts
+// 12.3 middleware route matcher
+
+export interface MiddlewareRouteMatch {
+ (pathname: string | null | undefined, request: Pick, query: Params): boolean
+}
+
+export interface MiddlewareMatcher {
+ regexp: string
+ locale?: false
+ has?: RouteHas[]
+}
+
+export function getMiddlewareRouteMatcher(matchers: MiddlewareMatcher[]): MiddlewareRouteMatch {
+ return (pathname: string | null | undefined, req: Pick, query: Params) => {
+ for (const matcher of matchers) {
+ const routeMatch = new RegExp(matcher.regexp).exec(pathname!)
+ if (!routeMatch) {
+ continue
+ }
+
+ if (matcher.has) {
+ const hasParams = matchHas(req, matcher.has, query)
+ if (!hasParams) {
+ continue
+ }
+ }
+
+ return true
+ }
+
+ return false
+ }
+}
diff --git a/packages/runtime/src/templates/edge/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts
similarity index 98%
rename from packages/runtime/src/templates/edge/utils.ts
rename to packages/runtime/src/templates/edge-shared/utils.ts
index 9897c77c03..b741bab623 100644
--- a/packages/runtime/src/templates/edge/utils.ts
+++ b/packages/runtime/src/templates/edge-shared/utils.ts
@@ -83,7 +83,7 @@ export const buildResponse = async ({
const transformed = response.dataTransforms.reduce((prev, transform) => {
return transform(prev)
}, props)
- return context.json(transformed)
+ return new Response(JSON.stringify(transformed), response)
}
// This var will hold the contents of the script tag
let buffer = ''
diff --git a/packages/runtime/src/templates/edge/matchers.json b/packages/runtime/src/templates/edge/matchers.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/packages/runtime/src/templates/edge/matchers.json
@@ -0,0 +1 @@
+[]
diff --git a/packages/runtime/src/templates/edge/next-dev.js b/packages/runtime/src/templates/edge/next-dev.js
index e6ea2d5e00..8575fcb9e4 100644
--- a/packages/runtime/src/templates/edge/next-dev.js
+++ b/packages/runtime/src/templates/edge/next-dev.js
@@ -1,7 +1,7 @@
import { NextRequest } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js'
import { NextResponse } from 'https://esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js'
import { fromFileUrl } from 'https://deno.land/std@0.151.0/path/mod.ts'
-import { buildResponse } from './utils.ts'
+import { buildResponse } from '../edge-shared/utils.ts'
globalThis.NFRequestContextMap ||= new Map()
globalThis.__dirname = fromFileUrl(new URL('./', import.meta.url)).slice(0, -1)
diff --git a/packages/runtime/src/templates/edge/runtime.ts b/packages/runtime/src/templates/edge/runtime.ts
index 7f33da2954..da7c5e3278 100644
--- a/packages/runtime/src/templates/edge/runtime.ts
+++ b/packages/runtime/src/templates/edge/runtime.ts
@@ -1,7 +1,11 @@
import type { Context } from 'https://edge.netlify.com'
-
+// Available at build time
+import matchers from './matchers.json' assert { type: 'json' }
import edgeFunction from './bundle.js'
-import { buildResponse } from './utils.ts'
+import { buildResponse } from '../edge-shared/utils.ts'
+import { getMiddlewareRouteMatcher, MiddlewareRouteMatch, searchParamsToUrlQuery } from '../edge-shared/next-utils.ts'
+
+const matchesMiddleware: MiddlewareRouteMatch = getMiddlewareRouteMatcher(matchers || [])
export interface FetchEventResult {
response: Response
@@ -49,8 +53,15 @@ const handler = async (req: Request, context: Context) => {
// Don't run in dev
return
}
+
const url = new URL(req.url)
+ // While we have already checked the path when mapping to the edge function,
+ // Next.js supports extra rules that we need to check here too.
+ if (!matchesMiddleware(url.pathname, req, searchParamsToUrlQuery(url.searchParams))) {
+ return
+ }
+
const geo = {
country: context.geo.country?.code,
region: context.geo.subdivision?.code,
diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json
index 613e9aa2ac..b8b6b575cd 100644
--- a/packages/runtime/tsconfig.json
+++ b/packages/runtime/tsconfig.json
@@ -9,6 +9,7 @@
"src/**/*.js"
],
"exclude": [
- "src/templates/edge/*"
+ "src/templates/edge/*",
+ "src/templates/edge-shared/*"
]
}
\ No newline at end of file