diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 7e396dc559e..7d1c2356994 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { "name": "firebase-tools", - "version": "15.32.1", + "version": "15.32.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "firebase-tools", - "version": "15.32.1", + "version": "15.32.0", "license": "MIT", "dependencies": { "@apphosting/common": "^0.0.8", @@ -146,7 +146,7 @@ "googleapis": "^105.0.0", "mocha": "^11.7.1", "mock-fs": "5.2.0", - "next": "15.5.24", + "next": "^16.3.7", "nock": "^13.0.5", "node-mocks-http": "^1.11.0", "nyc": "^15.1.0", @@ -4732,16 +4732,16 @@ } }, "node_modules/@next/env": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.24.tgz", - "integrity": "sha512-mBDF7T0XKZjs9SpUAl0buizVO+O02ULjOvWX8o/AZo/5AGw/UAS1Zzcylmd4pqbftzmKQi+L/nB4jgBYKEAl5Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.8.tgz", + "integrity": "sha512-Al9zqHVV7TJv0eFuOU4U7Lvv74PTih4Ch63sk2xCIpSTkE3udFnaOcnzP2lQVymiL7yS9Cj2iClUXlR3EQ5sEw==", "dev": true, "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.24.tgz", - "integrity": "sha512-AGdNLvxZNY6eR2iSnV+6wUa8CiHTMr4F7g3uHH7fT4ICIJBE00R9u4tzN/Vuwsw0cOi8MTD2HJcTCb6siMH88Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.8.tgz", + "integrity": "sha512-2JPRMh2nmQG5CiL7cXGL9AGwnPWJQ//cTtAUCT+w511QHk79SYz3LGv/pc5X643B/WEO0rvu3Yww0hqwt3kgeA==", "cpu": [ "arm64" ], @@ -4756,9 +4756,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.24.tgz", - "integrity": "sha512-9HrQajBMmGcrrrvDfRimiCrbAPh3E6uHJmwBovYr6Yrmi9p9PZqI876BrXX280wICh3o2XwUlp4blkB0NNBqFg==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.8.tgz", + "integrity": "sha512-GZtCCOBKJ4leVIT/Th0llWKhD1ca92lzbQiS5R5ON9QkoiFnilFsebDae1JU2a3HWoKMEmEZWGs1AGLavVM72Q==", "cpu": [ "x64" ], @@ -4773,9 +4773,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.24.tgz", - "integrity": "sha512-rl9LSfE75si0WT3cDgdUC1XYCKS+TgxC+/IjitmeycrAG18X/plIP1/vy8dd/HPycYcIvE688PD7FuvEAiEAew==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.8.tgz", + "integrity": "sha512-O659ygeQYqneJ1fBKMpFxIFqYkYswu8IAS1OCKK/4f3ZgJJm1dRz4fVJZRi/kLLWjnBKnebOePA4WNv+sV1pVA==", "cpu": [ "arm64" ], @@ -4790,9 +4790,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.24.tgz", - "integrity": "sha512-TlNAnpsjxSF3aAUtqnfmtXXf8m9sIDBlmF3c7bTAlnshUYu2U0OxN2uf5d0gcFwqHVEdivJNBcCaqNOwPGNimw==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.8.tgz", + "integrity": "sha512-dSjKSyWpzxoO1d3DIZZcP4XJcNaKeLmxQMFOiYl5vuBRMmweIqnAhty8tAmRsvTss779cK1FtYnDMj40e4TQlg==", "cpu": [ "arm64" ], @@ -4807,9 +4807,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.24.tgz", - "integrity": "sha512-7dwtlhr0SLndqTG1z9ncRkbJswDZiKWlxzFyXDvJ2RDZRDRHp8zyMJ4D9UH/FgnQeXxxB6gZy2pMcIUoNKQ4pA==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.8.tgz", + "integrity": "sha512-lbqOuz3RPRcv+o9msNsJw5x4+Y1ZwPTs6vmL6DCf7i0fZfvng/F59wyeDwqHIvV0mK//RBy/jJkZ+nCKsSMXjQ==", "cpu": [ "x64" ], @@ -4824,9 +4824,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.24.tgz", - "integrity": "sha512-kGZxM+WhkYs0276lFrMkj7PRtXT3Btp6cwvfSO/cCVLxJJttB5Ccnl2niaCgUja8HgSbEVnMHpg3FJWoOJ9e/g==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.8.tgz", + "integrity": "sha512-+316WswI8ScVgZeUd+1KGaXkHhaYQzCjvH/05TZSpJ8zBizb1a4G7DtO7F12jcBIqMOtsz9ji1t48fmKtzqsGA==", "cpu": [ "x64" ], @@ -4841,9 +4841,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.24.tgz", - "integrity": "sha512-jBDDkZ/qKAqkWivWDMkJSXUzbzV0QKRBKJjEHUAvSB97Hzw7NLzJ6yV56Lts/wjir7s4P31GYgpbS6ZL+hasAA==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.8.tgz", + "integrity": "sha512-ji0gd4kMYUxO+1fJBIbiBVRCjzG/lloiyCccnlebvb1ZJ5qXCPZqYg4Jl1DrrixnWNMKylzgpmMWx0yNDYXlzw==", "cpu": [ "arm64" ], @@ -4858,9 +4858,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.24.tgz", - "integrity": "sha512-JqtwjvvorjacQ0spgjmUJoxySoYgPwdT1sFdQ0/zmW4iMlP2hjYlCoJIyS7o6Epb4Fug8eco3HXFoBDUCDeH7Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.8.tgz", + "integrity": "sha512-WcTlaKt/TWkh5kUjdJcUmB1XgZ+1c6fz4Y9fDHL73YNSdGaUWjceeWrrlwF0nv19iABYWC4iAq1oX1w4Bn0vfg==", "cpu": [ "x64" ], @@ -5189,9 +5189,9 @@ "dev": true }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7390,6 +7390,19 @@ } ] }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -15523,6 +15536,25 @@ "license": "MIT", "optional": true }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -15578,34 +15610,35 @@ } }, "node_modules/next": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.24.tgz", - "integrity": "sha512-Y+xn8EQCoC3ZbsFPyzE+tE8XOdrWeUdUF7NeXbmg9DsgAxl5UYxlsrvgVESHTyTGigoTa1bCUrxn70F5bqt0Gw==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/next/-/next-16.3.8.tgz", + "integrity": "sha512-U7QEZaTini6wKrb8A8hqLLqYQyCetegKjCpJOyxk642vWoMoU1x5PyZCJFvgYgiptA8xc5j/9xYlZFO7w9Sjmw==", "dev": true, "license": "MIT", "dependencies": { - "@next/env": "15.5.24", - "@swc/helpers": "0.5.15", + "@next/env": "16.3.8", + "@swc/helpers": "0.5.23", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", + "postcss": "8.5.23", "styled-jsx": "5.1.6" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.24", - "@next/swc-darwin-x64": "15.5.24", - "@next/swc-linux-arm64-gnu": "15.5.24", - "@next/swc-linux-arm64-musl": "15.5.24", - "@next/swc-linux-x64-gnu": "15.5.24", - "@next/swc-linux-x64-musl": "15.5.24", - "@next/swc-win32-arm64-msvc": "15.5.24", - "@next/swc-win32-x64-msvc": "15.5.24", - "sharp": "^0.34.3 || ^0.35.3" + "@next/swc-darwin-arm64": "16.3.8", + "@next/swc-darwin-x64": "16.3.8", + "@next/swc-linux-arm64-gnu": "16.3.8", + "@next/swc-linux-arm64-musl": "16.3.8", + "@next/swc-linux-x64-gnu": "16.3.8", + "@next/swc-linux-x64-musl": "16.3.8", + "@next/swc-win32-arm64-msvc": "16.3.8", + "@next/swc-win32-x64-msvc": "16.3.8", + "sharp": "^0.35.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -17304,9 +17337,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "funding": [ { @@ -17322,33 +17355,16 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -19240,10 +19256,11 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -25085,64 +25102,64 @@ } }, "@next/env": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.24.tgz", - "integrity": "sha512-mBDF7T0XKZjs9SpUAl0buizVO+O02ULjOvWX8o/AZo/5AGw/UAS1Zzcylmd4pqbftzmKQi+L/nB4jgBYKEAl5Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.8.tgz", + "integrity": "sha512-Al9zqHVV7TJv0eFuOU4U7Lvv74PTih4Ch63sk2xCIpSTkE3udFnaOcnzP2lQVymiL7yS9Cj2iClUXlR3EQ5sEw==", "dev": true }, "@next/swc-darwin-arm64": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.24.tgz", - "integrity": "sha512-AGdNLvxZNY6eR2iSnV+6wUa8CiHTMr4F7g3uHH7fT4ICIJBE00R9u4tzN/Vuwsw0cOi8MTD2HJcTCb6siMH88Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.8.tgz", + "integrity": "sha512-2JPRMh2nmQG5CiL7cXGL9AGwnPWJQ//cTtAUCT+w511QHk79SYz3LGv/pc5X643B/WEO0rvu3Yww0hqwt3kgeA==", "dev": true, "optional": true }, "@next/swc-darwin-x64": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.24.tgz", - "integrity": "sha512-9HrQajBMmGcrrrvDfRimiCrbAPh3E6uHJmwBovYr6Yrmi9p9PZqI876BrXX280wICh3o2XwUlp4blkB0NNBqFg==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.8.tgz", + "integrity": "sha512-GZtCCOBKJ4leVIT/Th0llWKhD1ca92lzbQiS5R5ON9QkoiFnilFsebDae1JU2a3HWoKMEmEZWGs1AGLavVM72Q==", "dev": true, "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.24.tgz", - "integrity": "sha512-rl9LSfE75si0WT3cDgdUC1XYCKS+TgxC+/IjitmeycrAG18X/plIP1/vy8dd/HPycYcIvE688PD7FuvEAiEAew==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.8.tgz", + "integrity": "sha512-O659ygeQYqneJ1fBKMpFxIFqYkYswu8IAS1OCKK/4f3ZgJJm1dRz4fVJZRi/kLLWjnBKnebOePA4WNv+sV1pVA==", "dev": true, "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.24.tgz", - "integrity": "sha512-TlNAnpsjxSF3aAUtqnfmtXXf8m9sIDBlmF3c7bTAlnshUYu2U0OxN2uf5d0gcFwqHVEdivJNBcCaqNOwPGNimw==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.8.tgz", + "integrity": "sha512-dSjKSyWpzxoO1d3DIZZcP4XJcNaKeLmxQMFOiYl5vuBRMmweIqnAhty8tAmRsvTss779cK1FtYnDMj40e4TQlg==", "dev": true, "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.24.tgz", - "integrity": "sha512-7dwtlhr0SLndqTG1z9ncRkbJswDZiKWlxzFyXDvJ2RDZRDRHp8zyMJ4D9UH/FgnQeXxxB6gZy2pMcIUoNKQ4pA==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.8.tgz", + "integrity": "sha512-lbqOuz3RPRcv+o9msNsJw5x4+Y1ZwPTs6vmL6DCf7i0fZfvng/F59wyeDwqHIvV0mK//RBy/jJkZ+nCKsSMXjQ==", "dev": true, "optional": true }, "@next/swc-linux-x64-musl": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.24.tgz", - "integrity": "sha512-kGZxM+WhkYs0276lFrMkj7PRtXT3Btp6cwvfSO/cCVLxJJttB5Ccnl2niaCgUja8HgSbEVnMHpg3FJWoOJ9e/g==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.8.tgz", + "integrity": "sha512-+316WswI8ScVgZeUd+1KGaXkHhaYQzCjvH/05TZSpJ8zBizb1a4G7DtO7F12jcBIqMOtsz9ji1t48fmKtzqsGA==", "dev": true, "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.24.tgz", - "integrity": "sha512-jBDDkZ/qKAqkWivWDMkJSXUzbzV0QKRBKJjEHUAvSB97Hzw7NLzJ6yV56Lts/wjir7s4P31GYgpbS6ZL+hasAA==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.8.tgz", + "integrity": "sha512-ji0gd4kMYUxO+1fJBIbiBVRCjzG/lloiyCccnlebvb1ZJ5qXCPZqYg4Jl1DrrixnWNMKylzgpmMWx0yNDYXlzw==", "dev": true, "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.24.tgz", - "integrity": "sha512-JqtwjvvorjacQ0spgjmUJoxySoYgPwdT1sFdQ0/zmW4iMlP2hjYlCoJIyS7o6Epb4Fug8eco3HXFoBDUCDeH7Q==", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.8.tgz", + "integrity": "sha512-WcTlaKt/TWkh5kUjdJcUmB1XgZ+1c6fz4Y9fDHL73YNSdGaUWjceeWrrlwF0nv19iABYWC4iAq1oX1w4Bn0vfg==", "dev": true, "optional": true }, @@ -25379,9 +25396,9 @@ "dev": true }, "@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "dev": true, "requires": { "tslib": "^2.8.0" @@ -27091,6 +27108,12 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "baseline-browser-mapping": { + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", + "dev": true + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -32907,6 +32930,12 @@ "integrity": "sha512-GlGk3HIvitbvs+LT3g6XUP1kpirKNvmDFwF/bmo6XNWSb/eYEs/O4bfgIEIXCZ+lIOTS5xNwDvSGMw6FJdAhtA==", "optional": true }, + "nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -32948,24 +32977,25 @@ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, "next": { - "version": "15.5.24", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.24.tgz", - "integrity": "sha512-Y+xn8EQCoC3ZbsFPyzE+tE8XOdrWeUdUF7NeXbmg9DsgAxl5UYxlsrvgVESHTyTGigoTa1bCUrxn70F5bqt0Gw==", - "dev": true, - "requires": { - "@next/env": "15.5.24", - "@next/swc-darwin-arm64": "15.5.24", - "@next/swc-darwin-x64": "15.5.24", - "@next/swc-linux-arm64-gnu": "15.5.24", - "@next/swc-linux-arm64-musl": "15.5.24", - "@next/swc-linux-x64-gnu": "15.5.24", - "@next/swc-linux-x64-musl": "15.5.24", - "@next/swc-win32-arm64-msvc": "15.5.24", - "@next/swc-win32-x64-msvc": "15.5.24", - "@swc/helpers": "0.5.15", + "version": "16.3.8", + "resolved": "https://registry.npmjs.org/next/-/next-16.3.8.tgz", + "integrity": "sha512-U7QEZaTini6wKrb8A8hqLLqYQyCetegKjCpJOyxk642vWoMoU1x5PyZCJFvgYgiptA8xc5j/9xYlZFO7w9Sjmw==", + "dev": true, + "requires": { + "@next/env": "16.3.8", + "@next/swc-darwin-arm64": "16.3.8", + "@next/swc-darwin-x64": "16.3.8", + "@next/swc-linux-arm64-gnu": "16.3.8", + "@next/swc-linux-arm64-musl": "16.3.8", + "@next/swc-linux-x64-gnu": "16.3.8", + "@next/swc-linux-x64-musl": "16.3.8", + "@next/swc-win32-arm64-msvc": "16.3.8", + "@next/swc-win32-x64-msvc": "16.3.8", + "@swc/helpers": "0.5.23", + "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "sharp": "^0.34.3 || ^0.35.3", + "postcss": "8.5.23", + "sharp": "^0.35.4", "styled-jsx": "5.1.6" }, "dependencies": { @@ -34215,22 +34245,14 @@ } }, "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - } + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "postgres-array": { @@ -35611,9 +35633,9 @@ "devOptional": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true }, "source-map-support": { diff --git a/package.json b/package.json index 4180a0f0476..3ee3ca893c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "firebase-tools", - "version": "15.32.1", + "version": "15.32.0", "description": "Command-Line Interface for Firebase", "main": "./lib/index.js", "mcpName": "io.github.firebase/firebase-mcp", @@ -241,7 +241,7 @@ "googleapis": "^105.0.0", "mocha": "^11.7.1", "mock-fs": "5.2.0", - "next": "15.5.24", + "next": "^16.3.7", "nock": "^13.0.5", "node-mocks-http": "^1.11.0", "nyc": "^15.1.0", diff --git a/src/frameworks/next/constants.ts b/src/frameworks/next/constants.ts index 48ee4215627..55b4fed89bf 100644 --- a/src/frameworks/next/constants.ts +++ b/src/frameworks/next/constants.ts @@ -49,50 +49,59 @@ const WEBPACK_LAYERS_NAMES = { /** * The browser client bundle layer for actions. */ actionBrowser: "action-browser", - apiNode: "api-node", - apiEdge: "api-edge", + /** + * The layer for the API routes. + */ api: "api", /** * The layer for the middleware code. */ middleware: "middleware", - instrument: "instrument", /** * The layer for assets on the edge. */ edgeAsset: "edge-asset", /** * The browser client bundle layer for App directory. */ appPagesBrowser: "app-pages-browser", - pagesDirBrowser: "pages-dir-browser", - pagesDirEdge: "pages-dir-edge", - pagesDirNode: "pages-dir-node", + /** + * The server bundle layer for metadata routes. + */ appMetadataRoute: "app-metadata-route", + /** + * The layer for the server bundle for App Route handlers. + */ appRouteHandler: "app-route-handler", } as const; // This is copied from Next.js source code to keep WEBPACK_LAYERS in sync with the Next.js definition. export const WEBPACK_LAYERS: typeof NEXTJS_WEBPACK_LAYERS = { ...WEBPACK_LAYERS_NAMES, + pagesDirBrowser: "pages-dir-browser", + pagesDirEdge: "pages-dir-edge", + pagesDirNode: "pages-dir-node", + apiNode: "api-node", + apiEdge: "api-edge", + instrument: "instrument", GROUP: { builtinReact: [WEBPACK_LAYERS_NAMES.reactServerComponents, WEBPACK_LAYERS_NAMES.actionBrowser], serverOnly: [ + WEBPACK_LAYERS_NAMES.middleware, WEBPACK_LAYERS_NAMES.reactServerComponents, WEBPACK_LAYERS_NAMES.actionBrowser, - WEBPACK_LAYERS_NAMES.instrument, - WEBPACK_LAYERS_NAMES.middleware, + "instrument", ], - neutralTarget: [WEBPACK_LAYERS_NAMES.apiNode, WEBPACK_LAYERS_NAMES.apiEdge], + neutralTarget: ["api-node", "api-edge"], clientOnly: [WEBPACK_LAYERS_NAMES.serverSideRendering, WEBPACK_LAYERS_NAMES.appPagesBrowser], bundled: [ + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.middleware, WEBPACK_LAYERS_NAMES.reactServerComponents, - WEBPACK_LAYERS_NAMES.actionBrowser, WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.actionBrowser, + "instrument", WEBPACK_LAYERS_NAMES.appPagesBrowser, - WEBPACK_LAYERS_NAMES.shared, - WEBPACK_LAYERS_NAMES.instrument, - WEBPACK_LAYERS_NAMES.middleware, ], appPages: [ WEBPACK_LAYERS_NAMES.reactServerComponents, WEBPACK_LAYERS_NAMES.serverSideRendering, - WEBPACK_LAYERS_NAMES.appPagesBrowser, WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.appPagesBrowser, ], }, }; diff --git a/src/frameworks/next/index.ts b/src/frameworks/next/index.ts index ea436c8109d..08b3e30e6f0 100644 --- a/src/frameworks/next/index.ts +++ b/src/frameworks/next/index.ts @@ -12,6 +12,7 @@ import { gte, coerce } from "semver"; import { IncomingMessage, ServerResponse } from "http"; import * as clc from "colorette"; import { fileExistsSync } from "../../fsutils"; +import { loadStreamJson } from "../../streamJson"; import { select } from "../../prompt"; import { FirebaseError } from "../../error"; @@ -41,7 +42,7 @@ import { isRewriteSupportedByHosting, isUsingImageOptimization, isUsingMiddleware, - getProductionDependencyNames, + allDependencyNames, getMiddlewareMatcherRegexes, getNonStaticRoutes, getNonStaticServerComponents, @@ -58,12 +59,13 @@ import { getNextVersionRaw, isNextJsVersionVulnerable, } from "./utils"; -import { NODE_VERSION, SHARP_VERSION, I18N_ROOT } from "../constants"; +import { NODE_VERSION, NPM_COMMAND_TIMEOUT_MILLIES, SHARP_VERSION, I18N_ROOT } from "../constants"; import type { AppPathRoutesManifest, AppPathsManifest, HostingHeadersWithSource, RoutesManifest, + NpmLsDepdendency, MiddlewareManifest, ActionManifest, CustomBuildOptions, @@ -513,11 +515,11 @@ export async function ɵcodegenPublicDirectory( { srcRoute: null, initialRevalidateSeconds: false, - initialExpireSeconds: undefined, dataRoute: "", experimentalPPR: false, - renderingMode: undefined, prefetchDataRoute: "", + initialExpireSeconds: undefined, + renderingMode: undefined, allowHeader: [], }, ]; @@ -658,7 +660,28 @@ export async function ɵcodegenFunctionsDirectory( throw new FirebaseError(`Failed to load esbuild from path: ${esbuildPath}`); } - const productionDeps = await getProductionDependencyNames(sourceDir); + const { chain, parser, pick, streamObject } = await loadStreamJson(); + const productionDeps = await new Promise((resolve) => { + const dependencies: string[] = []; + const npmLs = spawn("npm", ["ls", "--omit=dev", "--all", "--json=true"], { + cwd: sourceDir, + timeout: NPM_COMMAND_TIMEOUT_MILLIES, + }); + const pipeline = chain([ + npmLs.stdout, + parser({ packValues: false, packKeys: true, streamValues: false }), + pick({ filter: "dependencies" }), + streamObject(), + ({ key, value }: { key: string; value: NpmLsDepdendency }) => [ + key, + ...allDependencyNames(value), + ], + ]); + pipeline.on("data", (it: string) => dependencies.push(it)); + pipeline.on("end", () => { + resolve([...new Set(dependencies)]); + }); + }); // Mark all production deps as externals, so they aren't bundled // DevDeps won't be included in the Cloud Function, so they should be bundled diff --git a/src/frameworks/next/interfaces.ts b/src/frameworks/next/interfaces.ts index 6196bc71903..55861ba952e 100644 --- a/src/frameworks/next/interfaces.ts +++ b/src/frameworks/next/interfaces.ts @@ -92,8 +92,8 @@ export type MiddlewareManifest = MiddlewareManifestV1 | MiddlewareManifestV2 | M export type MiddlewareManifestV2 = { version: 2; sortedMiddleware: string[]; - middleware: { [page: string]: Omit }; - functions: { [page: string]: Omit }; + middleware: { [page: string]: EdgeFunctionDefinition }; + functions: { [page: string]: EdgeFunctionDefinition }; }; /** @@ -109,16 +109,17 @@ export type MiddlewareManifestV3 = { }; /** - * Type required for MiddlewareManifestV3 + * Type required for MiddlewareManifestV2 and MiddlewareManifestV3 * * @see https://github.com/vercel/next.js/blob/3352f9ee9342b40aaded91c340e7e11650aa4867/packages/next/src/build/webpack/plugins/middleware-plugin.ts#L44-L53 */ -interface EdgeFunctionDefinition { +export interface EdgeFunctionDefinition { files: string[]; name: string; page: string; matchers: ProxyMatcherNext16[]; - env: Record; + entrypoint?: string; + env?: Record; wasm?: AssetBinding[]; assets?: AssetBinding[]; regions?: string[] | string; @@ -210,8 +211,9 @@ export interface MiddlewareManifestV1 { export interface ImagesManifest { version: number; - images: ImageConfigComplete & { + images: Partial & { sizes: number[]; + unoptimized: boolean; }; } diff --git a/src/frameworks/next/testing/app.ts b/src/frameworks/next/testing/app.ts index 049376fc692..47838efe2ed 100644 --- a/src/frameworks/next/testing/app.ts +++ b/src/frameworks/next/testing/app.ts @@ -32,22 +32,22 @@ export const prerenderManifest: PrerenderManifest = { routes: { "/": { initialRevalidateSeconds: false, - initialExpireSeconds: undefined, srcRoute: "/", dataRoute: "/index.rsc", experimentalPPR: false, - renderingMode: undefined, prefetchDataRoute: "", + initialExpireSeconds: undefined, + renderingMode: undefined, allowHeader: [], }, "/api/static": { initialRevalidateSeconds: false, - initialExpireSeconds: undefined, srcRoute: "/api/static", dataRoute: "", experimentalPPR: false, - renderingMode: undefined, prefetchDataRoute: "", + initialExpireSeconds: undefined, + renderingMode: undefined, allowHeader: [], }, }, diff --git a/src/frameworks/next/utils.ts b/src/frameworks/next/utils.ts index 759ec291580..648da2a9186 100644 --- a/src/frameworks/next/utils.ts +++ b/src/frameworks/next/utils.ts @@ -16,15 +16,12 @@ import type { RoutesManifestRedirect, RoutesManifestHeader, MiddlewareManifest, - MiddlewareManifestV1, - MiddlewareManifestV2, AppPathsManifest, HostingHeadersWithSource, AppPathRoutesManifest, ActionManifest, NextConfigFileName, FunctionsConfigManifest, - MiddlewareManifestV3, } from "./interfaces"; import { APP_PATH_ROUTES_MANIFEST, @@ -387,21 +384,18 @@ export function getMiddlewareMatcherRegexes( middlewareManifest: MiddlewareManifest, functionsConfigManifest: FunctionsConfigManifest, ): RegExp[] { - const middlewareObjectValues = Object.values(middlewareManifest.middleware); const middlewareMatchers: Record<"regexp", string>[] = []; if (middlewareManifest.version === 1) { + const values = Object.values(middlewareManifest.middleware); middlewareMatchers.push( - ...middlewareObjectValues.map((page: MiddlewareManifestV1["middleware"][string]) => ({ + ...values.map((page) => ({ regexp: page.regexp, })), ); } else if (middlewareManifest.version === 2) { - middlewareMatchers.push( - ...middlewareObjectValues - .map((page: MiddlewareManifestV2["middleware"][string]) => page.matchers) - .flat(), - ); + const values = Object.values(middlewareManifest.middleware); + middlewareMatchers.push(...values.map((page) => page.matchers || []).flat()); } else if (middlewareManifest.version === 3) { if (functionsConfigManifest?.functions?.["/_middleware"]) { // matchers from proxy.js @@ -410,11 +404,8 @@ export function getMiddlewareMatcherRegexes( ); } else { // matchers from middleware.js - middlewareMatchers.push( - ...middlewareObjectValues - .map((page: MiddlewareManifestV3["middleware"][string]) => page.matchers) - .flat(), - ); + const values = Object.values(middlewareManifest.middleware); + middlewareMatchers.push(...values.map((page) => page.matchers || []).flat()); } }