diff --git a/package-lock.json b/package-lock.json index 1263e23273f..83a7d058d55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@bugsnag/js": "8.2.0", "@fastify/static": "7.0.4", "@netlify/blobs": "8.1.1", - "@netlify/build": "29.58.9", + "@netlify/build": "29.58.10", "@netlify/build-info": "8.0.0", "@netlify/config": "20.21.7", "@netlify/edge-bundler": "12.3.2", @@ -2269,9 +2269,9 @@ } }, "node_modules/@netlify/build": { - "version": "29.58.9", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.58.9.tgz", - "integrity": "sha512-tu45eh8izdyRlzRfxTSQ8J6oYrGMni77PZRP4Ks8tlBA8Hy81NGB/TptMYAVRSEYbvCyozNhgRFhacqEgpK/8A==", + "version": "29.58.10", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.58.10.tgz", + "integrity": "sha512-nywuGn+b7ZWyjbPijAM0RQ7C3H9gsoZdjT5rhxSwYjiYn1DdqRCiWka2J9Ehr7MSayVUBMyUmjEAhwusiX+l3g==", "dependencies": { "@bugsnag/js": "^7.0.0", "@netlify/blobs": "^7.4.0", @@ -2279,16 +2279,16 @@ "@netlify/config": "^20.21.7", "@netlify/edge-bundler": "12.3.2", "@netlify/framework-info": "^9.9.1", - "@netlify/functions-utils": "^5.3.5", + "@netlify/functions-utils": "^5.3.6", "@netlify/git-utils": "^5.2.0", "@netlify/opentelemetry-utils": "^1.3.0", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.2.0", - "@netlify/zip-it-and-ship-it": "9.42.5", + "@netlify/zip-it-and-ship-it": "9.42.6", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^6.0.0", "chalk": "^5.0.0", - "clean-stack": "^4.0.0", + "clean-stack": "^5.0.0", "execa": "^7.0.0", "fdir": "^6.0.1", "figures": "^5.0.0", @@ -2499,6 +2499,18 @@ "node": ">= 14" } }, + "node_modules/@netlify/build/node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@netlify/build/node_modules/@bugsnag/browser": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.25.0.tgz", @@ -2549,6 +2561,65 @@ "node": "^14.16.0 || >=16.0.0" } }, + "node_modules/@netlify/build/node_modules/@netlify/serverless-functions-api": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.33.0.tgz", + "integrity": "sha512-il9HUEC5Nu+6l7vJR2vvolJ12SuI/Yo6K8ZoAKHx7RkMGzS0LHcopDW2pIVRTP8I3vQBxvzuof3FUfqLdAiXhw==", + "dependencies": { + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@netlify/build/node_modules/@netlify/zip-it-and-ship-it": { + "version": "9.42.6", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.42.6.tgz", + "integrity": "sha512-1uSQUv/2qXD5TE2Qmf+GN7U7qV1/q0Bk8iQxfSkoc7g9aXScOYLa2e4QQXQ1CKJkZrZXvh3r4Emc2s+Lq44aeA==", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.26.9", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.33.0", + "@vercel/nft": "0.27.7", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "cp-file": "^10.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.19.11", + "execa": "^7.0.0", + "fast-glob": "^3.3.2", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^11.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + }, + "bin": { + "zip-it-and-ship-it": "bin.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + } + }, "node_modules/@netlify/build/node_modules/ansi-escapes": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", @@ -2568,11 +2639,36 @@ "balanced-match": "^1.0.0" } }, + "node_modules/@netlify/build/node_modules/clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@netlify/build/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "node_modules/@netlify/build/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@netlify/build/node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -2610,6 +2706,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@netlify/build/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@netlify/build/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@netlify/build/node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -4000,11 +4126,11 @@ } }, "node_modules/@netlify/functions-utils": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.3.5.tgz", - "integrity": "sha512-wKZBMvKGuAeQ0G02q+Rpb4ZQh6CXqkNurdGCFVAKOdxPcmivb+CIUmCMcmsc+NDxWdjzZ4yxGla1x+Q3IkaAOw==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.3.6.tgz", + "integrity": "sha512-ZLLvpAjKAzVZSFCDHmPzmJKn+BesegNOipGAt0gX4DZuygXlE/rZ8JOQ5BKv1aCcrhTZBAzmMemE8OYluS1+FA==", "dependencies": { - "@netlify/zip-it-and-ship-it": "9.42.5", + "@netlify/zip-it-and-ship-it": "9.42.6", "cpy": "^9.0.0", "path-exists": "^5.0.0" }, @@ -4012,6 +4138,213 @@ "node": "^14.16.0 || >=16.0.0" } }, + "node_modules/@netlify/functions-utils/node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@netlify/functions-utils/node_modules/@netlify/serverless-functions-api": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.33.0.tgz", + "integrity": "sha512-il9HUEC5Nu+6l7vJR2vvolJ12SuI/Yo6K8ZoAKHx7RkMGzS0LHcopDW2pIVRTP8I3vQBxvzuof3FUfqLdAiXhw==", + "dependencies": { + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@netlify/functions-utils/node_modules/@netlify/zip-it-and-ship-it": { + "version": "9.42.6", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.42.6.tgz", + "integrity": "sha512-1uSQUv/2qXD5TE2Qmf+GN7U7qV1/q0Bk8iQxfSkoc7g9aXScOYLa2e4QQXQ1CKJkZrZXvh3r4Emc2s+Lq44aeA==", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.26.9", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.33.0", + "@vercel/nft": "0.27.7", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "cp-file": "^10.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.19.11", + "execa": "^7.0.0", + "fast-glob": "^3.3.2", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^11.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + }, + "bin": { + "zip-it-and-ship-it": "bin.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + } + }, + "node_modules/@netlify/functions-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@netlify/functions-utils/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@netlify/functions-utils/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/functions-utils/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@netlify/functions-utils/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@netlify/functions-utils/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@netlify/functions-utils/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/functions-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@netlify/functions-utils/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/functions-utils/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@netlify/functions-utils/node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", @@ -4020,6 +4353,17 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/@netlify/functions-utils/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@netlify/git-utils": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-5.2.0.tgz", @@ -26045,9 +26389,9 @@ "integrity": "sha512-7Dg3PzArvQ0Owq4wpkLECC9iaDBOxuWUN2uwbQtUF6tZssyez2QN+eO0CjuIhhZUivbw+X9bwsyiEjWkdJnv/A==" }, "@netlify/build": { - "version": "29.58.9", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.58.9.tgz", - "integrity": "sha512-tu45eh8izdyRlzRfxTSQ8J6oYrGMni77PZRP4Ks8tlBA8Hy81NGB/TptMYAVRSEYbvCyozNhgRFhacqEgpK/8A==", + "version": "29.58.10", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.58.10.tgz", + "integrity": "sha512-nywuGn+b7ZWyjbPijAM0RQ7C3H9gsoZdjT5rhxSwYjiYn1DdqRCiWka2J9Ehr7MSayVUBMyUmjEAhwusiX+l3g==", "requires": { "@bugsnag/js": "^7.0.0", "@netlify/blobs": "^7.4.0", @@ -26055,16 +26399,16 @@ "@netlify/config": "^20.21.7", "@netlify/edge-bundler": "12.3.2", "@netlify/framework-info": "^9.9.1", - "@netlify/functions-utils": "^5.3.5", + "@netlify/functions-utils": "^5.3.6", "@netlify/git-utils": "^5.2.0", "@netlify/opentelemetry-utils": "^1.3.0", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.2.0", - "@netlify/zip-it-and-ship-it": "9.42.5", + "@netlify/zip-it-and-ship-it": "9.42.6", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^6.0.0", "chalk": "^5.0.0", - "clean-stack": "^4.0.0", + "clean-stack": "^5.0.0", "execa": "^7.0.0", "fdir": "^6.0.1", "figures": "^5.0.0", @@ -26109,6 +26453,15 @@ "yargs": "^17.6.0" }, "dependencies": { + "@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, "@bugsnag/browser": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.25.0.tgz", @@ -26156,6 +26509,56 @@ "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-7.4.0.tgz", "integrity": "sha512-7rdPzo8bggt3D2CVO+U1rmEtxxs8X7cLusDbHZRJaMlxqxBD05mXgThj5DUJMFOvmfVjhEH/S/3AyiLUbDQGDg==" }, + "@netlify/serverless-functions-api": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.33.0.tgz", + "integrity": "sha512-il9HUEC5Nu+6l7vJR2vvolJ12SuI/Yo6K8ZoAKHx7RkMGzS0LHcopDW2pIVRTP8I3vQBxvzuof3FUfqLdAiXhw==", + "requires": { + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + } + }, + "@netlify/zip-it-and-ship-it": { + "version": "9.42.6", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.42.6.tgz", + "integrity": "sha512-1uSQUv/2qXD5TE2Qmf+GN7U7qV1/q0Bk8iQxfSkoc7g9aXScOYLa2e4QQXQ1CKJkZrZXvh3r4Emc2s+Lq44aeA==", + "requires": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.26.9", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.33.0", + "@vercel/nft": "0.27.7", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "cp-file": "^10.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.19.11", + "execa": "^7.0.0", + "fast-glob": "^3.3.2", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^11.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + } + }, "ansi-escapes": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", @@ -26169,11 +26572,24 @@ "balanced-match": "^1.0.0" } }, + "clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "requires": { + "escape-string-regexp": "5.0.0" + } + }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + }, "execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -26199,6 +26615,28 @@ "path-exists": "^5.0.0" } }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", @@ -27117,19 +27555,172 @@ } }, "@netlify/functions-utils": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.3.5.tgz", - "integrity": "sha512-wKZBMvKGuAeQ0G02q+Rpb4ZQh6CXqkNurdGCFVAKOdxPcmivb+CIUmCMcmsc+NDxWdjzZ4yxGla1x+Q3IkaAOw==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.3.6.tgz", + "integrity": "sha512-ZLLvpAjKAzVZSFCDHmPzmJKn+BesegNOipGAt0gX4DZuygXlE/rZ8JOQ5BKv1aCcrhTZBAzmMemE8OYluS1+FA==", "requires": { - "@netlify/zip-it-and-ship-it": "9.42.5", + "@netlify/zip-it-and-ship-it": "9.42.6", "cpy": "^9.0.0", "path-exists": "^5.0.0" }, "dependencies": { + "@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@netlify/serverless-functions-api": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.33.0.tgz", + "integrity": "sha512-il9HUEC5Nu+6l7vJR2vvolJ12SuI/Yo6K8ZoAKHx7RkMGzS0LHcopDW2pIVRTP8I3vQBxvzuof3FUfqLdAiXhw==", + "requires": { + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + } + }, + "@netlify/zip-it-and-ship-it": { + "version": "9.42.6", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.42.6.tgz", + "integrity": "sha512-1uSQUv/2qXD5TE2Qmf+GN7U7qV1/q0Bk8iQxfSkoc7g9aXScOYLa2e4QQXQ1CKJkZrZXvh3r4Emc2s+Lq44aeA==", + "requires": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.26.9", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.33.0", + "@vercel/nft": "0.27.7", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "cp-file": "^10.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.19.11", + "execa": "^7.0.0", + "fast-glob": "^3.3.2", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^11.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, "path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" } } }, diff --git a/package.json b/package.json index 8453c5bdd22..bc6fff7880b 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@bugsnag/js": "8.2.0", "@fastify/static": "7.0.4", "@netlify/blobs": "8.1.1", - "@netlify/build": "29.58.9", + "@netlify/build": "29.58.10", "@netlify/build-info": "8.0.0", "@netlify/config": "20.21.7", "@netlify/edge-bundler": "12.3.2", diff --git a/src/utils/run-build.ts b/src/utils/run-build.ts index e9b7aa757a0..76974acca25 100644 --- a/src/utils/run-build.ts +++ b/src/utils/run-build.ts @@ -1,6 +1,8 @@ import { promises as fs } from 'fs' import path, { join } from 'path' +import { NetlifyConfig } from '@netlify/build' + import BaseCommand from '../commands/base-command.js' import { $TSFixMe } from '../commands/types.js' import { getBootstrapURL } from '../lib/edge-functions/bootstrap.js' @@ -87,7 +89,10 @@ export const runNetlifyBuild = async ({ edgeFunctionsBootstrapURL: await getBootstrapURL(), } - const devCommand = async (settingsOverrides = {}) => { + const devCommand = async ({ + netlifyConfig, + settingsOverrides, + }: { netlifyConfig?: NetlifyConfig; settingsOverrides?: Partial } = {}) => { let cwd = command.workingDir if (!options.cwd && command.project.workspace?.packages.length) { @@ -99,6 +104,11 @@ export const runNetlifyBuild = async ({ ...settings, ...settingsOverrides, ...(options.skipWaitPort ? { skipWaitPort: true } : {}), + env: { + ...settings.env, + ...settingsOverrides?.env, + ...netlifyConfig?.build.environment, + }, }, cwd, }) @@ -140,7 +150,7 @@ export const runNetlifyBuild = async ({ if (!options.dir && netlifyConfig?.build?.publish) { settingsOverrides.dist = netlifyConfig.build.publish } - await devCommand(settingsOverrides) + await devCommand({ netlifyConfig, settingsOverrides }) return { configPath: tempConfigPath } } diff --git a/tests/integration/commands/build/build.test.ts b/tests/integration/commands/build/build.test.ts index f612b67048c..825e0157b7e 100644 --- a/tests/integration/commands/build/build.test.ts +++ b/tests/integration/commands/build/build.test.ts @@ -336,7 +336,6 @@ describe.concurrent('command/build', () => { expect(output).toMatch(/❯ Using Next.js Runtime -/) expect(output).toMatch(/\$ npm run build/) expect(output).toMatch(/Functions bundling completed/) - expect(output).toMatch(/Edge Functions bundling completed/) }) }) }) diff --git a/tests/integration/commands/dev/dev.test.ts b/tests/integration/commands/dev/dev.test.ts index 1d822a343df..18dbfb29266 100644 --- a/tests/integration/commands/dev/dev.test.ts +++ b/tests/integration/commands/dev/dev.test.ts @@ -730,6 +730,59 @@ describe.concurrent('command/dev', () => { ) }) }) + + test('ensures dev server plugins can mutate env', async (t) => { + await withSiteBuilder(t, async (builder) => { + await builder + .withNetlifyToml({ + config: { + plugins: [{ package: './plugins/plugin' }], + dev: { + command: 'node index.mjs', + targetPort: 4444, + }, + }, + }) + .withBuildPlugin({ + name: 'plugin', + plugin: { + async onPreDev({ netlifyConfig }) { + netlifyConfig.build.environment.SOME_ENV = 'value' + }, + }, + }) + .withContentFile({ + path: 'index.mjs', + content: ` + import process from 'process'; + import http from 'http'; + + const server = http.createServer((req, res) => { + res.write(process.env.SOME_ENV) + res.end(); + }) + + server.listen(4444) + `, + }) + .build() + + await withDevServer( + { + cwd: builder.directory, + }, + async (server) => { + const output = server.outputBuffer.map((buff) => buff.toString()).join('\n') + t.expect(output).toContain('Netlify configuration property "build.environment.SOME_ENV" value changed.') + t.expect(output).toContain('Server now ready') + + const res = await fetch(new URL('/', server.url)) + t.expect(res.status).toBe(200) + t.expect(await res.text()).toBe('value') + }, + ) + }) + }) }) }) })