netlify-cli 15.6.0 → 15.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,26 @@
1
1
  {
2
2
  "name": "netlify-cli",
3
- "version": "15.6.0",
3
+ "version": "15.7.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "netlify-cli",
9
- "version": "15.6.0",
9
+ "version": "15.7.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
13
  "@bugsnag/js": "7.20.2",
14
14
  "@fastify/static": "6.10.2",
15
- "@netlify/build": "29.12.6",
16
- "@netlify/build-info": "7.0.7",
15
+ "@netlify/build": "29.12.8",
16
+ "@netlify/build-info": "7.0.8",
17
17
  "@netlify/config": "20.5.1",
18
18
  "@netlify/edge-bundler": "8.16.2",
19
19
  "@netlify/framework-info": "9.8.10",
20
20
  "@netlify/local-functions-proxy": "1.1.1",
21
- "@netlify/zip-it-and-ship-it": "9.9.1",
22
- "@octokit/rest": "19.0.11",
21
+ "@netlify/serverless-functions-api": "1.5.1",
22
+ "@netlify/zip-it-and-ship-it": "9.10.0",
23
+ "@octokit/rest": "19.0.13",
23
24
  "@skn0tt/lambda-local": "2.0.3",
24
25
  "ansi-escapes": "6.2.0",
25
26
  "ansi-styles": "6.2.1",
@@ -41,7 +42,7 @@
41
42
  "copy-template-dir": "1.4.0",
42
43
  "cron-parser": "4.8.1",
43
44
  "debug": "4.3.4",
44
- "decache": "4.6.1",
45
+ "decache": "4.6.2",
45
46
  "dot-prop": "7.2.0",
46
47
  "dotenv": "16.0.3",
47
48
  "env-paths": "3.0.0",
@@ -100,7 +101,7 @@
100
101
  "pump": "3.0.0",
101
102
  "raw-body": "2.5.2",
102
103
  "read-pkg-up": "9.1.0",
103
- "semver": "7.5.1",
104
+ "semver": "7.5.3",
104
105
  "source-map-support": "0.5.21",
105
106
  "strip-ansi-control-characters": "2.0.0",
106
107
  "tabtab": "3.0.2",
@@ -650,20 +651,20 @@
650
651
  "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw=="
651
652
  },
652
653
  "node_modules/@netlify/build": {
653
- "version": "29.12.6",
654
- "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.12.6.tgz",
655
- "integrity": "sha512-qTeitoi5KOxjuta5/qPyUC7d5NfqTmc6xT+EohAZKOzgz8C5Bto/hfh+jbmAlfoNnyL20MVngn1wNXKJRZVRAA==",
654
+ "version": "29.12.8",
655
+ "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.12.8.tgz",
656
+ "integrity": "sha512-es3nRMmb5zEpvON3qRKCGMqpfcqPvVYKR6ulQe+LP6+U2Nw9oAHr7+nBgiMvo0moJBC7t+lYFSphLjpn4G1M1Q==",
656
657
  "dependencies": {
657
658
  "@bugsnag/js": "^7.0.0",
658
659
  "@netlify/cache-utils": "^5.1.5",
659
660
  "@netlify/config": "^20.5.1",
660
661
  "@netlify/edge-bundler": "8.16.2",
661
662
  "@netlify/framework-info": "^9.8.10",
662
- "@netlify/functions-utils": "^5.2.12",
663
+ "@netlify/functions-utils": "^5.2.13",
663
664
  "@netlify/git-utils": "^5.1.1",
664
665
  "@netlify/plugins-list": "^6.68.0",
665
666
  "@netlify/run-utils": "^5.1.1",
666
- "@netlify/zip-it-and-ship-it": "9.9.1",
667
+ "@netlify/zip-it-and-ship-it": "9.10.0",
667
668
  "@sindresorhus/slugify": "^2.0.0",
668
669
  "ansi-escapes": "^6.0.0",
669
670
  "chalk": "^5.0.0",
@@ -702,7 +703,6 @@
702
703
  "strip-ansi": "^7.0.0",
703
704
  "supports-color": "^9.0.0",
704
705
  "terminal-link": "^3.0.0",
705
- "tmp-promise": "^3.0.2",
706
706
  "ts-node": "^10.9.1",
707
707
  "typescript": "^5.0.0",
708
708
  "uuid": "^9.0.0",
@@ -716,9 +716,9 @@
716
716
  }
717
717
  },
718
718
  "node_modules/@netlify/build-info": {
719
- "version": "7.0.7",
720
- "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.0.7.tgz",
721
- "integrity": "sha512-DAGbkrs+h0s8+1K7+INBWMrF80fkHzEAUrGzZdZ1q3HSNXKuP4wiBfnbdn7Ls0FLAwldS2edqVpBA7dy66KatQ==",
719
+ "version": "7.0.8",
720
+ "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.0.8.tgz",
721
+ "integrity": "sha512-VbasUPF4WcvFdq0B58+cM5/Jf6SUjYympgwz6B4IA5PQom/Ptkj5OMzRVclHclIhyDiiuwhIpCeeA0R6ru6XdA==",
722
722
  "dependencies": {
723
723
  "@bugsnag/js": "^7.20.0",
724
724
  "@netlify/framework-info": "^9.8.10",
@@ -745,9 +745,9 @@
745
745
  }
746
746
  },
747
747
  "node_modules/@netlify/build-info/node_modules/minimatch": {
748
- "version": "9.0.1",
749
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
750
- "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
748
+ "version": "9.0.2",
749
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
750
+ "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
751
751
  "dependencies": {
752
752
  "brace-expansion": "^2.0.1"
753
753
  },
@@ -825,9 +825,9 @@
825
825
  }
826
826
  },
827
827
  "node_modules/@netlify/build/node_modules/cacheable-request": {
828
- "version": "10.2.10",
829
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
830
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
828
+ "version": "10.2.12",
829
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
830
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
831
831
  "dependencies": {
832
832
  "@types/http-cache-semantics": "^4.0.1",
833
833
  "get-stream": "^6.0.1",
@@ -1186,9 +1186,9 @@
1186
1186
  }
1187
1187
  },
1188
1188
  "node_modules/@netlify/cache-utils/node_modules/globby": {
1189
- "version": "13.1.4",
1190
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
1191
- "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
1189
+ "version": "13.2.0",
1190
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz",
1191
+ "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==",
1192
1192
  "dependencies": {
1193
1193
  "dir-glob": "^3.0.1",
1194
1194
  "fast-glob": "^3.2.11",
@@ -2031,11 +2031,11 @@
2031
2031
  }
2032
2032
  },
2033
2033
  "node_modules/@netlify/functions-utils": {
2034
- "version": "5.2.12",
2035
- "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.12.tgz",
2036
- "integrity": "sha512-BgyPyz/aXOzzx0dKom8qEws5YqsTDGCuwLJpDWjGJsxGn6duSzTuXQZyOys6vz9N1TXfwC6TAOGjt+Y0yT/8VQ==",
2034
+ "version": "5.2.13",
2035
+ "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.13.tgz",
2036
+ "integrity": "sha512-j8jLlXC5tU7BbbmLLhsmCsJvS7DItEz4GAF3qIDfNFKvTfplk6MUGIuHUpezeBWr3UlNqCEn9UbvJym/CT2iLQ==",
2037
2037
  "dependencies": {
2038
- "@netlify/zip-it-and-ship-it": "9.9.1",
2038
+ "@netlify/zip-it-and-ship-it": "9.10.0",
2039
2039
  "cpy": "^9.0.0",
2040
2040
  "path-exists": "^5.0.0"
2041
2041
  },
@@ -2455,9 +2455,9 @@
2455
2455
  }
2456
2456
  },
2457
2457
  "node_modules/@netlify/zip-it-and-ship-it": {
2458
- "version": "9.9.1",
2459
- "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.9.1.tgz",
2460
- "integrity": "sha512-CRxADifrq23LnPvuOnPza/QGln/HDB/rhWsHGyLbXzpaEaJu41CQI2nsBLDF+G/K621S7W9UcCatOr9TDgvaOg==",
2458
+ "version": "9.10.0",
2459
+ "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.10.0.tgz",
2460
+ "integrity": "sha512-E9Hh4MQdhWDeDn3YjDNIpYvqUdLBMx7ghxfShFXv73/KyDns7tS/BpyakuObL/89JDV76CG/jtIx/cPPfxmg9w==",
2461
2461
  "dependencies": {
2462
2462
  "@babel/parser": "^7.22.5",
2463
2463
  "@netlify/binary-info": "^1.0.0",
@@ -2576,9 +2576,9 @@
2576
2576
  }
2577
2577
  },
2578
2578
  "node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": {
2579
- "version": "9.0.1",
2580
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
2581
- "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
2579
+ "version": "9.0.2",
2580
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
2581
+ "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
2582
2582
  "dependencies": {
2583
2583
  "brace-expansion": "^2.0.1"
2584
2584
  },
@@ -2834,9 +2834,9 @@
2834
2834
  }
2835
2835
  },
2836
2836
  "node_modules/@octokit/rest": {
2837
- "version": "19.0.11",
2838
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz",
2839
- "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==",
2837
+ "version": "19.0.13",
2838
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz",
2839
+ "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==",
2840
2840
  "dependencies": {
2841
2841
  "@octokit/core": "^4.2.1",
2842
2842
  "@octokit/plugin-paginate-rest": "^6.1.2",
@@ -3312,9 +3312,9 @@
3312
3312
  }
3313
3313
  },
3314
3314
  "node_modules/@xhmikosr/downloader/node_modules/cacheable-request": {
3315
- "version": "10.2.10",
3316
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
3317
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
3315
+ "version": "10.2.12",
3316
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
3317
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
3318
3318
  "dependencies": {
3319
3319
  "@types/http-cache-semantics": "^4.0.1",
3320
3320
  "get-stream": "^6.0.1",
@@ -5189,9 +5189,9 @@
5189
5189
  }
5190
5190
  },
5191
5191
  "node_modules/cpy/node_modules/globby": {
5192
- "version": "13.1.4",
5193
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
5194
- "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
5192
+ "version": "13.2.0",
5193
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz",
5194
+ "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==",
5195
5195
  "dependencies": {
5196
5196
  "dir-glob": "^3.0.1",
5197
5197
  "fast-glob": "^3.2.11",
@@ -5382,9 +5382,9 @@
5382
5382
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
5383
5383
  },
5384
5384
  "node_modules/decache": {
5385
- "version": "4.6.1",
5386
- "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz",
5387
- "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==",
5385
+ "version": "4.6.2",
5386
+ "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz",
5387
+ "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==",
5388
5388
  "dependencies": {
5389
5389
  "callsite": "^1.0.0"
5390
5390
  }
@@ -5614,9 +5614,9 @@
5614
5614
  }
5615
5615
  },
5616
5616
  "node_modules/detective-typescript/node_modules/@typescript-eslint/types": {
5617
- "version": "5.59.11",
5618
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz",
5619
- "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==",
5617
+ "version": "5.60.0",
5618
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz",
5619
+ "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==",
5620
5620
  "engines": {
5621
5621
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
5622
5622
  },
@@ -5626,12 +5626,12 @@
5626
5626
  }
5627
5627
  },
5628
5628
  "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": {
5629
- "version": "5.59.11",
5630
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz",
5631
- "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==",
5629
+ "version": "5.60.0",
5630
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz",
5631
+ "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==",
5632
5632
  "dependencies": {
5633
- "@typescript-eslint/types": "5.59.11",
5634
- "@typescript-eslint/visitor-keys": "5.59.11",
5633
+ "@typescript-eslint/types": "5.60.0",
5634
+ "@typescript-eslint/visitor-keys": "5.60.0",
5635
5635
  "debug": "^4.3.4",
5636
5636
  "globby": "^11.1.0",
5637
5637
  "is-glob": "^4.0.3",
@@ -5652,11 +5652,11 @@
5652
5652
  }
5653
5653
  },
5654
5654
  "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": {
5655
- "version": "5.59.11",
5656
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz",
5657
- "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==",
5655
+ "version": "5.60.0",
5656
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz",
5657
+ "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==",
5658
5658
  "dependencies": {
5659
- "@typescript-eslint/types": "5.59.11",
5659
+ "@typescript-eslint/types": "5.60.0",
5660
5660
  "eslint-visitor-keys": "^3.3.0"
5661
5661
  },
5662
5662
  "engines": {
@@ -6555,9 +6555,9 @@
6555
6555
  }
6556
6556
  },
6557
6557
  "node_modules/fastify/node_modules/pino-std-serializers": {
6558
- "version": "6.2.1",
6559
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz",
6560
- "integrity": "sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ=="
6558
+ "version": "6.2.2",
6559
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
6560
+ "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="
6561
6561
  },
6562
6562
  "node_modules/fastify/node_modules/process-warning": {
6563
6563
  "version": "2.2.0",
@@ -6653,9 +6653,9 @@
6653
6653
  }
6654
6654
  },
6655
6655
  "node_modules/fetch-node-website/node_modules/cacheable-request": {
6656
- "version": "10.2.10",
6657
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
6658
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
6656
+ "version": "10.2.12",
6657
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
6658
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
6659
6659
  "dependencies": {
6660
6660
  "@types/http-cache-semantics": "^4.0.1",
6661
6661
  "get-stream": "^6.0.1",
@@ -10581,9 +10581,9 @@
10581
10581
  }
10582
10582
  },
10583
10583
  "node_modules/package-json/node_modules/cacheable-request": {
10584
- "version": "10.2.10",
10585
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
10586
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
10584
+ "version": "10.2.12",
10585
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
10586
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
10587
10587
  "dependencies": {
10588
10588
  "@types/http-cache-semantics": "^4.0.1",
10589
10589
  "get-stream": "^6.0.1",
@@ -11660,9 +11660,9 @@
11660
11660
  "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
11661
11661
  },
11662
11662
  "node_modules/semver": {
11663
- "version": "7.5.1",
11664
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
11665
- "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
11663
+ "version": "7.5.3",
11664
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
11665
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
11666
11666
  "dependencies": {
11667
11667
  "lru-cache": "^6.0.0"
11668
11668
  },
@@ -14138,20 +14138,20 @@
14138
14138
  "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw=="
14139
14139
  },
14140
14140
  "@netlify/build": {
14141
- "version": "29.12.6",
14142
- "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.12.6.tgz",
14143
- "integrity": "sha512-qTeitoi5KOxjuta5/qPyUC7d5NfqTmc6xT+EohAZKOzgz8C5Bto/hfh+jbmAlfoNnyL20MVngn1wNXKJRZVRAA==",
14141
+ "version": "29.12.8",
14142
+ "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.12.8.tgz",
14143
+ "integrity": "sha512-es3nRMmb5zEpvON3qRKCGMqpfcqPvVYKR6ulQe+LP6+U2Nw9oAHr7+nBgiMvo0moJBC7t+lYFSphLjpn4G1M1Q==",
14144
14144
  "requires": {
14145
14145
  "@bugsnag/js": "^7.0.0",
14146
14146
  "@netlify/cache-utils": "^5.1.5",
14147
14147
  "@netlify/config": "^20.5.1",
14148
14148
  "@netlify/edge-bundler": "8.16.2",
14149
14149
  "@netlify/framework-info": "^9.8.10",
14150
- "@netlify/functions-utils": "^5.2.12",
14150
+ "@netlify/functions-utils": "^5.2.13",
14151
14151
  "@netlify/git-utils": "^5.1.1",
14152
14152
  "@netlify/plugins-list": "^6.68.0",
14153
14153
  "@netlify/run-utils": "^5.1.1",
14154
- "@netlify/zip-it-and-ship-it": "9.9.1",
14154
+ "@netlify/zip-it-and-ship-it": "9.10.0",
14155
14155
  "@sindresorhus/slugify": "^2.0.0",
14156
14156
  "ansi-escapes": "^6.0.0",
14157
14157
  "chalk": "^5.0.0",
@@ -14190,7 +14190,6 @@
14190
14190
  "strip-ansi": "^7.0.0",
14191
14191
  "supports-color": "^9.0.0",
14192
14192
  "terminal-link": "^3.0.0",
14193
- "tmp-promise": "^3.0.2",
14194
14193
  "ts-node": "^10.9.1",
14195
14194
  "typescript": "^5.0.0",
14196
14195
  "uuid": "^9.0.0",
@@ -14216,9 +14215,9 @@
14216
14215
  "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
14217
14216
  },
14218
14217
  "cacheable-request": {
14219
- "version": "10.2.10",
14220
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
14221
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
14218
+ "version": "10.2.12",
14219
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
14220
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
14222
14221
  "requires": {
14223
14222
  "@types/http-cache-semantics": "^4.0.1",
14224
14223
  "get-stream": "^6.0.1",
@@ -14420,9 +14419,9 @@
14420
14419
  }
14421
14420
  },
14422
14421
  "@netlify/build-info": {
14423
- "version": "7.0.7",
14424
- "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.0.7.tgz",
14425
- "integrity": "sha512-DAGbkrs+h0s8+1K7+INBWMrF80fkHzEAUrGzZdZ1q3HSNXKuP4wiBfnbdn7Ls0FLAwldS2edqVpBA7dy66KatQ==",
14422
+ "version": "7.0.8",
14423
+ "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-7.0.8.tgz",
14424
+ "integrity": "sha512-VbasUPF4WcvFdq0B58+cM5/Jf6SUjYympgwz6B4IA5PQom/Ptkj5OMzRVclHclIhyDiiuwhIpCeeA0R6ru6XdA==",
14426
14425
  "requires": {
14427
14426
  "@bugsnag/js": "^7.20.0",
14428
14427
  "@netlify/framework-info": "^9.8.10",
@@ -14443,9 +14442,9 @@
14443
14442
  }
14444
14443
  },
14445
14444
  "minimatch": {
14446
- "version": "9.0.1",
14447
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
14448
- "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
14445
+ "version": "9.0.2",
14446
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
14447
+ "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
14449
14448
  "requires": {
14450
14449
  "brace-expansion": "^2.0.1"
14451
14450
  }
@@ -14489,9 +14488,9 @@
14489
14488
  },
14490
14489
  "dependencies": {
14491
14490
  "globby": {
14492
- "version": "13.1.4",
14493
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
14494
- "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
14491
+ "version": "13.2.0",
14492
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz",
14493
+ "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==",
14495
14494
  "requires": {
14496
14495
  "dir-glob": "^3.0.1",
14497
14496
  "fast-glob": "^3.2.11",
@@ -14967,11 +14966,11 @@
14967
14966
  }
14968
14967
  },
14969
14968
  "@netlify/functions-utils": {
14970
- "version": "5.2.12",
14971
- "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.12.tgz",
14972
- "integrity": "sha512-BgyPyz/aXOzzx0dKom8qEws5YqsTDGCuwLJpDWjGJsxGn6duSzTuXQZyOys6vz9N1TXfwC6TAOGjt+Y0yT/8VQ==",
14969
+ "version": "5.2.13",
14970
+ "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.13.tgz",
14971
+ "integrity": "sha512-j8jLlXC5tU7BbbmLLhsmCsJvS7DItEz4GAF3qIDfNFKvTfplk6MUGIuHUpezeBWr3UlNqCEn9UbvJym/CT2iLQ==",
14973
14972
  "requires": {
14974
- "@netlify/zip-it-and-ship-it": "9.9.1",
14973
+ "@netlify/zip-it-and-ship-it": "9.10.0",
14975
14974
  "cpy": "^9.0.0",
14976
14975
  "path-exists": "^5.0.0"
14977
14976
  },
@@ -15208,9 +15207,9 @@
15208
15207
  "integrity": "sha512-c8RjIu+fkpfOGLaW0Z0iFG39GUK7sCa6M3Qy3fqouMpT00TaiheiyssnnDZGSLkNp4o+UtbRnITB1zuwDeHMLw=="
15209
15208
  },
15210
15209
  "@netlify/zip-it-and-ship-it": {
15211
- "version": "9.9.1",
15212
- "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.9.1.tgz",
15213
- "integrity": "sha512-CRxADifrq23LnPvuOnPza/QGln/HDB/rhWsHGyLbXzpaEaJu41CQI2nsBLDF+G/K621S7W9UcCatOr9TDgvaOg==",
15210
+ "version": "9.10.0",
15211
+ "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.10.0.tgz",
15212
+ "integrity": "sha512-E9Hh4MQdhWDeDn3YjDNIpYvqUdLBMx7ghxfShFXv73/KyDns7tS/BpyakuObL/89JDV76CG/jtIx/cPPfxmg9w==",
15214
15213
  "requires": {
15215
15214
  "@babel/parser": "^7.22.5",
15216
15215
  "@netlify/binary-info": "^1.0.0",
@@ -15301,9 +15300,9 @@
15301
15300
  "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="
15302
15301
  },
15303
15302
  "minimatch": {
15304
- "version": "9.0.1",
15305
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
15306
- "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
15303
+ "version": "9.0.2",
15304
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
15305
+ "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
15307
15306
  "requires": {
15308
15307
  "brace-expansion": "^2.0.1"
15309
15308
  }
@@ -15499,9 +15498,9 @@
15499
15498
  }
15500
15499
  },
15501
15500
  "@octokit/rest": {
15502
- "version": "19.0.11",
15503
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz",
15504
- "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==",
15501
+ "version": "19.0.13",
15502
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz",
15503
+ "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==",
15505
15504
  "requires": {
15506
15505
  "@octokit/core": "^4.2.1",
15507
15506
  "@octokit/plugin-paginate-rest": "^6.1.2",
@@ -15893,9 +15892,9 @@
15893
15892
  "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
15894
15893
  },
15895
15894
  "cacheable-request": {
15896
- "version": "10.2.10",
15897
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
15898
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
15895
+ "version": "10.2.12",
15896
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
15897
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
15899
15898
  "requires": {
15900
15899
  "@types/http-cache-semantics": "^4.0.1",
15901
15900
  "get-stream": "^6.0.1",
@@ -17276,9 +17275,9 @@
17276
17275
  }
17277
17276
  },
17278
17277
  "globby": {
17279
- "version": "13.1.4",
17280
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
17281
- "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
17278
+ "version": "13.2.0",
17279
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz",
17280
+ "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==",
17282
17281
  "requires": {
17283
17282
  "dir-glob": "^3.0.1",
17284
17283
  "fast-glob": "^3.2.11",
@@ -17412,9 +17411,9 @@
17412
17411
  }
17413
17412
  },
17414
17413
  "decache": {
17415
- "version": "4.6.1",
17416
- "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz",
17417
- "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==",
17414
+ "version": "4.6.2",
17415
+ "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz",
17416
+ "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==",
17418
17417
  "requires": {
17419
17418
  "callsite": "^1.0.0"
17420
17419
  }
@@ -17579,17 +17578,17 @@
17579
17578
  },
17580
17579
  "dependencies": {
17581
17580
  "@typescript-eslint/types": {
17582
- "version": "5.59.11",
17583
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz",
17584
- "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA=="
17581
+ "version": "5.60.0",
17582
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz",
17583
+ "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA=="
17585
17584
  },
17586
17585
  "@typescript-eslint/typescript-estree": {
17587
- "version": "5.59.11",
17588
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz",
17589
- "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==",
17586
+ "version": "5.60.0",
17587
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz",
17588
+ "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==",
17590
17589
  "requires": {
17591
- "@typescript-eslint/types": "5.59.11",
17592
- "@typescript-eslint/visitor-keys": "5.59.11",
17590
+ "@typescript-eslint/types": "5.60.0",
17591
+ "@typescript-eslint/visitor-keys": "5.60.0",
17593
17592
  "debug": "^4.3.4",
17594
17593
  "globby": "^11.1.0",
17595
17594
  "is-glob": "^4.0.3",
@@ -17598,11 +17597,11 @@
17598
17597
  }
17599
17598
  },
17600
17599
  "@typescript-eslint/visitor-keys": {
17601
- "version": "5.59.11",
17602
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz",
17603
- "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==",
17600
+ "version": "5.60.0",
17601
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz",
17602
+ "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==",
17604
17603
  "requires": {
17605
- "@typescript-eslint/types": "5.59.11",
17604
+ "@typescript-eslint/types": "5.60.0",
17606
17605
  "eslint-visitor-keys": "^3.3.0"
17607
17606
  }
17608
17607
  },
@@ -18289,9 +18288,9 @@
18289
18288
  }
18290
18289
  },
18291
18290
  "pino-std-serializers": {
18292
- "version": "6.2.1",
18293
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz",
18294
- "integrity": "sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ=="
18291
+ "version": "6.2.2",
18292
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
18293
+ "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="
18295
18294
  },
18296
18295
  "process-warning": {
18297
18296
  "version": "2.2.0",
@@ -18366,9 +18365,9 @@
18366
18365
  "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
18367
18366
  },
18368
18367
  "cacheable-request": {
18369
- "version": "10.2.10",
18370
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
18371
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
18368
+ "version": "10.2.12",
18369
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
18370
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
18372
18371
  "requires": {
18373
18372
  "@types/http-cache-semantics": "^4.0.1",
18374
18373
  "get-stream": "^6.0.1",
@@ -21157,9 +21156,9 @@
21157
21156
  "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
21158
21157
  },
21159
21158
  "cacheable-request": {
21160
- "version": "10.2.10",
21161
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz",
21162
- "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==",
21159
+ "version": "10.2.12",
21160
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.12.tgz",
21161
+ "integrity": "sha512-qtWGB5kn2OLjx47pYUkWicyOpK1vy9XZhq8yRTXOy+KAmjjESSRLx6SiExnnaGGUP1NM6/vmygMu0fGylNh9tw==",
21163
21162
  "requires": {
21164
21163
  "@types/http-cache-semantics": "^4.0.1",
21165
21164
  "get-stream": "^6.0.1",
@@ -21910,9 +21909,9 @@
21910
21909
  }
21911
21910
  },
21912
21911
  "semver": {
21913
- "version": "7.5.1",
21914
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
21915
- "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
21912
+ "version": "7.5.3",
21913
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
21914
+ "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
21916
21915
  "requires": {
21917
21916
  "lru-cache": "^6.0.0"
21918
21917
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "netlify-cli",
3
3
  "description": "Netlify command line tool",
4
- "version": "15.6.0",
4
+ "version": "15.7.0",
5
5
  "author": "Netlify Inc.",
6
6
  "type": "module",
7
7
  "engines": {
@@ -44,14 +44,15 @@
44
44
  "dependencies": {
45
45
  "@bugsnag/js": "7.20.2",
46
46
  "@fastify/static": "6.10.2",
47
- "@netlify/build": "29.12.6",
48
- "@netlify/build-info": "7.0.7",
47
+ "@netlify/build": "29.12.8",
48
+ "@netlify/build-info": "7.0.8",
49
49
  "@netlify/config": "20.5.1",
50
50
  "@netlify/edge-bundler": "8.16.2",
51
51
  "@netlify/framework-info": "9.8.10",
52
52
  "@netlify/local-functions-proxy": "1.1.1",
53
- "@netlify/zip-it-and-ship-it": "9.9.1",
54
- "@octokit/rest": "19.0.11",
53
+ "@netlify/serverless-functions-api": "1.5.1",
54
+ "@netlify/zip-it-and-ship-it": "9.10.0",
55
+ "@octokit/rest": "19.0.13",
55
56
  "@skn0tt/lambda-local": "2.0.3",
56
57
  "ansi-escapes": "6.2.0",
57
58
  "ansi-styles": "6.2.1",
@@ -73,7 +74,7 @@
73
74
  "copy-template-dir": "1.4.0",
74
75
  "cron-parser": "4.8.1",
75
76
  "debug": "4.3.4",
76
- "decache": "4.6.1",
77
+ "decache": "4.6.2",
77
78
  "dot-prop": "7.2.0",
78
79
  "dotenv": "16.0.3",
79
80
  "env-paths": "3.0.0",
@@ -132,7 +133,7 @@
132
133
  "pump": "3.0.0",
133
134
  "raw-body": "2.5.2",
134
135
  "read-pkg-up": "9.1.0",
135
- "semver": "7.5.1",
136
+ "semver": "7.5.3",
136
137
  "source-map-support": "0.5.21",
137
138
  "strip-ansi-control-characters": "2.0.0",
138
139
  "tabtab": "3.0.2",
@@ -172,6 +172,10 @@ const dev = async (options, command) => {
172
172
  siteUrl,
173
173
  capabilities,
174
174
  timeouts,
175
+ geolocationMode: options.geo,
176
+ geoCountry: options.country,
177
+ offline: options.offline,
178
+ state,
175
179
  })
176
180
 
177
181
  // Try to add `.netlify` to `.gitignore`.
@@ -198,8 +202,6 @@ const dev = async (options, command) => {
198
202
  configPath: configPathOverride,
199
203
  debug: options.debug,
200
204
  env,
201
- geolocationMode: options.geo,
202
- geoCountry: options.country,
203
205
  getUpdatedConfig,
204
206
  inspectSettings,
205
207
  offline: options.offline,
@@ -207,6 +209,8 @@ const dev = async (options, command) => {
207
209
  site,
208
210
  siteInfo,
209
211
  state,
212
+ geolocationMode: options.geo,
213
+ geoCountry: options.country,
210
214
  })
211
215
 
212
216
  if (devConfig.autoLaunch !== false) {
@@ -100,7 +100,6 @@ const formatRegistryArrayForInquirer = async function (lang, funcType) {
100
100
  .filter((folderName) => !folderName.endsWith('.md'))
101
101
  .map(async (folderName) => {
102
102
  const templatePath = path.join(templatesDir, lang, folderName, '.netlify-function-template.mjs')
103
- // eslint-disable-next-line import/no-dynamic-require
104
103
  const template = await import(pathToFileURL(templatePath))
105
104
 
106
105
  return template.default
@@ -362,7 +361,6 @@ const downloadFromURL = async function (command, options, argumentName, function
362
361
  if (await fileExistsAsync(fnTemplateFile)) {
363
362
  const {
364
363
  default: { addons = [], onComplete },
365
- // eslint-disable-next-line import/no-dynamic-require
366
364
  } = await import(pathToFileURL(fnTemplateFile).href)
367
365
 
368
366
  await installAddons(command, addons, path.resolve(fnFolder))
@@ -387,7 +385,6 @@ const getNpmInstallPackages = (existingPackages = {}, neededPackages = {}) =>
387
385
  // we don't do this check, we may be upgrading the version of a module used in
388
386
  // another part of the project, which we don't want to do.
389
387
  const installDeps = async ({ functionPackageJson, functionPath, functionsDir }) => {
390
- // eslint-disable-next-line import/no-dynamic-require
391
388
  const { dependencies: functionDependencies, devDependencies: functionDevDependencies } = require(functionPackageJson)
392
389
  const sitePackageJson = await findUp('package.json', { cwd: functionsDir })
393
390
  const npmInstallFlags = ['--no-audit', '--no-fund']
@@ -401,7 +398,6 @@ const installDeps = async ({ functionPackageJson, functionPath, functionsDir })
401
398
  return
402
399
  }
403
400
 
404
- // eslint-disable-next-line import/no-dynamic-require
405
401
  const { dependencies: siteDependencies, devDependencies: siteDevDependencies } = require(sitePackageJson)
406
402
  const dependencies = getNpmInstallPackages(siteDependencies, functionDependencies)
407
403
  const devDependencies = getNpmInstallPackages(siteDevDependencies, functionDevDependencies)
@@ -68,7 +68,7 @@ const processPayloadFromFlag = function (payloadString) {
68
68
  if (pathexists) {
69
69
  try {
70
70
  // there is code execution potential here
71
- // eslint-disable-next-line import/no-dynamic-require
71
+
72
72
  payload = require(payloadpath)
73
73
  return payload
74
74
  } catch (error_) {
@@ -13,7 +13,7 @@ const DEFAULT_PORT = 9999
13
13
  * @param {import('../base-command.mjs').default} command
14
14
  */
15
15
  const functionsServe = async (options, command) => {
16
- const { api, config, site, siteInfo } = command.netlify
16
+ const { api, config, site, siteInfo, state } = command.netlify
17
17
 
18
18
  const functionsDir = getFunctionsDir({ options, config }, join('netlify', 'functions'))
19
19
  let { env } = command.netlify.cachedConfig
@@ -48,6 +48,10 @@ const functionsServe = async (options, command) => {
48
48
  timeouts,
49
49
  functionsPrefix: '/.netlify/functions/',
50
50
  buildersPrefix: '/.netlify/builders/',
51
+ geolocationMode: options.geo,
52
+ geoCountry: options.country,
53
+ offline: options.offline,
54
+ state,
51
55
  })
52
56
  }
53
57
 
@@ -8,7 +8,7 @@ export const getRecipe = async (name) => {
8
8
  const recipePath = resolve(directoryPath, '../../recipes', name, 'index.mjs')
9
9
 
10
10
  // windows needs a URL for absolute paths
11
- // eslint-disable-next-line import/no-dynamic-require
11
+
12
12
  const recipe = await import(pathToFileURL(recipePath).href)
13
13
 
14
14
  return recipe
@@ -22,7 +22,7 @@ export const listRecipes = async () => {
22
22
  const recipePath = join(recipesPath, name, 'index.mjs')
23
23
 
24
24
  // windows needs a URL for absolute paths
25
- // eslint-disable-next-line import/no-dynamic-require
25
+
26
26
  const recipe = await import(pathToFileURL(recipePath).href)
27
27
 
28
28
  return {
@@ -101,6 +101,10 @@ const serve = async (options, command) => {
101
101
  siteUrl,
102
102
  capabilities,
103
103
  timeouts,
104
+ geolocationMode: options.geo,
105
+ geoCountry: options.country,
106
+ offline: options.offline,
107
+ state,
104
108
  })
105
109
 
106
110
  // Try to add `.netlify` to `.gitignore`.
@@ -22,11 +22,25 @@ const addFunctionsConfigDefaults = (config) => ({
22
22
  },
23
23
  })
24
24
 
25
- const buildFunction = async ({ cache, config, directory, func, hasTypeModule, projectRoot, targetDirectory }) => {
25
+ /**
26
+ * @param {object} params
27
+ * @param {import("@netlify/zip-it-and-ship-it/dist/feature_flags.js").FeatureFlags} params.featureFlags
28
+ */
29
+ const buildFunction = async ({
30
+ cache,
31
+ config,
32
+ directory,
33
+ featureFlags,
34
+ func,
35
+ hasTypeModule,
36
+ projectRoot,
37
+ targetDirectory,
38
+ }) => {
26
39
  const zipOptions = {
27
40
  archiveFormat: 'none',
28
41
  basePath: projectRoot,
29
42
  config,
43
+ featureFlags: { ...featureFlags, zisi_functions_api_v2: true },
30
44
  }
31
45
  const functionDirectory = path.dirname(func.mainFile)
32
46
 
@@ -42,9 +56,11 @@ const buildFunction = async ({ cache, config, directory, func, hasTypeModule, pr
42
56
  // this case, we use `mainFile` as the function path of `zipFunction`.
43
57
  const entryPath = functionDirectory === directory ? func.mainFile : functionDirectory
44
58
  const {
59
+ entryFilename,
45
60
  includedFiles,
46
61
  inputs,
47
62
  path: functionPath,
63
+ runtimeAPIVersion,
48
64
  schedule,
49
65
  } = await memoizedBuild({
50
66
  cache,
@@ -52,7 +68,7 @@ const buildFunction = async ({ cache, config, directory, func, hasTypeModule, pr
52
68
  command: () => zipFunction(entryPath, targetDirectory, zipOptions),
53
69
  })
54
70
  const srcFiles = inputs.filter((inputPath) => !inputPath.includes(`${path.sep}node_modules${path.sep}`))
55
- const buildPath = path.join(functionPath, `${func.name}.js`)
71
+ const buildPath = path.join(functionPath, entryFilename)
56
72
 
57
73
  // some projects include a package.json with "type=module", forcing Node to interpret every descending file
58
74
  // as ESM. ZISI outputs CJS, so we emit an overriding directive into the output directory.
@@ -67,7 +83,7 @@ const buildFunction = async ({ cache, config, directory, func, hasTypeModule, pr
67
83
 
68
84
  clearFunctionsCache(targetDirectory)
69
85
 
70
- return { buildPath, includedFiles, srcFiles, schedule }
86
+ return { buildPath, includedFiles, runtimeAPIVersion, srcFiles, schedule }
71
87
  }
72
88
 
73
89
  /**
@@ -76,14 +92,14 @@ const buildFunction = async ({ cache, config, directory, func, hasTypeModule, pr
76
92
  * @param {string} params.mainFile
77
93
  * @param {string} params.projectRoot
78
94
  */
79
- export const parseForSchedule = async ({ config, mainFile, projectRoot }) => {
95
+ export const parseFunctionForMetadata = async ({ config, mainFile, projectRoot }) => {
80
96
  const { listFunction } = await import('@netlify/zip-it-and-ship-it')
81
- const listedFunction = await listFunction(mainFile, {
97
+
98
+ return await listFunction(mainFile, {
82
99
  config: netlifyConfigToZisiConfig({ config, projectRoot }),
100
+ featureFlags: { zisi_functions_api_v2: true },
83
101
  parseISC: true,
84
102
  })
85
-
86
- return listedFunction && listedFunction.schedule
87
103
  }
88
104
 
89
105
  // Clears the cache for any files inside the directory from which functions are
@@ -109,26 +125,44 @@ const getTargetDirectory = async ({ errorExit }) => {
109
125
  const netlifyConfigToZisiConfig = ({ config, projectRoot }) =>
110
126
  addFunctionsConfigDefaults(normalizeFunctionsConfig({ functionsConfig: config.functions, projectRoot }))
111
127
 
112
- export default async function handler({ config, directory, errorExit, func, projectRoot }) {
128
+ export default async function handler({ config, directory, errorExit, func, metadata, projectRoot }) {
113
129
  const functionsConfig = netlifyConfigToZisiConfig({ config, projectRoot })
114
130
 
115
131
  const packageJson = await readPackageUp(func.mainFile)
116
132
  const hasTypeModule = packageJson && packageJson.packageJson.type === 'module'
117
133
 
118
- // We must use esbuild for certain file extensions.
119
- const mustTranspile = ['.mjs', '.ts'].includes(path.extname(func.mainFile))
120
- const mustUseEsbuild = hasTypeModule || mustTranspile
121
-
122
- if (mustUseEsbuild && !functionsConfig['*'].nodeBundler) {
123
- functionsConfig['*'].nodeBundler = 'esbuild'
124
- }
125
-
126
- // TODO: Resolve functions config globs so that we can check for the bundler
127
- // on a per-function basis.
128
- const isUsingEsbuild = ['esbuild_zisi', 'esbuild'].includes(functionsConfig['*'].nodeBundler)
129
-
130
- if (!isUsingEsbuild) {
131
- return false
134
+ /** @type {import("@netlify/zip-it-and-ship-it/dist/feature_flags.js").FeatureFlags} */
135
+ const featureFlags = {}
136
+
137
+ if (metadata.runtimeAPIVersion === 2) {
138
+ // For TypeScript we use NFT, otherwise we leave the file untouched with the `none` bundler
139
+ const isTypescript = ['.ts', '.mts', '.cts'].includes(path.extname(func.mainFile))
140
+
141
+ if (isTypescript) {
142
+ functionsConfig['*'].nodeBundler = 'nft'
143
+ } else {
144
+ // using esbuild is less performant than `none`, but it emits sourcemaps and thus
145
+ // enables debugging functions
146
+ functionsConfig['*'].nodeBundler = 'esbuild'
147
+ featureFlags.zisi_pure_esm = true
148
+ featureFlags.zisi_pure_esm_mjs = true
149
+ }
150
+ } else {
151
+ // We must use esbuild for certain file extensions.
152
+ const mustTranspile = ['.mjs', '.ts', '.mts', '.cts'].includes(path.extname(func.mainFile))
153
+ const mustUseEsbuild = hasTypeModule || mustTranspile
154
+
155
+ if (mustUseEsbuild && !functionsConfig['*'].nodeBundler) {
156
+ functionsConfig['*'].nodeBundler = 'esbuild'
157
+ }
158
+
159
+ // TODO: Resolve functions config globs so that we can check for the bundler
160
+ // on a per-function basis.
161
+ const isUsingEsbuild = ['esbuild_zisi', 'esbuild'].includes(functionsConfig['*'].nodeBundler)
162
+
163
+ if (!isUsingEsbuild) {
164
+ return false
165
+ }
132
166
  }
133
167
 
134
168
  // Enable source map support.
@@ -138,7 +172,16 @@ export default async function handler({ config, directory, errorExit, func, proj
138
172
 
139
173
  return {
140
174
  build: ({ cache = {} }) =>
141
- buildFunction({ cache, config: functionsConfig, directory, func, projectRoot, targetDirectory, hasTypeModule }),
175
+ buildFunction({
176
+ cache,
177
+ config: functionsConfig,
178
+ directory,
179
+ func,
180
+ projectRoot,
181
+ targetDirectory,
182
+ hasTypeModule,
183
+ featureFlags,
184
+ }),
142
185
  builderName: 'zip-it-and-ship-it',
143
186
  target: targetDirectory,
144
187
  }
@@ -0,0 +1 @@
1
+ export const SECONDS_TO_MILLISECONDS = 1000
@@ -1,15 +1,17 @@
1
+ import { createConnection } from 'net'
1
2
  import { dirname } from 'path'
3
+ import { pathToFileURL } from 'url'
4
+ import { Worker } from 'worker_threads'
2
5
 
3
6
  import lambdaLocal from '@skn0tt/lambda-local'
4
7
  import winston from 'winston'
5
8
 
6
9
  import detectNetlifyLambdaBuilder from './builders/netlify-lambda.mjs'
7
- import detectZisiBuilder, { parseForSchedule } from './builders/zisi.mjs'
10
+ import detectZisiBuilder, { parseFunctionForMetadata } from './builders/zisi.mjs'
11
+ import { SECONDS_TO_MILLISECONDS } from './constants.mjs'
8
12
 
9
13
  export const name = 'js'
10
14
 
11
- const SECONDS_TO_MILLISECONDS = 1000
12
-
13
15
  let netlifyLambdaDetectorCache
14
16
 
15
17
  const logger = winston.createLogger({
@@ -37,7 +39,8 @@ export const getBuildFunction = async ({ config, directory, errorExit, func, pro
37
39
  return netlifyLambdaBuilder.build
38
40
  }
39
41
 
40
- const zisiBuilder = await detectZisiBuilder({ config, directory, errorExit, func, projectRoot })
42
+ const metadata = await parseFunctionForMetadata({ mainFile: func.mainFile, config, projectRoot })
43
+ const zisiBuilder = await detectZisiBuilder({ config, directory, errorExit, func, metadata, projectRoot })
41
44
 
42
45
  if (zisiBuilder) {
43
46
  return zisiBuilder.build
@@ -48,15 +51,55 @@ export const getBuildFunction = async ({ config, directory, errorExit, func, pro
48
51
  // main file otherwise.
49
52
  const functionDirectory = dirname(func.mainFile)
50
53
  const srcFiles = functionDirectory === directory ? [func.mainFile] : [functionDirectory]
51
- const schedule = await parseForSchedule({ mainFile: func.mainFile, config, projectRoot })
52
54
 
53
- return () => ({ schedule, srcFiles })
55
+ return () => ({ schedule: metadata.schedule, srcFiles })
54
56
  }
55
57
 
58
+ const workerURL = new URL('worker.mjs', import.meta.url)
59
+
56
60
  export const invokeFunction = async ({ context, event, func, timeout }) => {
61
+ if (func.buildData.runtimeAPIVersion !== 2) {
62
+ return await invokeFunctionDirectly({ context, event, func, timeout })
63
+ }
64
+
65
+ const workerData = {
66
+ clientContext: JSON.stringify(context),
67
+ event,
68
+ // If a function builder has defined a `buildPath` property, we use it.
69
+ // Otherwise, we'll invoke the function's main file.
70
+ // Because we use import() we have to use file:// URLs for Windows.
71
+ entryFilePath: pathToFileURL(func.buildData?.buildPath ?? func.mainFile).href,
72
+ timeoutMs: timeout * SECONDS_TO_MILLISECONDS,
73
+ }
74
+
75
+ const worker = new Worker(workerURL, { workerData })
76
+ return await new Promise((resolve, reject) => {
77
+ worker.on('message', (result) => {
78
+ if (result?.streamPort) {
79
+ const client = createConnection(
80
+ {
81
+ port: result.streamPort,
82
+ host: 'localhost',
83
+ },
84
+ () => {
85
+ result.body = client
86
+ resolve(result)
87
+ },
88
+ )
89
+ client.on('error', reject)
90
+ } else {
91
+ resolve(result)
92
+ }
93
+ })
94
+
95
+ worker.on('error', reject)
96
+ })
97
+ }
98
+
99
+ export const invokeFunctionDirectly = async ({ context, event, func, timeout }) => {
57
100
  // If a function builder has defined a `buildPath` property, we use it.
58
101
  // Otherwise, we'll invoke the function's main file.
59
- const lambdaPath = (func.buildData && func.buildData.buildPath) || func.mainFile
102
+ const lambdaPath = func.buildData?.buildPath ?? func.mainFile
60
103
  const result = await lambdaLocal.execute({
61
104
  clientContext: JSON.stringify(context),
62
105
  event,
@@ -0,0 +1,49 @@
1
+ import { createServer } from 'net'
2
+ import { isMainThread, workerData, parentPort } from 'worker_threads'
3
+
4
+ import lambdaLocal from '@skn0tt/lambda-local'
5
+ import { isStream } from 'is-stream'
6
+ import sourceMapSupport from 'source-map-support'
7
+
8
+ if (isMainThread) {
9
+ throw new Error(`Do not import "${import.meta.url}" in the main thread.`)
10
+ }
11
+
12
+ sourceMapSupport.install()
13
+
14
+ lambdaLocal.getLogger().level = 'warn'
15
+
16
+ const { clientContext, entryFilePath, event, timeoutMs } = workerData
17
+
18
+ const lambdaFunc = await import(entryFilePath)
19
+
20
+ const result = await lambdaLocal.execute({
21
+ clientContext,
22
+ event,
23
+ lambdaFunc,
24
+ region: 'dev',
25
+ timeoutMs,
26
+ verboseLevel: 3,
27
+ })
28
+
29
+ // When the result body is a StreamResponse
30
+ // we open up a http server that proxies back to the main thread.
31
+ if (result && isStream(result.body)) {
32
+ const { body } = result
33
+ delete result.body
34
+ await new Promise((resolve, reject) => {
35
+ const server = createServer((socket) => {
36
+ body.pipe(socket).on('end', () => server.close())
37
+ })
38
+ server.on('error', (error) => {
39
+ reject(error)
40
+ })
41
+ server.listen({ port: 0, host: 'localhost' }, () => {
42
+ const { port } = server.address()
43
+ result.streamPort = port
44
+ resolve()
45
+ })
46
+ })
47
+ }
48
+
49
+ parentPort.postMessage(result)
@@ -3,6 +3,8 @@ import jwtDecode from 'jwt-decode'
3
3
 
4
4
  import { NETLIFYDEVERR, NETLIFYDEVLOG, error as errorExit, log } from '../../utils/command-helpers.mjs'
5
5
  import { CLOCKWORK_USERAGENT, getFunctionsDistPath, getInternalFunctionsDir } from '../../utils/functions/index.mjs'
6
+ import { headers as efHeaders } from '../edge-functions/headers.mjs'
7
+ import { getGeoLocation } from '../geo-location.mjs'
6
8
 
7
9
  import { handleBackgroundFunction, handleBackgroundFunctionResult } from './background.mjs'
8
10
  import { createFormSubmissionHandler } from './form-submissions-handler.mjs'
@@ -102,10 +104,15 @@ export const createHandler = function (options) {
102
104
  (prev, [key, value]) => ({ ...prev, [key]: Array.isArray(value) ? value : [value] }),
103
105
  {},
104
106
  )
105
- const headers = Object.entries({ ...request.headers, 'client-ip': [remoteAddress] }).reduce(
106
- (prev, [key, value]) => ({ ...prev, [key]: Array.isArray(value) ? value : [value] }),
107
- {},
108
- )
107
+
108
+ const geoLocation = await getGeoLocation({ ...options, mode: options.geo })
109
+
110
+ const headers = Object.entries({
111
+ ...request.headers,
112
+ 'client-ip': [remoteAddress],
113
+ 'x-nf-client-connection-ip': [remoteAddress],
114
+ [efHeaders.Geo]: JSON.stringify(geoLocation),
115
+ }).reduce((prev, [key, value]) => ({ ...prev, [key]: Array.isArray(value) ? value : [value] }), {})
109
116
  const rawQuery = new URLSearchParams(requestQuery).toString()
110
117
  const protocol = options.config?.dev?.https ? 'https' : 'http'
111
118
  const url = new URL(requestPath, `${protocol}://${request.get('host') || 'localhost'}`)
@@ -73,7 +73,7 @@ const formatLambdaLocalError = (err, acceptsHtml) =>
73
73
  errorMessage: err.errorMessage,
74
74
  trace: err.stackTrace,
75
75
  })
76
- : `${err.errorType}: ${err.errorMessage}\n ${err.stackTrace.join('\n ')}`
76
+ : `${err.errorType}: ${err.errorMessage}\n ${err.stackTrace?.join('\n ')}`
77
77
 
78
78
  const processRenderedResponse = async (err, request) => {
79
79
  const acceptsHtml = request.headers && request.headers.accept && request.headers.accept.includes('text/html')
@@ -102,7 +102,7 @@ const validateLambdaResponse = (lambdaResponse) => {
102
102
  }
103
103
  if (!Number(lambdaResponse.statusCode)) {
104
104
  return {
105
- error: `Your function response must have a numerical statusCode. You gave: $ ${lambdaResponse.statusCode}`,
105
+ error: `Your function response must have a numerical statusCode. You gave: ${lambdaResponse.statusCode}`,
106
106
  }
107
107
  }
108
108
  if (lambdaResponse.body && typeof lambdaResponse.body !== 'string' && !isStream(lambdaResponse.body)) {
@@ -10,7 +10,6 @@ import { env } from 'process'
10
10
  let execa
11
11
 
12
12
  if (env.NETLIFY_CLI_EXECA_PATH) {
13
- // eslint-disable-next-line import/no-dynamic-require
14
13
  const execaMock = await import(env.NETLIFY_CLI_EXECA_PATH)
15
14
  execa = execaMock.default
16
15
  } else {