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