diff --git a/benchmark/package.json b/benchmark/package.json
index 60c8621d2eb2..149dc2096028 100644
--- a/benchmark/package.json
+++ b/benchmark/package.json
@@ -8,7 +8,7 @@
},
"dependencies": {
"@astrojs/mdx": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@benchmark/timer": "workspace:*",
"astro": "workspace:*",
"autocannon": "^7.15.0",
diff --git a/packages/astro/e2e/fixtures/actions-blog/package.json b/packages/astro/e2e/fixtures/actions-blog/package.json
index 545ae2d37bef..ba4abe6cddb5 100644
--- a/packages/astro/e2e/fixtures/actions-blog/package.json
+++ b/packages/astro/e2e/fixtures/actions-blog/package.json
@@ -12,7 +12,7 @@
"dependencies": {
"@astrojs/check": "^0.9.3",
"@astrojs/db": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@astrojs/react": "workspace:*",
"@types/react": "^18.3.4",
"@types/react-dom": "^18.3.0",
diff --git a/packages/astro/e2e/fixtures/actions-react-19/package.json b/packages/astro/e2e/fixtures/actions-react-19/package.json
index aa5fa90ddf6f..ef6b4fe6a2b0 100644
--- a/packages/astro/e2e/fixtures/actions-react-19/package.json
+++ b/packages/astro/e2e/fixtures/actions-react-19/package.json
@@ -12,7 +12,7 @@
"dependencies": {
"@astrojs/check": "^0.9.3",
"@astrojs/db": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@astrojs/react": "workspace:*",
"@types/react": "npm:types-react",
"@types/react-dom": "npm:types-react-dom",
diff --git a/packages/astro/e2e/fixtures/server-islands/package.json b/packages/astro/e2e/fixtures/server-islands/package.json
index 9958ee287857..efbfeec68de4 100644
--- a/packages/astro/e2e/fixtures/server-islands/package.json
+++ b/packages/astro/e2e/fixtures/server-islands/package.json
@@ -9,7 +9,7 @@
"@astrojs/react": "workspace:*",
"astro": "workspace:*",
"@astrojs/mdx": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"react": "^18.3.1",
"react-dom": "^18.3.1"
}
diff --git a/packages/astro/e2e/fixtures/view-transitions/package.json b/packages/astro/e2e/fixtures/view-transitions/package.json
index 0a0ad81f2672..e40816ffd8fd 100644
--- a/packages/astro/e2e/fixtures/view-transitions/package.json
+++ b/packages/astro/e2e/fixtures/view-transitions/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"dependencies": {
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@astrojs/react": "workspace:*",
"@astrojs/svelte": "workspace:*",
"@astrojs/vue": "workspace:*",
diff --git a/packages/astro/test/fixtures/client-address-node/package.json b/packages/astro/test/fixtures/client-address-node/package.json
index 4b1c6a5ee098..4db07f1306d8 100644
--- a/packages/astro/test/fixtures/client-address-node/package.json
+++ b/packages/astro/test/fixtures/client-address-node/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"dependencies": {
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"astro": "workspace:*"
}
}
diff --git a/packages/astro/test/fixtures/custom-assets-name/package.json b/packages/astro/test/fixtures/custom-assets-name/package.json
index 00237fbddfdc..3530f9f0a824 100644
--- a/packages/astro/test/fixtures/custom-assets-name/package.json
+++ b/packages/astro/test/fixtures/custom-assets-name/package.json
@@ -4,6 +4,6 @@
"private": true,
"dependencies": {
"astro": "workspace:*",
- "@astrojs/node": "workspace:*"
+ "@astrojs/node": "^8.3.3"
}
}
diff --git a/packages/astro/test/fixtures/ssr-api-route/package.json b/packages/astro/test/fixtures/ssr-api-route/package.json
index ab761dd6b1e6..7af4e57b02ae 100644
--- a/packages/astro/test/fixtures/ssr-api-route/package.json
+++ b/packages/astro/test/fixtures/ssr-api-route/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"dependencies": {
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"astro": "workspace:*"
}
}
diff --git a/packages/astro/test/fixtures/static-build-ssr/package.json b/packages/astro/test/fixtures/static-build-ssr/package.json
index 6c8f1e499235..9c39f2b2f898 100644
--- a/packages/astro/test/fixtures/static-build-ssr/package.json
+++ b/packages/astro/test/fixtures/static-build-ssr/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"dependencies": {
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@test/static-build-pkg": "workspace:*",
"astro": "workspace:*"
}
diff --git a/packages/db/test/fixtures/ticketing-example/package.json b/packages/db/test/fixtures/ticketing-example/package.json
index 9386c7f96375..3d7497289457 100644
--- a/packages/db/test/fixtures/ticketing-example/package.json
+++ b/packages/db/test/fixtures/ticketing-example/package.json
@@ -12,7 +12,7 @@
"dependencies": {
"@astrojs/check": "^0.9.3",
"@astrojs/db": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@astrojs/react": "^3.6.2",
"@types/react": "^18.3.4",
"@types/react-dom": "^18.3.0",
diff --git a/packages/integrations/node/CHANGELOG.md b/packages/integrations/node/CHANGELOG.md
deleted file mode 100644
index 738cfc3672e0..000000000000
--- a/packages/integrations/node/CHANGELOG.md
+++ /dev/null
@@ -1,899 +0,0 @@
-# @astrojs/node
-
-## 8.3.3
-
-### Patch Changes
-
-- [#11535](https://github.com/withastro/astro/pull/11535) [`932bd2e`](https://github.com/withastro/astro/commit/932bd2eb07f1d7cb2c91e7e7d31fe84c919e302b) Thanks [@matthewp](https://github.com/matthewp)! - Move polyfills up before awaiting the env module in the Node.js adapter.
-
- Previously the env setting was happening before the polyfills were applied. This means that if the Astro env code (or any dependencies) depended on `crypto`, it would not be polyfilled in time.
-
- Polyfills should be applied ASAP to prevent races. This moves it to the top of the Node adapter.
-
-## 8.3.2
-
-### Patch Changes
-
-- [#11296](https://github.com/withastro/astro/pull/11296) [`5848d97`](https://github.com/withastro/astro/commit/5848d9786768d1290de982670bcc7773280ef08d) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Fixes `astro:env` getSecret compatibility
-
-## 8.3.1
-
-### Patch Changes
-
-- [#11261](https://github.com/withastro/astro/pull/11261) [`f5f8ed2`](https://github.com/withastro/astro/commit/f5f8ed275b76adfb11b7c3c1e800753a25416498) Thanks [@matthewp](https://github.com/matthewp)! - Fix backwards compat with Astro <= 4.9
-
-- [#11263](https://github.com/withastro/astro/pull/11263) [`7d59750`](https://github.com/withastro/astro/commit/7d597506615fa5a34327304e8321be7b9c4b799d) Thanks [@wackbyte](https://github.com/wackbyte)! - Refactor to use Astro's integration logger for logging
-
-## 8.3.0
-
-### Minor Changes
-
-- [#11199](https://github.com/withastro/astro/pull/11199) [`2bdca27`](https://github.com/withastro/astro/commit/2bdca27ff4002efd330667b0b4ca3e00d5b7a2db) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for experimental `astro:env` released in Astro 4.10
-
-## 8.2.6
-
-### Patch Changes
-
-- [#11202](https://github.com/withastro/astro/pull/11202) [`d0248bc`](https://github.com/withastro/astro/commit/d0248bc083dff713b66d44bcefbf389cdf67e22d) Thanks [@dkobierski](https://github.com/dkobierski)! - Fixes suppressed logs when error occurs
-
-## 8.2.5
-
-### Patch Changes
-
-- [#10491](https://github.com/withastro/astro/pull/10491) [`28e33a2f9c04373eae5da2e6edb0dc2981bce790`](https://github.com/withastro/astro/commit/28e33a2f9c04373eae5da2e6edb0dc2981bce790) Thanks [@castarco](https://github.com/castarco)! - Fixes a bug where the preview server wrongly appends trailing slashes to subresource URLs.
-
-## 8.2.4
-
-### Patch Changes
-
-- [#10454](https://github.com/withastro/astro/pull/10454) [`83f9105cd50e2756d02ca2be73ab84f9d582d3f8`](https://github.com/withastro/astro/commit/83f9105cd50e2756d02ca2be73ab84f9d582d3f8) Thanks [@lilnasy](https://github.com/lilnasy)! - Prevents crashes caused by rejections of offshoot promises.
-
-## 8.2.3
-
-### Patch Changes
-
-- [#10285](https://github.com/withastro/astro/pull/10285) [`d5277df5a4d1e9a8a7b6c8d7b87912e13a163f7f`](https://github.com/withastro/astro/commit/d5277df5a4d1e9a8a7b6c8d7b87912e13a163f7f) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes an issue where malformed requests could cause the server to error in certain cases.
-
-## 8.2.2
-
-### Patch Changes
-
-- [#10282](https://github.com/withastro/astro/pull/10282) [`b47dcaa25968ec85ba96fce23381c94a94e389f6`](https://github.com/withastro/astro/commit/b47dcaa25968ec85ba96fce23381c94a94e389f6) Thanks [@SatanshuMishra](https://github.com/SatanshuMishra)! - Fixes the `server.host` option to properly listen on all network interfaces when set to `true`
-
-## 8.2.1
-
-### Patch Changes
-
-- [#10208](https://github.com/withastro/astro/pull/10208) [`8cd38f02456640c063552aef00b2b8a216b3935d`](https://github.com/withastro/astro/commit/8cd38f02456640c063552aef00b2b8a216b3935d) Thanks [@log101](https://github.com/log101)! - Fixes custom headers are not added to the Node standalone server responses in preview mode
-
-## 8.2.0
-
-### Minor Changes
-
-- [#9143](https://github.com/withastro/astro/pull/9143) [`041fdd5c89920f7ccf944b095f29e451f78b0e28`](https://github.com/withastro/astro/commit/041fdd5c89920f7ccf944b095f29e451f78b0e28) Thanks [@ematipico](https://github.com/ematipico)! - Adds experimental support for internationalization domains
-
-## 8.1.0
-
-### Minor Changes
-
-- [#9080](https://github.com/withastro/astro/pull/9080) [`a12196d6b59e39f5d405734ecdbf6f6b42b39a93`](https://github.com/withastro/astro/commit/a12196d6b59e39f5d405734ecdbf6f6b42b39a93) Thanks [@msxdan](https://github.com/msxdan)! - Add trailingSlash support to NodeJS adapter
-
-## 8.0.0
-
-### Major Changes
-
-- [#9661](https://github.com/withastro/astro/pull/9661) [`d6edc7540864cf5d294d7b881eb886a3804f6d05`](https://github.com/withastro/astro/commit/d6edc7540864cf5d294d7b881eb886a3804f6d05) Thanks [@ematipico](https://github.com/ematipico)! - If host is unset in standalone mode, the server host will now fallback to `localhost` instead of `127.0.0.1`. When `localhost` is used, the operating system can decide to use either `::1` (ipv6) or `127.0.0.1` (ipv4) itself. This aligns with how the Astro dev and preview server works by default.
-
- If you relied on `127.0.0.1` (ipv4) before, you can set the `HOST` environment variable to `127.0.0.1` to explicitly use ipv4. For example, `HOST=127.0.0.1 node ./dist/server/entry.mjs`.
-
-- [#9661](https://github.com/withastro/astro/pull/9661) [`d6edc7540864cf5d294d7b881eb886a3804f6d05`](https://github.com/withastro/astro/commit/d6edc7540864cf5d294d7b881eb886a3804f6d05) Thanks [@ematipico](https://github.com/ematipico)! - **Breaking**: Minimum required Astro version is now 4.2.0.
- Reorganizes internals to be more maintainable.
-
-### Patch Changes
-
-- [#9661](https://github.com/withastro/astro/pull/9661) [`d6edc7540864cf5d294d7b881eb886a3804f6d05`](https://github.com/withastro/astro/commit/d6edc7540864cf5d294d7b881eb886a3804f6d05) Thanks [@ematipico](https://github.com/ematipico)! - Fixes an issue where the preview server appeared to be ready to serve requests before binding to a port.
-
-## 7.0.4
-
-### Patch Changes
-
-- [#9533](https://github.com/withastro/astro/pull/9533) [`48f47b50a0f8bc0fa51760215def36640f79050d`](https://github.com/withastro/astro/commit/48f47b50a0f8bc0fa51760215def36640f79050d) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes a bug where an error while serving response stopped the server.
-
-## 7.0.3
-
-### Patch Changes
-
-- [#9479](https://github.com/withastro/astro/pull/9479) [`1baf0b0d3cbd0564954c2366a7278794fad6726e`](https://github.com/withastro/astro/commit/1baf0b0d3cbd0564954c2366a7278794fad6726e) Thanks [@sarah11918](https://github.com/sarah11918)! - Updates README
-
-## 7.0.2
-
-### Patch Changes
-
-- [#9471](https://github.com/withastro/astro/pull/9471) [`6bf470cfb`](https://github.com/withastro/astro/commit/6bf470cfb87e853c0a1f69bceb09246801bc8bdc) Thanks [@alexnguyennz](https://github.com/alexnguyennz)! - Fix typo in @astrojs/node README
-
-## 7.0.1
-
-### Patch Changes
-
-- [#9366](https://github.com/withastro/astro/pull/9366) [`1b4e91898`](https://github.com/withastro/astro/commit/1b4e91898116f75b02b66ec402385cf44e559118) Thanks [@lilnasy](https://github.com/lilnasy)! - Updates NPM package to refer to the stable Astro version instead of a beta.
-
-## 7.0.0
-
-### Major Changes
-
-- [#9199](https://github.com/withastro/astro/pull/9199) [`49aa215a0`](https://github.com/withastro/astro/commit/49aa215a01ee1c4805316c85bb0aea6cfbc25a31) Thanks [@lilnasy](https://github.com/lilnasy)! - The internals of the integration have been updated to support Astro 4.0. Make sure to upgrade your Astro version as Astro 3.0 is no longer supported.
-
-## 7.0.0-beta.1
-
-### Major Changes
-
-- [#9199](https://github.com/withastro/astro/pull/9199) [`49aa215a0`](https://github.com/withastro/astro/commit/49aa215a01ee1c4805316c85bb0aea6cfbc25a31) Thanks [@lilnasy](https://github.com/lilnasy)! - The internals of the integration have been updated to support Astro 4.0. Make sure to upgrade your Astro version as Astro 3.0 is no longer supported.
-
-## 7.0.0-beta.0
-
-### Patch Changes
-
-- Updated dependencies [[`abf601233`](https://github.com/withastro/astro/commit/abf601233f8188d118a8cb063c777478d8d9f1a3), [`6201bbe96`](https://github.com/withastro/astro/commit/6201bbe96c2a083fb201e4a43a9bd88499821a3e), [`cdabf6ef0`](https://github.com/withastro/astro/commit/cdabf6ef02be7220fd2b6bdcef924ceca089381e), [`1c48ed286`](https://github.com/withastro/astro/commit/1c48ed286538ab9e354eca4e4dcd7c6385c96721), [`37697a2c5`](https://github.com/withastro/astro/commit/37697a2c5511572dc29c0a4ea46f90c2f62be8e6), [`bd0c2e9ae`](https://github.com/withastro/astro/commit/bd0c2e9ae3389a9d3085050c1e8134ae98dff299), [`0fe3a7ed5`](https://github.com/withastro/astro/commit/0fe3a7ed5d7bb1a9fce1623e84ba14104b51223c), [`710be505c`](https://github.com/withastro/astro/commit/710be505c9ddf416e77a75343d8cae9c497d72c6), [`153a5abb9`](https://github.com/withastro/astro/commit/153a5abb905042ac68b712514dc9ec387d3e6b17)]:
- - astro@4.0.0-beta.0
-
-## 6.1.0
-
-### Minor Changes
-
-- [#9125](https://github.com/withastro/astro/pull/9125) [`8f1d50957`](https://github.com/withastro/astro/commit/8f1d509574f5ee5d77816a13d89ce452dce403ff) Thanks [@matthewp](https://github.com/matthewp)! - Automatically sets immutable cache headers for assets served from the `/_astro` directory.
-
-## 6.1.0
-
-### Minor Changes
-
-- [#9125](https://github.com/withastro/astro/pull/9125) [`8f1d50957`](https://github.com/withastro/astro/commit/8f1d509574f5ee5d77816a13d89ce452dce403ff) Thanks [@matthewp](https://github.com/matthewp)! - Automatically sets immutable cache headers for assets served from the `/_astro` directory.
-
-## 6.0.4
-
-### Patch Changes
-
-- [#9071](https://github.com/withastro/astro/pull/9071) [`c9487138d`](https://github.com/withastro/astro/commit/c9487138d6d8fd39c8c8512239b6724cf2b275ff) Thanks [@pilcrowOnPaper](https://github.com/pilcrowOnPaper)! - Fixes a bug where the response stream would not cancel when the connection closed
-
-## 6.0.3
-
-### Patch Changes
-
-- [#8737](https://github.com/withastro/astro/pull/8737) [`6f60da805`](https://github.com/withastro/astro/commit/6f60da805e0014bc50dd07bef972e91c73560c3c) Thanks [@ematipico](https://github.com/ematipico)! - Add provenance statement when publishing the library from CI
-
-- Updated dependencies [[`6f60da805`](https://github.com/withastro/astro/commit/6f60da805e0014bc50dd07bef972e91c73560c3c), [`d78806dfe`](https://github.com/withastro/astro/commit/d78806dfe0301ea7ffe6c7c1f783bd415ac7cda9), [`d1c75fe15`](https://github.com/withastro/astro/commit/d1c75fe158839699c59728cf3a83888e8c72a459), [`aa265d730`](https://github.com/withastro/astro/commit/aa265d73024422967c1b1c68ad268c419c6c798f), [`78adbc443`](https://github.com/withastro/astro/commit/78adbc4433208458291e36713909762e148e1e5d), [`21e0757ea`](https://github.com/withastro/astro/commit/21e0757ea22a57d344c934045ca19db93b684436), [`357270f2a`](https://github.com/withastro/astro/commit/357270f2a3d0bf2aa634ba7e52e9d17618eff4a7)]:
- - astro@3.2.3
-
-## 6.0.2
-
-### Patch Changes
-
-- [#8698](https://github.com/withastro/astro/pull/8698) [`47ea310f0`](https://github.com/withastro/astro/commit/47ea310f01d06ed1562c790bec348718a2fa8277) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Use a Node-specific image endpoint to resolve images in dev and Node SSR. This should fix many issues related to getting 404 from the \_image endpoint under certain configurations
-
-- Updated dependencies [[`31c59ad8b`](https://github.com/withastro/astro/commit/31c59ad8b6a72f95c98a306ecf92d198c03110b4), [`47ea310f0`](https://github.com/withastro/astro/commit/47ea310f01d06ed1562c790bec348718a2fa8277), [`345808170`](https://github.com/withastro/astro/commit/345808170fce783ddd3c9a4035a91fa64dcc5f46)]:
- - astro@3.2.1
-
-## 6.0.1
-
-### Patch Changes
-
-- [#8599](https://github.com/withastro/astro/pull/8599) [`2e1d5f873`](https://github.com/withastro/astro/commit/2e1d5f8739552c3428aa7cbb82811ed2b9b24fdb) Thanks [@lilnasy](https://github.com/lilnasy)! - The node adapter now logs uncaught errors encountered during rendering a page.
-
-- Updated dependencies [[`bcad715ce`](https://github.com/withastro/astro/commit/bcad715ce67bc73a7927c941d1e7f02a82d638c2), [`bdd267d08`](https://github.com/withastro/astro/commit/bdd267d08937611984d074a2872af11ecf3e1a12), [`e522a5eb4`](https://github.com/withastro/astro/commit/e522a5eb41c7df1e62c307c84cd14d53777439ff), [`ed54d4644`](https://github.com/withastro/astro/commit/ed54d46449accc99ad117d6b0d50a8905e4d65d7), [`70f2a8003`](https://github.com/withastro/astro/commit/70f2a80039d232731f63ea735e896997ec0eac7a), [`4398e9298`](https://github.com/withastro/astro/commit/4398e929877dfadd2067af28413284afdfde9d8b), [`8f8b9069d`](https://github.com/withastro/astro/commit/8f8b9069ddd21cf57d37955ab3a92710492226f5), [`5a988eaf6`](https://github.com/withastro/astro/commit/5a988eaf609ddc1b9609acb0cdc2dda43d10a5c2)]:
- - astro@3.1.2
-
-## 6.0.0
-
-### Major Changes
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`d0679a666`](https://github.com/withastro/astro/commit/d0679a666f37da0fca396d42b9b32bbb25d29312) Thanks [@ematipico](https://github.com/ematipico)! - Remove support for Node 16. The lowest supported version by Astro and all integrations is now v18.14.1. As a reminder, Node 16 will be deprecated on the 11th September 2023.
-
-- [#8179](https://github.com/withastro/astro/pull/8179) [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7) Thanks [@matthewp](https://github.com/matthewp)! - Astro 3.0 Release Candidate
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`148e61d24`](https://github.com/withastro/astro/commit/148e61d2492456811f8a3c8daaab1c3429a2ffdc) Thanks [@ematipico](https://github.com/ematipico)! - Reduced the amount of polyfills provided by Astro. Astro will no longer provide (no-op) polyfills for several web apis such as HTMLElement, Image or Document. If you need access to those APIs on the server, we recommend using more proper polyfills available on npm.
-
-### Minor Changes
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`cd2d7e769`](https://github.com/withastro/astro/commit/cd2d7e76981ef9b9013453aa2629838e1e9fd422) Thanks [@ematipico](https://github.com/ematipico)! - Introduced the concept of feature map. A feature map is a list of features that are built-in in Astro, and an Adapter
- can tell Astro if it can support it.
-
- ```ts
- import { AstroIntegration } from './astro';
-
- function myIntegration(): AstroIntegration {
- return {
- name: 'astro-awesome-list',
- // new feature map
- supportedAstroFeatures: {
- hybridOutput: 'experimental',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: false,
- isSquooshCompatible: false,
- },
- },
- };
- }
- ```
-
-### Patch Changes
-
-- Updated dependencies [[`d0679a666`](https://github.com/withastro/astro/commit/d0679a666f37da0fca396d42b9b32bbb25d29312), [`db39206cb`](https://github.com/withastro/astro/commit/db39206cbb85b034859ac416179f141184bb2bff), [`adf9fccfd`](https://github.com/withastro/astro/commit/adf9fccfdda107c2224558f1c2e6a77847ac0a8a), [`0c7b42dc6`](https://github.com/withastro/astro/commit/0c7b42dc6780e687e416137539f55a3a427d1d10), [`46c4c0e05`](https://github.com/withastro/astro/commit/46c4c0e053f830585b9ef229ce1c259df00a80f8), [`364d861bd`](https://github.com/withastro/astro/commit/364d861bd527b8511968e2837728148f090bedef), [`2484dc408`](https://github.com/withastro/astro/commit/2484dc4080e5cd84b9a53648a1de426d7c907be2), [`81545197a`](https://github.com/withastro/astro/commit/81545197a32fd015d763fc386c8b67e0e08b7393), [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7), [`c2c71d90c`](https://github.com/withastro/astro/commit/c2c71d90c264a2524f99e0373ab59015f23ad4b1), [`cd2d7e769`](https://github.com/withastro/astro/commit/cd2d7e76981ef9b9013453aa2629838e1e9fd422), [`80f1494cd`](https://github.com/withastro/astro/commit/80f1494cdaf72e58a420adb4f7c712d4089e1923), [`e45f30293`](https://github.com/withastro/astro/commit/e45f3029340db718b6ed7e91b5d14f5cf14cd71d), [`c0de7a7b0`](https://github.com/withastro/astro/commit/c0de7a7b0f042cd49cbea4f4ac1b2ab6f9fef644), [`65c354969`](https://github.com/withastro/astro/commit/65c354969e6fe0ef6d622e8f4c545e2f717ce8c6), [`3c3100851`](https://github.com/withastro/astro/commit/3c31008519ce68b5b1b1cb23b71fbe0a2d506882), [`34cb20021`](https://github.com/withastro/astro/commit/34cb2002161ba88df6bcb72fecfd12ed867c134b), [`a824863ab`](https://github.com/withastro/astro/commit/a824863ab1c451f4068eac54f28dd240573e1cba), [`44f7a2872`](https://github.com/withastro/astro/commit/44f7a28728c56c04ac377b6e917329f324874043), [`1048aca55`](https://github.com/withastro/astro/commit/1048aca550769415e528016e42b358ffbfd44b61), [`be6bbd2c8`](https://github.com/withastro/astro/commit/be6bbd2c86b9bf5268e765bb937dda00ff15781a), [`9e021a91c`](https://github.com/withastro/astro/commit/9e021a91c57d10809f588dd47968fc0e7f8b4d5c), [`7511a4980`](https://github.com/withastro/astro/commit/7511a4980fd36536464c317de33a5190427f430a), [`c37632a20`](https://github.com/withastro/astro/commit/c37632a20d06164fb97a4c2fc48df6d960398832), [`acf652fc1`](https://github.com/withastro/astro/commit/acf652fc1d5db166231e87e22d0d50444f5556d8), [`42785c7b7`](https://github.com/withastro/astro/commit/42785c7b784b151e6d582570e5d74482129e8eb8), [`8450379db`](https://github.com/withastro/astro/commit/8450379db854fb1eaa9f38f21d65db240bc616cd), [`dbc97b121`](https://github.com/withastro/astro/commit/dbc97b121f42583728f1cdfdbf14575fda943f5b), [`7d2f311d4`](https://github.com/withastro/astro/commit/7d2f311d428e3d1c8c13b9bf2a708d6435713fc2), [`2540feedb`](https://github.com/withastro/astro/commit/2540feedb06785d5a20eecc3668849f147d778d4), [`ea7ff5177`](https://github.com/withastro/astro/commit/ea7ff5177dbcd7b2508cb1eef1b22b8ee1f47079), [`68efd4a8b`](https://github.com/withastro/astro/commit/68efd4a8b29f248397667801465b3152dc98e9a7), [`7bd1b86f8`](https://github.com/withastro/astro/commit/7bd1b86f85c06fdde0a1ed9146d01bac69990671), [`036388f66`](https://github.com/withastro/astro/commit/036388f66dab68ad54b895ed86f9176958dd83c8), [`519a1c4e8`](https://github.com/withastro/astro/commit/519a1c4e8407c7abcb8d879b67a9f4b960652cae), [`1f58a7a1b`](https://github.com/withastro/astro/commit/1f58a7a1bea6888868b689dac94801d554319b02), [`2ae9d37f0`](https://github.com/withastro/astro/commit/2ae9d37f0a9cb21ab288d3c30aecb6d84db87788), [`a8f35777e`](https://github.com/withastro/astro/commit/a8f35777e7e322068a4e2f520c2c9e43ade19e58), [`70f34f5a3`](https://github.com/withastro/astro/commit/70f34f5a355f42526ee9e5355f3de8e510002ea2), [`5208a3c8f`](https://github.com/withastro/astro/commit/5208a3c8fefcec7694857fb344af351f4631fc34), [`84af8ed9d`](https://github.com/withastro/astro/commit/84af8ed9d1e6401c6ebc9c60fe8cddb44d5044b0), [`f003e7364`](https://github.com/withastro/astro/commit/f003e7364317cafdb8589913b26b28e928dd07c9), [`ffc9e2d3d`](https://github.com/withastro/astro/commit/ffc9e2d3de46049bf3d82140ef018f524fb03187), [`732111cdc`](https://github.com/withastro/astro/commit/732111cdce441639db31f40f621df48442d00969), [`0f637c71e`](https://github.com/withastro/astro/commit/0f637c71e511cb4c51712128d217a26c8eee4d40), [`33b8910cf`](https://github.com/withastro/astro/commit/33b8910cfdce5713891c50a84a0a8fe926311710), [`8a5b0c1f3`](https://github.com/withastro/astro/commit/8a5b0c1f3a4be6bb62db66ec70144109ff5b4c59), [`148e61d24`](https://github.com/withastro/astro/commit/148e61d2492456811f8a3c8daaab1c3429a2ffdc), [`e79e3779d`](https://github.com/withastro/astro/commit/e79e3779df0ad35253abcdb931d622847d9adb12), [`632579dc2`](https://github.com/withastro/astro/commit/632579dc2094cc342929261c89e689f0dd358284), [`3674584e0`](https://github.com/withastro/astro/commit/3674584e02b161a698b429ceb66723918fdc56ac), [`1db4e92c1`](https://github.com/withastro/astro/commit/1db4e92c12ed73681217f5cefd39f2f47542f961), [`e7f872e91`](https://github.com/withastro/astro/commit/e7f872e91e852b901cf221a5151077dec64305bf), [`16f09dfff`](https://github.com/withastro/astro/commit/16f09dfff7722fda99dd0412e3006a7a39c80829), [`4477bb41c`](https://github.com/withastro/astro/commit/4477bb41c8ed688785c545731ef5b184b629f4e5), [`55c10d1d5`](https://github.com/withastro/astro/commit/55c10d1d564e805efc3c1a7c48e0d9a1cdf0c7ed), [`3e834293d`](https://github.com/withastro/astro/commit/3e834293d47ab2761a7aa013916e8371871efb7f), [`96beb883a`](https://github.com/withastro/astro/commit/96beb883ad87f8bbf5b2f57e14a743763d2a6f58), [`997a0db8a`](https://github.com/withastro/astro/commit/997a0db8a4e3851edd69384cf5eadbb969e1d547), [`80f1494cd`](https://github.com/withastro/astro/commit/80f1494cdaf72e58a420adb4f7c712d4089e1923), [`0f0625504`](https://github.com/withastro/astro/commit/0f0625504145f18cba7dc6cf20291cb2abddc5a9), [`e1ae56e72`](https://github.com/withastro/astro/commit/e1ae56e724d0f83db1230359e06cd6bc26f5fa26), [`f32d093a2`](https://github.com/withastro/astro/commit/f32d093a280faafff024228c12bb438156ec34d7), [`f01eb585e`](https://github.com/withastro/astro/commit/f01eb585e7c972d940761309b1595f682b6922d2), [`b76c166bd`](https://github.com/withastro/astro/commit/b76c166bdd8e28683f62806aef968d1e0c3b06d9), [`a87cbe400`](https://github.com/withastro/astro/commit/a87cbe400314341d5f72abf86ea264e6b47c091f), [`866ed4098`](https://github.com/withastro/astro/commit/866ed4098edffb052239cdb26e076cf8db61b1d9), [`767eb6866`](https://github.com/withastro/astro/commit/767eb68666eb777965baa0d6ade20bbafecf95bf), [`32669cd47`](https://github.com/withastro/astro/commit/32669cd47555e9c7433c3998a2b6e624dfb2d8e9)]:
- - astro@3.0.0
-
-## 6.0.0-rc.1
-
-### Major Changes
-
-- [#8179](https://github.com/withastro/astro/pull/8179) [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7) Thanks [@matthewp](https://github.com/matthewp)! - Astro 3.0 Release Candidate
-
-### Patch Changes
-
-- [#8176](https://github.com/withastro/astro/pull/8176) [`d08c83ee3`](https://github.com/withastro/astro/commit/d08c83ee3fe0f10374264f61ee473255dcf0cd06) Thanks [@ematipico](https://github.com/ematipico)! - Fix an issue where `express` couldn't use the `handler` in `middleware` mode.
-
-- Updated dependencies [[`adf9fccfd`](https://github.com/withastro/astro/commit/adf9fccfdda107c2224558f1c2e6a77847ac0a8a), [`582132328`](https://github.com/withastro/astro/commit/5821323285646aee7ff9194a505f708028e4db57), [`81545197a`](https://github.com/withastro/astro/commit/81545197a32fd015d763fc386c8b67e0e08b7393), [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7), [`be6bbd2c8`](https://github.com/withastro/astro/commit/be6bbd2c86b9bf5268e765bb937dda00ff15781a), [`42785c7b7`](https://github.com/withastro/astro/commit/42785c7b784b151e6d582570e5d74482129e8eb8), [`95120efbe`](https://github.com/withastro/astro/commit/95120efbe817163663492181cbeb225849354493), [`2ae9d37f0`](https://github.com/withastro/astro/commit/2ae9d37f0a9cb21ab288d3c30aecb6d84db87788), [`f003e7364`](https://github.com/withastro/astro/commit/f003e7364317cafdb8589913b26b28e928dd07c9), [`732111cdc`](https://github.com/withastro/astro/commit/732111cdce441639db31f40f621df48442d00969), [`33b8910cf`](https://github.com/withastro/astro/commit/33b8910cfdce5713891c50a84a0a8fe926311710), [`e79e3779d`](https://github.com/withastro/astro/commit/e79e3779df0ad35253abcdb931d622847d9adb12), [`179796405`](https://github.com/withastro/astro/commit/179796405e053b559d83f84507e5a465861a029a), [`a87cbe400`](https://github.com/withastro/astro/commit/a87cbe400314341d5f72abf86ea264e6b47c091f), [`767eb6866`](https://github.com/withastro/astro/commit/767eb68666eb777965baa0d6ade20bbafecf95bf)]:
- - astro@3.0.0-rc.5
-
-## 6.0.0-beta.0
-
-### Major Changes
-
-- [`1eae2e3f7`](https://github.com/withastro/astro/commit/1eae2e3f7d693c9dfe91c8ccfbe606d32bf2fb81) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 16. The lowest supported version by Astro and all integrations is now v18.14.1. As a reminder, Node 16 will be deprecated on the 11th September 2023.
-
-- [`3dc1ca2fa`](https://github.com/withastro/astro/commit/3dc1ca2fac8d9965cc5085a5d09e72ed87b4281a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Reduced the amount of polyfills provided by Astro. Astro will no longer provide (no-op) polyfills for several web apis such as HTMLElement, Image or Document. If you need access to those APIs on the server, we recommend using more proper polyfills available on npm.
-
-### Minor Changes
-
-- [`9b4f70a62`](https://github.com/withastro/astro/commit/9b4f70a629f55e461759ba46f68af7097a2e9215) Thanks [@ematipico](https://github.com/ematipico)! - Introduced the concept of feature map. A feature map is a list of features that are built-in in Astro, and an Adapter
- can tell Astro if it can support it.
-
- ```ts
- import { AstroIntegration } from './astro';
-
- function myIntegration(): AstroIntegration {
- return {
- name: 'astro-awesome-list',
- // new feature map
- supportedAstroFeatures: {
- hybridOutput: 'experimental',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: false,
- isSquooshCompatible: false,
- },
- },
- };
- }
- ```
-
-### Patch Changes
-
-- Updated dependencies [[`1eae2e3f7`](https://github.com/withastro/astro/commit/1eae2e3f7d693c9dfe91c8ccfbe606d32bf2fb81), [`76ddef19c`](https://github.com/withastro/astro/commit/76ddef19ccab6e5f7d3a5740cd41acf10e334b38), [`9b4f70a62`](https://github.com/withastro/astro/commit/9b4f70a629f55e461759ba46f68af7097a2e9215), [`3fdf509b2`](https://github.com/withastro/astro/commit/3fdf509b2731a9b2f972d89291e57cf78d62c769), [`2f951cd40`](https://github.com/withastro/astro/commit/2f951cd403dfcc2c3ca6aae618ae3e1409516e32), [`c022a4217`](https://github.com/withastro/astro/commit/c022a4217a805d223c1494e9eda4e48bbf810388), [`67becaa58`](https://github.com/withastro/astro/commit/67becaa580b8f787df58de66b7008b7098f1209c), [`bc37331d8`](https://github.com/withastro/astro/commit/bc37331d8154e3e95a8df9131e4e014e78a7a9e7), [`dfc2d93e3`](https://github.com/withastro/astro/commit/dfc2d93e3c645995379358fabbdfa9aab99f43d8), [`3dc1ca2fa`](https://github.com/withastro/astro/commit/3dc1ca2fac8d9965cc5085a5d09e72ed87b4281a), [`1be84dfee`](https://github.com/withastro/astro/commit/1be84dfee3ce8e6f5cc624f99aec4e980f6fde37), [`35f01df79`](https://github.com/withastro/astro/commit/35f01df797d23315f2bee2fc3fd795adb0559c58), [`3fdf509b2`](https://github.com/withastro/astro/commit/3fdf509b2731a9b2f972d89291e57cf78d62c769), [`78de801f2`](https://github.com/withastro/astro/commit/78de801f21fd4ca1653950027d953bf08614566b), [`59d6e569f`](https://github.com/withastro/astro/commit/59d6e569f63e175c97e82e94aa7974febfb76f7c), [`7723c4cc9`](https://github.com/withastro/astro/commit/7723c4cc93298c2e6530e55da7afda048f22cf81), [`fb5cd6b56`](https://github.com/withastro/astro/commit/fb5cd6b56dc27a71366ed5e1ab8bfe9b8f96bac5), [`631b9c410`](https://github.com/withastro/astro/commit/631b9c410d5d66fa384674027ba95d69ebb5063f)]:
- - astro@3.0.0-beta.0
-
-## 5.3.6
-
-### Patch Changes
-
-- [#8176](https://github.com/withastro/astro/pull/8176) [`d08c83ee3`](https://github.com/withastro/astro/commit/d08c83ee3fe0f10374264f61ee473255dcf0cd06) Thanks [@ematipico](https://github.com/ematipico)! - Fix an issue where `express` couldn't use the `handler` in `middleware` mode.
-
-- Updated dependencies [[`582132328`](https://github.com/withastro/astro/commit/5821323285646aee7ff9194a505f708028e4db57), [`fddd4dc71`](https://github.com/withastro/astro/commit/fddd4dc71af321bd6b4d01bb4b1b955284846e60), [`cfc465dde`](https://github.com/withastro/astro/commit/cfc465ddebcc58d20f29ecffaa857a77525435a9), [`95120efbe`](https://github.com/withastro/astro/commit/95120efbe817163663492181cbeb225849354493), [`273335cb0`](https://github.com/withastro/astro/commit/273335cb01615c3c06d46c02464f4496a81f8d0b), [`9142178b1`](https://github.com/withastro/astro/commit/9142178b113443749b87c1d259859b42a3d7a9c4), [`179796405`](https://github.com/withastro/astro/commit/179796405e053b559d83f84507e5a465861a029a)]:
- - astro@2.10.13
-
-## 5.3.5
-
-### Patch Changes
-
-- [#8141](https://github.com/withastro/astro/pull/8141) [`4c15c0696`](https://github.com/withastro/astro/commit/4c15c069691ca25efcb9ebb7d9b45605cd136ed3) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixed an issue where the preview mode handled 404 and 500 routes differently from running app with node directly.
-
-- Updated dependencies [[`04caa99c4`](https://github.com/withastro/astro/commit/04caa99c48ce604ca3b90302ff0df8dcdbeee650)]:
- - astro@2.10.12
-
-## 5.3.4
-
-### Patch Changes
-
-- [#8084](https://github.com/withastro/astro/pull/8084) [`560e45924`](https://github.com/withastro/astro/commit/560e45924622141206ff5b47d134cb343d6d2a71) Thanks [@hbgl](https://github.com/hbgl)! - Stream request body instead of buffering it in memory.
-
-- Updated dependencies [[`c19987df0`](https://github.com/withastro/astro/commit/c19987df0be3520cf774476cea270c03edd08354), [`560e45924`](https://github.com/withastro/astro/commit/560e45924622141206ff5b47d134cb343d6d2a71), [`afc45af20`](https://github.com/withastro/astro/commit/afc45af2022f7c43fbb6c5c04983695f3819e47e), [`d1f7143f9`](https://github.com/withastro/astro/commit/d1f7143f9caf2ffa0e87cc55c0e05339d3501db3), [`3e46634fd`](https://github.com/withastro/astro/commit/3e46634fd540e5b967d2e5c9abd6235452cee2f2), [`a12027b6a`](https://github.com/withastro/astro/commit/a12027b6af411be39700919ca47e240a335e9887)]:
- - astro@2.10.8
-
-## 5.3.3
-
-### Patch Changes
-
-- [#6928](https://github.com/withastro/astro/pull/6928) [`b16cb787f`](https://github.com/withastro/astro/commit/b16cb787fd16ebaaf860d8bb183789caf01c0fb7) Thanks [@JerryWu1234](https://github.com/JerryWu1234)! - Support the `--host` flag when running the standalone server (also works for `astro preview --host`)
-
-- Updated dependencies [[`1b8d30209`](https://github.com/withastro/astro/commit/1b8d3020990130dabfaaf753db73a32c6e0c896a), [`405913cdf`](https://github.com/withastro/astro/commit/405913cdf20b26407aa351c090f0a0859a4e6f54), [`87d4b1843`](https://github.com/withastro/astro/commit/87d4b18437c7565c48cad4bea81831c2a244ebb8), [`c23377caa`](https://github.com/withastro/astro/commit/c23377caafbc75deb91c33b9678c1b6868ad40ea), [`86bee2812`](https://github.com/withastro/astro/commit/86bee2812185df6e14025e5962a335f51853587b)]:
- - astro@2.10.6
-
-## 5.3.2
-
-### Patch Changes
-
-- [#7708](https://github.com/withastro/astro/pull/7708) [`4dd6c7900`](https://github.com/withastro/astro/commit/4dd6c7900ca40db1b2cebed9bd02a9eb00874d8d) Thanks [@DixCouleur](https://github.com/DixCouleur)! - fix issuse #7590 "res.writeHead is not a function" in Express/Node middleware
-
-- Updated dependencies [[`41afb8405`](https://github.com/withastro/astro/commit/41afb84057f606b0e7f9a73c1e40487068e43948), [`c00b6f0c4`](https://github.com/withastro/astro/commit/c00b6f0c49027125ea3026e89b21fef84380d187), [`1f0ee494a`](https://github.com/withastro/astro/commit/1f0ee494a5190356d130282f1f51ba2a5e6ea63f), [`00cb28f49`](https://github.com/withastro/astro/commit/00cb28f4964a60bc609770108d491acc277997b9), [`c264be349`](https://github.com/withastro/astro/commit/c264be3497db4aa8b3bcce0d2f79a26e35b8e91e), [`e1e958a75`](https://github.com/withastro/astro/commit/e1e958a75860292688569e82b4617fc141056202)]:
- - astro@2.10.0
-
-## 5.3.1
-
-### Patch Changes
-
-- [#7754](https://github.com/withastro/astro/pull/7754) [`298dbb89f`](https://github.com/withastro/astro/commit/298dbb89f2963a547370b6e65cafd2650fdb1b27) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Improve `404` behavior in middleware mode
-
-- Updated dependencies [[`298dbb89f`](https://github.com/withastro/astro/commit/298dbb89f2963a547370b6e65cafd2650fdb1b27), [`9e2203847`](https://github.com/withastro/astro/commit/9e22038472c8be05ed7a72620534b88324dce793), [`5c5da8d2f`](https://github.com/withastro/astro/commit/5c5da8d2fbb37830f3ee81830d4c9afcd2c1a3e3), [`0b8375fe8`](https://github.com/withastro/astro/commit/0b8375fe82a15bfff3f517f98de6454adb2779f1), [`89d015db6`](https://github.com/withastro/astro/commit/89d015db6ce4d15b5b1140f0eb6bfbef187d6ad7), [`ebf7ebbf7`](https://github.com/withastro/astro/commit/ebf7ebbf7ae767625d736fad327954cfb853837e)]:
- - astro@2.9.7
-
-## 5.3.0
-
-### Minor Changes
-
-- [#7385](https://github.com/withastro/astro/pull/7385) [`8e2923cc6`](https://github.com/withastro/astro/commit/8e2923cc6219eda01ca2c749f5c7fa2fe4319455) Thanks [@ematipico](https://github.com/ematipico)! - `Astro.locals` is now exposed to the adapter API. Node Adapter can now pass in a `locals` object in the SSR handler middleware.
-
-### Patch Changes
-
-- Updated dependencies [[`30bb36371`](https://github.com/withastro/astro/commit/30bb363713e3d2c50d0d4816d970aa93b836a3b0), [`3943fa390`](https://github.com/withastro/astro/commit/3943fa390a0bd41317a673d0f841e0461c7499cd), [`7877a06d8`](https://github.com/withastro/astro/commit/7877a06d829305eed356fbb8bfd1ef578cd5466e), [`e314a04bf`](https://github.com/withastro/astro/commit/e314a04bfbf0526838b7c9aac452251b27d69719), [`33cdc8622`](https://github.com/withastro/astro/commit/33cdc8622a56c8e5465b7a50f627ecc568870c6b), [`76fcdb84d`](https://github.com/withastro/astro/commit/76fcdb84dd828ac373b2dc739e57fadf650820fd), [`8e2923cc6`](https://github.com/withastro/astro/commit/8e2923cc6219eda01ca2c749f5c7fa2fe4319455), [`459b5bd05`](https://github.com/withastro/astro/commit/459b5bd05f562238f7250520efe3cf0fa156bb45)]:
- - astro@2.7.0
-
-## 5.2.0
-
-### Minor Changes
-
-- [#7227](https://github.com/withastro/astro/pull/7227) [`4929332c3`](https://github.com/withastro/astro/commit/4929332c3210d1634b8607c7736d9049860a2079) Thanks [@alex-sherwin](https://github.com/alex-sherwin)! - Fixes NodeJS adapter for multiple set-cookie headers and combining AstroCookies and Response.headers cookies
-
-### Patch Changes
-
-- [#7243](https://github.com/withastro/astro/pull/7243) [`409c60028`](https://github.com/withastro/astro/commit/409c60028aaab09b8f2383ef5730531cd23db4ba) Thanks [@Riki-WangJJ](https://github.com/Riki-WangJJ)! - Support directory redirects and query params at the same time
-
-- [#7260](https://github.com/withastro/astro/pull/7260) [`39403c32f`](https://github.com/withastro/astro/commit/39403c32faea58399c61d3344b770f195be60d5b) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Unflags support for `output: 'hybrid'` mode, which enables pre-rendering by default. The additional `experimental.hybridOutput` flag can be safely removed from your configuration.
-
-- Updated dependencies [[`57f8d14c0`](https://github.com/withastro/astro/commit/57f8d14c027c30919363e12c664ccff4ed64d0fc), [`414eb19d2`](https://github.com/withastro/astro/commit/414eb19d2fcb55758f9d053076773b11b62f4c97), [`a7e2b37ff`](https://github.com/withastro/astro/commit/a7e2b37ff73871c46895c615846a86a539f45330), [`dd1a6b6c9`](https://github.com/withastro/astro/commit/dd1a6b6c941aeb7af934bd12db22412af262f5a1), [`d72cfa7ca`](https://github.com/withastro/astro/commit/d72cfa7cad758192163712ceb269405659fd14bc), [`144813f73`](https://github.com/withastro/astro/commit/144813f7308dcb9de64ebe3f0f2c6cba9ad81eb1), [`b5213654b`](https://github.com/withastro/astro/commit/b5213654b1b7f3ba573a48d3be688b2bdde7870f), [`e3b8c6296`](https://github.com/withastro/astro/commit/e3b8c62969d680d1915a122c610d281d6711aa63), [`890a2bc98`](https://github.com/withastro/astro/commit/890a2bc9891a2449ab99b01b65468f6dddba6b12), [`39403c32f`](https://github.com/withastro/astro/commit/39403c32faea58399c61d3344b770f195be60d5b), [`101f03209`](https://github.com/withastro/astro/commit/101f032098148b3daaac8d46ff1e535b79232e43)]:
- - astro@2.6.0
-
-## 5.1.4
-
-### Patch Changes
-
-- [#6991](https://github.com/withastro/astro/pull/6991) [`719002ca5`](https://github.com/withastro/astro/commit/719002ca5b128744fb4316d4a52c5dcd46a42759) Thanks [@MoustaphaDev](https://github.com/MoustaphaDev)! - Enable experimental support for hybrid SSR with pre-rendering enabled by default
-
- **astro.config.mjs**
-
- ```js
- import { defineConfig } from 'astro/config';
- export default defineConfig({
- output: 'hybrid',
- experimental: {
- hybridOutput: true,
- },
- });
- ```
-
- Then add `export const prerender = false` to any page or endpoint you want to opt-out of pre-rendering.
-
- **src/pages/contact.astro**
-
- ```astro
- ---
- export const prerender = false;
-
- if (Astro.request.method === 'POST') {
- // handle form submission
- }
- ---
-
-
- ```
-
-- [#7104](https://github.com/withastro/astro/pull/7104) [`826e02890`](https://github.com/withastro/astro/commit/826e0289005f645b902375b98d5549c6a95ccafa) Thanks [@bluwy](https://github.com/bluwy)! - Specify `"files"` field to only publish necessary files
-
-- Updated dependencies [[`4516d7b22`](https://github.com/withastro/astro/commit/4516d7b22c5979cde4537f196b53ae2826ba9561), [`e186ecc5e`](https://github.com/withastro/astro/commit/e186ecc5e292de8c6a2c441a2d588512c0813068), [`c6d7ebefd`](https://github.com/withastro/astro/commit/c6d7ebefdd554a9ef29cfeb426ac55cab80d6473), [`914c439bc`](https://github.com/withastro/astro/commit/914c439bccee9fec002c6d92beaa501c398e62ac), [`e9fc2c221`](https://github.com/withastro/astro/commit/e9fc2c2213036d47cd30a47a6cdad5633481a0f8), [`075eee08f`](https://github.com/withastro/astro/commit/075eee08f2e2b0baea008b97f3523f2cb937ee44), [`719002ca5`](https://github.com/withastro/astro/commit/719002ca5b128744fb4316d4a52c5dcd46a42759), [`fc52681ba`](https://github.com/withastro/astro/commit/fc52681ba2f8fe8bcd92eeedf3c6a52fd86a390e), [`fb84622af`](https://github.com/withastro/astro/commit/fb84622af04f795de8d17f24192de105f70fe910), [`cada10a46`](https://github.com/withastro/astro/commit/cada10a466f81f8edb0aa664f9cffdb6b5b8f307), [`cd410c5eb`](https://github.com/withastro/astro/commit/cd410c5eb71f825259279c27c4c39d0ad282c3f0), [`73ec6f6c1`](https://github.com/withastro/astro/commit/73ec6f6c16cadb71dafe9f664f0debde072c3173), [`410428672`](https://github.com/withastro/astro/commit/410428672ed97bba7ca0b3352c1a7ee564921462), [`763ff2d1e`](https://github.com/withastro/astro/commit/763ff2d1e44f54b899d7c65386f1b4b877c95737), [`c1669c001`](https://github.com/withastro/astro/commit/c1669c0011eecfe65a459d727848c18c189a54ca), [`3d525efc9`](https://github.com/withastro/astro/commit/3d525efc95cfb2deb5d9e04856d02965d66901c9)]:
- - astro@2.5.0
-
-## 5.1.3
-
-### Patch Changes
-
-- [#7076](https://github.com/withastro/astro/pull/7076) [`781f558c4`](https://github.com/withastro/astro/commit/781f558c401a5f02927d150e4628a77c55cccd28) Thanks [@matthewp](https://github.com/matthewp)! - Fix redirects on directories when using base option
-
-## 5.1.2
-
-### Patch Changes
-
-- [#6935](https://github.com/withastro/astro/pull/6935) [`c405cef64`](https://github.com/withastro/astro/commit/c405cef64711a7b6a480e8b4068cd2bf3cf889a9) Thanks [@matthewp](https://github.com/matthewp)! - Catch errors that occur within the stream in the Node adapter
-
-- Updated dependencies [[`a98df9374`](https://github.com/withastro/astro/commit/a98df9374dec65c678fa47319cb1481b1af123e2), [`ac57b5549`](https://github.com/withastro/astro/commit/ac57b5549f828a17bdbebdaca7ace075307a3c9d), [`50975f2ea`](https://github.com/withastro/astro/commit/50975f2ea3a59f9e023cc631a9372c0c7986eec9), [`ebae1eaf8`](https://github.com/withastro/astro/commit/ebae1eaf87f49399036033c673b513338f7d9c42), [`dc062f669`](https://github.com/withastro/astro/commit/dc062f6695ce577dc569781fc0678c903012c336)]:
- - astro@2.3.3
- - @astrojs/webapi@2.1.1
-
-## 5.1.1
-
-### Patch Changes
-
-- [#6746](https://github.com/withastro/astro/pull/6746) [`4cc1bf61b`](https://github.com/withastro/astro/commit/4cc1bf61b832dba9aab1916b56f5260ceac2d97d) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fix malformed URLs crashing the server in certain cases
-
-- Updated dependencies [[`489dd8d69`](https://github.com/withastro/astro/commit/489dd8d69cdd9d7c243cf8bec96051a914984b9c), [`a1a4f45b5`](https://github.com/withastro/astro/commit/a1a4f45b51a80215fa7598da83bd0d9c5acd20d2), [`a1108e037`](https://github.com/withastro/astro/commit/a1108e037115cdb67d03505286c7d3a4fc2a1ff5), [`8b88e4cf1`](https://github.com/withastro/astro/commit/8b88e4cf15c8bea7942b3985380164e0edf7250b), [`d54cbe413`](https://github.com/withastro/astro/commit/d54cbe41349e55f8544212ad9320705f07325920), [`4c347ab51`](https://github.com/withastro/astro/commit/4c347ab51e46f2319d614f8577fe502e3dc816e2), [`ff0430786`](https://github.com/withastro/astro/commit/ff043078630e678348ae4f4757b3015b3b862c16), [`2f2e572e9`](https://github.com/withastro/astro/commit/2f2e572e937fd25451bbc78a05d55b7caa1ca3ec), [`7116c021a`](https://github.com/withastro/astro/commit/7116c021a39eac15a6e1264dfbd11bef0f5d618a)]:
- - astro@2.2.0
-
-## 5.1.0
-
-### Minor Changes
-
-- [#6213](https://github.com/withastro/astro/pull/6213) [`afbbc4d5b`](https://github.com/withastro/astro/commit/afbbc4d5bfafc1779bac00b41c2a1cb1c90f2808) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updated compilation settings to disable downlevelling for Node 14
-
-### Patch Changes
-
-- Updated dependencies [[`fec583909`](https://github.com/withastro/astro/commit/fec583909ab62829dc0c1600e2387979365f2b94), [`b087b83fe`](https://github.com/withastro/astro/commit/b087b83fe266c431fe34a07d5c2293cc4ab011c6), [`694918a56`](https://github.com/withastro/astro/commit/694918a56b01104831296be0c25456135a63c784), [`a20610609`](https://github.com/withastro/astro/commit/a20610609863ae3b48afe96819b8f11ae4f414d5), [`a4a74ab70`](https://github.com/withastro/astro/commit/a4a74ab70cd2aa0d812a1f6b202c4e240a8913bf), [`75921b3cd`](https://github.com/withastro/astro/commit/75921b3cd916d439f6392c487c21532fde35ed13), [`afbbc4d5b`](https://github.com/withastro/astro/commit/afbbc4d5bfafc1779bac00b41c2a1cb1c90f2808)]:
- - astro@2.1.0
- - @astrojs/webapi@2.1.0
-
-## 5.0.4
-
-### Patch Changes
-
-- [#6323](https://github.com/withastro/astro/pull/6323) [`5e26bc891`](https://github.com/withastro/astro/commit/5e26bc891cbebb3598acfa760c135a25c548d624) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updated Undici to 5.20.0. This fixes a security issue and handling of cookies in certain cases in dev
-
-- Updated dependencies [[`5e26bc891`](https://github.com/withastro/astro/commit/5e26bc891cbebb3598acfa760c135a25c548d624), [`a156ecbb7`](https://github.com/withastro/astro/commit/a156ecbb7f4df6a46124a9a12eb712f9163db2ed), [`ccd72e6bb`](https://github.com/withastro/astro/commit/ccd72e6bb41e570d42b1b158e8124c8e04a1943d), [`504c7bacb`](https://github.com/withastro/astro/commit/504c7bacb8c1f2308a31e6c412825ba34983ba33), [`63dda6ded`](https://github.com/withastro/astro/commit/63dda6dedd4c6ea1d5ce72e9cf3fe5f88339a927), [`f91a7f376`](https://github.com/withastro/astro/commit/f91a7f376c223f18b4d8fbed81f95f6bea1cef8d)]:
- - astro@2.0.15
-
-## 5.0.3
-
-### Patch Changes
-
-- [#6110](https://github.com/withastro/astro/pull/6110) [`67ccec9e1`](https://github.com/withastro/astro/commit/67ccec9e168f241318d9dac40096016982d89b7b) Thanks [@matthewp](https://github.com/matthewp)! - Fixes support for prerendering and query params
-
-## 5.0.2
-
-### Patch Changes
-
-- [#6088](https://github.com/withastro/astro/pull/6088) [`6a03649f0`](https://github.com/withastro/astro/commit/6a03649f0084f0df6738236d4a86c9936325cee7) Thanks [@QingXia-Ela](https://github.com/QingXia-Ela)! - fix incorrent encoded when path has other language characters
-
-## 5.0.1
-
-### Patch Changes
-
-- [#5992](https://github.com/withastro/astro/pull/5992) [`60b32d585`](https://github.com/withastro/astro/commit/60b32d58565d87e87573eb268408293fc28ec657) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Fix `Astro.url.protocol` when using the @astrojs/node SSR adapter with HTTPS
-
-- Updated dependencies [[`b53e0717b`](https://github.com/withastro/astro/commit/b53e0717b7f6b042baaeec7f87999e99c76c031c), [`60b32d585`](https://github.com/withastro/astro/commit/60b32d58565d87e87573eb268408293fc28ec657), [`883e0cc29`](https://github.com/withastro/astro/commit/883e0cc29968d51ed6c7515be035a40b28bafdad), [`dabce6b8c`](https://github.com/withastro/astro/commit/dabce6b8c684f851c3535f8acead06cbef6dce2a), [`aedf23f85`](https://github.com/withastro/astro/commit/aedf23f8582e32a6b94b81ddba9b323831f2b22a)]:
- - astro@2.0.2
-
-## 5.0.0
-
-### Major Changes
-
-- [#5782](https://github.com/withastro/astro/pull/5782) [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 14. Minimum supported Node version is now >=16.12.0
-
-- [#5707](https://github.com/withastro/astro/pull/5707) [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b) Thanks [@bluwy](https://github.com/bluwy)! - Remove `astro:build:start` backwards compatibility code
-
-- [#5806](https://github.com/withastro/astro/pull/5806) [`7572f7402`](https://github.com/withastro/astro/commit/7572f7402238da37de748be58d678fedaf863b53) Thanks [@matthewp](https://github.com/matthewp)! - Make astro a `peerDependency` of integrations
-
- This marks `astro` as a `peerDependency` of several packages that are already getting `major` version bumps. This is so we can more properly track the dependency between them and what version of Astro they are being used with.
-
-### Minor Changes
-
-- [#5832](https://github.com/withastro/astro/pull/5832) [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Add support for serving well-known URIs with the @astrojs/node SSR adapter
-
-### Patch Changes
-
-- [#5701](https://github.com/withastro/astro/pull/5701) [`9869f2f6d`](https://github.com/withastro/astro/commit/9869f2f6d8c344babb8a59cb54918de14bd95dcc) Thanks [@wulinsheng123](https://github.com/wulinsheng123)! - Support custom 404 page in standalone mode
-
-- Updated dependencies [[`93e633922`](https://github.com/withastro/astro/commit/93e633922c2e449df3bb2357b3683af1d3c0e07b), [`16dc36a87`](https://github.com/withastro/astro/commit/16dc36a870df47a4151a8ed2d91d0bd1bb812458), [`01f3f463b`](https://github.com/withastro/astro/commit/01f3f463bf2918b310d130a9fabbf3ee21d14029), [`e2019be6f`](https://github.com/withastro/astro/commit/e2019be6ffa46fa33d92cfd346f9ecbe51bb7144), [`05caf445d`](https://github.com/withastro/astro/commit/05caf445d4d2728f1010aeb2179a9e756c2fd17d), [`49ab4f231`](https://github.com/withastro/astro/commit/49ab4f231c23b34891c3ee86f4b92bf8d6d267a3), [`a342a486c`](https://github.com/withastro/astro/commit/a342a486c2831461e24e6c2f1ca8a9d3e15477b6), [`8fb28648f`](https://github.com/withastro/astro/commit/8fb28648f66629741cb976bfe34ccd9d8f55661e), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`c2180746b`](https://github.com/withastro/astro/commit/c2180746b4f6d9ef1b6f86924f21f52cc6ab4e63), [`ae8a012a7`](https://github.com/withastro/astro/commit/ae8a012a7b6884a03c50494332ee37b4505c2c3b), [`cf2de5422`](https://github.com/withastro/astro/commit/cf2de5422c26bfdea4c75f76e57b57299ded3e3a), [`ce5c5dbd4`](https://github.com/withastro/astro/commit/ce5c5dbd46afbe738b03600758bf5c35113de522), [`ec09bb664`](https://github.com/withastro/astro/commit/ec09bb6642064dbd7d2f3369afb090363ae18de2), [`665a2c222`](https://github.com/withastro/astro/commit/665a2c2225e42881f5a9550599e8f3fc1deea0b4), [`259a539d7`](https://github.com/withastro/astro/commit/259a539d7d70c783330c797794b15716921629cf), [`f7aa1ec25`](https://github.com/withastro/astro/commit/f7aa1ec25d1584f7abd421903fbef66b1c050e2a), [`4987d6f44`](https://github.com/withastro/astro/commit/4987d6f44cfd0d81d88f21f5c380503403dc1e6a), [`304823811`](https://github.com/withastro/astro/commit/304823811eddd8e72aa1d8e2d39b40ab5cda3565), [`302e0ef8f`](https://github.com/withastro/astro/commit/302e0ef8f5d5232e3348afe680e599f3e537b5c5), [`55cea0a9d`](https://github.com/withastro/astro/commit/55cea0a9d8c8df91a46590fc04a9ac28089b3432), [`dd56c1941`](https://github.com/withastro/astro/commit/dd56c19411b126439b8bc42d681b6fa8c06e8c61), [`9963c6e4d`](https://github.com/withastro/astro/commit/9963c6e4d50c392c3d1ac4492237020f15ccb1de), [`46ecd5de3`](https://github.com/withastro/astro/commit/46ecd5de34df619e2ee73ccea39a57acd37bc0b8), [`be901dc98`](https://github.com/withastro/astro/commit/be901dc98c4a7f6b5536540aa8f7ba5108e939a0), [`f6cf92b48`](https://github.com/withastro/astro/commit/f6cf92b48317a19a3840ad781b77d6d3cae143bb), [`e818cc046`](https://github.com/withastro/astro/commit/e818cc0466a942919ea3c41585e231c8c80cb3d0), [`8c100a6fe`](https://github.com/withastro/astro/commit/8c100a6fe6cc652c3799d1622e12c2c969f30510), [`116d8835c`](https://github.com/withastro/astro/commit/116d8835ca9e78f8b5e477ee5a3d737b69f80706), [`840412128`](https://github.com/withastro/astro/commit/840412128b00a04515156e92c314a929d6b94f6d), [`1f49cddf9`](https://github.com/withastro/astro/commit/1f49cddf9e9ffc651efc171b2cbde9fbe9e8709d), [`7325df412`](https://github.com/withastro/astro/commit/7325df412107fc0e65cd45c1b568fb686708f723), [`16c7d0bfd`](https://github.com/withastro/astro/commit/16c7d0bfd49d2b9bfae45385f506bcd642f9444a), [`c55fbcb8e`](https://github.com/withastro/astro/commit/c55fbcb8edca1fe118a44f68c9f9436a4719d171), [`a9c292026`](https://github.com/withastro/astro/commit/a9c2920264e36cc5dc05f4adc1912187979edb0d), [`2a5786419`](https://github.com/withastro/astro/commit/2a5786419599b8674473c699300172b9aacbae2e), [`4a1cabfe6`](https://github.com/withastro/astro/commit/4a1cabfe6b9ef8a6fbbcc0727a0dc6fa300cedaa), [`a8d3e7924`](https://github.com/withastro/astro/commit/a8d3e79246605d252dcddad159e358e2d79bd624), [`fa8c131f8`](https://github.com/withastro/astro/commit/fa8c131f88ef67d14c62f1c00c97ed74d43a80ac), [`64b8082e7`](https://github.com/withastro/astro/commit/64b8082e776b832f1433ed288e6f7888adb626d0), [`c4b0cb8bf`](https://github.com/withastro/astro/commit/c4b0cb8bf2b41887d9106440bb2e70d421a5f481), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`23dc9ea96`](https://github.com/withastro/astro/commit/23dc9ea96a10343852d965efd41fe6665294f1fb), [`63a6ceb38`](https://github.com/withastro/astro/commit/63a6ceb38d88331451dca64d0034c7c58e3d26f1), [`a3a7fc929`](https://github.com/withastro/astro/commit/a3a7fc9298e6d88abb4b7bee1e58f05fa9558cf1), [`52209ca2a`](https://github.com/withastro/astro/commit/52209ca2ad72a30854947dcb3a90ab4db0ac0a6f), [`5fd9208d4`](https://github.com/withastro/astro/commit/5fd9208d447f5ab8909a2188b6c2491a0debd49d), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b), [`899214298`](https://github.com/withastro/astro/commit/899214298cee5f0c975c7245e623c649e1842d73), [`3a00ecb3e`](https://github.com/withastro/astro/commit/3a00ecb3eb4bc44be758c064f2bde6e247e8a593), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b), [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0), [`1ca81c16b`](https://github.com/withastro/astro/commit/1ca81c16b8b66236e092e6eb6ec3f73f5668421c), [`b66d7195c`](https://github.com/withastro/astro/commit/b66d7195c17a55ea0931bc3744888bd4f5f01ce6)]:
- - astro@2.0.0
- - @astrojs/webapi@2.0.0
-
-## 5.0.0-beta.1
-
-
-See changes in 5.0.0-beta.1
-
-### Major Changes
-
-- [#5782](https://github.com/withastro/astro/pull/5782) [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 14. Minimum supported Node version is now >=16.12.0
-
-- [#5806](https://github.com/withastro/astro/pull/5806) [`7572f7402`](https://github.com/withastro/astro/commit/7572f7402238da37de748be58d678fedaf863b53) Thanks [@matthewp](https://github.com/matthewp)! - Make astro a `peerDependency` of integrations
-
- This marks `astro` as a `peerDependency` of several packages that are already getting `major` version bumps. This is so we can more properly track the dependency between them and what version of Astro they are being used with.
-
-### Minor Changes
-
-- [#5832](https://github.com/withastro/astro/pull/5832) [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Add support for serving well-known URIs with the @astrojs/node SSR adapter
-
-### Patch Changes
-
-- [#5701](https://github.com/withastro/astro/pull/5701) [`9869f2f6d`](https://github.com/withastro/astro/commit/9869f2f6d8c344babb8a59cb54918de14bd95dcc) Thanks [@wulinsheng123](https://github.com/wulinsheng123)! - Support custom 404 page in standalone mode
-
-- Updated dependencies [[`01f3f463b`](https://github.com/withastro/astro/commit/01f3f463bf2918b310d130a9fabbf3ee21d14029), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`c2180746b`](https://github.com/withastro/astro/commit/c2180746b4f6d9ef1b6f86924f21f52cc6ab4e63), [`ae8a012a7`](https://github.com/withastro/astro/commit/ae8a012a7b6884a03c50494332ee37b4505c2c3b), [`cf2de5422`](https://github.com/withastro/astro/commit/cf2de5422c26bfdea4c75f76e57b57299ded3e3a), [`ec09bb664`](https://github.com/withastro/astro/commit/ec09bb6642064dbd7d2f3369afb090363ae18de2), [`665a2c222`](https://github.com/withastro/astro/commit/665a2c2225e42881f5a9550599e8f3fc1deea0b4), [`f7aa1ec25`](https://github.com/withastro/astro/commit/f7aa1ec25d1584f7abd421903fbef66b1c050e2a), [`302e0ef8f`](https://github.com/withastro/astro/commit/302e0ef8f5d5232e3348afe680e599f3e537b5c5), [`840412128`](https://github.com/withastro/astro/commit/840412128b00a04515156e92c314a929d6b94f6d), [`1f49cddf9`](https://github.com/withastro/astro/commit/1f49cddf9e9ffc651efc171b2cbde9fbe9e8709d), [`c55fbcb8e`](https://github.com/withastro/astro/commit/c55fbcb8edca1fe118a44f68c9f9436a4719d171), [`4a1cabfe6`](https://github.com/withastro/astro/commit/4a1cabfe6b9ef8a6fbbcc0727a0dc6fa300cedaa), [`c4b0cb8bf`](https://github.com/withastro/astro/commit/c4b0cb8bf2b41887d9106440bb2e70d421a5f481), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`23dc9ea96`](https://github.com/withastro/astro/commit/23dc9ea96a10343852d965efd41fe6665294f1fb), [`63a6ceb38`](https://github.com/withastro/astro/commit/63a6ceb38d88331451dca64d0034c7c58e3d26f1), [`52209ca2a`](https://github.com/withastro/astro/commit/52209ca2ad72a30854947dcb3a90ab4db0ac0a6f), [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0)]:
- - astro@2.0.0-beta.2
- - @astrojs/webapi@2.0.0-beta.0
-
-
-
-## 5.0.0-beta.0
-
-
-See changes in 5.0.0-beta.0
-
-### Major Changes
-
-- [#5707](https://github.com/withastro/astro/pull/5707) [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b) Thanks [@bluwy](https://github.com/bluwy)! - Remove `astro:build:start` backwards compatibility code
-
-### Patch Changes
-
-- Updated dependencies [[`e2019be6f`](https://github.com/withastro/astro/commit/e2019be6ffa46fa33d92cfd346f9ecbe51bb7144), [`8fb28648f`](https://github.com/withastro/astro/commit/8fb28648f66629741cb976bfe34ccd9d8f55661e), [`dd56c1941`](https://github.com/withastro/astro/commit/dd56c19411b126439b8bc42d681b6fa8c06e8c61), [`f6cf92b48`](https://github.com/withastro/astro/commit/f6cf92b48317a19a3840ad781b77d6d3cae143bb), [`16c7d0bfd`](https://github.com/withastro/astro/commit/16c7d0bfd49d2b9bfae45385f506bcd642f9444a), [`a9c292026`](https://github.com/withastro/astro/commit/a9c2920264e36cc5dc05f4adc1912187979edb0d), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b)]:
- - astro@2.0.0-beta.0
-
-
-
-## 4.0.0
-
-### Patch Changes
-
-- Updated dependencies [[`d85ec7484`](https://github.com/withastro/astro/commit/d85ec7484ce14a4c7d3f480da8f38fcb9aff388f), [`d2960984c`](https://github.com/withastro/astro/commit/d2960984c59af7b60a3ea472c6c58fb00534a8e6), [`31ec84797`](https://github.com/withastro/astro/commit/31ec8479721a1cd65538ec041458c5ffe8f50ee9), [`5ec0f6ed5`](https://github.com/withastro/astro/commit/5ec0f6ed55b0a14a9663a90a03428345baf126bd), [`dced4a8a2`](https://github.com/withastro/astro/commit/dced4a8a2657887ec569860d9862d20f695dc23a), [`6b156dd3b`](https://github.com/withastro/astro/commit/6b156dd3b467884839a571c53114aadf26fa4b0b)]:
- - astro@1.7.0
-
-## 3.1.1
-
-### Patch Changes
-
-- [#5560](https://github.com/withastro/astro/pull/5560) [`281ea9fc3`](https://github.com/withastro/astro/commit/281ea9fc344dec4348e398696e671f833334045b) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Improve error message when serverEntrypoint does not exist
-
-- Updated dependencies [[`b2f0210c4`](https://github.com/withastro/astro/commit/b2f0210c400a547d3067fdae6d15663b827be3a6), [`02bb0a1cc`](https://github.com/withastro/astro/commit/02bb0a1ccd53e38157eec3a750160731fce64b9c), [`2bd23e454`](https://github.com/withastro/astro/commit/2bd23e454fc9559aa00b9a493772acd69ba9ce6c)]:
- - astro@1.6.15
-
-## 3.1.0
-
-### Minor Changes
-
-- [#5418](https://github.com/withastro/astro/pull/5418) [`aa16b6ceb`](https://github.com/withastro/astro/commit/aa16b6cebc08e0a10a17024d31ee7d2319258a34) Thanks [@jbanety](https://github.com/jbanety)! - Sometimes Astro sends a ReadableStream as a response and it raise an error **TypeError: body is not async iterable.**
-
- I added a function to get a response iterator from different response types (sourced from apollo-client).
-
- With this, node adapter can handle all the Astro response types.
-
-- [#5421](https://github.com/withastro/astro/pull/5421) [`12236dbc0`](https://github.com/withastro/astro/commit/12236dbc06e1e43618b61d180020a67cb31499f8) Thanks [@Scttpr](https://github.com/Scttpr)! - Allow HOST env variable to be provided at runtime
-
-### Patch Changes
-
-- Updated dependencies [[`1ab505855`](https://github.com/withastro/astro/commit/1ab505855f9942659e3d23cb1ac668f04b98889d), [`ff35b4759`](https://github.com/withastro/astro/commit/ff35b4759bd0fecfee6c99bf510c2e32d2574992), [`b22ba1c03`](https://github.com/withastro/astro/commit/b22ba1c03a3e384dad569feb38fa34ecf7ec3b93), [`a9f7ff966`](https://github.com/withastro/astro/commit/a9f7ff96676a40b78e22379edc8eb9ce60a29fb8)]:
- - astro@1.6.10
-
-## 3.0.0
-
-### Major Changes
-
-- [#5290](https://github.com/withastro/astro/pull/5290) [`b2b291d29`](https://github.com/withastro/astro/commit/b2b291d29143703cece0d12c8e74b2e1151d2061) Thanks [@matthewp](https://github.com/matthewp)! - Handle base configuration in adapters
-
- This allows adapters to correctly handle `base` configuration. Internally Astro now matches routes when the URL includes the `base`.
-
- Adapters now also have access to the `removeBase` method which will remove the `base` from a pathname. This is useful to look up files for static assets.
-
-### Patch Changes
-
-- Updated dependencies [[`b2b291d29`](https://github.com/withastro/astro/commit/b2b291d29143703cece0d12c8e74b2e1151d2061), [`97e2b6ad7`](https://github.com/withastro/astro/commit/97e2b6ad7a6fa23e82be28b2f57cdf3f85fab112), [`4af4d8fa0`](https://github.com/withastro/astro/commit/4af4d8fa0035130fbf31c82d72777c3679bc1ca5), [`f6add3924`](https://github.com/withastro/astro/commit/f6add3924d5cd59925a6ea4bf7f2f731709bc893), [`247eb7411`](https://github.com/withastro/astro/commit/247eb7411f429317e5cd7d401a6660ee73641313)]:
- - astro@1.6.4
-
-## 2.0.2
-
-### Patch Changes
-
-- [#5207](https://github.com/withastro/astro/pull/5207) [`c203a5cc2`](https://github.com/withastro/astro/commit/c203a5cc2f12d8c1c3e96d4f08bdd2bb2823e997) Thanks [@BeanWei](https://github.com/BeanWei)! - fix static server path for windows system
-
-## 2.0.1
-
-### Patch Changes
-
-- [#5114](https://github.com/withastro/astro/pull/5114) [`5c0c6e1ac`](https://github.com/withastro/astro/commit/5c0c6e1ac67e6341625f028794986700197334ae) Thanks [@matthewp](https://github.com/matthewp)! - Fixes finding the client folder for serving assets
-
-- [#5111](https://github.com/withastro/astro/pull/5111) [`df4d84610`](https://github.com/withastro/astro/commit/df4d84610ad2b543a37cb3bcac9887bfef0b8994) Thanks [@rishi-raj-jain](https://github.com/rishi-raj-jain)! - fix port in standalone mode
-
-## 2.0.0
-
-### Major Changes
-
-- [#5056](https://github.com/withastro/astro/pull/5056) [`e55af8a23`](https://github.com/withastro/astro/commit/e55af8a23233b6335f45b7a04b9d026990fb616c) Thanks [@matthewp](https://github.com/matthewp)! - # Standalone mode for the Node.js adapter
-
- New in `@astrojs/node` is support for **standalone mode**. With standalone mode you can start your production server without needing to write any server JavaScript yourself. The server starts simply by running the script like so:
-
- ```shell
- node ./dist/server/entry.mjs
- ```
-
- To enable standalone mode, set the new `mode` to `'standalone'` option in your Astro config:
-
- ```js
- import { defineConfig } from 'astro/config';
- import nodejs from '@astrojs/node';
-
- export default defineConfig({
- output: 'server',
- adapter: nodejs({
- mode: 'standalone',
- }),
- });
- ```
-
- See the @astrojs/node documentation to learn all of the options available in standalone mode.
-
- ## Breaking change
-
- This is a semver major change because the new `mode` option is required. Existing @astrojs/node users who are using their own HTTP server framework such as Express can upgrade by setting the `mode` option to `'middleware'` in order to build to a middleware mode, which is the same behavior and API as before.
-
- ```js
- import { defineConfig } from 'astro/config';
- import nodejs from '@astrojs/node';
-
- export default defineConfig({
- output: 'server',
- adapter: nodejs({
- mode: 'middleware',
- }),
- });
- ```
-
-### Minor Changes
-
-- [#5056](https://github.com/withastro/astro/pull/5056) [`e55af8a23`](https://github.com/withastro/astro/commit/e55af8a23233b6335f45b7a04b9d026990fb616c) Thanks [@matthewp](https://github.com/matthewp)! - # Adapter support for `astro preview`
-
- Adapters are now about to support the `astro preview` command via a new integration option. The Node.js adapter `@astrojs/node` is the first of the built-in adapters to gain support for this. What this means is that if you are using `@astrojs/node` you can new preview your SSR app by running:
-
- ```shell
- npm run preview
- ```
-
- ## Adapter API
-
- We will be updating the other first party Astro adapters to support preview over time. Adapters can opt in to this feature by providing the `previewEntrypoint` via the `setAdapter` function in `astro:config:done` hook. The Node.js adapter's code looks like this:
-
- ```diff
- export default function() {
- return {
- name: '@astrojs/node',
- hooks: {
- 'astro:config:done': ({ setAdapter, config }) => {
- setAdapter({
- name: '@astrojs/node',
- serverEntrypoint: '@astrojs/node/server.js',
- + previewEntrypoint: '@astrojs/node/preview.js',
- exports: ['handler'],
- });
-
- // more here
- }
- }
- };
- }
- ```
-
- The `previewEntrypoint` is a module in the adapter's package that is a Node.js script. This script is run when `astro preview` is run and is charged with starting up the built server. See the Node.js implementation in `@astrojs/node` to see how that is implemented.
-
-- [#5056](https://github.com/withastro/astro/pull/5056) [`e55af8a23`](https://github.com/withastro/astro/commit/e55af8a23233b6335f45b7a04b9d026990fb616c) Thanks [@matthewp](https://github.com/matthewp)! - # New build configuration
-
- The ability to customize SSR build configuration more granularly is now available in Astro. You can now customize the output folder for `server` (the server code for SSR), `client` (your client-side JavaScript and assets), and `serverEntry` (the name of the entrypoint server module). Here are the defaults:
-
- ```js
- import { defineConfig } from 'astro/config';
-
- export default defineConfig({
- output: 'server',
- build: {
- server: './dist/server/',
- client: './dist/client/',
- serverEntry: 'entry.mjs',
- },
- });
- ```
-
- These new configuration options are only supported in SSR mode and are ignored when building to SSG (a static site).
-
- ## Integration hook change
-
- The integration hook `astro:build:start` includes a param `buildConfig` which includes all of these same options. You can continue to use this param in Astro 1.x, but it is deprecated in favor of the new `build.config` options. All of the built-in adapters have been updated to the new format. If you have an integration that depends on this param we suggest upgrading to do this instead:
-
- ```js
- export default function myIntegration() {
- return {
- name: 'my-integration',
- hooks: {
- 'astro:config:setup': ({ updateConfig }) => {
- updateConfig({
- build: {
- server: '...',
- },
- });
- },
- },
- };
- }
- ```
-
-## 1.1.0
-
-### Minor Changes
-
-- [#4876](https://github.com/withastro/astro/pull/4876) [`d3091f89e`](https://github.com/withastro/astro/commit/d3091f89e92fcfe1ad48daca74055d54b1c853a3) Thanks [@matthewp](https://github.com/matthewp)! - Adds the Astro.cookies API
-
- `Astro.cookies` is a new API for manipulating cookies in Astro components and API routes.
-
- In Astro components, the new `Astro.cookies` object is a map-like object that allows you to get, set, delete, and check for a cookie's existence (`has`):
-
- ```astro
- ---
- type Prefs = {
- darkMode: boolean;
- };
-
- Astro.cookies.set(
- 'prefs',
- { darkMode: true },
- {
- expires: '1 month',
- },
- );
-
- const prefs = Astro.cookies.get('prefs').json();
- ---
-
-
- ```
-
- Once you've set a cookie with Astro.cookies it will automatically be included in the outgoing response.
-
- This API is also available with the same functionality in API routes:
-
- ```js
- export function post({ cookies }) {
- cookies.set('loggedIn', false);
-
- return new Response(null, {
- status: 302,
- headers: {
- Location: '/login',
- },
- });
- }
- ```
-
- See [the RFC](https://github.com/withastro/rfcs/blob/main/proposals/0025-cookie-management.md) to learn more.
-
-## 1.0.1
-
-### Patch Changes
-
-- [#4558](https://github.com/withastro/astro/pull/4558) [`742966456`](https://github.com/withastro/astro/commit/7429664566f05ecebf6d57906f950627e62e690c) Thanks [@tony-sull](https://github.com/tony-sull)! - Adding the `withastro` keyword to include the adapters on the [Integrations Catalog](https://astro.build/integrations)
-
-## 1.0.0
-
-### Major Changes
-
-- [`04ad44563`](https://github.com/withastro/astro/commit/04ad445632c67bdd60c1704e1e0dcbcaa27b9308) - > Astro v1.0 is out! Read the [official announcement post](https://astro.build/blog/astro-1/).
-
- **No breaking changes**. This package is now officially stable and compatible with `astro@1.0.0`!
-
-### Patch Changes
-
-- Updated dependencies [[`04ad44563`](https://github.com/withastro/astro/commit/04ad445632c67bdd60c1704e1e0dcbcaa27b9308)]:
- - @astrojs/webapi@1.0.0
-
-## 0.2.1
-
-### Patch Changes
-
-- [#4055](https://github.com/withastro/astro/pull/4055) [`44694d8a9`](https://github.com/withastro/astro/commit/44694d8a9084bb1b09840ec8967edd75fa033174) Thanks [@matthewp](https://github.com/matthewp)! - Handle binary data request bodies in the Node adapter
-
-## 0.2.0
-
-### Minor Changes
-
-- [#4015](https://github.com/withastro/astro/pull/4015) [`6fd161d76`](https://github.com/withastro/astro/commit/6fd161d7691cbf9d3ffa4646e46059dfd0940010) Thanks [@matthewp](https://github.com/matthewp)! - New `output` configuration option
-
- This change introduces a new "output target" configuration option (`output`). Setting the output target lets you decide the format of your final build, either:
-
- - `"static"` (default): A static site. Your final build will be a collection of static assets (HTML, CSS, JS) that you can deploy to any static site host.
- - `"server"`: A dynamic server application. Your final build will be an application that will run in a hosted server environment, generating HTML dynamically for different requests.
-
- If `output` is omitted from your config, the default value `"static"` will be used.
-
- When using the `"server"` output target, you must also include a runtime adapter via the `adapter` configuration. An adapter will _adapt_ your final build to run on the deployed platform of your choice (Netlify, Vercel, Node.js, Deno, etc).
-
- To migrate: No action is required for most users. If you currently define an `adapter`, you will need to also add `output: 'server'` to your config file to make it explicit that you are building a server. Here is an example of what that change would look like for someone deploying to Netlify:
-
- ```diff
- import { defineConfig } from 'astro/config';
- import netlify from '@astrojs/netlify/functions';
-
- export default defineConfig({
- adapter: netlify(),
- + output: 'server',
- });
- ```
-
-* [#3973](https://github.com/withastro/astro/pull/3973) [`5a23483ef`](https://github.com/withastro/astro/commit/5a23483efb3ba614b05a00064f84415620605204) Thanks [@matthewp](https://github.com/matthewp)! - Adds support for Astro.clientAddress
-
- The new `Astro.clientAddress` property allows you to get the IP address of the requested user.
-
- ```astro
-
- ```
-
- This property is only available when building for SSR, and only if the adapter you are using supports providing the IP address. If you attempt to access the property in a SSG app it will throw an error.
-
-### Patch Changes
-
-- [#4023](https://github.com/withastro/astro/pull/4023) [`4ca6a0933`](https://github.com/withastro/astro/commit/4ca6a0933d92dd559327dd46a28712d918caebf7) Thanks [@matthewp](https://github.com/matthewp)! - Fixes Node adapter to accept a request body
-
-## 0.1.6
-
-### Patch Changes
-
-- [#3885](https://github.com/withastro/astro/pull/3885) [`bf5d1cc1e`](https://github.com/withastro/astro/commit/bf5d1cc1e71da38a14658c615e9481f2145cc6e7) Thanks [@delucis](https://github.com/delucis)! - Integration README fixes
-
-## 0.1.5
-
-### Patch Changes
-
-- [#3865](https://github.com/withastro/astro/pull/3865) [`1f9e4857`](https://github.com/withastro/astro/commit/1f9e4857ff2b2cb7db89d619618cdf546cd3b3dc) Thanks [@delucis](https://github.com/delucis)! - Small README fixes
-
-* [#3854](https://github.com/withastro/astro/pull/3854) [`b012ee55`](https://github.com/withastro/astro/commit/b012ee55b107dea0730286263b27d83e530fad5d) Thanks [@bholmesdev](https://github.com/bholmesdev)! - [astro add] Support adapters and third party packages
-
-## 0.1.4
-
-### Patch Changes
-
-- [#3817](https://github.com/withastro/astro/pull/3817) [`2f56664f`](https://github.com/withastro/astro/commit/2f56664f85596c6268ecb44bbb9c36cca2ea49c5) Thanks [@ran-dall](https://github.com/ran-dall)! - Fix example on `README.md`
-
-## 0.1.3
-
-### Patch Changes
-
-- [#3677](https://github.com/withastro/astro/pull/3677) [`8045c8ad`](https://github.com/withastro/astro/commit/8045c8ade16fe4306448b7f98a4560ef0557d378) Thanks [@Jutanium](https://github.com/Jutanium)! - Update READMEs
-
-## 0.1.2
-
-### Patch Changes
-
-- Updated dependencies [[`4de53ecc`](https://github.com/withastro/astro/commit/4de53eccef346bed843b491b7ab93987d7d85655)]:
- - @astrojs/webapi@0.12.0
-
-## 0.1.1
-
-### Patch Changes
-
-- [`815d62f1`](https://github.com/withastro/astro/commit/815d62f151a36fef7d09590d4962ca71bda61b32) Thanks [@FredKSchott](https://github.com/FredKSchott)! - no changes.
-
-## 0.1.0
-
-### Minor Changes
-
-- [#2979](https://github.com/withastro/astro/pull/2979) [`9d7a4b59`](https://github.com/withastro/astro/commit/9d7a4b59b53f8cb274266f5036d1cef841750252) Thanks [@FredKSchott](https://github.com/FredKSchott)! - Welcome to the Astro v1.0.0 Beta! Read the [official announcement](https://astro.build/blog/astro-1-beta-release/) for more details.
-
-## 0.0.2
-
-### Patch Changes
-
-- [#2879](https://github.com/withastro/astro/pull/2879) [`80034c6c`](https://github.com/withastro/astro/commit/80034c6cbc89761618847e6df43fd49560a05aa9) Thanks [@matthewp](https://github.com/matthewp)! - Netlify Adapter
-
- This change adds a Netlify adapter that uses Netlify Functions. You can use it like so:
-
- ```js
- import { defineConfig } from 'astro/config';
- import netlify from '@astrojs/netlify/functions';
-
- export default defineConfig({
- adapter: netlify(),
- });
- ```
-
-* [#2873](https://github.com/withastro/astro/pull/2873) [`e4025d1f`](https://github.com/withastro/astro/commit/e4025d1f530310d6ab951109f4f53878a307471a) Thanks [@matthewp](https://github.com/matthewp)! - Improves the build by building to a single file for rendering
-
-## 0.0.2-next.0
-
-### Patch Changes
-
-- [#2873](https://github.com/withastro/astro/pull/2873) [`e4025d1f`](https://github.com/withastro/astro/commit/e4025d1f530310d6ab951109f4f53878a307471a) Thanks [@matthewp](https://github.com/matthewp)! - Improves the build by building to a single file for rendering
diff --git a/packages/integrations/node/README.md b/packages/integrations/node/README.md
index 23ce77c2e859..e02111adc13f 100644
--- a/packages/integrations/node/README.md
+++ b/packages/integrations/node/README.md
@@ -1,38 +1,3 @@
# @astrojs/node
-This adapter allows Astro to deploy your SSR site to Node targets.
-
-## Documentation
-
-Read the [`@astrojs/node` docs][docs]
-
-## Support
-
-- Get help in the [Astro Discord][discord]. Post questions in our `#support` forum, or visit our dedicated `#dev` channel to discuss current development and more!
-
-- Check our [Astro Integration Documentation][astro-integration] for more on integrations.
-
-- Submit bug reports and feature requests as [GitHub issues][issues].
-
-## Contributing
-
-This package is maintained by Astro's Core team. You're welcome to submit an issue or PR! These links will help you get started:
-
-- [Contributor Manual][contributing]
-- [Code of Conduct][coc]
-- [Community Guide][community]
-
-## License
-
-MIT
-
-Copyright (c) 2023–present [Astro][astro]
-
-[astro]: https://astro.build/
-[docs]: https://docs.astro.build/en/guides/integrations-guide/node/
-[contributing]: https://github.com/withastro/astro/blob/main/CONTRIBUTING.md
-[coc]: https://github.com/withastro/.github/blob/main/CODE_OF_CONDUCT.md
-[community]: https://github.com/withastro/.github/blob/main/COMMUNITY_GUIDE.md
-[discord]: https://astro.build/chat/
-[issues]: https://github.com/withastro/astro/issues
-[astro-integration]: https://docs.astro.build/en/guides/integrations-guide/
+The Node adapter package has moved. Please see [the new repository for the Node adapter](https://github.com/withastro/adapters/tree/main/packages/node).
diff --git a/packages/integrations/node/package.json b/packages/integrations/node/package.json
index a5f754275646..656c453933a9 100644
--- a/packages/integrations/node/package.json
+++ b/packages/integrations/node/package.json
@@ -1,55 +1,7 @@
{
"name": "@astrojs/node",
- "description": "Deploy your site to a Node.js server",
- "version": "8.3.3",
- "type": "module",
- "types": "./dist/index.d.ts",
- "author": "withastro",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/withastro/astro.git",
- "directory": "packages/integrations/node"
- },
- "keywords": [
- "withastro",
- "astro-adapter"
- ],
- "bugs": "https://github.com/withastro/astro/issues",
- "homepage": "https://docs.astro.build/en/guides/integrations-guide/node/",
- "exports": {
- ".": "./dist/index.js",
- "./server.js": "./dist/server.js",
- "./preview.js": "./dist/preview.js",
- "./package.json": "./package.json"
- },
- "files": [
- "dist"
- ],
- "scripts": {
- "build": "astro-scripts build \"src/**/*.ts\" && tsc",
- "build:ci": "astro-scripts build \"src/**/*.ts\"",
- "dev": "astro-scripts dev \"src/**/*.ts\"",
- "test": "astro-scripts test \"test/**/*.test.js\""
- },
- "dependencies": {
- "send": "^0.18.0",
- "server-destroy": "^1.0.1"
- },
- "peerDependencies": {
- "astro": "^4.2.0"
- },
- "devDependencies": {
- "@types/node": "^18.17.8",
- "@types/send": "^0.17.4",
- "@types/server-destroy": "^1.0.4",
- "astro": "workspace:*",
- "astro-scripts": "workspace:*",
- "cheerio": "1.0.0",
- "express": "^4.19.2",
- "node-mocks-http": "^1.15.1"
- },
- "publishConfig": {
- "provenance": true
- }
+ "version": "0.0.0",
+ "private": true,
+ "keywords": [],
+ "dont_remove": "This is a placeholder for the sake of the docs smoke test"
}
diff --git a/packages/integrations/node/src/index.ts b/packages/integrations/node/src/index.ts
deleted file mode 100644
index 36d9ee30f488..000000000000
--- a/packages/integrations/node/src/index.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import type { AstroAdapter, AstroIntegration } from 'astro';
-import { AstroError } from 'astro/errors';
-import type { Options, UserOptions } from './types.js';
-
-export function getAdapter(options: Options): AstroAdapter {
- return {
- name: '@astrojs/node',
- serverEntrypoint: '@astrojs/node/server.js',
- previewEntrypoint: '@astrojs/node/preview.js',
- exports: ['handler', 'startServer', 'options'],
- args: options,
- supportedAstroFeatures: {
- hybridOutput: 'stable',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: true,
- isSquooshCompatible: true,
- },
- i18nDomains: 'experimental',
- envGetSecret: 'experimental',
- },
- };
-}
-
-// TODO: remove once we don't use a TLA anymore
-async function shouldExternalizeAstroEnvSetup() {
- try {
- await import('astro/env/setup');
- return false;
- } catch {
- return true;
- }
-}
-
-export default function createIntegration(userOptions: UserOptions): AstroIntegration {
- if (!userOptions?.mode) {
- throw new AstroError(`Setting the 'mode' option is required.`);
- }
-
- let _options: Options;
- return {
- name: '@astrojs/node',
- hooks: {
- 'astro:config:setup': async ({ updateConfig, config }) => {
- updateConfig({
- image: {
- endpoint: config.image.endpoint ?? 'astro/assets/endpoint/node',
- },
- vite: {
- ssr: {
- noExternal: ['@astrojs/node'],
- ...((await shouldExternalizeAstroEnvSetup())
- ? {
- external: ['astro/env/setup'],
- }
- : {}),
- },
- },
- });
- },
- 'astro:config:done': ({ setAdapter, config, logger }) => {
- _options = {
- ...userOptions,
- client: config.build.client?.toString(),
- server: config.build.server?.toString(),
- host: config.server.host,
- port: config.server.port,
- assets: config.build.assets,
- };
- setAdapter(getAdapter(_options));
-
- if (config.output === 'static') {
- logger.warn(
- `\`output: "server"\` or \`output: "hybrid"\` is required to use this adapter.`,
- );
- }
- },
- },
- };
-}
diff --git a/packages/integrations/node/src/log-listening-on.ts b/packages/integrations/node/src/log-listening-on.ts
deleted file mode 100644
index 7e299740c6dc..000000000000
--- a/packages/integrations/node/src/log-listening-on.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import type http from 'node:http';
-import https from 'node:https';
-import type { AddressInfo } from 'node:net';
-import os from 'node:os';
-import type { AstroIntegrationLogger } from 'astro';
-import type { Options } from './types.js';
-
-export async function logListeningOn(
- logger: AstroIntegrationLogger,
- server: http.Server | https.Server,
- options: Pick,
-) {
- await new Promise((resolve) => server.once('listening', resolve));
- const protocol = server instanceof https.Server ? 'https' : 'http';
- // Allow to provide host value at runtime
- const host = getResolvedHostForHttpServer(
- process.env.HOST !== undefined && process.env.HOST !== '' ? process.env.HOST : options.host,
- );
- const { port } = server.address() as AddressInfo;
- const address = getNetworkAddress(protocol, host, port);
-
- if (host === undefined) {
- logger.info(
- `Server listening on \n local: ${address.local[0]} \t\n network: ${address.network[0]}\n`,
- );
- } else {
- logger.info(`Server listening on ${address.local[0]}`);
- }
-}
-
-function getResolvedHostForHttpServer(host: string | boolean) {
- if (host === false) {
- // Use a secure default
- return 'localhost';
- } else if (host === true) {
- // If passed --host in the CLI without arguments
- return undefined; // undefined typically means 0.0.0.0 or :: (listen on all IPs)
- } else {
- return host;
- }
-}
-
-interface NetworkAddressOpt {
- local: string[];
- network: string[];
-}
-
-const wildcardHosts = new Set(['0.0.0.0', '::', '0000:0000:0000:0000:0000:0000:0000:0000']);
-
-// this code from vite https://github.com/vitejs/vite/blob/d09bbd093a4b893e78f0bbff5b17c7cf7821f403/packages/vite/src/node/utils.ts#L892-L914
-export function getNetworkAddress(
- protocol: 'http' | 'https' = 'http',
- hostname: string | undefined,
- port: number,
- base?: string,
-) {
- const NetworkAddress: NetworkAddressOpt = {
- local: [],
- network: [],
- };
- Object.values(os.networkInterfaces())
- .flatMap((nInterface) => nInterface ?? [])
- .filter(
- (detail) =>
- detail &&
- detail.address &&
- (detail.family === 'IPv4' ||
- // @ts-expect-error Node 18.0 - 18.3 returns number
- detail.family === 4),
- )
- .forEach((detail) => {
- let host = detail.address.replace(
- '127.0.0.1',
- hostname === undefined || wildcardHosts.has(hostname) ? 'localhost' : hostname,
- );
- // ipv6 host
- if (host.includes(':')) {
- host = `[${host}]`;
- }
- const url = `${protocol}://${host}:${port}${base ? base : ''}`;
- if (detail.address.includes('127.0.0.1')) {
- NetworkAddress.local.push(url);
- } else {
- NetworkAddress.network.push(url);
- }
- });
- return NetworkAddress;
-}
diff --git a/packages/integrations/node/src/middleware.ts b/packages/integrations/node/src/middleware.ts
deleted file mode 100644
index 5cc4c4a46919..000000000000
--- a/packages/integrations/node/src/middleware.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import type { NodeApp } from 'astro/app/node';
-import { createAppHandler } from './serve-app.js';
-import type { RequestHandler } from './types.js';
-
-/**
- * Creates a middleware that can be used with Express, Connect, etc.
- *
- * Similar to `createAppHandler` but can additionally be placed in the express
- * chain as an error middleware.
- *
- * https://expressjs.com/en/guide/using-middleware.html#middleware.error-handling
- */
-export default function createMiddleware(app: NodeApp): RequestHandler {
- const handler = createAppHandler(app);
- const logger = app.getAdapterLogger();
- // using spread args because express trips up if the function's
- // stringified body includes req, res, next, locals directly
- return async function (...args) {
- // assume normal invocation at first
- const [req, res, next, locals] = args;
- // short circuit if it is an error invocation
- if (req instanceof Error) {
- const error = req;
- if (next) {
- return next(error);
- } else {
- throw error;
- }
- }
- try {
- await handler(req, res, next, locals);
- } catch (err) {
- logger.error(`Could not render ${req.url}`);
- console.error(err);
- if (!res.headersSent) {
- res.writeHead(500, `Server error`);
- res.end();
- }
- }
- };
-}
diff --git a/packages/integrations/node/src/preview.ts b/packages/integrations/node/src/preview.ts
deleted file mode 100644
index 518155c4a845..000000000000
--- a/packages/integrations/node/src/preview.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { fileURLToPath } from 'node:url';
-import type { CreatePreviewServer } from 'astro';
-import { AstroError } from 'astro/errors';
-import { logListeningOn } from './log-listening-on.js';
-import type { createExports } from './server.js';
-import { createServer } from './standalone.js';
-
-type ServerModule = ReturnType;
-type MaybeServerModule = Partial;
-
-const createPreviewServer: CreatePreviewServer = async function (preview) {
- let ssrHandler: ServerModule['handler'];
- let options: ServerModule['options'];
- try {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- const ssrModule: MaybeServerModule = await import(preview.serverEntrypoint.toString());
- if (typeof ssrModule.handler === 'function') {
- ssrHandler = ssrModule.handler;
- options = ssrModule.options!;
- } else {
- throw new AstroError(
- `The server entrypoint doesn't have a handler. Are you sure this is the right file?`,
- );
- }
- } catch (err) {
- if ((err as any).code === 'ERR_MODULE_NOT_FOUND') {
- throw new AstroError(
- `The server entrypoint ${fileURLToPath(
- preview.serverEntrypoint,
- )} does not exist. Have you ran a build yet?`,
- );
- } else {
- throw err;
- }
- }
- const host = preview.host ?? 'localhost';
- const port = preview.port ?? 4321;
- const server = createServer(ssrHandler, host, port);
-
- // If user specified custom headers append a listener
- // to the server to add those headers to response
- if (preview.headers) {
- server.server.addListener('request', (_, res) => {
- if (res.statusCode === 200) {
- for (const [name, value] of Object.entries(preview.headers ?? {})) {
- if (value) res.setHeader(name, value);
- }
- }
- });
- }
-
- logListeningOn(preview.logger, server.server, options);
- await new Promise((resolve, reject) => {
- server.server.once('listening', resolve);
- server.server.once('error', reject);
- server.server.listen(port, host);
- });
- return server;
-};
-
-export { createPreviewServer as default };
diff --git a/packages/integrations/node/src/serve-app.ts b/packages/integrations/node/src/serve-app.ts
deleted file mode 100644
index 72b4e0fd6759..000000000000
--- a/packages/integrations/node/src/serve-app.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { AsyncLocalStorage } from 'node:async_hooks';
-import { NodeApp } from 'astro/app/node';
-import type { RequestHandler } from './types.js';
-
-/**
- * Creates a Node.js http listener for on-demand rendered pages, compatible with http.createServer and Connect middleware.
- * If the next callback is provided, it will be called if the request does not have a matching route.
- * Intended to be used in both standalone and middleware mode.
- */
-export function createAppHandler(app: NodeApp): RequestHandler {
- /**
- * Keep track of the current request path using AsyncLocalStorage.
- * Used to log unhandled rejections with a helpful message.
- */
- const als = new AsyncLocalStorage();
- const logger = app.getAdapterLogger();
- process.on('unhandledRejection', (reason) => {
- const requestUrl = als.getStore();
- logger.error(`Unhandled rejection while rendering ${requestUrl}`);
- console.error(reason);
- });
-
- return async (req, res, next, locals) => {
- let request: Request;
- try {
- request = NodeApp.createRequest(req);
- } catch (err) {
- logger.error(`Could not render ${req.url}`);
- console.error(err);
- res.statusCode = 500;
- res.end('Internal Server Error');
- return;
- }
-
- const routeData = app.match(request);
- if (routeData) {
- const response = await als.run(request.url, () =>
- app.render(request, {
- addCookieHeader: true,
- locals,
- routeData,
- }),
- );
- await NodeApp.writeResponse(response, res);
- } else if (next) {
- return next();
- } else {
- const response = await app.render(req);
- await NodeApp.writeResponse(response, res);
- }
- };
-}
diff --git a/packages/integrations/node/src/serve-static.ts b/packages/integrations/node/src/serve-static.ts
deleted file mode 100644
index 725f7afa68fb..000000000000
--- a/packages/integrations/node/src/serve-static.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import fs from 'node:fs';
-import type { IncomingMessage, ServerResponse } from 'node:http';
-import path from 'node:path';
-import url from 'node:url';
-import type { NodeApp } from 'astro/app/node';
-import send from 'send';
-import type { Options } from './types.js';
-
-// check for a dot followed by a extension made up of lowercase characters
-const isSubresourceRegex = /.+\.[a-z]+$/i;
-
-/**
- * Creates a Node.js http listener for static files and prerendered pages.
- * In standalone mode, the static handler is queried first for the static files.
- * If one matching the request path is not found, it relegates to the SSR handler.
- * Intended to be used only in the standalone mode.
- */
-export function createStaticHandler(app: NodeApp, options: Options) {
- const client = resolveClientDir(options);
- /**
- * @param ssr The SSR handler to be called if the static handler does not find a matching file.
- */
- return (req: IncomingMessage, res: ServerResponse, ssr: () => unknown) => {
- if (req.url) {
- const [urlPath, urlQuery] = req.url.split('?');
- const filePath = path.join(client, app.removeBase(urlPath));
-
- let pathname: string;
- let isDirectory = false;
- try {
- isDirectory = fs.lstatSync(filePath).isDirectory();
- } catch {}
-
- const { trailingSlash = 'ignore' } = options;
-
- const hasSlash = urlPath.endsWith('/');
- switch (trailingSlash) {
- case 'never':
- if (isDirectory && urlPath != '/' && hasSlash) {
- pathname = urlPath.slice(0, -1) + (urlQuery ? '?' + urlQuery : '');
- res.statusCode = 301;
- res.setHeader('Location', pathname);
- return res.end();
- } else pathname = urlPath;
- // intentionally fall through
- case 'ignore':
- {
- if (isDirectory && !hasSlash) {
- pathname = urlPath + '/index.html';
- } else pathname = urlPath;
- }
- break;
- case 'always':
- // trailing slash is not added to "subresources"
- if (!hasSlash && !isSubresourceRegex.test(urlPath)) {
- pathname = urlPath + '/' + (urlQuery ? '?' + urlQuery : '');
- res.statusCode = 301;
- res.setHeader('Location', pathname);
- return res.end();
- } else pathname = urlPath;
- break;
- }
- // app.removeBase sometimes returns a path without a leading slash
- pathname = prependForwardSlash(app.removeBase(pathname));
-
- const stream = send(req, pathname, {
- root: client,
- dotfiles: pathname.startsWith('/.well-known/') ? 'allow' : 'deny',
- });
-
- let forwardError = false;
-
- stream.on('error', (err) => {
- if (forwardError) {
- console.error(err.toString());
- res.writeHead(500);
- res.end('Internal server error');
- return;
- }
- // File not found, forward to the SSR handler
- ssr();
- });
- stream.on('headers', (_res: ServerResponse) => {
- // assets in dist/_astro are hashed and should get the immutable header
- if (pathname.startsWith(`/${options.assets}/`)) {
- // This is the "far future" cache header, used for static files whose name includes their digest hash.
- // 1 year (31,536,000 seconds) is convention.
- // Taken from https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#immutable
- _res.setHeader('Cache-Control', 'public, max-age=31536000, immutable');
- }
- });
- stream.on('file', () => {
- forwardError = true;
- });
- stream.pipe(res);
- } else {
- ssr();
- }
- };
-}
-
-function resolveClientDir(options: Options) {
- const clientURLRaw = new URL(options.client);
- const serverURLRaw = new URL(options.server);
- const rel = path.relative(url.fileURLToPath(serverURLRaw), url.fileURLToPath(clientURLRaw));
-
- // walk up the parent folders until you find the one that is the root of the server entry folder. This is how we find the client folder relatively.
- const serverFolder = path.basename(options.server);
- let serverEntryFolderURL = path.dirname(import.meta.url);
- while (!serverEntryFolderURL.endsWith(serverFolder)) {
- serverEntryFolderURL = path.dirname(serverEntryFolderURL);
- }
- const serverEntryURL = serverEntryFolderURL + '/entry.mjs';
- const clientURL = new URL(appendForwardSlash(rel), serverEntryURL);
- const client = url.fileURLToPath(clientURL);
- return client;
-}
-
-function prependForwardSlash(pth: string) {
- return pth.startsWith('/') ? pth : '/' + pth;
-}
-
-function appendForwardSlash(pth: string) {
- return pth.endsWith('/') ? pth : pth + '/';
-}
diff --git a/packages/integrations/node/src/server.ts b/packages/integrations/node/src/server.ts
deleted file mode 100644
index 1bb27e002f1c..000000000000
--- a/packages/integrations/node/src/server.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import type { SSRManifest } from 'astro';
-import { NodeApp, applyPolyfills } from 'astro/app/node';
-import createMiddleware from './middleware.js';
-import { createStandaloneHandler } from './standalone.js';
-import startServer from './standalone.js';
-import type { Options } from './types.js';
-// This needs to run first because some internals depend on `crypto`
-applyPolyfills();
-
-// Won't throw if the virtual module is not available because it's not supported in
-// the users's astro version or if astro:env is not enabled in the project
-await import('astro/env/setup')
- .then((mod) => mod.setGetEnv((key) => process.env[key]))
- .catch(() => {});
-
-export function createExports(manifest: SSRManifest, options: Options) {
- const app = new NodeApp(manifest);
- options.trailingSlash = manifest.trailingSlash;
- return {
- options: options,
- handler:
- options.mode === 'middleware' ? createMiddleware(app) : createStandaloneHandler(app, options),
- startServer: () => startServer(app, options),
- };
-}
-
-export function start(manifest: SSRManifest, options: Options) {
- if (options.mode !== 'standalone' || process.env.ASTRO_NODE_AUTOSTART === 'disabled') {
- return;
- }
-
- const app = new NodeApp(manifest);
- startServer(app, options);
-}
diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts
deleted file mode 100644
index 76e672d2fc36..000000000000
--- a/packages/integrations/node/src/standalone.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import fs from 'node:fs';
-import http from 'node:http';
-import https from 'node:https';
-import type { PreviewServer } from 'astro';
-import type { NodeApp } from 'astro/app/node';
-import enableDestroy from 'server-destroy';
-import { logListeningOn } from './log-listening-on.js';
-import { createAppHandler } from './serve-app.js';
-import { createStaticHandler } from './serve-static.js';
-import type { Options } from './types.js';
-
-// Used to get Host Value at Runtime
-export const hostOptions = (host: Options['host']): string => {
- if (typeof host === 'boolean') {
- return host ? '0.0.0.0' : 'localhost';
- }
- return host;
-};
-
-export default function standalone(app: NodeApp, options: Options) {
- const port = process.env.PORT ? Number(process.env.PORT) : options.port ?? 8080;
- const host = process.env.HOST ?? hostOptions(options.host);
- const handler = createStandaloneHandler(app, options);
- const server = createServer(handler, host, port);
- server.server.listen(port, host);
- if (process.env.ASTRO_NODE_LOGGING !== 'disabled') {
- logListeningOn(app.getAdapterLogger(), server.server, options);
- }
- return {
- server,
- done: server.closed(),
- };
-}
-
-// also used by server entrypoint
-export function createStandaloneHandler(app: NodeApp, options: Options) {
- const appHandler = createAppHandler(app);
- const staticHandler = createStaticHandler(app, options);
- return (req: http.IncomingMessage, res: http.ServerResponse) => {
- try {
- // validate request path
- decodeURI(req.url!);
- } catch {
- res.writeHead(400);
- res.end('Bad request.');
- return;
- }
- staticHandler(req, res, () => appHandler(req, res));
- };
-}
-
-// also used by preview entrypoint
-export function createServer(listener: http.RequestListener, host: string, port: number) {
- let httpServer: http.Server | https.Server;
-
- if (process.env.SERVER_CERT_PATH && process.env.SERVER_KEY_PATH) {
- httpServer = https.createServer(
- {
- key: fs.readFileSync(process.env.SERVER_KEY_PATH),
- cert: fs.readFileSync(process.env.SERVER_CERT_PATH),
- },
- listener,
- );
- } else {
- httpServer = http.createServer(listener);
- }
- enableDestroy(httpServer);
-
- // Resolves once the server is closed
- const closed = new Promise((resolve, reject) => {
- httpServer.addListener('close', resolve);
- httpServer.addListener('error', reject);
- });
-
- const previewable = {
- host,
- port,
- closed() {
- return closed;
- },
- async stop() {
- await new Promise((resolve, reject) => {
- httpServer.destroy((err) => (err ? reject(err) : resolve(undefined)));
- });
- },
- } satisfies PreviewServer;
-
- return {
- server: httpServer,
- ...previewable,
- };
-}
diff --git a/packages/integrations/node/src/types.ts b/packages/integrations/node/src/types.ts
deleted file mode 100644
index 010053de58f5..000000000000
--- a/packages/integrations/node/src/types.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import type { IncomingMessage, ServerResponse } from 'node:http';
-import type { SSRManifest } from 'astro';
-import type { NodeApp } from 'astro/app/node';
-
-export interface UserOptions {
- /**
- * Specifies the mode that the adapter builds to.
- *
- * - 'middleware' - Build to middleware, to be used within another Node.js server, such as Express.
- * - 'standalone' - Build to a standalone server. The server starts up just by running the built script.
- */
- mode: 'middleware' | 'standalone';
-}
-
-export interface Options extends UserOptions {
- host: string | boolean;
- port: number;
- server: string;
- client: string;
- assets: string;
- trailingSlash?: SSRManifest['trailingSlash'];
-}
-
-export interface CreateServerOptions {
- app: NodeApp;
- assets: string;
- client: URL;
- port: number;
- host: string | undefined;
- removeBase: (pathname: string) => string;
-}
-
-export type RequestHandler = (...args: RequestHandlerParams) => void | Promise;
-export type RequestHandlerParams = [
- req: IncomingMessage,
- res: ServerResponse,
- next?: (err?: unknown) => void,
- locals?: object,
-];
diff --git a/packages/integrations/node/test/api-route.test.js b/packages/integrations/node/test/api-route.test.js
deleted file mode 100644
index 804a5ccf4797..000000000000
--- a/packages/integrations/node/test/api-route.test.js
+++ /dev/null
@@ -1,153 +0,0 @@
-import * as assert from 'node:assert/strict';
-import crypto from 'node:crypto';
-import { after, before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { createRequestAndResponse, loadFixture } from './test-utils.js';
-
-describe('API routes', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- /** @type {import('astro/src/@types/astro.js').PreviewServer} */
- let previewServer;
- /** @type {URL} */
- let baseUri;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/api-route/',
- output: 'server',
- adapter: nodejs({ mode: 'middleware' }),
- });
- await fixture.build();
- previewServer = await fixture.preview();
- baseUri = new URL(`http://${previewServer.host ?? 'localhost'}:${previewServer.port}/`);
- });
-
- after(() => previewServer.stop());
-
- it('Can get the request body', async () => {
- const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
- let { req, res, done } = createRequestAndResponse({
- method: 'POST',
- url: '/recipes',
- });
-
- req.once('async_iterator', () => {
- req.send(JSON.stringify({ id: 2 }));
- });
-
- handler(req, res);
-
- let [buffer] = await done;
-
- let json = JSON.parse(buffer.toString('utf-8'));
-
- assert.equal(json.length, 1);
-
- assert.equal(json[0].name, 'Broccoli Soup');
- });
-
- it('Can get binary data', async () => {
- const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
-
- let { req, res, done } = createRequestAndResponse({
- method: 'POST',
- url: '/binary',
- });
-
- req.once('async_iterator', () => {
- req.send(Buffer.from(new Uint8Array([1, 2, 3, 4, 5])));
- });
-
- handler(req, res);
-
- let [out] = await done;
- let arr = Array.from(new Uint8Array(out.buffer));
- assert.deepEqual(arr, [5, 4, 3, 2, 1]);
- });
-
- it('Can post large binary data', async () => {
- const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
-
- let { req, res, done } = createRequestAndResponse({
- method: 'POST',
- url: '/hash',
- });
-
- handler(req, res);
-
- let expectedDigest = null;
- req.once('async_iterator', () => {
- // Send 256MB of garbage data in 256KB chunks. This should be fast (< 1sec).
- let remainingBytes = 256 * 1024 * 1024;
- const chunkSize = 256 * 1024;
-
- const hash = crypto.createHash('sha256');
- while (remainingBytes > 0) {
- const size = Math.min(remainingBytes, chunkSize);
- const chunk = Buffer.alloc(size, Math.floor(Math.random() * 256));
- hash.update(chunk);
- req.emit('data', chunk);
- remainingBytes -= size;
- }
-
- req.emit('end');
- expectedDigest = hash.digest();
- });
-
- let [out] = await done;
- assert.deepEqual(new Uint8Array(out.buffer), new Uint8Array(expectedDigest));
- });
-
- it('Can bail on streaming', async () => {
- const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
- let { req, res, done } = createRequestAndResponse({
- url: '/streaming',
- });
-
- let locals = { cancelledByTheServer: false };
-
- handler(req, res, () => {}, locals);
- req.send();
-
- await new Promise((resolve) => setTimeout(resolve, 500));
- res.emit('close');
-
- await done;
-
- assert.deepEqual(locals, { cancelledByTheServer: true });
- });
-
- it('Can respond with SSR redirect', async () => {
- const controller = new AbortController();
- setTimeout(() => controller.abort(), 1000);
- const response = await fetch(new URL('/redirect', baseUri), {
- redirect: 'manual',
- signal: controller.signal,
- });
- assert.equal(response.status, 302);
- assert.equal(response.headers.get('location'), '/destination');
- });
-
- it('Can respond with Astro.redirect', async () => {
- const controller = new AbortController();
- setTimeout(() => controller.abort(), 1000);
- const response = await fetch(new URL('/astro-redirect', baseUri), {
- redirect: 'manual',
- signal: controller.signal,
- });
- assert.equal(response.status, 303);
- assert.equal(response.headers.get('location'), '/destination');
- });
-
- it('Can respond with Response.redirect', async () => {
- const controller = new AbortController();
- setTimeout(() => controller.abort(), 1000);
- const response = await fetch(new URL('/response-redirect', baseUri), {
- redirect: 'manual',
- signal: controller.signal,
- });
- assert.equal(response.status, 307);
- assert.equal(response.headers.get('location'), String(new URL('/destination', baseUri)));
- });
-});
diff --git a/packages/integrations/node/test/assets.test.js b/packages/integrations/node/test/assets.test.js
deleted file mode 100644
index 0b71f94cd6ce..000000000000
--- a/packages/integrations/node/test/assets.test.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-describe('Assets', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devPreview;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/image/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- vite: {
- build: {
- assetsInlineLimit: 0,
- },
- },
- });
- await fixture.build();
- devPreview = await fixture.preview();
- });
-
- after(async () => {
- await devPreview.stop();
- });
-
- it('Assets within the _astro folder should be given immutable headers', async () => {
- let response = await fixture.fetch('/text-file');
- let cacheControl = response.headers.get('cache-control');
- assert.equal(cacheControl, null);
- const html = await response.text();
- const $ = cheerio.load(html);
-
- // Fetch the asset
- const fileURL = $('a').attr('href');
- response = await fixture.fetch(fileURL);
- cacheControl = response.headers.get('cache-control');
- assert.equal(cacheControl, 'public, max-age=31536000, immutable');
- });
-});
diff --git a/packages/integrations/node/test/bad-urls.test.js b/packages/integrations/node/test/bad-urls.test.js
deleted file mode 100644
index 9323516e83e7..000000000000
--- a/packages/integrations/node/test/bad-urls.test.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-describe('Bad URLs', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devPreview;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/bad-urls/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- devPreview = await fixture.preview();
- });
-
- after(async () => {
- await devPreview.stop();
- });
-
- it('Does not crash on bad urls', async () => {
- const weirdURLs = [
- '/\\xfs.bxss.me%3Fastrojs.com/hello-world',
- '/asdasdasd@ax_zX=.zxczas🐥%/úadasd000%/',
- '%',
- '%80',
- '%c',
- '%c0%80',
- '%20foobar%',
- ];
-
- const statusCodes = [400, 404, 500];
- for (const weirdUrl of weirdURLs) {
- const fetchResult = await fixture.fetch(weirdUrl);
- assert.equal(
- statusCodes.includes(fetchResult.status),
- true,
- `${weirdUrl} returned something else than 400, 404, or 500`,
- );
- }
- const stillWork = await fixture.fetch('/');
- const text = await stillWork.text();
- assert.equal(text, 'Hello!');
- });
-});
diff --git a/packages/integrations/node/test/encoded.test.js b/packages/integrations/node/test/encoded.test.js
deleted file mode 100644
index edc6ae78b037..000000000000
--- a/packages/integrations/node/test/encoded.test.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { createRequestAndResponse, loadFixture } from './test-utils.js';
-
-describe('Encoded Pathname', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/encoded/',
- output: 'server',
- adapter: nodejs({ mode: 'middleware' }),
- });
- await fixture.build();
- });
-
- it('Can get an Astro file', async () => {
- const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- url: '/什么',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('什么'), true);
- });
-
- it('Can get a Markdown file', async () => {
- const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs');
-
- let { req, res, text } = createRequestAndResponse({
- url: '/blog/什么',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('什么'), true);
- });
-});
diff --git a/packages/integrations/node/test/errors.test.js b/packages/integrations/node/test/errors.test.js
deleted file mode 100644
index 802fa6e25623..000000000000
--- a/packages/integrations/node/test/errors.test.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import { fileURLToPath } from 'node:url';
-import { Worker } from 'node:worker_threads';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-describe('Errors', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/errors/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- });
- let devPreview;
-
- before(async () => {
- // The two tests that need the server to run are skipped
- // devPreview = await fixture.preview();
- });
- after(async () => {
- await devPreview?.stop();
- });
-
- it('stays alive after offshoot promise rejections', async () => {
- // this test needs to happen in a worker because node test runner adds a listener for unhandled rejections in the main thread
- const url = new URL('./fixtures/errors/dist/server/entry.mjs', import.meta.url);
- const worker = new Worker(fileURLToPath(url), {
- type: 'module',
- env: { ASTRO_NODE_LOGGING: 'enabled' },
- });
-
- await new Promise((resolve, reject) => {
- worker.stdout.on('data', (data) => {
- setTimeout(() => reject('Server took too long to start'), 1000);
- if (data.toString().includes('Server listening on http://localhost:4321')) resolve();
- });
- });
-
- await fetch('http://localhost:4321/offshoot-promise-rejection');
-
- // if there was a crash, it becomes an error here
- await worker.terminate();
- });
-
- it(
- 'rejected promise in template',
- { skip: true, todo: 'Review the response from the in-stream' },
- async () => {
- const res = await fixture.fetch('/in-stream');
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal($('p').text().trim(), 'Internal server error');
- },
- );
-
- it(
- 'generator that throws called in template',
- { skip: true, todo: 'Review the response from the generator' },
- async () => {
- const result = ['Astro
1', 'Internal server error'];
-
- /** @type {Response} */
- const res = await fixture.fetch('/generator');
- const reader = res.body.getReader();
- const decoder = new TextDecoder();
- const chunk1 = await reader.read();
- const chunk2 = await reader.read();
- const chunk3 = await reader.read();
- assert.equal(chunk1.done, false);
- console.log(chunk1);
- console.log(chunk2);
- console.log(chunk3);
- if (chunk2.done) {
- assert.equal(decoder.decode(chunk1.value), result.join(''));
- } else if (chunk3.done) {
- assert.equal(decoder.decode(chunk1.value), result[0]);
- assert.equal(decoder.decode(chunk2.value), result[1]);
- } else {
- throw new Error('The response should take at most 2 chunks.');
- }
- },
- );
-});
diff --git a/packages/integrations/node/test/fixtures/api-route/package.json b/packages/integrations/node/test/fixtures/api-route/package.json
deleted file mode 100644
index c4d9bdd2b4eb..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-api-route",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro b/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro
deleted file mode 100644
index 65a8765e811c..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro
+++ /dev/null
@@ -1,3 +0,0 @@
----
-return Astro.redirect('/destination', 303);
----
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts
deleted file mode 100644
index b1c7ce26368c..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-
-export async function POST({ request }: { request: Request }) {
- let body = await request.arrayBuffer();
- let data = new Uint8Array(body);
- let r = data.reverse();
- return new Response(r, {
- headers: {
- 'Content-Type': 'application/octet-stream'
- }
- });
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts
deleted file mode 100644
index 3f1b236de76b..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import crypto from 'node:crypto';
-
-export async function POST({ request }: { request: Request }) {
- const hash = crypto.createHash('sha256');
-
- const iterable = request.body as unknown as AsyncIterable;
- for await (const chunk of iterable) {
- hash.update(chunk);
- }
-
- return new Response(hash.digest(), {
- headers: {
- 'Content-Type': 'application/octet-stream'
- }
- });
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js b/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js
deleted file mode 100644
index 7297b9643c67..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-export async function POST({ request }) {
- let body = await request.json();
- const recipes = [
- {
- id: 1,
- name: 'Potato Soup'
- },
- {
- id: 2,
- name: 'Broccoli Soup'
- }
- ];
-
- let out = recipes.filter(r => {
- return r.id === body.id;
- });
-
- return new Response(JSON.stringify(out), {
- headers: {
- 'Content-Type': 'application/json'
- }
- });
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts
deleted file mode 100644
index baf22c93ec3a..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { APIContext } from 'astro';
-
-export async function GET({ redirect }: APIContext) {
- return redirect('/destination');
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts
deleted file mode 100644
index 1dfa8bb3c69b..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { APIContext } from 'astro';
-
-export async function GET({ url: requestUrl }: APIContext) {
- return Response.redirect(new URL('/destination', requestUrl), 307);
-}
diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts
deleted file mode 100644
index 9ecb884bf89b..000000000000
--- a/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-export const GET = ({ locals }) => {
- let sentChunks = 0;
-
- const readableStream = new ReadableStream({
- async pull(controller) {
- if (sentChunks === 3) return controller.close();
- else sentChunks++;
-
- await new Promise(resolve => setTimeout(resolve, 1000));
- controller.enqueue(new TextEncoder().encode('hello\n'));
- },
- cancel() {
- locals.cancelledByTheServer = true;
- }
- });
-
- return new Response(readableStream, {
- headers: {
- "Content-Type": "text/event-stream"
- }
- });
-}
diff --git a/packages/integrations/node/test/fixtures/bad-urls/package.json b/packages/integrations/node/test/fixtures/bad-urls/package.json
deleted file mode 100644
index 73c1196632e1..000000000000
--- a/packages/integrations/node/test/fixtures/bad-urls/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-badurls",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro b/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro
deleted file mode 100644
index 10ddd6d257e0..000000000000
--- a/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro
+++ /dev/null
@@ -1 +0,0 @@
-Hello!
diff --git a/packages/integrations/node/test/fixtures/encoded/package.json b/packages/integrations/node/test/fixtures/encoded/package.json
deleted file mode 100644
index 350077973049..000000000000
--- a/packages/integrations/node/test/fixtures/encoded/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-encoded",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git "a/packages/integrations/node/test/fixtures/encoded/src/pages/blog/\344\273\200\344\271\210.md" "b/packages/integrations/node/test/fixtures/encoded/src/pages/blog/\344\273\200\344\271\210.md"
deleted file mode 100644
index 2820cf17ee2d..000000000000
--- "a/packages/integrations/node/test/fixtures/encoded/src/pages/blog/\344\273\200\344\271\210.md"
+++ /dev/null
@@ -1 +0,0 @@
-# 什么
diff --git "a/packages/integrations/node/test/fixtures/encoded/src/pages/\344\273\200\344\271\210.astro" "b/packages/integrations/node/test/fixtures/encoded/src/pages/\344\273\200\344\271\210.astro"
deleted file mode 100644
index c8473f594ec0..000000000000
--- "a/packages/integrations/node/test/fixtures/encoded/src/pages/\344\273\200\344\271\210.astro"
+++ /dev/null
@@ -1 +0,0 @@
-什么
diff --git a/packages/integrations/node/test/fixtures/errors/package.json b/packages/integrations/node/test/fixtures/errors/package.json
deleted file mode 100644
index e9fcfe654cf5..000000000000
--- a/packages/integrations/node/test/fixtures/errors/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-errors",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro b/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro
deleted file mode 100644
index 65b8ae62c15d..000000000000
--- a/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro
+++ /dev/null
@@ -1,11 +0,0 @@
----
-function * generator () {
- yield 1
- throw Error('ohnoes')
-}
----
-Astro
-{generator()}
-
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro b/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro
deleted file mode 100644
index b7ee6b4efa4d..000000000000
--- a/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro
+++ /dev/null
@@ -1,13 +0,0 @@
----
----
-
-
- One
-
-
- One
-
- {Promise.reject('Error in the stream')}
-
-
-
diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro b/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro
deleted file mode 100644
index be702d5ef730..000000000000
--- a/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro
+++ /dev/null
@@ -1,2 +0,0 @@
-{new Promise(async _ => (await {}, Astro.props.undefined.alsoAPropertyOfUndefined))}
-{Astro.props.undefined.propertyOfUndefined}
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/package.json b/packages/integrations/node/test/fixtures/headers/package.json
deleted file mode 100644
index 6a0858521083..000000000000
--- a/packages/integrations/node/test/fixtures/headers/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-headers",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro
deleted file mode 100644
index a9ff193df848..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro
+++ /dev/null
@@ -1,5 +0,0 @@
----
-Astro.cookies.set('from1', 'astro1');
-Astro.cookies.set('from2', 'astro2');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro
deleted file mode 100644
index c469fd66f5a5..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-Astro.cookies.set('from1', 'astro1');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro
deleted file mode 100644
index 91244e838bf9..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro
+++ /dev/null
@@ -1,7 +0,0 @@
----
-Astro.response.headers.append('set-cookie', 'from1=response1');
-Astro.response.headers.append('set-cookie', 'from2=response2');
-Astro.cookies.set('from3', 'astro1');
-Astro.cookies.set('from4', 'astro2');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro
deleted file mode 100644
index 97719dfa9eb3..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro
+++ /dev/null
@@ -1,5 +0,0 @@
----
-Astro.response.headers.append('set-cookie', 'from1=response1');
-Astro.cookies.set('from1', 'astro1');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro
deleted file mode 100644
index 133cbd423172..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro
+++ /dev/null
@@ -1,5 +0,0 @@
----
-Astro.response.headers.append('set-cookie', 'from1=value1');
-Astro.response.headers.append('set-cookie', 'from2=value2');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro
deleted file mode 100644
index dc76082db36c..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-Astro.response.headers.append('set-cookie', 'from1=value1');
----
-hello world
\ No newline at end of file
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts
deleted file mode 100644
index aaae88e59aca..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { APIContext } from 'astro';
-
-export async function GET({ request, cookies }: APIContext) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- cookies.set('from1', 'astro1');
- cookies.set('from2', 'astro2');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts
deleted file mode 100644
index 03e74c604969..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { APIContext } from 'astro';
-
-export async function GET({ request, cookies }: APIContext) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- cookies.set('from1', 'astro1');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts
deleted file mode 100644
index 36906da3a090..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import type { APIContext } from 'astro';
-
-export async function GET({ request, cookies }: APIContext) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('set-cookie', 'from1=response1');
- headers.append('set-cookie', 'from2=response2');
- cookies.set('from3', 'astro1');
- cookies.set('from4', 'astro2');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts
deleted file mode 100644
index 3c1fc477531d..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { APIContext } from 'astro';
-
-export async function GET({ request, cookies }: APIContext) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('set-cookie', 'from1=response1');
- cookies.set('from1', 'astro1');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts
deleted file mode 100644
index fb7c30cbc543..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('x-SINGLE', 'single');
- headers.append('X-triple', 'one');
- headers.append('x-Triple', 'two');
- headers.append('x-TRIPLE', 'three');
- headers.append('SET-cookie', 'hello1=world1');
- headers.append('Set-Cookie', 'hello2=world2');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts
deleted file mode 100644
index d974737ee530..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('Set-Cookie', 'hello1=world1');
- headers.append('SET-COOKIE', 'hello2=world2');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts
deleted file mode 100644
index f543ae062e4f..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('Set-Cookie', 'hello1=world1');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts
deleted file mode 100644
index b8a9e122e8d1..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- const headers = new Headers();
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts
deleted file mode 100644
index 72f7af07158f..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- return new Response('hello world', { headers: undefined });
-}
diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts
deleted file mode 100644
index 9c6bcacaa1e3..000000000000
--- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export async function GET({ request }: { request: Request }) {
- const headers = new Headers();
- headers.append('content-type', 'text/plain;charset=utf-8');
- headers.append('X-HELLO', 'world');
- return new Response('hello world', { headers });
-}
diff --git a/packages/integrations/node/test/fixtures/image/package.json b/packages/integrations/node/test/fixtures/image/package.json
deleted file mode 100644
index 94066576deab..000000000000
--- a/packages/integrations/node/test/fixtures/image/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "name": "@test/nodejs-image",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- },
- "scripts": {
- "build": "astro build",
- "preview": "astro preview"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/image/src/assets/file.txt b/packages/integrations/node/test/fixtures/image/src/assets/file.txt
deleted file mode 100644
index e9ea42a12b95..000000000000
--- a/packages/integrations/node/test/fixtures/image/src/assets/file.txt
+++ /dev/null
@@ -1 +0,0 @@
-this is a text file
diff --git a/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png b/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png
deleted file mode 100644
index a09d7f894bbb..000000000000
Binary files a/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png and /dev/null differ
diff --git a/packages/integrations/node/test/fixtures/image/src/pages/index.astro b/packages/integrations/node/test/fixtures/image/src/pages/index.astro
deleted file mode 100644
index 474a2f0c950a..000000000000
--- a/packages/integrations/node/test/fixtures/image/src/pages/index.astro
+++ /dev/null
@@ -1,6 +0,0 @@
----
-import { Image } from "astro:assets";
-import penguin from "../assets/some_penguin.png";
----
-
-
diff --git a/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro b/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro
deleted file mode 100644
index 893250360509..000000000000
--- a/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro
+++ /dev/null
@@ -1,14 +0,0 @@
----
-import txt from '../assets/file.txt?url';
----
-
-
- Testing
-
-
- Testing
-
- Download text file
-
-
-
diff --git a/packages/integrations/node/test/fixtures/locals/package.json b/packages/integrations/node/test/fixtures/locals/package.json
deleted file mode 100644
index 35be7dc01ef2..000000000000
--- a/packages/integrations/node/test/fixtures/locals/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/locals",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/locals/src/middleware.ts b/packages/integrations/node/test/fixtures/locals/src/middleware.ts
deleted file mode 100644
index e349ca41d827..000000000000
--- a/packages/integrations/node/test/fixtures/locals/src/middleware.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { defineMiddleware } from 'astro:middleware';
-
-export const onRequest = defineMiddleware(({ url, locals }, next) => {
- if (url.pathname === "/from-astro-middleware") locals.foo = "baz";
- return next();
-})
diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/api.js b/packages/integrations/node/test/fixtures/locals/src/pages/api.js
deleted file mode 100644
index 3c279e37bdba..000000000000
--- a/packages/integrations/node/test/fixtures/locals/src/pages/api.js
+++ /dev/null
@@ -1,10 +0,0 @@
-
-export async function POST({ locals }) {
- const out = { ...locals };
-
- return new Response(JSON.stringify(out), {
- headers: {
- 'Content-Type': 'application/json'
- }
- });
-}
diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro b/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro
deleted file mode 100644
index 224a875ecc8f..000000000000
--- a/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-const { foo } = Astro.locals;
----
-{foo}
diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro b/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro
deleted file mode 100644
index 224a875ecc8f..000000000000
--- a/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-const { foo } = Astro.locals;
----
-{foo}
diff --git a/packages/integrations/node/test/fixtures/node-middleware/package.json b/packages/integrations/node/test/fixtures/node-middleware/package.json
deleted file mode 100644
index 7a49010f1ffd..000000000000
--- a/packages/integrations/node/test/fixtures/node-middleware/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/node-middleware",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro b/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro
deleted file mode 100644
index 79f4944bc905..000000000000
--- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro
+++ /dev/null
@@ -1,13 +0,0 @@
----
----
-
-
-
-
-
-
-
- 404
-
-Page does not exist
-
diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro b/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro
deleted file mode 100644
index 28ff7d223b36..000000000000
--- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro
+++ /dev/null
@@ -1,11 +0,0 @@
----
----
-
-
-node-middleware
-
-
-1
-
-
diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts b/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts
deleted file mode 100644
index 423db341a46e..000000000000
--- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export async function GET() {
- let number = Math.random();
- return Response.json({
- number,
- message: `Here's a random number: ${number}`,
- });
-}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/package.json b/packages/integrations/node/test/fixtures/prerender-404-500/package.json
deleted file mode 100644
index f962fe991e3f..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "@test/nodejs-prerender-404-500",
- "version": "0.0.0",
- "private": true,
- "type": "module",
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css b/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css
deleted file mode 100644
index 5f331948a60d..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
- background-color: ivory;
-}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts b/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts
deleted file mode 100644
index 1795c26b07af..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// This module is only used by the prerendered 404.astro.
-// It exhibits different behavior if it's called more than once,
-// which is detected by a test and interpreted as a failure.
-
-let usedOnce = false
-let dynamicMessage = "Page was not prerendered"
-
-export default function () {
- if (usedOnce === false) {
- usedOnce = true
- return "Page does not exist"
- }
-
- dynamicMessage += "+"
-
- return dynamicMessage
-}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts b/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts
deleted file mode 100644
index 8f8024a6083b..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// This module is only used by the prerendered 500.astro.
-// It exhibits different behavior if it's called more than once,
-// which is detected by a test and interpreted as a failure.
-
-let usedOnce = false
-let dynamicMessage = "Page was not prerendered"
-
-export default function () {
- if (usedOnce === false) {
- usedOnce = true
- return "Something went wrong"
- }
-
- dynamicMessage += "+"
-
- return dynamicMessage
-}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro
deleted file mode 100644
index 37fd1c1d39c4..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro
+++ /dev/null
@@ -1,5 +0,0 @@
----
-import message from "../nondeterminism-404"
-export const prerender = true;
----
-{message()}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro
deleted file mode 100644
index ef91ad0ffa91..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro
+++ /dev/null
@@ -1,6 +0,0 @@
----
-import "../external-stylesheet.css"
-import message from "../nondeterminism-500"
-export const prerender = true
----
-{message()}
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro
deleted file mode 100644
index 99d103567db2..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-return new Response(null, { status: 500 })
----
-This html will not be served
diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro
deleted file mode 100644
index af6bad2fbc21..000000000000
--- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-export const prerender = true;
----
-
-
-
- Static Page
-
-
- Hello world!
-
-
diff --git a/packages/integrations/node/test/fixtures/prerender/package.json b/packages/integrations/node/test/fixtures/prerender/package.json
deleted file mode 100644
index 0ae3211abca9..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-prerender",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/prerender/src/middleware.ts b/packages/integrations/node/test/fixtures/prerender/src/middleware.ts
deleted file mode 100644
index 13d619d7864e..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/src/middleware.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { shared } from './shared';
-export const onRequest = (ctx, next) => {
- ctx.locals = {
- name: shared,
- };
- return next();
-};
diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro
deleted file mode 100644
index f3a26721d7d3..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro
+++ /dev/null
@@ -1,10 +0,0 @@
----
----
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro
deleted file mode 100644
index e29377d88843..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro
+++ /dev/null
@@ -1,15 +0,0 @@
----
-import { shared} from "../shared";
-export const prerender = false;
-
-const shared = Astro.locals.name;
----
-
-
-
- One
-
-
-{shared}
-
-
diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro
deleted file mode 100644
index c0e5d07aa437..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro
+++ /dev/null
@@ -1,11 +0,0 @@
----
-export const prerender = import.meta.env.PRERENDER;
----
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/node/test/fixtures/prerender/src/shared.ts b/packages/integrations/node/test/fixtures/prerender/src/shared.ts
deleted file mode 100644
index cd35843de7a2..000000000000
--- a/packages/integrations/node/test/fixtures/prerender/src/shared.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const shared = 'shared';
diff --git a/packages/integrations/node/test/fixtures/preview-headers/package.json b/packages/integrations/node/test/fixtures/preview-headers/package.json
deleted file mode 100644
index ec2d5e3cfd18..000000000000
--- a/packages/integrations/node/test/fixtures/preview-headers/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/nodejs-preview-headers",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro b/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro
deleted file mode 100644
index 10ddd6d257e0..000000000000
--- a/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro
+++ /dev/null
@@ -1 +0,0 @@
-Hello!
diff --git a/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs b/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs
deleted file mode 100644
index 7ee28f21340c..000000000000
--- a/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs
+++ /dev/null
@@ -1,8 +0,0 @@
-import node from '@astrojs/node'
-
-export default {
- base: '/some-base',
- output: 'hybrid',
- trailingSlash: 'never',
- adapter: node({ mode: 'standalone' })
-};
diff --git a/packages/integrations/node/test/fixtures/trailing-slash/package.json b/packages/integrations/node/test/fixtures/trailing-slash/package.json
deleted file mode 100644
index 50b7b7201b9c..000000000000
--- a/packages/integrations/node/test/fixtures/trailing-slash/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/node-trailingslash",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/trailing-slash/public/one.css b/packages/integrations/node/test/fixtures/trailing-slash/public/one.css
deleted file mode 100644
index 5ce768ca55bb..000000000000
--- a/packages/integrations/node/test/fixtures/trailing-slash/public/one.css
+++ /dev/null
@@ -1 +0,0 @@
-h1 { color: red; }
diff --git a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro b/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro
deleted file mode 100644
index a4c415519a08..000000000000
--- a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Index
-
-
- Index
-
-
diff --git a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro b/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro
deleted file mode 100644
index aa370d18df54..000000000000
--- a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro
+++ /dev/null
@@ -1,11 +0,0 @@
----
-export const prerender = true;
----
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/node/test/fixtures/url/package.json b/packages/integrations/node/test/fixtures/url/package.json
deleted file mode 100644
index f349011fd36e..000000000000
--- a/packages/integrations/node/test/fixtures/url/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/url",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/url/src/pages/index.astro b/packages/integrations/node/test/fixtures/url/src/pages/index.astro
deleted file mode 100644
index 003429f5209c..000000000000
--- a/packages/integrations/node/test/fixtures/url/src/pages/index.astro
+++ /dev/null
@@ -1,9 +0,0 @@
----
----
-
-
-
- URL
-
- {Astro.url.href}
-
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/package.json b/packages/integrations/node/test/fixtures/well-known-locations/package.json
deleted file mode 100644
index f018b6ec7ca5..000000000000
--- a/packages/integrations/node/test/fixtures/well-known-locations/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/well-known-locations",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "astro": "workspace:*",
- "@astrojs/node": "workspace:*"
- }
-}
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json b/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json
deleted file mode 100644
index 0967ef424bce..000000000000
--- a/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association b/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association
deleted file mode 100644
index daae260f1948..000000000000
--- a/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "applinks": {}
-}
diff --git a/packages/integrations/node/test/headers.test.js b/packages/integrations/node/test/headers.test.js
deleted file mode 100644
index 00b1766c799d..000000000000
--- a/packages/integrations/node/test/headers.test.js
+++ /dev/null
@@ -1,148 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { createRequestAndResponse, loadFixture } from './test-utils.js';
-
-describe('Node Adapter Headers', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/headers/',
- output: 'server',
- adapter: nodejs({ mode: 'middleware' }),
- });
- await fixture.build();
- });
-
- it('Endpoint Simple Headers', async () => {
- await runTest('/endpoints/simple', {
- 'content-type': 'text/plain;charset=utf-8',
- 'x-hello': 'world',
- });
- });
-
- it('Endpoint Astro Single Cookie Header', async () => {
- await runTest('/endpoints/astro-cookies-single', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': 'from1=astro1',
- });
- });
-
- it('Endpoint Astro Multi Cookie Header', async () => {
- await runTest('/endpoints/astro-cookies-multi', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': ['from1=astro1', 'from2=astro2'],
- });
- });
-
- it('Endpoint Response Single Cookie Header', async () => {
- await runTest('/endpoints/response-cookies-single', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': 'hello1=world1',
- });
- });
-
- it('Endpoint Response Multi Cookie Header', async () => {
- await runTest('/endpoints/response-cookies-multi', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': ['hello1=world1', 'hello2=world2'],
- });
- });
-
- it('Endpoint Complex Headers Kitchen Sink', async () => {
- await runTest('/endpoints/kitchen-sink', {
- 'content-type': 'text/plain;charset=utf-8',
- 'x-single': 'single',
- 'x-triple': 'one, two, three',
- 'set-cookie': ['hello1=world1', 'hello2=world2'],
- });
- });
-
- it('Endpoint Astro and Response Single Cookie Header', async () => {
- await runTest('/endpoints/astro-response-cookie-single', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': ['from1=response1', 'from1=astro1'],
- });
- });
-
- it('Endpoint Astro and Response Multi Cookie Header', async () => {
- await runTest('/endpoints/astro-response-cookie-multi', {
- 'content-type': 'text/plain;charset=utf-8',
- 'set-cookie': ['from1=response1', 'from2=response2', 'from3=astro1', 'from4=astro2'],
- });
- });
-
- it('Endpoint Response Empty Headers Object', async () => {
- await runTest('/endpoints/response-empty-headers-object', {
- 'content-type': 'text/plain;charset=UTF-8',
- });
- });
-
- it('Endpoint Response undefined Headers Object', async () => {
- await runTest('/endpoints/response-undefined-headers-object', {
- 'content-type': 'text/plain;charset=UTF-8',
- });
- });
-
- it('Component Astro Single Cookie Header', async () => {
- await runTest('/astro/component-astro-cookies-single', {
- 'content-type': 'text/html',
- 'set-cookie': 'from1=astro1',
- });
- });
-
- it('Component Astro Multi Cookie Header', async () => {
- await runTest('/astro/component-astro-cookies-multi', {
- 'content-type': 'text/html',
- 'set-cookie': ['from1=astro1', 'from2=astro2'],
- });
- });
-
- it('Component Response Single Cookie Header', async () => {
- await runTest('/astro/component-response-cookies-single', {
- 'content-type': 'text/html',
- 'set-cookie': 'from1=value1',
- });
- });
-
- it('Component Response Multi Cookie Header', async () => {
- await runTest('/astro/component-response-cookies-multi', {
- 'content-type': 'text/html',
- 'set-cookie': ['from1=value1', 'from2=value2'],
- });
- });
-
- it('Component Astro and Response Single Cookie Header', async () => {
- await runTest('/astro/component-astro-response-cookie-single', {
- 'content-type': 'text/html',
- 'set-cookie': ['from1=response1', 'from1=astro1'],
- });
- });
-
- it('Component Astro and Response Multi Cookie Header', async () => {
- await runTest('/astro/component-astro-response-cookie-multi', {
- 'content-type': 'text/html',
- 'set-cookie': ['from1=response1', 'from2=response2', 'from3=astro1', 'from4=astro2'],
- });
- });
-});
-
-async function runTest(url, expectedHeaders) {
- const { handler } = await import('./fixtures/headers/dist/server/entry.mjs');
-
- let { req, res, done } = createRequestAndResponse({
- method: 'GET',
- url,
- });
-
- handler(req, res);
-
- req.send();
-
- await done;
- const headers = res.getHeaders();
-
- assert.deepEqual(headers, expectedHeaders);
-}
diff --git a/packages/integrations/node/test/image.test.js b/packages/integrations/node/test/image.test.js
deleted file mode 100644
index 5303fe37ee91..000000000000
--- a/packages/integrations/node/test/image.test.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-// Temporary skip until we figure out the "Could not find Sharp" issue as `sharp` is bundled
-describe.skip('Image endpoint', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devPreview;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/image/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- devPreview = await fixture.preview();
- });
-
- after(async () => {
- await devPreview.stop();
- });
-
- it('it returns images', async () => {
- const res = await fixture.fetch('/');
- assert.equal(res.status, 200);
-
- const resImage = await fixture.fetch(
- '/_image?href=/_astro/some_penguin.97ef5f92.png&w=50&f=webp',
- );
-
- assert.equal(resImage.status, 200);
- });
-});
diff --git a/packages/integrations/node/test/locals.test.js b/packages/integrations/node/test/locals.test.js
deleted file mode 100644
index 6d2776079d6e..000000000000
--- a/packages/integrations/node/test/locals.test.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { createRequestAndResponse, loadFixture } from './test-utils.js';
-
-describe('API routes', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/locals/',
- output: 'server',
- adapter: nodejs({ mode: 'middleware' }),
- });
- await fixture.build();
- });
-
- it('Can use locals added by node middleware', async () => {
- const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- url: '/from-node-middleware',
- });
-
- let locals = { foo: 'bar' };
-
- handler(req, res, () => {}, locals);
- req.send();
-
- let html = await text();
-
- assert.equal(html.includes('bar
'), true);
- });
-
- it('Throws an error when provided non-objects as locals', async () => {
- const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
- let { req, res, done } = createRequestAndResponse({
- url: '/from-node-middleware',
- });
-
- handler(req, res, undefined, 'locals');
- req.send();
-
- await done;
- assert.equal(res.statusCode, 500);
- });
-
- it('Can use locals added by astro middleware', async () => {
- const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
-
- const { req, res, text } = createRequestAndResponse({
- url: '/from-astro-middleware',
- });
-
- handler(req, res, () => {});
- req.send();
-
- const html = await text();
-
- assert.equal(html.includes('baz
'), true);
- });
-
- it('Can access locals in API', async () => {
- const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
- let { req, res, done } = createRequestAndResponse({
- method: 'POST',
- url: '/api',
- });
-
- let locals = { foo: 'bar' };
-
- handler(req, res, () => {}, locals);
- req.send();
-
- let [buffer] = await done;
-
- let json = JSON.parse(buffer.toString('utf-8'));
-
- assert.equal(json.foo, 'bar');
- });
-});
diff --git a/packages/integrations/node/test/node-middleware.test.js b/packages/integrations/node/test/node-middleware.test.js
deleted file mode 100644
index d1b016a51350..000000000000
--- a/packages/integrations/node/test/node-middleware.test.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import express from 'express';
-import nodejs from '../dist/index.js';
-import { loadFixture, waitServerListen } from './test-utils.js';
-
-/**
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-describe('behavior from middleware, standalone', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- root: './fixtures/node-middleware/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- describe('404', async () => {
- it('when mode is standalone', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/error-page`);
-
- assert.equal(res.status, 404);
-
- const html = await res.text();
- const $ = cheerio.load(html);
-
- const body = $('body');
- assert.equal(body.text().includes('Page does not exist'), true);
- });
- });
-});
-
-describe('behavior from middleware, middleware', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- root: './fixtures/node-middleware/',
- output: 'server',
- adapter: nodejs({ mode: 'middleware' }),
- });
- await fixture.build();
- const { handler } = await fixture.loadAdapterEntryModule();
- const app = express();
- app.use(handler);
- server = app.listen(8888);
- });
-
- after(async () => {
- server.close();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('when mode is standalone', async () => {
- const res = await fetch(`http://localhost:8888/ssr`);
-
- assert.equal(res.status, 200);
-
- const html = await res.text();
- const $ = cheerio.load(html);
-
- const body = $('body');
- assert.equal(body.text().includes("Here's a random number"), true);
- });
-});
diff --git a/packages/integrations/node/test/prerender-404-500.test.js b/packages/integrations/node/test/prerender-404-500.test.js
deleted file mode 100644
index 2535fcb35bf7..000000000000
--- a/packages/integrations/node/test/prerender-404-500.test.js
+++ /dev/null
@@ -1,300 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { loadFixture, waitServerListen } from './test-utils.js';
-
-/**
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-describe('Prerender 404', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- describe('With base', async () => {
- before(async () => {
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- // inconsequential config that differs between tests
- // to bust cache and prevent modules and their state
- // from being reused
- site: 'https://test.dev/',
- base: '/some-base',
- root: './fixtures/prerender-404-500/',
- output: 'server',
- outDir: './dist/server-with-base',
- build: {
- client: './dist/server-with-base/client',
- server: './dist/server-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/static`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Hello world!');
- });
-
- it('Can handle prerendered 404', async () => {
- const url = `http://${server.host}:${server.port}/some-base/missing`;
- const res1 = await fetch(url);
- const res2 = await fetch(url);
- const res3 = await fetch(url);
-
- assert.equal(res1.status, 404);
- assert.equal(res2.status, 404);
- assert.equal(res3.status, 404);
-
- const html1 = await res1.text();
- const html2 = await res2.text();
- const html3 = await res3.text();
-
- assert.equal(html1, html2);
- assert.equal(html2, html3);
-
- const $ = cheerio.load(html1);
-
- assert.equal($('body').text(), 'Page does not exist');
- });
-
- it(' Can handle prerendered 500 called indirectly', async () => {
- const url = `http://${server.host}:${server.port}/some-base/fivehundred`;
- const response1 = await fetch(url);
- const response2 = await fetch(url);
- const response3 = await fetch(url);
-
- assert.equal(response1.status, 500);
-
- const html1 = await response1.text();
- const html2 = await response2.text();
- const html3 = await response3.text();
-
- assert.equal(html1.includes('Something went wrong'), true);
-
- assert.equal(html1, html2);
- assert.equal(html2, html3);
- });
-
- it('prerendered 500 page includes expected styles', async () => {
- const response = await fetch(`http://${server.host}:${server.port}/some-base/fivehundred`);
- const html = await response.text();
- const $ = cheerio.load(html);
-
- // length will be 0 if the stylesheet does not get included
- assert.equal($('style').length, 1);
- });
- });
-
- describe('Without base', async () => {
- before(async () => {
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- // inconsequential config that differs between tests
- // to bust cache and prevent modules and their state
- // from being reused
- site: 'https://test.info/',
- root: './fixtures/prerender-404-500/',
- output: 'server',
- outDir: './dist/server-without-base',
- build: {
- client: './dist/server-without-base/client',
- server: './dist/server-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/static`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Hello world!');
- });
-
- it('Can handle prerendered 404', async () => {
- const url = `http://${server.host}:${server.port}/some-base/missing`;
- const res1 = await fetch(url);
- const res2 = await fetch(url);
- const res3 = await fetch(url);
-
- assert.equal(res1.status, 404);
- assert.equal(res2.status, 404);
- assert.equal(res3.status, 404);
-
- const html1 = await res1.text();
- const html2 = await res2.text();
- const html3 = await res3.text();
-
- assert.equal(html1, html2);
- assert.equal(html2, html3);
-
- const $ = cheerio.load(html1);
-
- assert.equal($('body').text(), 'Page does not exist');
- });
- });
-});
-
-describe('Hybrid 404', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- describe('With base', async () => {
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- // inconsequential config that differs between tests
- // to bust cache and prevent modules and their state
- // from being reused
- site: 'https://test.com/',
- base: '/some-base',
- root: './fixtures/prerender-404-500/',
- output: 'hybrid',
- outDir: './dist/hybrid-with-base',
- build: {
- client: './dist/hybrid-with-base/client',
- server: './dist/hybrid-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/static`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Hello world!');
- });
-
- it('Can handle prerendered 404', async () => {
- const url = `http://${server.host}:${server.port}/some-base/missing`;
- const res1 = await fetch(url);
- const res2 = await fetch(url);
- const res3 = await fetch(url);
-
- assert.equal(res1.status, 404);
- assert.equal(res2.status, 404);
- assert.equal(res3.status, 404);
-
- const html1 = await res1.text();
- const html2 = await res2.text();
- const html3 = await res3.text();
-
- assert.equal(html1, html2);
- assert.equal(html2, html3);
-
- const $ = cheerio.load(html1);
-
- assert.equal($('body').text(), 'Page does not exist');
- });
- });
-
- describe('Without base', async () => {
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- // inconsequential config that differs between tests
- // to bust cache and prevent modules and their state
- // from being reused
- site: 'https://test.net/',
- root: './fixtures/prerender-404-500/',
- output: 'hybrid',
- outDir: './dist/hybrid-without-base',
- build: {
- client: './dist/hybrid-without-base/client',
- server: './dist/hybrid-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/static`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Hello world!');
- });
-
- it('Can handle prerendered 404', async () => {
- const url = `http://${server.host}:${server.port}/missing`;
- const res1 = await fetch(url);
- const res2 = await fetch(url);
- const res3 = await fetch(url);
-
- assert.equal(res1.status, 404);
- assert.equal(res2.status, 404);
- assert.equal(res3.status, 404);
-
- const html1 = await res1.text();
- const html2 = await res2.text();
- const html3 = await res3.text();
-
- assert.equal(html1, html2);
- assert.equal(html2, html3);
-
- const $ = cheerio.load(html1);
-
- assert.equal($('body').text(), 'Page does not exist');
- });
- });
-});
diff --git a/packages/integrations/node/test/prerender.test.js b/packages/integrations/node/test/prerender.test.js
deleted file mode 100644
index e699a1b3c01b..000000000000
--- a/packages/integrations/node/test/prerender.test.js
+++ /dev/null
@@ -1,438 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { loadFixture, waitServerListen } from './test-utils.js';
-
-/**
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-describe('Prerendering', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- describe('With base', async () => {
- before(async () => {
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- base: '/some-base',
- root: './fixtures/prerender/',
- output: 'server',
- outDir: './dist/with-base',
- build: {
- client: './dist/with-base/client',
- server: './dist/with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- assert.ok(fixture.pathExists('/client/two/index.html'));
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/two?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/two/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
-
- it('Can render prerendered route without trailing slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/two`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
- });
-
- describe('Without base', async () => {
- before(async () => {
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'server',
- outDir: './dist/without-base',
- build: {
- client: './dist/without-base/client',
- server: './dist/without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- assert.ok(fixture.pathExists('/client/two/index.html'));
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/two?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/two/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
- });
-
- describe('Via integration', () => {
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'server',
- outDir: './dist/via-integration',
- build: {
- client: './dist/via-integration/client',
- server: './dist/via-integration/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- integrations: [
- {
- name: 'test',
- hooks: {
- 'astro:route:setup': ({ route }) => {
- if (route.component.endsWith('two.astro')) {
- route.prerender = true;
- }
- },
- },
- },
- ],
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- assert.ok(fixture.pathExists('/client/two/index.html'));
- });
- });
-
- describe('Dev', () => {
- let devServer;
-
- before(async () => {
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'server',
- outDir: './dist/dev',
- build: {
- client: './dist/dev/client',
- server: './dist/dev/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- devServer = await fixture.startDevServer();
- });
-
- after(async () => {
- await devServer.stop();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fixture.fetch(`/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fixture.fetch(`/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
- });
-});
-
-describe('Hybrid rendering', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
-
- describe('With base', () => {
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- base: '/some-base',
- root: './fixtures/prerender/',
- output: 'hybrid',
- outDir: './dist/hybrid-with-base',
- build: {
- client: './dist/hybrid-with-base/client',
- server: './dist/hybrid-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- assert.ok(fixture.pathExists('/client/one/index.html'));
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route without trailing slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
-
- describe('Without base', () => {
- before(async () => {
- process.env.PRERENDER = false;
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'hybrid',
- outDir: './dist/hybrid-without-base',
- build: {
- client: './dist/hybrid-without-base/client',
- server: './dist/hybrid-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/two`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Two');
- });
-
- it('Can render prerendered route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- assert.ok(fixture.pathExists('/client/one/index.html'));
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
-
- describe('Shared modules', () => {
- before(async () => {
- process.env.PRERENDER = false;
-
- fixture = await loadFixture({
- root: './fixtures/prerender/',
- output: 'hybrid',
- outDir: './dist/hybrid-shared-modules',
- build: {
- client: './dist/hybrid-shared-modules/client',
- server: './dist/hybrid-shared-modules/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render SSR route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/third`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'shared');
- });
- });
-});
diff --git a/packages/integrations/node/test/preview-headers.test.js b/packages/integrations/node/test/preview-headers.test.js
deleted file mode 100644
index 3fd9d0508d6e..000000000000
--- a/packages/integrations/node/test/preview-headers.test.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-describe('Astro preview headers', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let devPreview;
- const headers = {
- astro: 'test',
- };
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/preview-headers/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- server: {
- headers,
- },
- });
- await fixture.build();
- devPreview = await fixture.preview();
- });
-
- after(async () => {
- await devPreview.stop();
- });
-
- describe('Preview Headers', () => {
- it('returns custom headers for valid URLs', async () => {
- const result = await fixture.fetch('/');
- assert.equal(result.status, 200);
- assert.equal(Object.fromEntries(result.headers).astro, headers.astro);
- });
- });
-});
diff --git a/packages/integrations/node/test/server-host.test.js b/packages/integrations/node/test/server-host.test.js
deleted file mode 100644
index facd32d47108..000000000000
--- a/packages/integrations/node/test/server-host.test.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { describe, it } from 'node:test';
-import { hostOptions } from '../dist/standalone.js';
-
-describe('host', () => {
- it('returns "0.0.0.0" when host is true', () => {
- const options = { host: true };
- assert.equal(hostOptions(options.host), '0.0.0.0');
- });
-
- it('returns "localhost" when host is false', () => {
- const options = { host: false };
- assert.equal(hostOptions(options.host), 'localhost');
- });
-
- it('returns the value of host when host is a string', () => {
- const host = '1.1.1.1';
- const options = { host };
- assert.equal(hostOptions(options.host), host);
- });
-});
diff --git a/packages/integrations/node/test/test-utils.js b/packages/integrations/node/test/test-utils.js
deleted file mode 100644
index 10faba5cf9b7..000000000000
--- a/packages/integrations/node/test/test-utils.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import { EventEmitter } from 'node:events';
-import httpMocks from 'node-mocks-http';
-import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js';
-
-process.env.ASTRO_NODE_AUTOSTART = 'disabled';
-process.env.ASTRO_NODE_LOGGING = 'disabled';
-/**
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-export function loadFixture(inlineConfig) {
- if (!inlineConfig?.root) throw new Error("Must provide { root: './fixtures/...' }");
-
- // resolve the relative root (i.e. "./fixtures/tailwindcss") to a full filepath
- // without this, the main `loadFixture` helper will resolve relative to `packages/astro/test`
- return baseLoadFixture({
- ...inlineConfig,
- root: new URL(inlineConfig.root, import.meta.url).toString(),
- });
-}
-
-export function createRequestAndResponse(reqOptions) {
- let req = httpMocks.createRequest(reqOptions);
-
- let res = httpMocks.createResponse({
- eventEmitter: EventEmitter,
- req,
- });
-
- let done = toPromise(res);
-
- // Get the response as text
- const text = async () => {
- let chunks = await done;
- return buffersToString(chunks);
- };
-
- return { req, res, done, text };
-}
-
-export function toPromise(res) {
- return new Promise((resolve) => {
- // node-mocks-http doesn't correctly handle non-Buffer typed arrays,
- // so override the write method to fix it.
- const write = res.write;
- res.write = function (data, encoding) {
- if (ArrayBuffer.isView(data) && !Buffer.isBuffer(data)) {
- data = Buffer.from(data.buffer);
- }
- return write.call(this, data, encoding);
- };
- res.on('end', () => {
- let chunks = res._getChunks();
- resolve(chunks);
- });
- });
-}
-
-export function buffersToString(buffers) {
- let decoder = new TextDecoder();
- let str = '';
- for (const buffer of buffers) {
- str += decoder.decode(buffer);
- }
- return str;
-}
-
-export function waitServerListen(server) {
- return new Promise((resolve, reject) => {
- function onListen() {
- server.off('error', onError);
- resolve();
- }
- function onError(error) {
- server.off('listening', onListen);
- reject(error);
- }
- server.once('listening', onListen);
- server.once('error', onError);
- });
-}
diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js
deleted file mode 100644
index 9ea8fcdddc39..000000000000
--- a/packages/integrations/node/test/trailing-slash.test.js
+++ /dev/null
@@ -1,452 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { loadFixture, waitServerListen } from './test-utils.js';
-
-/**
- * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture
- */
-
-describe('Trailing slash', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
- let server;
- describe('Always', async () => {
- describe('With base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- base: '/some-base',
- output: 'hybrid',
- trailingSlash: 'always',
- outDir: './dist/always-with-base',
- build: {
- client: './dist/always-with-base/client',
- server: './dist/always-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with redirect', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/some-base/one/');
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/some-base/one/?foo=bar');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Does not add trailing slash to subresource urls', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one.css`);
- const css = await res.text();
-
- assert.equal(res.status, 200);
- assert.equal(css, 'h1 { color: red; }\n');
- });
- });
- describe('Without base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- output: 'hybrid',
- trailingSlash: 'always',
- outDir: './dist/always-without-base',
- build: {
- client: './dist/always-without-base/client',
- server: './dist/always-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with redirect', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/one/');
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/one/?foo=bar');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Does not add trailing slash to subresource urls', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one.css`);
- const css = await res.text();
-
- assert.equal(res.status, 200);
- assert.equal(css, 'h1 { color: red; }\n');
- });
- });
- });
- describe('Never', async () => {
- describe('With base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- base: '/some-base',
- output: 'hybrid',
- trailingSlash: 'never',
- outDir: './dist/never-with-base',
- build: {
- client: './dist/never-with-base/client',
- server: './dist/never-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with redirect', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/some-base/one');
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, {
- redirect: 'manual',
- });
-
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/some-base/one?foo=bar');
- });
-
- it('Can render prerendered route with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
- describe('Without base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- output: 'hybrid',
- trailingSlash: 'never',
- outDir: './dist/never-without-base',
- build: {
- client: './dist/never-without-base/client',
- server: './dist/never-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with redirect', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/`, {
- redirect: 'manual',
- });
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/one');
- });
-
- it('Can render prerendered route with redirect and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, {
- redirect: 'manual',
- });
-
- assert.equal(res.status, 301);
- assert.equal(res.headers.get('location'), '/one?foo=bar');
- });
-
- it('Can render prerendered route and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
- });
- describe('Ignore', async () => {
- describe('With base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- base: '/some-base',
- output: 'hybrid',
- trailingSlash: 'ignore',
- outDir: './dist/ignore-with-base',
- build: {
- client: './dist/ignore-with-base/client',
- server: './dist/ignore-with-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route without slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route with slash and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route without slash and with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
- describe('Without base', async () => {
- before(async () => {
- process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- process.env.PRERENDER = true;
-
- fixture = await loadFixture({
- root: './fixtures/trailing-slash/',
- output: 'hybrid',
- trailingSlash: 'ignore',
- outDir: './dist/ignore-without-base',
- build: {
- client: './dist/ignore-without-base/client',
- server: './dist/ignore-without-base/server',
- },
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- const { startServer } = await fixture.loadAdapterEntryModule();
- let res = startServer();
- server = res.server;
- await waitServerListen(server.server);
- });
-
- after(async () => {
- await server.stop();
- await fixture.clean();
- delete process.env.PRERENDER;
- });
-
- it('Can render prerendered base route', async () => {
- const res = await fetch(`http://${server.host}:${server.port}`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'Index');
- });
-
- it('Can render prerendered route with slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route without slash', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route with slash and query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, {
- redirect: 'manual',
- });
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
-
- it('Can render prerendered route without slash and with query params', async () => {
- const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`);
- const html = await res.text();
- const $ = cheerio.load(html);
-
- assert.equal(res.status, 200);
- assert.equal($('h1').text(), 'One');
- });
- });
- });
-});
diff --git a/packages/integrations/node/test/url.test.js b/packages/integrations/node/test/url.test.js
deleted file mode 100644
index 77ca45836638..000000000000
--- a/packages/integrations/node/test/url.test.js
+++ /dev/null
@@ -1,115 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { TLSSocket } from 'node:tls';
-import * as cheerio from 'cheerio';
-import nodejs from '../dist/index.js';
-import { createRequestAndResponse, loadFixture } from './test-utils.js';
-
-describe('URL', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/url/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- });
-
- it('return http when non-secure', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('http:'), true);
- });
-
- it('return https when secure', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- socket: new TLSSocket(),
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('https:'), true);
- });
-
- it('return http when the X-Forwarded-Proto header is set to http', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- headers: { 'X-Forwarded-Proto': 'http' },
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('http:'), true);
- });
-
- it('return https when the X-Forwarded-Proto header is set to https', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- headers: { 'X-Forwarded-Proto': 'https' },
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- assert.equal(html.includes('https:'), true);
- });
-
- it('includes forwarded host and port in the url', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- headers: {
- 'X-Forwarded-Proto': 'https',
- 'X-Forwarded-Host': 'abc.xyz',
- 'X-Forwarded-Port': '444',
- },
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- const $ = cheerio.load(html);
-
- assert.equal($('body').text(), 'https://abc.xyz:444/');
- });
-
- it('accepts port in forwarded host and forwarded port', async () => {
- const { handler } = await import('./fixtures/url/dist/server/entry.mjs');
- let { req, res, text } = createRequestAndResponse({
- headers: {
- 'X-Forwarded-Proto': 'https',
- 'X-Forwarded-Host': 'abc.xyz:444',
- 'X-Forwarded-Port': '444',
- },
- url: '/',
- });
-
- handler(req, res);
- req.send();
-
- const html = await text();
- const $ = cheerio.load(html);
-
- assert.equal($('body').text(), 'https://abc.xyz:444/');
- });
-});
diff --git a/packages/integrations/node/test/well-known-locations.test.js b/packages/integrations/node/test/well-known-locations.test.js
deleted file mode 100644
index 0951d6c27cc9..000000000000
--- a/packages/integrations/node/test/well-known-locations.test.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import * as assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import nodejs from '../dist/index.js';
-import { loadFixture } from './test-utils.js';
-
-describe('test URIs beginning with a dot', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/well-known-locations/',
- output: 'server',
- adapter: nodejs({ mode: 'standalone' }),
- });
- await fixture.build();
- });
-
- describe('can load well-known URIs', async () => {
- let devPreview;
-
- before(async () => {
- devPreview = await fixture.preview();
- });
-
- after(async () => {
- await devPreview.stop();
- });
-
- it('can load a valid well-known URI', async () => {
- const res = await fixture.fetch('/.well-known/apple-app-site-association');
-
- assert.equal(res.status, 200);
-
- const json = await res.json();
-
- assert.notEqual(json.applinks, {});
- });
-
- it('cannot load a dot folder that is not a well-known URI', async () => {
- const res = await fixture.fetch('/.hidden/file.json');
-
- assert.equal(res.status, 404);
- });
- });
-});
diff --git a/packages/integrations/node/tsconfig.json b/packages/integrations/node/tsconfig.json
deleted file mode 100644
index 1504b4b6dfa4..000000000000
--- a/packages/integrations/node/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "../../../tsconfig.base.json",
- "include": ["src"],
- "compilerOptions": {
- "outDir": "./dist"
- }
-}
diff --git a/packages/integrations/sitemap/package.json b/packages/integrations/sitemap/package.json
index f7f3223ea7a6..b48e974692f9 100644
--- a/packages/integrations/sitemap/package.json
+++ b/packages/integrations/sitemap/package.json
@@ -38,7 +38,7 @@
"zod": "^3.23.8"
},
"devDependencies": {
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"astro": "workspace:*",
"astro-scripts": "workspace:*",
"xml2js": "0.6.2"
diff --git a/packages/integrations/vercel/CHANGELOG.md b/packages/integrations/vercel/CHANGELOG.md
deleted file mode 100644
index 4a8d6343a6e8..000000000000
--- a/packages/integrations/vercel/CHANGELOG.md
+++ /dev/null
@@ -1,1471 +0,0 @@
-# @astrojs/vercel
-
-## 7.8.0
-
-### Minor Changes
-
-- [#11728](https://github.com/withastro/astro/pull/11728) [`5ea02b1`](https://github.com/withastro/astro/commit/5ea02b12fdb9b8ca45b1229bb9d04bc3d1270e0f) Thanks [@matthewp](https://github.com/matthewp)! - Deprecates the `functionPerRoute` option
-
- This option is now deprecated, and will be removed entirely in Astro v5.0. We suggest removing this option from your configuration as soon as you are able to:
-
- ```diff
- import { defineConfig } from 'astro/config';
- import vercel from '@astrojs/vercel/serverless';
-
- export default defineConfig({
- // ...
- output: 'server',
- adapter: vercel({
- - functionPerRoute: true,
- }),
- });
- ```
-
-### Patch Changes
-
-- [#11783](https://github.com/withastro/astro/pull/11783) [`fc81b01`](https://github.com/withastro/astro/commit/fc81b01bcdd43646bcc615b16bf0400a646445c8) Thanks [@matthewp](https://github.com/matthewp)! - Prevent race condition with Node 18
-
- Using Node 18 there can be a race condition where polyfill for the `crypto` global is not applied in time. This change ensures the polyfills run first.
-
-## 7.7.2
-
-### Patch Changes
-
-- [#11323](https://github.com/withastro/astro/pull/11323) [`41064ce`](https://github.com/withastro/astro/commit/41064cee78c1cccd428f710a24c483aeb275fd95) Thanks [@ascorbic](https://github.com/ascorbic)! - Extracts fs helpers into shared internal-helpers module
-
-- [#11296](https://github.com/withastro/astro/pull/11296) [`5848d97`](https://github.com/withastro/astro/commit/5848d9786768d1290de982670bcc7773280ef08d) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Fixes `astro:env` getSecret compatibility
-
-- Updated dependencies [[`41064ce`](https://github.com/withastro/astro/commit/41064cee78c1cccd428f710a24c483aeb275fd95)]:
- - @astrojs/internal-helpers@0.4.1
-
-## 7.7.1
-
-### Patch Changes
-
-- [#11261](https://github.com/withastro/astro/pull/11261) [`f5f8ed2`](https://github.com/withastro/astro/commit/f5f8ed275b76adfb11b7c3c1e800753a25416498) Thanks [@matthewp](https://github.com/matthewp)! - Fix backwards compat with Astro <= 4.9
-
-- [#11227](https://github.com/withastro/astro/pull/11227) [`24ce898`](https://github.com/withastro/astro/commit/24ce8983e1e1b3c8ebebf2ac4de7bbf21a586e2e) Thanks [@matthewp](https://github.com/matthewp)! - In Vercel Edge, include cookies set by Astro.cookies.set
-
-## 7.7.0
-
-### Minor Changes
-
-- [#11199](https://github.com/withastro/astro/pull/11199) [`2bdca27`](https://github.com/withastro/astro/commit/2bdca27ff4002efd330667b0b4ca3e00d5b7a2db) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for experimental `astro:env` released in Astro 4.10
-
-## 7.6.0
-
-### Minor Changes
-
-- [#10761](https://github.com/withastro/astro/pull/10761) [`f0acd30`](https://github.com/withastro/astro/commit/f0acd30a12c380830884108f7cad67a31d879339) Thanks [@ematipico](https://github.com/ematipico)! - Implements the vercel skew protection
-
-## 7.5.4
-
-### Patch Changes
-
-- [#10833](https://github.com/withastro/astro/pull/10833) [`8d5f3e8`](https://github.com/withastro/astro/commit/8d5f3e8656027023f9fda51c66b0213ffe16d3a5) Thanks [@renovate](https://github.com/apps/renovate)! - Updates `esbuild` dependency to v0.20. This should not affect projects in most cases.
-
-## 7.5.3
-
-### Patch Changes
-
-- [#10756](https://github.com/withastro/astro/pull/10756) [`c75ededdb401cfa55e1ad2682d5e95494f49604e`](https://github.com/withastro/astro/commit/c75ededdb401cfa55e1ad2682d5e95494f49604e) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes `widths` and `densities` not working when using Vercel's Image Optimization.
-
- Note that you still need to make sure that the widths you're outputting are enabled in [the `imageConfig` property of the Vercel adapter](https://docs.astro.build/en/guides/integrations-guide/vercel/#imagesconfig) in order for these properties to work.
-
-## 7.5.2
-
-### Patch Changes
-
-- [#10611](https://github.com/withastro/astro/pull/10611) [`a9a3694a98060be9a33045bb0fcf92ccf1acff6f`](https://github.com/withastro/astro/commit/a9a3694a98060be9a33045bb0fcf92ccf1acff6f) Thanks [@jacobdalamb](https://github.com/jacobdalamb)! - Updates the supported version of Node.js
-
-## 7.5.1
-
-### Patch Changes
-
-- [#10609](https://github.com/withastro/astro/pull/10609) [`31590d44ef8b7c96a757e9b835144d57d767383c`](https://github.com/withastro/astro/commit/31590d44ef8b7c96a757e9b835144d57d767383c) Thanks [@matthewp](https://github.com/matthewp)! - Move nft warnings behind verbose logging
-
-## 7.5.0
-
-### Minor Changes
-
-- [#10513](https://github.com/withastro/astro/pull/10513) [`a573cc199a00d35410197ba4117c97764a984dc0`](https://github.com/withastro/astro/commit/a573cc199a00d35410197ba4117c97764a984dc0) Thanks [@tk04](https://github.com/tk04)! - The `isr.exclude` configuration can now include routes with dynamic and spread parameters.
- ```ts
- export default defineConfig({
- adapter: vercel({
- isr: {
- exclude: [
- "/blog/[title]"
- "/api/[...slug]",
- ]
- }
- })
- })
- ```
-
-## 7.4.1
-
-### Patch Changes
-
-- Updated dependencies [[`20463a6c1e1271d8dc3cb0ab3419ee5c72abd218`](https://github.com/withastro/astro/commit/20463a6c1e1271d8dc3cb0ab3419ee5c72abd218)]:
- - @astrojs/internal-helpers@0.4.0
-
-## 7.4.0
-
-### Minor Changes
-
-- [#10476](https://github.com/withastro/astro/pull/10476) [`cfbaa8a767b8794c2dcd8e164672195378be396a`](https://github.com/withastro/astro/commit/cfbaa8a767b8794c2dcd8e164672195378be396a) Thanks [@lilnasy](https://github.com/lilnasy)! - The special-case handling of `src/vercel-edge-middleware.js` file is now deprecated. This file allowed you to access the edge runtime's `RequestContext` object, and create the middleware `locals` from its fields. However, this object includes only one field - the `waitUntil()` function - which is now available directly as `ctx.locals.vercel.edge.waitUntil()`.
-
-## 7.3.6
-
-### Patch Changes
-
-- Updated dependencies [[`1ea0a25b94125e4f6f2ac82b42f638e22d7bdffd`](https://github.com/withastro/astro/commit/1ea0a25b94125e4f6f2ac82b42f638e22d7bdffd)]:
- - @astrojs/internal-helpers@0.3.0
-
-## 7.3.5
-
-### Patch Changes
-
-- [#10336](https://github.com/withastro/astro/pull/10336) [`f2e60a96754ed1d86001fe4d5d3a0c0ef657408d`](https://github.com/withastro/astro/commit/f2e60a96754ed1d86001fe4d5d3a0c0ef657408d) Thanks [@FredKSchott](https://github.com/FredKSchott)! - Fixes an issue that was preventing the use of `sharp` in some cases and causing a runtime error
-
-## 7.3.4
-
-### Patch Changes
-
-- [#10231](https://github.com/withastro/astro/pull/10231) [`ae2a10e1a768e31d243194694222932ffafb54cc`](https://github.com/withastro/astro/commit/ae2a10e1a768e31d243194694222932ffafb54cc) Thanks [@mingjunlu](https://github.com/mingjunlu)! - Fixes an issue where functions were also created for prerendered routes with `functionPerRoute` enabled.
-
-## 7.3.3
-
-### Patch Changes
-
-- [#10215](https://github.com/withastro/astro/pull/10215) [`a013182d322a3969e39d647aad75ec10f8bd1ed7`](https://github.com/withastro/astro/commit/a013182d322a3969e39d647aad75ec10f8bd1ed7) Thanks [@matthewp](https://github.com/matthewp)! - Fixes edge middleware calling nested routes
-
-## 7.3.2
-
-### Patch Changes
-
-- [#10194](https://github.com/withastro/astro/pull/10194) [`3cc20109277813ccb9578ca87a8b0d680a73c35c`](https://github.com/withastro/astro/commit/3cc20109277813ccb9578ca87a8b0d680a73c35c) Thanks [@matthewp](https://github.com/matthewp)! - Fix loading client-scripts in dev with ISR
-
-## 7.3.1
-
-### Patch Changes
-
-- [#10082](https://github.com/withastro/astro/pull/10082) [`2ffc5721bc22631c44d90ac43ec27fdb0b5b2d1b`](https://github.com/withastro/astro/commit/2ffc5721bc22631c44d90ac43ec27fdb0b5b2d1b) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Prevents infinite redirects when Astro `trailingSlash` configuration is set to `"always"` and "vercel.json" `trailingSlash` configuration is set to `true`
-
-## 7.3.0
-
-### Minor Changes
-
-- [#9987](https://github.com/withastro/astro/pull/9987) [`0699f34d5c4481c027c4d29d73944f79f97008df`](https://github.com/withastro/astro/commit/0699f34d5c4481c027c4d29d73944f79f97008df) Thanks [@lilnasy](https://github.com/lilnasy)! - Implements verification for edge middleware. This is a security measure to ensure that your serverless functions are only ever called by your edge middleware and not a third party.
-
- When `edgeMiddleware` is enabled, the serverless function will now respond with `403 Forbidden` for requests that are not verified to have come from the generated edge middleware. No user action is necessary.
-
-## 7.2.0
-
-### Minor Changes
-
-- [#9714](https://github.com/withastro/astro/pull/9714) [`e2fe51c828dc7ea8204788e59e3953fe36c97836`](https://github.com/withastro/astro/commit/e2fe51c828dc7ea8204788e59e3953fe36c97836) Thanks [@lilnasy](https://github.com/lilnasy)! - Introduces a new config option, `isr`, that allows you to deploy your project as an ISR function. [ISR (Incremental Static Regeneration)](https://vercel.com/docs/incremental-static-regeneration) caches your on-demand rendered pages in the same way as prerendered pages after first request.
-
- To enable this feature, set `isr` to true in your Vercel adapter configuration in `astro.config.mjs`:
-
- ```js
- export default defineConfig({
- output: 'server',
- adapter: vercel({ isr: true }),
- });
- ```
-
- ## Cache invalidation options
-
- By default, ISR responses are cached for the duration of your deployment. You can further control caching by setting an `expiration` time or prevent caching entirely for certain routes.
-
- ### Time-based invalidation
-
- You can change the length of time to cache routes this by configuring an `expiration` value in seconds:
-
- ```js
- export default defineConfig({
- output: 'server',
- adapter: vercel({
- isr: {
- // caches all pages on first request and saves for 1 day
- expiration: 60 * 60 * 24,
- },
- }),
- });
- ```
-
- ### Manual invalidation
-
- To implement Vercel's [Draft mode](https://vercel.com/docs/build-output-api/v3/features#draft-mode), or [On-Demand Incremental Static Regeneration (ISR)](https://vercel.com/docs/build-output-api/v3/features#on-demand-incremental-static-regeneration-isr), you can create a bypass token and provide it to the `isr` config along with the paths to exclude from caching:
-
- ```js
- export default defineConfig({
- output: 'server',
- adapter: vercel({
- isr: {
- // A secret random string that you create.
- bypassToken: '005556d774a8',
- // Paths that will always be served fresh.
- exclude: ['/api/invalidate'],
- },
- }),
- });
- ```
-
-## 7.1.1
-
-### Patch Changes
-
-- [#9955](https://github.com/withastro/astro/pull/9955) [`bc1742df9423ba66e33dcbf65fbebf67a236175d`](https://github.com/withastro/astro/commit/bc1742df9423ba66e33dcbf65fbebf67a236175d) Thanks [@matthewp](https://github.com/matthewp)! - Fix regression with bundling of @libsql/client
-
-## 7.1.0
-
-### Minor Changes
-
-- [#9143](https://github.com/withastro/astro/pull/9143) [`041fdd5c89920f7ccf944b095f29e451f78b0e28`](https://github.com/withastro/astro/commit/041fdd5c89920f7ccf944b095f29e451f78b0e28) Thanks [@ematipico](https://github.com/ematipico)! - Adds experimental support for internationalization domains
-
-### Patch Changes
-
-- [#9885](https://github.com/withastro/astro/pull/9885) [`49e0c24d7f90d00e986533fcf546665967540ce7`](https://github.com/withastro/astro/commit/49e0c24d7f90d00e986533fcf546665967540ce7) Thanks [@matthewp](https://github.com/matthewp)! - Better ignores for Vercel file-tracer
-
- The Vercel adapter has a file-tracer it uses to detect which files should be moved over to the `dist/` folder. When it's done, it prints warnings for things that it detected that maybe should be moved.
-
- This change expands how we do ignores so that:
-
- - Ignores happen within dot folders like `.pnpm`.
- - `@libsql/client` is ignored, a package we know is not bundled.
-
-## 7.0.2
-
-### Patch Changes
-
-- [#9809](https://github.com/withastro/astro/pull/9809) [`3435b7f1e1ca38fdee8f3b89e2d2667f125d01b5`](https://github.com/withastro/astro/commit/3435b7f1e1ca38fdee8f3b89e2d2667f125d01b5) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where the serverless function ignored cookies added using Astro.cookies.
-
-## 7.0.1
-
-### Patch Changes
-
-- [#9585](https://github.com/withastro/astro/pull/9585) [`05adaaa2d217a3ecb34244d9b40603f35cef4a37`](https://github.com/withastro/astro/commit/05adaaa2d217a3ecb34244d9b40603f35cef4a37) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where edge middleware did not work.
-
-## 7.0.0
-
-### Major Changes
-
-- [#9661](https://github.com/withastro/astro/pull/9661) [`d6edc7540864cf5d294d7b881eb886a3804f6d05`](https://github.com/withastro/astro/commit/d6edc7540864cf5d294d7b881eb886a3804f6d05) Thanks [@ematipico](https://github.com/ematipico)! - **Breaking**: Minimum required Astro version is now 4.2.0.
- Reorganizes internals to be more maintainable.
- ***
-
-## 6.1.4
-
-### Patch Changes
-
-- [#9648](https://github.com/withastro/astro/pull/9648) [`d7f1903cded3e864b392d1dd7502672d37936f11`](https://github.com/withastro/astro/commit/d7f1903cded3e864b392d1dd7502672d37936f11) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where the serverless function could not respond with a prerendered 404 page.
-
-## 6.1.3
-
-### Patch Changes
-
-- [#9591](https://github.com/withastro/astro/pull/9591) [`22a5405b4a4b7948458ad170b0a7bde6954058c1`](https://github.com/withastro/astro/commit/22a5405b4a4b7948458ad170b0a7bde6954058c1) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where 404.astro was not used in static mode.
-
-- [#9598](https://github.com/withastro/astro/pull/9598) [`bd8fa7acd23ba6e7afa2c435807bd5fd6b24f505`](https://github.com/withastro/astro/commit/bd8fa7acd23ba6e7afa2c435807bd5fd6b24f505) Thanks [@lilnasy](https://github.com/lilnasy)! - Marks the `speedInsights` configuration as deprecated. Vercel has migrated features of the Speed Insights API into a framework-agnostic library with `@vercel/speed-insights`. See [Vercel Speed Insights Quickstart](https://vercel.com/docs/speed-insights/quickstart) for instructions on how to use the library instead.
-
-## 6.1.2
-
-### Patch Changes
-
-- [#9550](https://github.com/withastro/astro/pull/9550) [`7b586a6e23e25653814db9adea9674ec3a9bd535`](https://github.com/withastro/astro/commit/7b586a6e23e25653814db9adea9674ec3a9bd535) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where a build could not complete on Node 21.
-
-## 6.1.1
-
-### Patch Changes
-
-- [#9479](https://github.com/withastro/astro/pull/9479) [`1baf0b0d3cbd0564954c2366a7278794fad6726e`](https://github.com/withastro/astro/commit/1baf0b0d3cbd0564954c2366a7278794fad6726e) Thanks [@sarah11918](https://github.com/sarah11918)! - Updates README
-
-## 6.1.0
-
-### Minor Changes
-
-- [#9413](https://github.com/withastro/astro/pull/9413) [`836ab6214`](https://github.com/withastro/astro/commit/836ab6214e5ef778ef2db2c079f49e87ce70d711) Thanks [@jacobdalamb](https://github.com/jacobdalamb)! - Adds support for Node 20 (currently in `beta` on Vercel).
-
-### Patch Changes
-
-- [#9289](https://github.com/withastro/astro/pull/9289) [`8aeb0b579`](https://github.com/withastro/astro/commit/8aeb0b5797853c2eee7630b572d6abc503d59c6f) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where dots in redirects were incorrectly handled.
-
-## 6.0.2
-
-### Patch Changes
-
-- [#9287](https://github.com/withastro/astro/pull/9287) [`1e342e34e`](https://github.com/withastro/astro/commit/1e342e34eb9cef465b838654cea7bb4b0d24e602) Thanks [@lilnasy](https://github.com/lilnasy)! - Fixes an issue where redirects did not work with the static adapter.
-
-- [#9383](https://github.com/withastro/astro/pull/9383) [`bebf5cf22`](https://github.com/withastro/astro/commit/bebf5cf22d0d842670825aa961529e8b342e2b26) Thanks [@sarah11918](https://github.com/sarah11918)! - Fixes some incorrect code examples in the README documentation.
-
-- [#9334](https://github.com/withastro/astro/pull/9334) [`dfbc70790`](https://github.com/withastro/astro/commit/dfbc7079081d3346713cb536358a3854362a2c95) Thanks [@Geo25rey](https://github.com/Geo25rey)! - Allows the edge middleware to be an async function.
-
-## 6.0.1
-
-### Patch Changes
-
-- [#9348](https://github.com/withastro/astro/pull/9348) [`1685cc42b`](https://github.com/withastro/astro/commit/1685cc42b51603eb98b5ba3e072cf2d3953339f2) Thanks [@matthewp](https://github.com/matthewp)! - Uses the latest astro as the peerDependency
-
-## 6.0.0
-
-### Major Changes
-
-- [#9199](https://github.com/withastro/astro/pull/9199) [`49aa215a0`](https://github.com/withastro/astro/commit/49aa215a01ee1c4805316c85bb0aea6cfbc25a31) Thanks [@lilnasy](https://github.com/lilnasy)! - The internals of the integration have been updated to support Astro 4.0. Make sure to upgrade your Astro version as Astro 3.0 is no longer supported.
-
-- [#9184](https://github.com/withastro/astro/pull/9184) [`a145ac07e`](https://github.com/withastro/astro/commit/a145ac07e75927e13af62e28d13bc8217a362b8e) Thanks [@bluwy](https://github.com/bluwy)! - Removes deprecated `analytics` option. Use the `webAnalytics` option instead.
-
-- [#9263](https://github.com/withastro/astro/pull/9263) [`3cbd8ea75`](https://github.com/withastro/astro/commit/3cbd8ea7534910e3beae396dcfa93ce87dcdd91f) Thanks [@bluwy](https://github.com/bluwy)! - Removes the deprecated `@astrojs/vercel/edge` export. You should use `@astrojs/vercel/serverless` instead with the `edgeMiddleware` option.
-
-## 6.0.0-beta.2
-
-### Major Changes
-
-- [#9263](https://github.com/withastro/astro/pull/9263) [`3cbd8ea75`](https://github.com/withastro/astro/commit/3cbd8ea7534910e3beae396dcfa93ce87dcdd91f) Thanks [@bluwy](https://github.com/bluwy)! - Removes the deprecated `@astrojs/vercel/edge` export. You should use `@astrojs/vercel/serverless` instead with the `edgeMiddleware` option.
-
-## 6.0.0-beta.1
-
-### Major Changes
-
-- [#9199](https://github.com/withastro/astro/pull/9199) [`49aa215a0`](https://github.com/withastro/astro/commit/49aa215a01ee1c4805316c85bb0aea6cfbc25a31) Thanks [@lilnasy](https://github.com/lilnasy)! - The internals of the integration have been updated to support Astro 4.0. Make sure to upgrade your Astro version as Astro 3.0 is no longer supported.
-
-## 6.0.0-beta.0
-
-### Major Changes
-
-- [#9184](https://github.com/withastro/astro/pull/9184) [`a145ac07e`](https://github.com/withastro/astro/commit/a145ac07e75927e13af62e28d13bc8217a362b8e) Thanks [@bluwy](https://github.com/bluwy)! - Removes deprecated `analytics` option. Use the `webAnalytics` option instead.
-
-### Patch Changes
-
-- Updated dependencies [[`abf601233`](https://github.com/withastro/astro/commit/abf601233f8188d118a8cb063c777478d8d9f1a3), [`6201bbe96`](https://github.com/withastro/astro/commit/6201bbe96c2a083fb201e4a43a9bd88499821a3e), [`cdabf6ef0`](https://github.com/withastro/astro/commit/cdabf6ef02be7220fd2b6bdcef924ceca089381e), [`1c48ed286`](https://github.com/withastro/astro/commit/1c48ed286538ab9e354eca4e4dcd7c6385c96721), [`37697a2c5`](https://github.com/withastro/astro/commit/37697a2c5511572dc29c0a4ea46f90c2f62be8e6), [`bd0c2e9ae`](https://github.com/withastro/astro/commit/bd0c2e9ae3389a9d3085050c1e8134ae98dff299), [`0fe3a7ed5`](https://github.com/withastro/astro/commit/0fe3a7ed5d7bb1a9fce1623e84ba14104b51223c), [`710be505c`](https://github.com/withastro/astro/commit/710be505c9ddf416e77a75343d8cae9c497d72c6), [`153a5abb9`](https://github.com/withastro/astro/commit/153a5abb905042ac68b712514dc9ec387d3e6b17)]:
- - astro@4.0.0-beta.0
-
-## 5.2.0
-
-### Minor Changes
-
-- [#8879](https://github.com/withastro/astro/pull/8879) [`754e4fd31`](https://github.com/withastro/astro/commit/754e4fd31ce49eadb2cf4951e941a48d11d10e73) Thanks [@lilnasy](https://github.com/lilnasy)! - The Vercel adapter now streams responses!
-
- This brings better performance to your visitors by showing them content as it is rendered. The browser can also start loading the required stylesheets and scripts much sooner, which ultimately results in faster full page loads.
-
-## 5.1.0
-
-### Minor Changes
-
-- [#8867](https://github.com/withastro/astro/pull/8867) [`b209e5335`](https://github.com/withastro/astro/commit/b209e533584521c55f88b929f28ea9d5189045f9) Thanks [@lilnasy](https://github.com/lilnasy)! - You can now configure how long your functions can run before timing out.
-
- ```diff
- export default defineConfig({
- output: "server",
- adapter: vercel({
- + maxDuration: 60
- }),
- });
- ```
-
-### Patch Changes
-
-- [#8896](https://github.com/withastro/astro/pull/8896) [`5dd1ed50b`](https://github.com/withastro/astro/commit/5dd1ed50b2f9428946b0b273e0ce8f13c19aa3b5) Thanks [@bluwy](https://github.com/bluwy)! - Prevents the Vercel serverless adapter from generating static redirect pages in hybrid mode
-
-- Updated dependencies [[`26b77b8fe`](https://github.com/withastro/astro/commit/26b77b8fef0e03bfc5550aecaa1f56a4fc1cd297)]:
- - astro@3.3.4
-
-## 5.0.2
-
-### Patch Changes
-
-- [#8737](https://github.com/withastro/astro/pull/8737) [`6f60da805`](https://github.com/withastro/astro/commit/6f60da805e0014bc50dd07bef972e91c73560c3c) Thanks [@ematipico](https://github.com/ematipico)! - Add provenance statement when publishing the library from CI
-
-- Updated dependencies [[`6f60da805`](https://github.com/withastro/astro/commit/6f60da805e0014bc50dd07bef972e91c73560c3c), [`d78806dfe`](https://github.com/withastro/astro/commit/d78806dfe0301ea7ffe6c7c1f783bd415ac7cda9), [`d1c75fe15`](https://github.com/withastro/astro/commit/d1c75fe158839699c59728cf3a83888e8c72a459), [`aa265d730`](https://github.com/withastro/astro/commit/aa265d73024422967c1b1c68ad268c419c6c798f), [`78adbc443`](https://github.com/withastro/astro/commit/78adbc4433208458291e36713909762e148e1e5d), [`21e0757ea`](https://github.com/withastro/astro/commit/21e0757ea22a57d344c934045ca19db93b684436), [`357270f2a`](https://github.com/withastro/astro/commit/357270f2a3d0bf2aa634ba7e52e9d17618eff4a7)]:
- - @astrojs/internal-helpers@0.2.1
- - astro@3.2.3
-
-## 5.0.1
-
-### Patch Changes
-
-- [#8581](https://github.com/withastro/astro/pull/8581) [`d0e513f21`](https://github.com/withastro/astro/commit/d0e513f214fe3cb30bab6d98936cda796477f2f8) Thanks [@rishi-raj-jain](https://github.com/rishi-raj-jain)! - log only once in serverless adapter
-
-- Updated dependencies [[`8d361169b`](https://github.com/withastro/astro/commit/8d361169b8e487933d671ce347f0ce74922c80cc), [`95b5f6280`](https://github.com/withastro/astro/commit/95b5f6280d124f8d6f866dc3286406c272ee91bf), [`0586e20e8`](https://github.com/withastro/astro/commit/0586e20e8338e077b8eb1a3a96bdd19f5950c22f)]:
- - astro@3.1.1
-
-## 5.0.0
-
-### Major Changes
-
-- [#8445](https://github.com/withastro/astro/pull/8445) [`91380378c`](https://github.com/withastro/astro/commit/91380378cef545656d2c085117fc5f38c9ce4589) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Adds a configuration option `devImageService` to choose which of the built-in image services to use in development. Defaults to `sharp`.
-
-- [#8546](https://github.com/withastro/astro/pull/8546) [`b79e11f3c`](https://github.com/withastro/astro/commit/b79e11f3c480e8e165d5b102adb1f2f8a089f29d) Thanks [@matthewp](https://github.com/matthewp)! - Turn off `functionPerRoute` by default
-
- In the previous version of `@astrojs/vercel`, the default for `functionPerRoute` was changed to `true`. While this option has several advantages, if you're a free tier user you are likely to run into the limit of 12 functions per deployment. This will result in an error when you attempt to deploy.
-
- For this reason, the `functionPerRoute` option is now back to defaulting to `false`. It's still a useful option if you have a paid plan and have previously run into issues with your single function exceeding the size limits.
-
-### Minor Changes
-
-- [#8021](https://github.com/withastro/astro/pull/8021) [`2e8726fee`](https://github.com/withastro/astro/commit/2e8726feec2e0d6ba8bd4db941009986e8e34141) Thanks [@chriswdmr](https://github.com/chriswdmr)! - Enable Vercel Speed Insights and Vercel Web Analytics individually.
- Deprecates the `analytics` property in `astro.config.mjs` in favor of `speedInsights` and `webAnalytics`.
-
- If you're using the `analytics` property, you'll need to update your config to use the new properties:
-
- ```diff
- // astro.config.mjs
- export default defineConfig({
- adapter: vercel({
- - analytics: true,
- + webAnalytics: {
- + enabled: true
- + },
- + speedInsights: {
- + enabled: true
- + }
- })
- });
- ```
-
- Allow configuration of Web Analytics with all available configuration options.
- Bumps @vercel/analytics package to the latest version.
-
-### Patch Changes
-
-- Updated dependencies [[`7522bb491`](https://github.com/withastro/astro/commit/7522bb4914f2f9e8b8f3c743bc9c941fd3aca644), [`ecc65abbf`](https://github.com/withastro/astro/commit/ecc65abbf9e086c5bbd1973cd4a820082b4e0dc5), [`2c4fc878b`](https://github.com/withastro/astro/commit/2c4fc878bece36b7fcf1470419c7ce6f1e1e95d0), [`c92e0acd7`](https://github.com/withastro/astro/commit/c92e0acd715171b3f4c3294099780e21576648c8), [`f95febf96`](https://github.com/withastro/astro/commit/f95febf96bb97babb28d78994332f5e47f5f637d), [`b85c8a78a`](https://github.com/withastro/astro/commit/b85c8a78a116dbbddc901438bc0b7a1917dc0238), [`45364c345`](https://github.com/withastro/astro/commit/45364c345267429e400baecd1fbc290503f8b13a)]:
- - astro@3.1.0
-
-## 4.0.5
-
-### Patch Changes
-
-- [#8452](https://github.com/withastro/astro/pull/8452) [`7ea32c7fb`](https://github.com/withastro/astro/commit/7ea32c7fbf4fc74a3c0fa7319561243c4e262e99) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fix Astro's `domains` and `remotePatterns` not being used by Vercel when using Vercel Image Optimization
-
-- Updated dependencies [[`f66053a1e`](https://github.com/withastro/astro/commit/f66053a1ea0a4e3bdb0b0df12bb1bf56e1ea2618), [`0fa483283`](https://github.com/withastro/astro/commit/0fa483283e54c94f173838cd558dc0dbdd11e699)]:
- - astro@3.0.11
-
-## 4.0.4
-
-### Patch Changes
-
-- [#8408](https://github.com/withastro/astro/pull/8408) [`9ffa1a84e`](https://github.com/withastro/astro/commit/9ffa1a84e81f52d55ffe07826b8b1f10fc023ee9) Thanks [@slawekkolodziej](https://github.com/slawekkolodziej)! - Fix serverless function naming conflicts for routes with identical filenames but different directory structures
-
-- Updated dependencies [[`7d95bd9ba`](https://github.com/withastro/astro/commit/7d95bd9baaf755239fd7d35e4813861b2dbccf42), [`1947ef7a9`](https://github.com/withastro/astro/commit/1947ef7a99ce3d1d6ea797842edd31d5edffa5de), [`61ad70fdc`](https://github.com/withastro/astro/commit/61ad70fdc52035964c43ecdb4cf7468f6c2b61e7), [`d2f2a11cd`](https://github.com/withastro/astro/commit/d2f2a11cdb42b0de79be21c798eda8e7e7b2a277), [`5126c6a40`](https://github.com/withastro/astro/commit/5126c6a40f88bff66ee5d3c3a21eea8c4a44ce7a), [`48ff7855b`](https://github.com/withastro/astro/commit/48ff7855b238536a3df17cb29335c90029fc41a4), [`923a443cb`](https://github.com/withastro/astro/commit/923a443cb060a0e936a0e1cc87c0360232f77914), [`8935b3b46`](https://github.com/withastro/astro/commit/8935b3b4672d6c54c7b79e6c4575298f75eeb9f4)]:
- - astro@3.0.9
-
-## 4.0.3
-
-### Patch Changes
-
-- [#8348](https://github.com/withastro/astro/pull/8348) [`5f2c55bb5`](https://github.com/withastro/astro/commit/5f2c55bb54bb66693d278b7cd705c198aecc0331) Thanks [@ematipico](https://github.com/ematipico)! - - Cache result during bundling, to speed up the process of multiple functions;
-
- - Avoid creating multiple symbolic links of the dependencies when building the project with `functionPerRoute` enabled;
-
-- [#8354](https://github.com/withastro/astro/pull/8354) [`0eb09dbab`](https://github.com/withastro/astro/commit/0eb09dbab1674a57d23ac97950a527d2e5a9c9fb) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fix unnecessary warning about Sharp showing while building
-
-- Updated dependencies [[`d3a6f9f83`](https://github.com/withastro/astro/commit/d3a6f9f836e35932a950e40ba69eff63d7db7eed), [`f21599671`](https://github.com/withastro/astro/commit/f21599671a90c3327307eb6d2f4d5c02e9137207)]:
- - astro@3.0.6
-
-## 4.0.2
-
-### Patch Changes
-
-- [#8318](https://github.com/withastro/astro/pull/8318) [`c58472756`](https://github.com/withastro/astro/commit/c58472756ea30d2496592b2bde390cf858c1876f) Thanks [@ematipico](https://github.com/ematipico)! - Add astro feature map and adapter features to the static adapter. This will remove the warning emitted by Astro.
-
-- Updated dependencies [[`5f3a44aee`](https://github.com/withastro/astro/commit/5f3a44aeeff3c5f31a8063b6005abb90343a817e), [`b21038c19`](https://github.com/withastro/astro/commit/b21038c193fd30351235a1b241a4a0aaf4e692f2), [`7a894eec3`](https://github.com/withastro/astro/commit/7a894eec3e6d2670632ca8cdb592cf5649a22d3e), [`af41b03d0`](https://github.com/withastro/astro/commit/af41b03d05f8a561990de42ccc93663343da2c0d)]:
- - astro@3.0.5
-
-## 4.0.1
-
-### Patch Changes
-
-- [#8328](https://github.com/withastro/astro/pull/8328) [`8fff0e9ae`](https://github.com/withastro/astro/commit/8fff0e9aebec5ff8c2516ed6dbcccb307c20ce45) Thanks [@matthewp](https://github.com/matthewp)! - Update verbiage of Vercel warning
-
-- [#8319](https://github.com/withastro/astro/pull/8319) [`dc29e0f79`](https://github.com/withastro/astro/commit/dc29e0f797398678d16a3a7154443e0f2dd48077) Thanks [@ematipico](https://github.com/ematipico)! - Add warning when `functionPerRoute` is set to `true`
-
-- Updated dependencies [[`0752cf368`](https://github.com/withastro/astro/commit/0752cf3688eaac535ceda1ebcd22ccaf20b2171f)]:
- - astro@3.0.4
-
-## 4.0.0
-
-### Major Changes
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`d0679a666`](https://github.com/withastro/astro/commit/d0679a666f37da0fca396d42b9b32bbb25d29312) Thanks [@ematipico](https://github.com/ematipico)! - Remove support for Node 16. The lowest supported version by Astro and all integrations is now v18.14.1. As a reminder, Node 16 will be deprecated on the 11th September 2023.
-
-- [#8179](https://github.com/withastro/astro/pull/8179) [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7) Thanks [@matthewp](https://github.com/matthewp)! - Astro 3.0 Release Candidate
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`7511a4980`](https://github.com/withastro/astro/commit/7511a4980fd36536464c317de33a5190427f430a) Thanks [@ematipico](https://github.com/ematipico)! - When using an adapter that supports neither Squoosh or Sharp, Astro will now automatically use an image service that does not support processing, but still provides the other benefits of `astro:assets` such as enforcing `alt`, no CLS etc to users
-
-- [#8015](https://github.com/withastro/astro/pull/8015) [`9cc4e48e6`](https://github.com/withastro/astro/commit/9cc4e48e6a858d3a12e6373a5e287b32d24a1c5a) Thanks [@matthewp](https://github.com/matthewp)! - Remove the Vercel Edge adapter
-
- `@astrojs/vercel/serverless` now supports Edge middleware, so a separate adapter for Edge itself (deploying your entire app to the edge) is no longer necessary. Please update your Astro config to reflect this change:
-
- ```diff
- // astro.config.mjs
- import { defineConfig } from 'astro/config';
- - import vercel from '@astrojs/vercel/edge';
- + import vercel from '@astrojs/vercel/serverless';
-
- export default defineConfig({
- output: 'server',
- adapter: vercel({
- + edgeMiddleware: true
- }),
- });
- ```
-
- This adapter had several known limitations and compatibility issues that prevented many people from using it in production. To reduce maintenance costs and because we have a better story with Serveless + Edge Middleware, we are removing the Edge adapter.
-
-- [#8239](https://github.com/withastro/astro/pull/8239) [`52f0837bd`](https://github.com/withastro/astro/commit/52f0837bdeca0b54e07cbf76a7570bd042b98922) Thanks [@matthewp](https://github.com/matthewp)! - Vercel adapter now defaults to `functionPerRoute`.
-
- With this change, `@astrojs/vercel/serverless` now splits each route into its own function. By doing this, the size of each function is reduced and startup time is faster.
-
- You can disable this option, which will cause the code to be bundled into a single function, by setting `functionPerRoute` to `false`.
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`148e61d24`](https://github.com/withastro/astro/commit/148e61d2492456811f8a3c8daaab1c3429a2ffdc) Thanks [@ematipico](https://github.com/ematipico)! - Reduced the amount of polyfills provided by Astro. Astro will no longer provide (no-op) polyfills for several web apis such as HTMLElement, Image or Document. If you need access to those APIs on the server, we recommend using more proper polyfills available on npm.
-
-### Minor Changes
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`cd2d7e769`](https://github.com/withastro/astro/commit/cd2d7e76981ef9b9013453aa2629838e1e9fd422) Thanks [@ematipico](https://github.com/ematipico)! - Introduced the concept of feature map. A feature map is a list of features that are built-in in Astro, and an Adapter
- can tell Astro if it can support it.
-
- ```ts
- import { AstroIntegration } from './astro';
-
- function myIntegration(): AstroIntegration {
- return {
- name: 'astro-awesome-list',
- // new feature map
- supportedAstroFeatures: {
- hybridOutput: 'experimental',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: false,
- isSquooshCompatible: false,
- },
- },
- };
- }
- ```
-
-- [#8188](https://github.com/withastro/astro/pull/8188) [`80f1494cd`](https://github.com/withastro/astro/commit/80f1494cdaf72e58a420adb4f7c712d4089e1923) Thanks [@ematipico](https://github.com/ematipico)! - The `build.split` and `build.excludeMiddleware` configuration options are deprecated and have been replaced by options in the adapter config.
-
- If your config includes the `build.excludeMiddleware` option, replace it with `edgeMiddleware` in your adapter options:
-
- ```diff
- import { defineConfig } from "astro/config";
- import vercel from "@astrojs/vercel/serverless";
-
- export default defineConfig({
- build: {
- - excludeMiddleware: true
- },
- adapter: vercel({
- + edgeMiddleware: true
- }),
- });
- ```
-
- If your config includes the `build.split` option, replace it with `functionPerRoute` in your adapter options:
-
- ```diff
- import { defineConfig } from "astro/config";
- import vercel from "@astrojs/vercel/serverless";
-
- export default defineConfig({
- build: {
- - split: true
- },
- adapter: vercel({
- + functionPerRoute: true
- }),
- });
- ```
-
-### Patch Changes
-
-- Updated dependencies [[`d0679a666`](https://github.com/withastro/astro/commit/d0679a666f37da0fca396d42b9b32bbb25d29312), [`db39206cb`](https://github.com/withastro/astro/commit/db39206cbb85b034859ac416179f141184bb2bff), [`2aa6d8ace`](https://github.com/withastro/astro/commit/2aa6d8ace398a41c2dec5473521d758816b08191), [`adf9fccfd`](https://github.com/withastro/astro/commit/adf9fccfdda107c2224558f1c2e6a77847ac0a8a), [`0c7b42dc6`](https://github.com/withastro/astro/commit/0c7b42dc6780e687e416137539f55a3a427d1d10), [`46c4c0e05`](https://github.com/withastro/astro/commit/46c4c0e053f830585b9ef229ce1c259df00a80f8), [`364d861bd`](https://github.com/withastro/astro/commit/364d861bd527b8511968e2837728148f090bedef), [`2484dc408`](https://github.com/withastro/astro/commit/2484dc4080e5cd84b9a53648a1de426d7c907be2), [`81545197a`](https://github.com/withastro/astro/commit/81545197a32fd015d763fc386c8b67e0e08b7393), [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7), [`c2c71d90c`](https://github.com/withastro/astro/commit/c2c71d90c264a2524f99e0373ab59015f23ad4b1), [`cd2d7e769`](https://github.com/withastro/astro/commit/cd2d7e76981ef9b9013453aa2629838e1e9fd422), [`80f1494cd`](https://github.com/withastro/astro/commit/80f1494cdaf72e58a420adb4f7c712d4089e1923), [`e45f30293`](https://github.com/withastro/astro/commit/e45f3029340db718b6ed7e91b5d14f5cf14cd71d), [`c0de7a7b0`](https://github.com/withastro/astro/commit/c0de7a7b0f042cd49cbea4f4ac1b2ab6f9fef644), [`65c354969`](https://github.com/withastro/astro/commit/65c354969e6fe0ef6d622e8f4c545e2f717ce8c6), [`3c3100851`](https://github.com/withastro/astro/commit/3c31008519ce68b5b1b1cb23b71fbe0a2d506882), [`34cb20021`](https://github.com/withastro/astro/commit/34cb2002161ba88df6bcb72fecfd12ed867c134b), [`a824863ab`](https://github.com/withastro/astro/commit/a824863ab1c451f4068eac54f28dd240573e1cba), [`44f7a2872`](https://github.com/withastro/astro/commit/44f7a28728c56c04ac377b6e917329f324874043), [`1048aca55`](https://github.com/withastro/astro/commit/1048aca550769415e528016e42b358ffbfd44b61), [`be6bbd2c8`](https://github.com/withastro/astro/commit/be6bbd2c86b9bf5268e765bb937dda00ff15781a), [`9e021a91c`](https://github.com/withastro/astro/commit/9e021a91c57d10809f588dd47968fc0e7f8b4d5c), [`7511a4980`](https://github.com/withastro/astro/commit/7511a4980fd36536464c317de33a5190427f430a), [`c37632a20`](https://github.com/withastro/astro/commit/c37632a20d06164fb97a4c2fc48df6d960398832), [`acf652fc1`](https://github.com/withastro/astro/commit/acf652fc1d5db166231e87e22d0d50444f5556d8), [`42785c7b7`](https://github.com/withastro/astro/commit/42785c7b784b151e6d582570e5d74482129e8eb8), [`8450379db`](https://github.com/withastro/astro/commit/8450379db854fb1eaa9f38f21d65db240bc616cd), [`dbc97b121`](https://github.com/withastro/astro/commit/dbc97b121f42583728f1cdfdbf14575fda943f5b), [`7d2f311d4`](https://github.com/withastro/astro/commit/7d2f311d428e3d1c8c13b9bf2a708d6435713fc2), [`2540feedb`](https://github.com/withastro/astro/commit/2540feedb06785d5a20eecc3668849f147d778d4), [`ea7ff5177`](https://github.com/withastro/astro/commit/ea7ff5177dbcd7b2508cb1eef1b22b8ee1f47079), [`68efd4a8b`](https://github.com/withastro/astro/commit/68efd4a8b29f248397667801465b3152dc98e9a7), [`7bd1b86f8`](https://github.com/withastro/astro/commit/7bd1b86f85c06fdde0a1ed9146d01bac69990671), [`036388f66`](https://github.com/withastro/astro/commit/036388f66dab68ad54b895ed86f9176958dd83c8), [`519a1c4e8`](https://github.com/withastro/astro/commit/519a1c4e8407c7abcb8d879b67a9f4b960652cae), [`1f58a7a1b`](https://github.com/withastro/astro/commit/1f58a7a1bea6888868b689dac94801d554319b02), [`2ae9d37f0`](https://github.com/withastro/astro/commit/2ae9d37f0a9cb21ab288d3c30aecb6d84db87788), [`a8f35777e`](https://github.com/withastro/astro/commit/a8f35777e7e322068a4e2f520c2c9e43ade19e58), [`70f34f5a3`](https://github.com/withastro/astro/commit/70f34f5a355f42526ee9e5355f3de8e510002ea2), [`5208a3c8f`](https://github.com/withastro/astro/commit/5208a3c8fefcec7694857fb344af351f4631fc34), [`84af8ed9d`](https://github.com/withastro/astro/commit/84af8ed9d1e6401c6ebc9c60fe8cddb44d5044b0), [`f003e7364`](https://github.com/withastro/astro/commit/f003e7364317cafdb8589913b26b28e928dd07c9), [`ffc9e2d3d`](https://github.com/withastro/astro/commit/ffc9e2d3de46049bf3d82140ef018f524fb03187), [`732111cdc`](https://github.com/withastro/astro/commit/732111cdce441639db31f40f621df48442d00969), [`0f637c71e`](https://github.com/withastro/astro/commit/0f637c71e511cb4c51712128d217a26c8eee4d40), [`33b8910cf`](https://github.com/withastro/astro/commit/33b8910cfdce5713891c50a84a0a8fe926311710), [`8a5b0c1f3`](https://github.com/withastro/astro/commit/8a5b0c1f3a4be6bb62db66ec70144109ff5b4c59), [`148e61d24`](https://github.com/withastro/astro/commit/148e61d2492456811f8a3c8daaab1c3429a2ffdc), [`e79e3779d`](https://github.com/withastro/astro/commit/e79e3779df0ad35253abcdb931d622847d9adb12), [`632579dc2`](https://github.com/withastro/astro/commit/632579dc2094cc342929261c89e689f0dd358284), [`3674584e0`](https://github.com/withastro/astro/commit/3674584e02b161a698b429ceb66723918fdc56ac), [`1db4e92c1`](https://github.com/withastro/astro/commit/1db4e92c12ed73681217f5cefd39f2f47542f961), [`e7f872e91`](https://github.com/withastro/astro/commit/e7f872e91e852b901cf221a5151077dec64305bf), [`16f09dfff`](https://github.com/withastro/astro/commit/16f09dfff7722fda99dd0412e3006a7a39c80829), [`4477bb41c`](https://github.com/withastro/astro/commit/4477bb41c8ed688785c545731ef5b184b629f4e5), [`55c10d1d5`](https://github.com/withastro/astro/commit/55c10d1d564e805efc3c1a7c48e0d9a1cdf0c7ed), [`3e834293d`](https://github.com/withastro/astro/commit/3e834293d47ab2761a7aa013916e8371871efb7f), [`96beb883a`](https://github.com/withastro/astro/commit/96beb883ad87f8bbf5b2f57e14a743763d2a6f58), [`997a0db8a`](https://github.com/withastro/astro/commit/997a0db8a4e3851edd69384cf5eadbb969e1d547), [`80f1494cd`](https://github.com/withastro/astro/commit/80f1494cdaf72e58a420adb4f7c712d4089e1923), [`0f0625504`](https://github.com/withastro/astro/commit/0f0625504145f18cba7dc6cf20291cb2abddc5a9), [`e1ae56e72`](https://github.com/withastro/astro/commit/e1ae56e724d0f83db1230359e06cd6bc26f5fa26), [`f32d093a2`](https://github.com/withastro/astro/commit/f32d093a280faafff024228c12bb438156ec34d7), [`f01eb585e`](https://github.com/withastro/astro/commit/f01eb585e7c972d940761309b1595f682b6922d2), [`b76c166bd`](https://github.com/withastro/astro/commit/b76c166bdd8e28683f62806aef968d1e0c3b06d9), [`a87cbe400`](https://github.com/withastro/astro/commit/a87cbe400314341d5f72abf86ea264e6b47c091f), [`866ed4098`](https://github.com/withastro/astro/commit/866ed4098edffb052239cdb26e076cf8db61b1d9), [`767eb6866`](https://github.com/withastro/astro/commit/767eb68666eb777965baa0d6ade20bbafecf95bf), [`32669cd47`](https://github.com/withastro/astro/commit/32669cd47555e9c7433c3998a2b6e624dfb2d8e9)]:
- - astro@3.0.0
- - @astrojs/internal-helpers@0.2.0
-
-## 4.0.0-rc.5
-
-### Major Changes
-
-- [#8239](https://github.com/withastro/astro/pull/8239) [`52f0837bd`](https://github.com/withastro/astro/commit/52f0837bdeca0b54e07cbf76a7570bd042b98922) Thanks [@matthewp](https://github.com/matthewp)! - Vercel adapter now defaults to `functionPerRoute`.
-
- With this change, `@astrojs/vercel/serverless` now splits each route into its own function. By doing this, the size of each function is reduced and startup time is faster.
-
- You can disable this option, which will cause the code to be bundled into a single function, by setting `functionPerRoute` to `false`.
-
-### Patch Changes
-
-- Updated dependencies [[`46c4c0e05`](https://github.com/withastro/astro/commit/46c4c0e053f830585b9ef229ce1c259df00a80f8), [`1048aca55`](https://github.com/withastro/astro/commit/1048aca550769415e528016e42b358ffbfd44b61), [`ffc9e2d3d`](https://github.com/withastro/astro/commit/ffc9e2d3de46049bf3d82140ef018f524fb03187), [`3674584e0`](https://github.com/withastro/astro/commit/3674584e02b161a698b429ceb66723918fdc56ac)]:
- - astro@3.0.0-rc.8
-
-## 4.0.0-rc.4
-
-### Major Changes
-
-- [#8179](https://github.com/withastro/astro/pull/8179) [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7) Thanks [@matthewp](https://github.com/matthewp)! - Astro 3.0 Release Candidate
-
-### Patch Changes
-
-- Updated dependencies [[`adf9fccfd`](https://github.com/withastro/astro/commit/adf9fccfdda107c2224558f1c2e6a77847ac0a8a), [`582132328`](https://github.com/withastro/astro/commit/5821323285646aee7ff9194a505f708028e4db57), [`81545197a`](https://github.com/withastro/astro/commit/81545197a32fd015d763fc386c8b67e0e08b7393), [`6011d52d3`](https://github.com/withastro/astro/commit/6011d52d38e43c3e3d52bc3bc41a60e36061b7b7), [`be6bbd2c8`](https://github.com/withastro/astro/commit/be6bbd2c86b9bf5268e765bb937dda00ff15781a), [`42785c7b7`](https://github.com/withastro/astro/commit/42785c7b784b151e6d582570e5d74482129e8eb8), [`95120efbe`](https://github.com/withastro/astro/commit/95120efbe817163663492181cbeb225849354493), [`2ae9d37f0`](https://github.com/withastro/astro/commit/2ae9d37f0a9cb21ab288d3c30aecb6d84db87788), [`f003e7364`](https://github.com/withastro/astro/commit/f003e7364317cafdb8589913b26b28e928dd07c9), [`732111cdc`](https://github.com/withastro/astro/commit/732111cdce441639db31f40f621df48442d00969), [`33b8910cf`](https://github.com/withastro/astro/commit/33b8910cfdce5713891c50a84a0a8fe926311710), [`e79e3779d`](https://github.com/withastro/astro/commit/e79e3779df0ad35253abcdb931d622847d9adb12), [`179796405`](https://github.com/withastro/astro/commit/179796405e053b559d83f84507e5a465861a029a), [`a87cbe400`](https://github.com/withastro/astro/commit/a87cbe400314341d5f72abf86ea264e6b47c091f), [`767eb6866`](https://github.com/withastro/astro/commit/767eb68666eb777965baa0d6ade20bbafecf95bf)]:
- - astro@3.0.0-rc.5
- - @astrojs/internal-helpers@0.2.0-rc.2
-
-## 4.0.0-beta.3
-
-### Patch Changes
-
-- [#7778](https://github.com/withastro/astro/pull/7778) [`d6b494376`](https://github.com/withastro/astro/commit/d6b4943764989c0e89df2d6875cd19691566dfb3) Thanks [@y-nk](https://github.com/y-nk)! - Update image support to work with latest version of Astro
-
-- Updated dependencies [[`2484dc408`](https://github.com/withastro/astro/commit/2484dc4080e5cd84b9a53648a1de426d7c907be2), [`c2c71d90c`](https://github.com/withastro/astro/commit/c2c71d90c264a2524f99e0373ab59015f23ad4b1), [`7177f7579`](https://github.com/withastro/astro/commit/7177f7579b6e866f0fd895b3fd079d8ba330b1a9), [`097a8e4e9`](https://github.com/withastro/astro/commit/097a8e4e916c7df18eafdaa6c8d6ce2991c17ab6), [`dbc97b121`](https://github.com/withastro/astro/commit/dbc97b121f42583728f1cdfdbf14575fda943f5b), [`2540feedb`](https://github.com/withastro/astro/commit/2540feedb06785d5a20eecc3668849f147d778d4), [`ea7ff5177`](https://github.com/withastro/astro/commit/ea7ff5177dbcd7b2508cb1eef1b22b8ee1f47079), [`68efd4a8b`](https://github.com/withastro/astro/commit/68efd4a8b29f248397667801465b3152dc98e9a7), [`0e0fa605d`](https://github.com/withastro/astro/commit/0e0fa605d109cc91e08a1ae1cc560ea240fe631b), [`5208a3c8f`](https://github.com/withastro/astro/commit/5208a3c8fefcec7694857fb344af351f4631fc34), [`8a5b0c1f3`](https://github.com/withastro/astro/commit/8a5b0c1f3a4be6bb62db66ec70144109ff5b4c59), [`d6b494376`](https://github.com/withastro/astro/commit/d6b4943764989c0e89df2d6875cd19691566dfb3), [`4477bb41c`](https://github.com/withastro/astro/commit/4477bb41c8ed688785c545731ef5b184b629f4e5), [`3e834293d`](https://github.com/withastro/astro/commit/3e834293d47ab2761a7aa013916e8371871efb7f), [`b76c166bd`](https://github.com/withastro/astro/commit/b76c166bdd8e28683f62806aef968d1e0c3b06d9)]:
- - astro@3.0.0-beta.3
-
-## 4.0.0-beta.2
-
-### Patch Changes
-
-- Updated dependencies [[`2aa6d8ace`](https://github.com/withastro/astro/commit/2aa6d8ace398a41c2dec5473521d758816b08191)]:
- - @astrojs/internal-helpers@0.2.0-beta.1
- - astro@3.0.0-beta.2
-
-## 4.0.0-beta.1
-
-### Major Changes
-
-- [#8015](https://github.com/withastro/astro/pull/8015) [`9cc4e48e6`](https://github.com/withastro/astro/commit/9cc4e48e6a858d3a12e6373a5e287b32d24a1c5a) Thanks [@matthewp](https://github.com/matthewp)! - Remove the Vercel Edge adapter
-
- `@astrojs/vercel/serverless` now supports Edge middleware, so a separate adapter for Edge itself (deploying your entire app to the edge) is no longer necessary. Please update your Astro config to reflect this change:
-
- ```diff
- // astro.config.mjs
- import { defineConfig } from 'astro/config';
- - import vercel from '@astrojs/vercel/edge';
- + import vercel from '@astrojs/vercel/serverless';
-
- export default defineConfig({
- output: 'server',
- adapter: vercel({
- + edgeMiddleware: true
- }),
- });
- ```
-
- This adapter had several known limitations and compatibility issues that prevented many people from using it in production. To reduce maintenance costs and because we have a better story with Serveless + Edge Middleware, we are removing the Edge adapter.
-
-### Patch Changes
-
-- Updated dependencies [[`65c354969`](https://github.com/withastro/astro/commit/65c354969e6fe0ef6d622e8f4c545e2f717ce8c6), [`3c3100851`](https://github.com/withastro/astro/commit/3c31008519ce68b5b1b1cb23b71fbe0a2d506882), [`34cb20021`](https://github.com/withastro/astro/commit/34cb2002161ba88df6bcb72fecfd12ed867c134b), [`7bd1b86f8`](https://github.com/withastro/astro/commit/7bd1b86f85c06fdde0a1ed9146d01bac69990671), [`519a1c4e8`](https://github.com/withastro/astro/commit/519a1c4e8407c7abcb8d879b67a9f4b960652cae), [`70f34f5a3`](https://github.com/withastro/astro/commit/70f34f5a355f42526ee9e5355f3de8e510002ea2), [`0f637c71e`](https://github.com/withastro/astro/commit/0f637c71e511cb4c51712128d217a26c8eee4d40), [`866ed4098`](https://github.com/withastro/astro/commit/866ed4098edffb052239cdb26e076cf8db61b1d9), [`5b1e39ef6`](https://github.com/withastro/astro/commit/5b1e39ef6ec6dcebea96584f95d9530bd9aa715d)]:
- - astro@3.0.0-beta.1
-
-## 4.0.0-beta.0
-
-### Major Changes
-
-- [`1eae2e3f7`](https://github.com/withastro/astro/commit/1eae2e3f7d693c9dfe91c8ccfbe606d32bf2fb81) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 16. The lowest supported version by Astro and all integrations is now v18.14.1. As a reminder, Node 16 will be deprecated on the 11th September 2023.
-
-- [`c022a4217`](https://github.com/withastro/astro/commit/c022a4217a805d223c1494e9eda4e48bbf810388) Thanks [@Princesseuh](https://github.com/Princesseuh)! - When using an adapter that supports neither Squoosh or Sharp, Astro will now automatically use an image service that does not support processing, but still provides the other benefits of `astro:assets` such as enforcing `alt`, no CLS etc to users
-
-- [`3dc1ca2fa`](https://github.com/withastro/astro/commit/3dc1ca2fac8d9965cc5085a5d09e72ed87b4281a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Reduced the amount of polyfills provided by Astro. Astro will no longer provide (no-op) polyfills for several web apis such as HTMLElement, Image or Document. If you need access to those APIs on the server, we recommend using more proper polyfills available on npm.
-
-### Minor Changes
-
-- [`9b4f70a62`](https://github.com/withastro/astro/commit/9b4f70a629f55e461759ba46f68af7097a2e9215) Thanks [@ematipico](https://github.com/ematipico)! - Introduced the concept of feature map. A feature map is a list of features that are built-in in Astro, and an Adapter
- can tell Astro if it can support it.
-
- ```ts
- import { AstroIntegration } from './astro';
-
- function myIntegration(): AstroIntegration {
- return {
- name: 'astro-awesome-list',
- // new feature map
- supportedAstroFeatures: {
- hybridOutput: 'experimental',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: false,
- isSquooshCompatible: false,
- },
- },
- };
- }
- ```
-
-- [`3fdf509b2`](https://github.com/withastro/astro/commit/3fdf509b2731a9b2f972d89291e57cf78d62c769) Thanks [@ematipico](https://github.com/ematipico)! - The `build.split` and `build.excludeMiddleware` configuration options are deprecated and have been replaced by options in the adapter config.
-
- If your config includes the `build.excludeMiddleware` option, replace it with `edgeMiddleware` in your adapter options:
-
- ```diff
- import { defineConfig } from "astro/config";
- import vercel from "@astrojs/vercel/serverless";
-
- export default defineConfig({
- build: {
- - excludeMiddleware: true
- },
- adapter: vercel({
- + edgeMiddleware: true
- }),
- });
- ```
-
- If your config includes the `build.split` option, replace it with `functionPerRoute` in your adapter options:
-
- ```diff
- import { defineConfig } from "astro/config";
- import vercel from "@astrojs/vercel/serverless";
-
- export default defineConfig({
- build: {
- - split: true
- },
- adapter: vercel({
- + functionPerRoute: true
- }),
- });
- ```
-
-### Patch Changes
-
-- Updated dependencies [[`1eae2e3f7`](https://github.com/withastro/astro/commit/1eae2e3f7d693c9dfe91c8ccfbe606d32bf2fb81), [`76ddef19c`](https://github.com/withastro/astro/commit/76ddef19ccab6e5f7d3a5740cd41acf10e334b38), [`9b4f70a62`](https://github.com/withastro/astro/commit/9b4f70a629f55e461759ba46f68af7097a2e9215), [`3fdf509b2`](https://github.com/withastro/astro/commit/3fdf509b2731a9b2f972d89291e57cf78d62c769), [`2f951cd40`](https://github.com/withastro/astro/commit/2f951cd403dfcc2c3ca6aae618ae3e1409516e32), [`c022a4217`](https://github.com/withastro/astro/commit/c022a4217a805d223c1494e9eda4e48bbf810388), [`67becaa58`](https://github.com/withastro/astro/commit/67becaa580b8f787df58de66b7008b7098f1209c), [`bc37331d8`](https://github.com/withastro/astro/commit/bc37331d8154e3e95a8df9131e4e014e78a7a9e7), [`dfc2d93e3`](https://github.com/withastro/astro/commit/dfc2d93e3c645995379358fabbdfa9aab99f43d8), [`3dc1ca2fa`](https://github.com/withastro/astro/commit/3dc1ca2fac8d9965cc5085a5d09e72ed87b4281a), [`1be84dfee`](https://github.com/withastro/astro/commit/1be84dfee3ce8e6f5cc624f99aec4e980f6fde37), [`35f01df79`](https://github.com/withastro/astro/commit/35f01df797d23315f2bee2fc3fd795adb0559c58), [`3fdf509b2`](https://github.com/withastro/astro/commit/3fdf509b2731a9b2f972d89291e57cf78d62c769), [`78de801f2`](https://github.com/withastro/astro/commit/78de801f21fd4ca1653950027d953bf08614566b), [`59d6e569f`](https://github.com/withastro/astro/commit/59d6e569f63e175c97e82e94aa7974febfb76f7c), [`7723c4cc9`](https://github.com/withastro/astro/commit/7723c4cc93298c2e6530e55da7afda048f22cf81), [`fb5cd6b56`](https://github.com/withastro/astro/commit/fb5cd6b56dc27a71366ed5e1ab8bfe9b8f96bac5), [`631b9c410`](https://github.com/withastro/astro/commit/631b9c410d5d66fa384674027ba95d69ebb5063f)]:
- - astro@3.0.0-beta.0
- - @astrojs/internal-helpers@0.2.0-beta.0
-
-## 3.8.2
-
-### Patch Changes
-
-- [#7778](https://github.com/withastro/astro/pull/7778) [`d6b494376`](https://github.com/withastro/astro/commit/d6b4943764989c0e89df2d6875cd19691566dfb3) Thanks [@y-nk](https://github.com/y-nk)! - Update image support to work with latest version of Astro
-
-- Updated dependencies [[`b12c8471f`](https://github.com/withastro/astro/commit/b12c8471f413c0291de4a9c444bfe3079a192034), [`7177f7579`](https://github.com/withastro/astro/commit/7177f7579b6e866f0fd895b3fd079d8ba330b1a9), [`fa6b68a77`](https://github.com/withastro/astro/commit/fa6b68a776c5b3cc8167fc042b7d305234ebcff9), [`097a8e4e9`](https://github.com/withastro/astro/commit/097a8e4e916c7df18eafdaa6c8d6ce2991c17ab6), [`1f6497c33`](https://github.com/withastro/astro/commit/1f6497c3341231ee76fc4538cfe7624cf4721d56), [`0e0fa605d`](https://github.com/withastro/astro/commit/0e0fa605d109cc91e08a1ae1cc560ea240fe631b), [`b290f0a99`](https://github.com/withastro/astro/commit/b290f0a99778a9b9c1045f3cd06b6aee934d7c03), [`d6b494376`](https://github.com/withastro/astro/commit/d6b4943764989c0e89df2d6875cd19691566dfb3), [`da6e3da1c`](https://github.com/withastro/astro/commit/da6e3da1ce00bed625fc568cfe4693713448e93f)]:
- - astro@2.10.10
-
-## 3.8.1
-
-### Patch Changes
-
-- [#8039](https://github.com/withastro/astro/pull/8039) [`6b57628d1`](https://github.com/withastro/astro/commit/6b57628d128779290db3344bbb6de7282196fb97) Thanks [@matthewp](https://github.com/matthewp)! - Prevent Vercel NFT from scanning /dev
-
-- Updated dependencies [[`1b8d30209`](https://github.com/withastro/astro/commit/1b8d3020990130dabfaaf753db73a32c6e0c896a), [`405913cdf`](https://github.com/withastro/astro/commit/405913cdf20b26407aa351c090f0a0859a4e6f54), [`87d4b1843`](https://github.com/withastro/astro/commit/87d4b18437c7565c48cad4bea81831c2a244ebb8), [`c23377caa`](https://github.com/withastro/astro/commit/c23377caafbc75deb91c33b9678c1b6868ad40ea), [`86bee2812`](https://github.com/withastro/astro/commit/86bee2812185df6e14025e5962a335f51853587b)]:
- - astro@2.10.6
-
-## 3.8.0
-
-### Minor Changes
-
-- [#7729](https://github.com/withastro/astro/pull/7729) [`560d0dab1`](https://github.com/withastro/astro/commit/560d0dab1cc7510e5d01f38955c13b329ebf66ff) Thanks [@soilSpoon](https://github.com/soilSpoon)! - Add cache headers to assets in Vercel adapter
-
-### Patch Changes
-
-- Updated dependencies [[`41afb8405`](https://github.com/withastro/astro/commit/41afb84057f606b0e7f9a73c1e40487068e43948), [`c00b6f0c4`](https://github.com/withastro/astro/commit/c00b6f0c49027125ea3026e89b21fef84380d187), [`1f0ee494a`](https://github.com/withastro/astro/commit/1f0ee494a5190356d130282f1f51ba2a5e6ea63f), [`00cb28f49`](https://github.com/withastro/astro/commit/00cb28f4964a60bc609770108d491acc277997b9), [`c264be349`](https://github.com/withastro/astro/commit/c264be3497db4aa8b3bcce0d2f79a26e35b8e91e), [`e1e958a75`](https://github.com/withastro/astro/commit/e1e958a75860292688569e82b4617fc141056202)]:
- - astro@2.10.0
-
-## 3.7.5
-
-### Patch Changes
-
-- [#7754](https://github.com/withastro/astro/pull/7754) [`298dbb89f`](https://github.com/withastro/astro/commit/298dbb89f2963a547370b6e65cafd2650fdb1b27) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Improve `404` behavior for `serverless` and `edge`
-
-- Updated dependencies [[`298dbb89f`](https://github.com/withastro/astro/commit/298dbb89f2963a547370b6e65cafd2650fdb1b27), [`9e2203847`](https://github.com/withastro/astro/commit/9e22038472c8be05ed7a72620534b88324dce793), [`5c5da8d2f`](https://github.com/withastro/astro/commit/5c5da8d2fbb37830f3ee81830d4c9afcd2c1a3e3), [`0b8375fe8`](https://github.com/withastro/astro/commit/0b8375fe82a15bfff3f517f98de6454adb2779f1), [`89d015db6`](https://github.com/withastro/astro/commit/89d015db6ce4d15b5b1140f0eb6bfbef187d6ad7), [`ebf7ebbf7`](https://github.com/withastro/astro/commit/ebf7ebbf7ae767625d736fad327954cfb853837e)]:
- - astro@2.9.7
-
-## 3.7.4
-
-### Patch Changes
-
-- [#7718](https://github.com/withastro/astro/pull/7718) [`35a0b6c8a`](https://github.com/withastro/astro/commit/35a0b6c8a909623d802523006cb3c65e4e70c88f) Thanks [@lilnasy](https://github.com/lilnasy)! - The vercel adapter now Warns when using a deprecated version of Node, and switches to 18 when using an unsupported version.
-
-- Updated dependencies [[`274e67532`](https://github.com/withastro/astro/commit/274e6753281edde72fcb4af1cf8a9f892ee46127), [`e52852628`](https://github.com/withastro/astro/commit/e528526289dd9fba98e254743ded47a5c6d418a8), [`c2d6cfd0c`](https://github.com/withastro/astro/commit/c2d6cfd0c26f4ebb81c715389347de1c3bf5f3e6), [`201d32dcf`](https://github.com/withastro/astro/commit/201d32dcfc58ca82468ac9be43b07cdc60abad88)]:
- - astro@2.9.1
-
-## 3.7.3
-
-### Patch Changes
-
-- [#7677](https://github.com/withastro/astro/pull/7677) [`1f0d0b586`](https://github.com/withastro/astro/commit/1f0d0b5863750104fc93cbbbd54ebae9c65143f7) Thanks [@bluwy](https://github.com/bluwy)! - Fix build error when passing `includeFiles`
-
-- Updated dependencies [[`cc8e9de88`](https://github.com/withastro/astro/commit/cc8e9de88179d2ed4b70980c60b41448db393429), [`1a6f833c4`](https://github.com/withastro/astro/commit/1a6f833c404ba2e64e3497929b64c863b5a348c8), [`cc0f81c04`](https://github.com/withastro/astro/commit/cc0f81c040e912cff0c09e89327ef1655f96b67d)]:
- - astro@2.8.4
-
-## 3.7.2
-
-### Patch Changes
-
-- [#7659](https://github.com/withastro/astro/pull/7659) [`57a5eff5c`](https://github.com/withastro/astro/commit/57a5eff5cee9852dca1e328e233949581edc5fb9) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Fix critical build regression. `@vercel/nft` is excluded from the bundle automatically.
-
-## 3.7.1
-
-### Patch Changes
-
-- [#7621](https://github.com/withastro/astro/pull/7621) [`2ddf34262`](https://github.com/withastro/astro/commit/2ddf3426268847d87c24ba1dc0adff20d3046035) Thanks [@ematipico](https://github.com/ematipico)! - Improve file detection of the middleware file handler
-
-- Updated dependencies [[`86e19c7cf`](https://github.com/withastro/astro/commit/86e19c7cf8696e065c1ccdc2eb841ad0a2b61ede)]:
- - astro@2.8.2
-
-## 3.7.0
-
-### Minor Changes
-
-- [#7532](https://github.com/withastro/astro/pull/7532) [`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b) Thanks [@ematipico](https://github.com/ematipico)! - Support for Vercel Edge Middleware via Astro middleware.
-
- When a project uses the new option Astro `build.excludeMiddleware`, the
- `@astrojs/vercel/serverless` adapter will automatically create a Vercel Edge Middleware
- that will automatically communicate with the Astro Middleware.
-
- Check the [documentation](https://github.com/withastro/astro/blob/main/packages/integrations/vercel/README.md##vercel-edge-middleware-with-astro-middleware) for more details.
-
-### Patch Changes
-
-- Updated dependencies [[`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b), [`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b), [`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b), [`6e9c29579`](https://github.com/withastro/astro/commit/6e9c295799cb6524841adbcbec21ff628d8d19c8), [`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b), [`9e5fafa2b`](https://github.com/withastro/astro/commit/9e5fafa2b25b5128084c7072aa282642fcfbb14b)]:
- - astro@2.8.0
-
-## 3.6.0
-
-### Minor Changes
-
-- [#7514](https://github.com/withastro/astro/pull/7514) [`154af8f5e`](https://github.com/withastro/astro/commit/154af8f5ead25b3cf100cfd445329bd1d3fe876a) Thanks [@matthewp](https://github.com/matthewp)! - Split support in Vercel Serverless
-
- The Vercel adapter builds to a single function by default. Astro 2.7 added support for splitting your build into separate entry points per page. If you use this configuration the Vercel adapter will generate a separate function for each page. This can help reduce the size of each function so they are only bundling code used on that page.
-
- ```js
- // astro.config.mjs
- import { defineConfig } from 'astro/config';
- import vercel from '@astrojs/vercel/serverless';
-
- export default defineConfig({
- output: 'server',
- adapter: vercel(),
- build: {
- split: true,
- },
- });
- ```
-
-### Patch Changes
-
-- Updated dependencies [[`9e2426f75`](https://github.com/withastro/astro/commit/9e2426f75637a6318961f483de90b635f3fdadeb), [`cdc28326c`](https://github.com/withastro/astro/commit/cdc28326cf21f305924363e9c8c02ce54b6ff895), [`19c2d43ea`](https://github.com/withastro/astro/commit/19c2d43ea41efdd8741007de0774e7e394f174b0), [`2172dd4f0`](https://github.com/withastro/astro/commit/2172dd4f0dd8f87d1adbc5ae90f44724e66eb964), [`1170877b5`](https://github.com/withastro/astro/commit/1170877b51aaa13203e8c488dcf4e39d1b5553ee)]:
- - astro@2.7.3
-
-## 3.5.1
-
-### Patch Changes
-
-- [#7447](https://github.com/withastro/astro/pull/7447) [`32bde967f`](https://github.com/withastro/astro/commit/32bde967f4b21648b1e11dbfa7964bf7f348f7b9) Thanks [@bluwy](https://github.com/bluwy)! - Fix redirects for root page when using `trailingSlash: "always"`
-
-- Updated dependencies [[`601403744`](https://github.com/withastro/astro/commit/60140374418ff0ee80899615be8e718ae57f791a), [`869197aaf`](https://github.com/withastro/astro/commit/869197aafd9802d059dd8db1ef23794fdd938a91), [`2b7539952`](https://github.com/withastro/astro/commit/2b75399520bebfc537cca8204e483f0df3373904), [`478cd9d8f`](https://github.com/withastro/astro/commit/478cd9d8fa9452466a73e0981863ef6e82f87238), [`57e603038`](https://github.com/withastro/astro/commit/57e603038fa51f5cf023c086705e2ced67434b38), [`2b7539952`](https://github.com/withastro/astro/commit/2b75399520bebfc537cca8204e483f0df3373904), [`f359d77b1`](https://github.com/withastro/astro/commit/f359d77b1844335ceeb103b9d3753eb2f440ed5f)]:
- - astro@2.7.1
- - @astrojs/internal-helpers@0.1.1
-
-## 3.5.0
-
-### Minor Changes
-
-- [#7067](https://github.com/withastro/astro/pull/7067) [`57f8d14c0`](https://github.com/withastro/astro/commit/57f8d14c027c30919363e12c664ccff4ed64d0fc) Thanks [@matthewp](https://github.com/matthewp)! - Support for experimental redirects
-
- This adds support for the redirects RFC in the Vercel adapter. No changes are necessary, simply use configured redirects and the adapter will output the vercel.json file with the configuration values.
-
-### Patch Changes
-
-- [#7260](https://github.com/withastro/astro/pull/7260) [`39403c32f`](https://github.com/withastro/astro/commit/39403c32faea58399c61d3344b770f195be60d5b) Thanks [@natemoo-re](https://github.com/natemoo-re)! - Unflags support for `output: 'hybrid'` mode, which enables pre-rendering by default. The additional `experimental.hybridOutput` flag can be safely removed from your configuration.
-
-- Updated dependencies [[`57f8d14c0`](https://github.com/withastro/astro/commit/57f8d14c027c30919363e12c664ccff4ed64d0fc), [`414eb19d2`](https://github.com/withastro/astro/commit/414eb19d2fcb55758f9d053076773b11b62f4c97), [`a7e2b37ff`](https://github.com/withastro/astro/commit/a7e2b37ff73871c46895c615846a86a539f45330), [`dd1a6b6c9`](https://github.com/withastro/astro/commit/dd1a6b6c941aeb7af934bd12db22412af262f5a1), [`d72cfa7ca`](https://github.com/withastro/astro/commit/d72cfa7cad758192163712ceb269405659fd14bc), [`144813f73`](https://github.com/withastro/astro/commit/144813f7308dcb9de64ebe3f0f2c6cba9ad81eb1), [`b5213654b`](https://github.com/withastro/astro/commit/b5213654b1b7f3ba573a48d3be688b2bdde7870f), [`e3b8c6296`](https://github.com/withastro/astro/commit/e3b8c62969d680d1915a122c610d281d6711aa63), [`890a2bc98`](https://github.com/withastro/astro/commit/890a2bc9891a2449ab99b01b65468f6dddba6b12), [`39403c32f`](https://github.com/withastro/astro/commit/39403c32faea58399c61d3344b770f195be60d5b), [`101f03209`](https://github.com/withastro/astro/commit/101f032098148b3daaac8d46ff1e535b79232e43)]:
- - astro@2.6.0
-
-## 3.4.1
-
-### Patch Changes
-
-- [#7208](https://github.com/withastro/astro/pull/7208) [`f5a8cffac`](https://github.com/withastro/astro/commit/f5a8cffac22c9e33fad6f47f7d166b55c86ad87b) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fix `imagesConfig` being wrongly spelt as `imageConfig` in the README
-
-- Updated dependencies [[`8b041bf57`](https://github.com/withastro/astro/commit/8b041bf57c76830c4070330270521e05d8e58474), [`6c7df28ab`](https://github.com/withastro/astro/commit/6c7df28ab34b756b8426443bf6976e24d4611a62), [`bf63f615f`](https://github.com/withastro/astro/commit/bf63f615fc1b97d6fb84db55f7639084e3ada5af), [`ee2aca80a`](https://github.com/withastro/astro/commit/ee2aca80a71afe843af943b11966fcf77f556cfb), [`7851f9258`](https://github.com/withastro/astro/commit/7851f9258fae2f54795470253df9ce4bcd5f9cb0), [`bef3a75db`](https://github.com/withastro/astro/commit/bef3a75dbc48d584daff9f7f3d5a8937b0356170), [`52af9ad18`](https://github.com/withastro/astro/commit/52af9ad18840ffa4e2996386c82cbe34d9fd076a), [`f5063d0a0`](https://github.com/withastro/astro/commit/f5063d0a01e3179da902fdc0a2b22f88cb3c95c7), [`cf621340b`](https://github.com/withastro/astro/commit/cf621340b00fda441f4ef43196c0363d09eae70c), [`2bda7fb0b`](https://github.com/withastro/astro/commit/2bda7fb0bce346f7725086980e1648e2636bbefb), [`af3c5a2e2`](https://github.com/withastro/astro/commit/af3c5a2e25bd3e7b2a3f7f08e41ee457093c8cb1), [`f2f18b440`](https://github.com/withastro/astro/commit/f2f18b44055c6334a39d6379de88fe41e518aa1e)]:
- - astro@2.5.6
- - @astrojs/webapi@2.2.0
-
-## 3.4.0
-
-### Minor Changes
-
-- [#7103](https://github.com/withastro/astro/pull/7103) [`c91e837e9`](https://github.com/withastro/astro/commit/c91e837e961043e92253148f0f4291856653b993) Thanks [@bluwy](https://github.com/bluwy)! - Add `edge-light` and `worker` import condition for worker bundling
-
-### Patch Changes
-
-- [#6876](https://github.com/withastro/astro/pull/6876) [`06ca3702f`](https://github.com/withastro/astro/commit/06ca3702f88ed18a063d2abbbb231615f9f97154) Thanks [@nblackburn](https://github.com/nblackburn)! - Correctly handle analytics id where present
-
-- [#6991](https://github.com/withastro/astro/pull/6991) [`719002ca5`](https://github.com/withastro/astro/commit/719002ca5b128744fb4316d4a52c5dcd46a42759) Thanks [@MoustaphaDev](https://github.com/MoustaphaDev)! - Enable experimental support for hybrid SSR with pre-rendering enabled by default
-
- **astro.config.mjs**
-
- ```js
- import { defineConfig } from 'astro/config';
- export default defineConfig({
- output: 'hybrid',
- experimental: {
- hybridOutput: true,
- },
- });
- ```
-
- Then add `export const prerender = false` to any page or endpoint you want to opt-out of pre-rendering.
-
- **src/pages/contact.astro**
-
- ```astro
- ---
- export const prerender = false;
-
- if (Astro.request.method === 'POST') {
- // handle form submission
- }
- ---
-
-
- ```
-
-- [#7101](https://github.com/withastro/astro/pull/7101) [`2994bc52d`](https://github.com/withastro/astro/commit/2994bc52d360bf7ca3681c5f6976e64577cf5209) Thanks [@bluwy](https://github.com/bluwy)! - Add missing esbuild dependency
-
-- [#7101](https://github.com/withastro/astro/pull/7101) [`2994bc52d`](https://github.com/withastro/astro/commit/2994bc52d360bf7ca3681c5f6976e64577cf5209) Thanks [@bluwy](https://github.com/bluwy)! - Always build edge/worker runtime with Vite `webworker` SSR target
-
-- [#7104](https://github.com/withastro/astro/pull/7104) [`826e02890`](https://github.com/withastro/astro/commit/826e0289005f645b902375b98d5549c6a95ccafa) Thanks [@bluwy](https://github.com/bluwy)! - Specify `"files"` field to only publish necessary files
-
-- Updated dependencies [[`4516d7b22`](https://github.com/withastro/astro/commit/4516d7b22c5979cde4537f196b53ae2826ba9561), [`e186ecc5e`](https://github.com/withastro/astro/commit/e186ecc5e292de8c6a2c441a2d588512c0813068), [`c6d7ebefd`](https://github.com/withastro/astro/commit/c6d7ebefdd554a9ef29cfeb426ac55cab80d6473), [`914c439bc`](https://github.com/withastro/astro/commit/914c439bccee9fec002c6d92beaa501c398e62ac), [`e9fc2c221`](https://github.com/withastro/astro/commit/e9fc2c2213036d47cd30a47a6cdad5633481a0f8), [`075eee08f`](https://github.com/withastro/astro/commit/075eee08f2e2b0baea008b97f3523f2cb937ee44), [`719002ca5`](https://github.com/withastro/astro/commit/719002ca5b128744fb4316d4a52c5dcd46a42759), [`fc52681ba`](https://github.com/withastro/astro/commit/fc52681ba2f8fe8bcd92eeedf3c6a52fd86a390e), [`fb84622af`](https://github.com/withastro/astro/commit/fb84622af04f795de8d17f24192de105f70fe910), [`cada10a46`](https://github.com/withastro/astro/commit/cada10a466f81f8edb0aa664f9cffdb6b5b8f307), [`cd410c5eb`](https://github.com/withastro/astro/commit/cd410c5eb71f825259279c27c4c39d0ad282c3f0), [`73ec6f6c1`](https://github.com/withastro/astro/commit/73ec6f6c16cadb71dafe9f664f0debde072c3173), [`410428672`](https://github.com/withastro/astro/commit/410428672ed97bba7ca0b3352c1a7ee564921462), [`763ff2d1e`](https://github.com/withastro/astro/commit/763ff2d1e44f54b899d7c65386f1b4b877c95737), [`c1669c001`](https://github.com/withastro/astro/commit/c1669c0011eecfe65a459d727848c18c189a54ca), [`3d525efc9`](https://github.com/withastro/astro/commit/3d525efc95cfb2deb5d9e04856d02965d66901c9)]:
- - astro@2.5.0
-
-## 3.3.0
-
-### Minor Changes
-
-- [#6845](https://github.com/withastro/astro/pull/6845) [`6063f5657`](https://github.com/withastro/astro/commit/6063f5657392a74b6ffc4d5e0de5463c217a8563) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Add support for using the Vercel Image Optimization API through `astro:assets`
-
-### Patch Changes
-
-- Updated dependencies [[`a8a319aef`](https://github.com/withastro/astro/commit/a8a319aef744a64647ee16c7d558d74de6864c6c), [`a695e44ae`](https://github.com/withastro/astro/commit/a695e44aed6e2f5d32cb950d4237be6e5657ba98), [`367e61776`](https://github.com/withastro/astro/commit/367e61776196a17d61c28daa4dfbabb6244e040c), [`77270cc2c`](https://github.com/withastro/astro/commit/77270cc2cd06c942d7abf1d882e36d9163edafa5), [`895fa07d8`](https://github.com/withastro/astro/commit/895fa07d8b4b8359984e048daca5437e40f44390), [`72c6bf01f`](https://github.com/withastro/astro/commit/72c6bf01fe49b331ca8ad9206a7506b15caf5b8d), [`e5bd084c0`](https://github.com/withastro/astro/commit/e5bd084c01e4f60a157969b50c05ce002f7b63d2)]:
- - astro@2.3.4
-
-## 3.2.5
-
-### Patch Changes
-
-- [#6874](https://github.com/withastro/astro/pull/6874) [`43230b2ca`](https://github.com/withastro/astro/commit/43230b2cac6c28e0412b77d32f06db416fca8560) Thanks [@nblackburn](https://github.com/nblackburn)! - Refactor static adapter to use updateConfig method
-
-- Updated dependencies [[`4c7ba4da0`](https://github.com/withastro/astro/commit/4c7ba4da084d7508df91cbac03c2b099a8301e2b), [`b6154d2d5`](https://github.com/withastro/astro/commit/b6154d2d57bfb77767a3ccf9e91c1ae4051c81bc), [`1f2699461`](https://github.com/withastro/astro/commit/1f2699461d4cdcc8007ae47ebff74ace62eee058), [`edabf01b4`](https://github.com/withastro/astro/commit/edabf01b44d8c99da160973cd0f779e0a0b93cd7), [`0afff3274`](https://github.com/withastro/astro/commit/0afff32741247bc4c6709a30fc83787f58ec02b7)]:
- - astro@2.3.1
-
-## 3.2.4
-
-### Patch Changes
-
-- [#6841](https://github.com/withastro/astro/pull/6841) [`2e3125e18`](https://github.com/withastro/astro/commit/2e3125e18063dd23080d380c93c1b709bb59e413) Thanks [@bluwy](https://github.com/bluwy)! - Fix vercel edge private environment variables usage
-
-- [#6840](https://github.com/withastro/astro/pull/6840) [`00a2e1d7c`](https://github.com/withastro/astro/commit/00a2e1d7c74cf253dcad729624246dd59138eb7c) Thanks [@delucis](https://github.com/delucis)! - Fix warning syntax in README
-
-## 3.2.3
-
-### Patch Changes
-
-- [#6776](https://github.com/withastro/astro/pull/6776) [`84a464888`](https://github.com/withastro/astro/commit/84a46488846604596378b6640af6428e24d1e526) Thanks [@nblackburn](https://github.com/nblackburn)! - Revert change to environment variable
-
-## 3.2.2
-
-### Patch Changes
-
-- [#6751](https://github.com/withastro/astro/pull/6751) [`26daba8d9`](https://github.com/withastro/astro/commit/26daba8d9fd2e7cac8e506a2a36cd6f40ab25f16) Thanks [@nblackburn](https://github.com/nblackburn)! - Fix vercel analytics id not being set
-
-- Updated dependencies [[`489dd8d69`](https://github.com/withastro/astro/commit/489dd8d69cdd9d7c243cf8bec96051a914984b9c), [`a1a4f45b5`](https://github.com/withastro/astro/commit/a1a4f45b51a80215fa7598da83bd0d9c5acd20d2), [`a1108e037`](https://github.com/withastro/astro/commit/a1108e037115cdb67d03505286c7d3a4fc2a1ff5), [`8b88e4cf1`](https://github.com/withastro/astro/commit/8b88e4cf15c8bea7942b3985380164e0edf7250b), [`d54cbe413`](https://github.com/withastro/astro/commit/d54cbe41349e55f8544212ad9320705f07325920), [`4c347ab51`](https://github.com/withastro/astro/commit/4c347ab51e46f2319d614f8577fe502e3dc816e2), [`ff0430786`](https://github.com/withastro/astro/commit/ff043078630e678348ae4f4757b3015b3b862c16), [`2f2e572e9`](https://github.com/withastro/astro/commit/2f2e572e937fd25451bbc78a05d55b7caa1ca3ec), [`7116c021a`](https://github.com/withastro/astro/commit/7116c021a39eac15a6e1264dfbd11bef0f5d618a)]:
- - astro@2.2.0
-
-## 3.2.1
-
-### Patch Changes
-
-- [#6484](https://github.com/withastro/astro/pull/6484) [`700a55549`](https://github.com/withastro/astro/commit/700a55549925e2a0ef2da378a20a2a5d35c53b93) Thanks [@matthewp](https://github.com/matthewp)! - Add back support for Astro.clientAddress
-
-- Updated dependencies [[`acf78c5e2`](https://github.com/withastro/astro/commit/acf78c5e271ec3d4f589782078e2a2044cc1c391), [`04e624d06`](https://github.com/withastro/astro/commit/04e624d062c6ce385f6293afba26f3942c2290c6), [`cc90d7219`](https://github.com/withastro/astro/commit/cc90d72197e1139195e9545105b9a1d339f38e1b), [`a9a6ae298`](https://github.com/withastro/astro/commit/a9a6ae29812339ea00f3b9afd3de09bd9d3733a9), [`6a7cf0712`](https://github.com/withastro/astro/commit/6a7cf0712da23e2c095f4bc4f2512e618bceb38e), [`bfd67ea74`](https://github.com/withastro/astro/commit/bfd67ea749dbc6ffa7c9a671fcc48bea6c04a075), [`f6eddffa0`](https://github.com/withastro/astro/commit/f6eddffa0414d54767e9f9e1ee5a936b8a20146b), [`c63874090`](https://github.com/withastro/astro/commit/c6387409062f1d7c2afc93319748ad57086837c5), [`d637d1ea5`](https://github.com/withastro/astro/commit/d637d1ea5b347b9c724adc895c9006c696ac8fc8), [`637f9bc72`](https://github.com/withastro/astro/commit/637f9bc728ea7d56fc82a862d761385f0dcd9528), [`77a046e88`](https://github.com/withastro/astro/commit/77a046e886c370b737208574b6934f5a1cf2b177)]:
- - astro@2.1.3
-
-## 3.2.0
-
-### Minor Changes
-
-- [#6213](https://github.com/withastro/astro/pull/6213) [`afbbc4d5b`](https://github.com/withastro/astro/commit/afbbc4d5bfafc1779bac00b41c2a1cb1c90f2808) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updated compilation settings to disable downlevelling for Node 14
-
-### Patch Changes
-
-- Updated dependencies [[`fec583909`](https://github.com/withastro/astro/commit/fec583909ab62829dc0c1600e2387979365f2b94), [`b087b83fe`](https://github.com/withastro/astro/commit/b087b83fe266c431fe34a07d5c2293cc4ab011c6), [`694918a56`](https://github.com/withastro/astro/commit/694918a56b01104831296be0c25456135a63c784), [`a20610609`](https://github.com/withastro/astro/commit/a20610609863ae3b48afe96819b8f11ae4f414d5), [`a4a74ab70`](https://github.com/withastro/astro/commit/a4a74ab70cd2aa0d812a1f6b202c4e240a8913bf), [`75921b3cd`](https://github.com/withastro/astro/commit/75921b3cd916d439f6392c487c21532fde35ed13), [`afbbc4d5b`](https://github.com/withastro/astro/commit/afbbc4d5bfafc1779bac00b41c2a1cb1c90f2808)]:
- - astro@2.1.0
- - @astrojs/webapi@2.1.0
-
-## 3.1.4
-
-### Patch Changes
-
-- [#6380](https://github.com/withastro/astro/pull/6380) [`0e378c3b8`](https://github.com/withastro/astro/commit/0e378c3b87627ca2764872a426dfba0a1606f991) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed undici-related bug
-
-- Updated dependencies [[`45501c531`](https://github.com/withastro/astro/commit/45501c531bf75f60063e1f8b7ac50f5d8d93eb6f), [`ee8b2a067`](https://github.com/withastro/astro/commit/ee8b2a067201f94c6b06fbfc094288e068116c60), [`02a7266e3`](https://github.com/withastro/astro/commit/02a7266e3c32c196fe733a5d3480f9e308cb62ee), [`95164bfdd`](https://github.com/withastro/astro/commit/95164bfdd2c1cbe5f1fafeab9e998ee4c85df3e3)]:
- - astro@2.0.17
-
-## 3.1.3
-
-### Patch Changes
-
-- [#6317](https://github.com/withastro/astro/pull/6317) [`2eb73cb9d`](https://github.com/withastro/astro/commit/2eb73cb9d1c982df5f8788ddacd634645643c5c6) Thanks [@bluwy](https://github.com/bluwy)! - Use .mjs extension when building to support CJS environments
-
-- Updated dependencies [[`5e26bc891`](https://github.com/withastro/astro/commit/5e26bc891cbebb3598acfa760c135a25c548d624), [`a156ecbb7`](https://github.com/withastro/astro/commit/a156ecbb7f4df6a46124a9a12eb712f9163db2ed), [`ccd72e6bb`](https://github.com/withastro/astro/commit/ccd72e6bb41e570d42b1b158e8124c8e04a1943d), [`504c7bacb`](https://github.com/withastro/astro/commit/504c7bacb8c1f2308a31e6c412825ba34983ba33), [`63dda6ded`](https://github.com/withastro/astro/commit/63dda6dedd4c6ea1d5ce72e9cf3fe5f88339a927), [`f91a7f376`](https://github.com/withastro/astro/commit/f91a7f376c223f18b4d8fbed81f95f6bea1cef8d)]:
- - astro@2.0.15
-
-## 3.1.2
-
-### Patch Changes
-
-- [#6258](https://github.com/withastro/astro/pull/6258) [`0fe74b664`](https://github.com/withastro/astro/commit/0fe74b6648fe79951da5443b73208cdc6742442e) Thanks [@delucis](https://github.com/delucis)! - Don’t inject analytics script in dev
-
-- Updated dependencies [[`ef5cea4dc`](https://github.com/withastro/astro/commit/ef5cea4dc5c4ffa33bd57ea0886e6912afb24fec), [`2fec47848`](https://github.com/withastro/astro/commit/2fec4784871f2b06fd780eb4cb0bb69866c6b065)]:
- - astro@2.0.13
-
-## 3.1.1
-
-### Patch Changes
-
-- [#6191](https://github.com/withastro/astro/pull/6191) [`11e1fa988`](https://github.com/withastro/astro/commit/11e1fa9883ff94e81865e0db631efa1a2b18688c) Thanks [@delucis](https://github.com/delucis)! - Fix and improve Vercel adapter README
-
-- Updated dependencies [[`436bd0934`](https://github.com/withastro/astro/commit/436bd09341693fc705f2a55d460eed3afa413432), [`a9bdd9cc4`](https://github.com/withastro/astro/commit/a9bdd9cc4e41512fbe723620c995e6a110032ebf), [`938ad514c`](https://github.com/withastro/astro/commit/938ad514cd75c09756cd24223346159172f5fd60), [`c75d319ee`](https://github.com/withastro/astro/commit/c75d319ee6b657402b902b1b46b9d3f2d0e5370b), [`6fa6025b3`](https://github.com/withastro/astro/commit/6fa6025b34b9447e142c4788c0cdc2dfe03f334f), [`3390cb844`](https://github.com/withastro/astro/commit/3390cb84443a43eb997f3efeb5ca298a8477aaf0)]:
- - astro@2.0.10
-
-## 3.1.0
-
-### Minor Changes
-
-- [#6148](https://github.com/withastro/astro/pull/6148) [`23c60cfa4`](https://github.com/withastro/astro/commit/23c60cfa45d0c01c2a710de9c6a644cd91d1b3f3) Thanks [@jsun969](https://github.com/jsun969)! - Add vercel analytics support
-
-### Patch Changes
-
-- Updated dependencies [[`8bbdcf17d`](https://github.com/withastro/astro/commit/8bbdcf17dd6c9142c18bc1551ee4854a60bc58cb), [`ec2f2a31d`](https://github.com/withastro/astro/commit/ec2f2a31dec78e5749cdea524ae926a19df300e3)]:
- - astro@2.0.9
-
-## 3.0.1
-
-### Patch Changes
-
-- [#6085](https://github.com/withastro/astro/pull/6085) [`b236b5cc8`](https://github.com/withastro/astro/commit/b236b5cc8eb9e078758d9c6cb77d88c39bb1fc3d) Thanks [@AirBorne04](https://github.com/AirBorne04)! - Added second build step through esbuild, to allow framework defined build (vite build) and target defined bundling (esbuilt step)
-
-- Updated dependencies [[`9bec6bc41`](https://github.com/withastro/astro/commit/9bec6bc410f324a41c67e5d185fa86f78d7625f2)]:
- - astro@2.0.6
-
-## 3.0.0
-
-### Major Changes
-
-- [#5782](https://github.com/withastro/astro/pull/5782) [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 14. Minimum supported Node version is now >=16.12.0
-
-- [#5707](https://github.com/withastro/astro/pull/5707) [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b) Thanks [@bluwy](https://github.com/bluwy)! - Remove `astro:build:start` backwards compatibility code
-
-- [#5806](https://github.com/withastro/astro/pull/5806) [`7572f7402`](https://github.com/withastro/astro/commit/7572f7402238da37de748be58d678fedaf863b53) Thanks [@matthewp](https://github.com/matthewp)! - Make astro a `peerDependency` of integrations
-
- This marks `astro` as a `peerDependency` of several packages that are already getting `major` version bumps. This is so we can more properly track the dependency between them and what version of Astro they are being used with.
-
-### Patch Changes
-
-- Updated dependencies [[`93e633922`](https://github.com/withastro/astro/commit/93e633922c2e449df3bb2357b3683af1d3c0e07b), [`16dc36a87`](https://github.com/withastro/astro/commit/16dc36a870df47a4151a8ed2d91d0bd1bb812458), [`01f3f463b`](https://github.com/withastro/astro/commit/01f3f463bf2918b310d130a9fabbf3ee21d14029), [`e2019be6f`](https://github.com/withastro/astro/commit/e2019be6ffa46fa33d92cfd346f9ecbe51bb7144), [`05caf445d`](https://github.com/withastro/astro/commit/05caf445d4d2728f1010aeb2179a9e756c2fd17d), [`49ab4f231`](https://github.com/withastro/astro/commit/49ab4f231c23b34891c3ee86f4b92bf8d6d267a3), [`a342a486c`](https://github.com/withastro/astro/commit/a342a486c2831461e24e6c2f1ca8a9d3e15477b6), [`8fb28648f`](https://github.com/withastro/astro/commit/8fb28648f66629741cb976bfe34ccd9d8f55661e), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`c2180746b`](https://github.com/withastro/astro/commit/c2180746b4f6d9ef1b6f86924f21f52cc6ab4e63), [`ae8a012a7`](https://github.com/withastro/astro/commit/ae8a012a7b6884a03c50494332ee37b4505c2c3b), [`cf2de5422`](https://github.com/withastro/astro/commit/cf2de5422c26bfdea4c75f76e57b57299ded3e3a), [`ce5c5dbd4`](https://github.com/withastro/astro/commit/ce5c5dbd46afbe738b03600758bf5c35113de522), [`ec09bb664`](https://github.com/withastro/astro/commit/ec09bb6642064dbd7d2f3369afb090363ae18de2), [`665a2c222`](https://github.com/withastro/astro/commit/665a2c2225e42881f5a9550599e8f3fc1deea0b4), [`259a539d7`](https://github.com/withastro/astro/commit/259a539d7d70c783330c797794b15716921629cf), [`f7aa1ec25`](https://github.com/withastro/astro/commit/f7aa1ec25d1584f7abd421903fbef66b1c050e2a), [`4987d6f44`](https://github.com/withastro/astro/commit/4987d6f44cfd0d81d88f21f5c380503403dc1e6a), [`304823811`](https://github.com/withastro/astro/commit/304823811eddd8e72aa1d8e2d39b40ab5cda3565), [`302e0ef8f`](https://github.com/withastro/astro/commit/302e0ef8f5d5232e3348afe680e599f3e537b5c5), [`55cea0a9d`](https://github.com/withastro/astro/commit/55cea0a9d8c8df91a46590fc04a9ac28089b3432), [`dd56c1941`](https://github.com/withastro/astro/commit/dd56c19411b126439b8bc42d681b6fa8c06e8c61), [`9963c6e4d`](https://github.com/withastro/astro/commit/9963c6e4d50c392c3d1ac4492237020f15ccb1de), [`46ecd5de3`](https://github.com/withastro/astro/commit/46ecd5de34df619e2ee73ccea39a57acd37bc0b8), [`be901dc98`](https://github.com/withastro/astro/commit/be901dc98c4a7f6b5536540aa8f7ba5108e939a0), [`f6cf92b48`](https://github.com/withastro/astro/commit/f6cf92b48317a19a3840ad781b77d6d3cae143bb), [`e818cc046`](https://github.com/withastro/astro/commit/e818cc0466a942919ea3c41585e231c8c80cb3d0), [`8c100a6fe`](https://github.com/withastro/astro/commit/8c100a6fe6cc652c3799d1622e12c2c969f30510), [`116d8835c`](https://github.com/withastro/astro/commit/116d8835ca9e78f8b5e477ee5a3d737b69f80706), [`840412128`](https://github.com/withastro/astro/commit/840412128b00a04515156e92c314a929d6b94f6d), [`1f49cddf9`](https://github.com/withastro/astro/commit/1f49cddf9e9ffc651efc171b2cbde9fbe9e8709d), [`7325df412`](https://github.com/withastro/astro/commit/7325df412107fc0e65cd45c1b568fb686708f723), [`16c7d0bfd`](https://github.com/withastro/astro/commit/16c7d0bfd49d2b9bfae45385f506bcd642f9444a), [`c55fbcb8e`](https://github.com/withastro/astro/commit/c55fbcb8edca1fe118a44f68c9f9436a4719d171), [`a9c292026`](https://github.com/withastro/astro/commit/a9c2920264e36cc5dc05f4adc1912187979edb0d), [`2a5786419`](https://github.com/withastro/astro/commit/2a5786419599b8674473c699300172b9aacbae2e), [`4a1cabfe6`](https://github.com/withastro/astro/commit/4a1cabfe6b9ef8a6fbbcc0727a0dc6fa300cedaa), [`a8d3e7924`](https://github.com/withastro/astro/commit/a8d3e79246605d252dcddad159e358e2d79bd624), [`fa8c131f8`](https://github.com/withastro/astro/commit/fa8c131f88ef67d14c62f1c00c97ed74d43a80ac), [`64b8082e7`](https://github.com/withastro/astro/commit/64b8082e776b832f1433ed288e6f7888adb626d0), [`c4b0cb8bf`](https://github.com/withastro/astro/commit/c4b0cb8bf2b41887d9106440bb2e70d421a5f481), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`23dc9ea96`](https://github.com/withastro/astro/commit/23dc9ea96a10343852d965efd41fe6665294f1fb), [`63a6ceb38`](https://github.com/withastro/astro/commit/63a6ceb38d88331451dca64d0034c7c58e3d26f1), [`a3a7fc929`](https://github.com/withastro/astro/commit/a3a7fc9298e6d88abb4b7bee1e58f05fa9558cf1), [`52209ca2a`](https://github.com/withastro/astro/commit/52209ca2ad72a30854947dcb3a90ab4db0ac0a6f), [`5fd9208d4`](https://github.com/withastro/astro/commit/5fd9208d447f5ab8909a2188b6c2491a0debd49d), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b), [`899214298`](https://github.com/withastro/astro/commit/899214298cee5f0c975c7245e623c649e1842d73), [`3a00ecb3e`](https://github.com/withastro/astro/commit/3a00ecb3eb4bc44be758c064f2bde6e247e8a593), [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b), [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0), [`1ca81c16b`](https://github.com/withastro/astro/commit/1ca81c16b8b66236e092e6eb6ec3f73f5668421c), [`b66d7195c`](https://github.com/withastro/astro/commit/b66d7195c17a55ea0931bc3744888bd4f5f01ce6)]:
- - astro@2.0.0
- - @astrojs/webapi@2.0.0
-
-## 3.0.0-beta.1
-
-
-See changes in 3.0.0-beta.1
-
-### Major Changes
-
-- [#5782](https://github.com/withastro/astro/pull/5782) [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Remove support for Node 14. Minimum supported Node version is now >=16.12.0
-
-- [#5806](https://github.com/withastro/astro/pull/5806) [`7572f7402`](https://github.com/withastro/astro/commit/7572f7402238da37de748be58d678fedaf863b53) Thanks [@matthewp](https://github.com/matthewp)! - Make astro a `peerDependency` of integrations
-
- This marks `astro` as a `peerDependency` of several packages that are already getting `major` version bumps. This is so we can more properly track the dependency between them and what version of Astro they are being used with.
-
-### Patch Changes
-
-- Updated dependencies [[`01f3f463b`](https://github.com/withastro/astro/commit/01f3f463bf2918b310d130a9fabbf3ee21d14029), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`c2180746b`](https://github.com/withastro/astro/commit/c2180746b4f6d9ef1b6f86924f21f52cc6ab4e63), [`ae8a012a7`](https://github.com/withastro/astro/commit/ae8a012a7b6884a03c50494332ee37b4505c2c3b), [`cf2de5422`](https://github.com/withastro/astro/commit/cf2de5422c26bfdea4c75f76e57b57299ded3e3a), [`ec09bb664`](https://github.com/withastro/astro/commit/ec09bb6642064dbd7d2f3369afb090363ae18de2), [`665a2c222`](https://github.com/withastro/astro/commit/665a2c2225e42881f5a9550599e8f3fc1deea0b4), [`f7aa1ec25`](https://github.com/withastro/astro/commit/f7aa1ec25d1584f7abd421903fbef66b1c050e2a), [`302e0ef8f`](https://github.com/withastro/astro/commit/302e0ef8f5d5232e3348afe680e599f3e537b5c5), [`840412128`](https://github.com/withastro/astro/commit/840412128b00a04515156e92c314a929d6b94f6d), [`1f49cddf9`](https://github.com/withastro/astro/commit/1f49cddf9e9ffc651efc171b2cbde9fbe9e8709d), [`c55fbcb8e`](https://github.com/withastro/astro/commit/c55fbcb8edca1fe118a44f68c9f9436a4719d171), [`4a1cabfe6`](https://github.com/withastro/astro/commit/4a1cabfe6b9ef8a6fbbcc0727a0dc6fa300cedaa), [`c4b0cb8bf`](https://github.com/withastro/astro/commit/c4b0cb8bf2b41887d9106440bb2e70d421a5f481), [`1f92d64ea`](https://github.com/withastro/astro/commit/1f92d64ea35c03fec43aff64eaf704dc5a9eb30a), [`23dc9ea96`](https://github.com/withastro/astro/commit/23dc9ea96a10343852d965efd41fe6665294f1fb), [`63a6ceb38`](https://github.com/withastro/astro/commit/63a6ceb38d88331451dca64d0034c7c58e3d26f1), [`52209ca2a`](https://github.com/withastro/astro/commit/52209ca2ad72a30854947dcb3a90ab4db0ac0a6f), [`2303f9514`](https://github.com/withastro/astro/commit/2303f95142aa740c99213a098f82b99dd37d74a0)]:
- - astro@2.0.0-beta.2
- - @astrojs/webapi@2.0.0-beta.0
-
-
-
-## 3.0.0-beta.0
-
-
-See changes in 3.0.0-beta.0
-
-### Major Changes
-
-- [#5707](https://github.com/withastro/astro/pull/5707) [`5eba34fcc`](https://github.com/withastro/astro/commit/5eba34fcc663def20bdf6e0daad02a6a5472776b) Thanks [@bluwy](https://github.com/bluwy)! - Remove `astro:build:start` backwards compatibility code
-
-
-
-## 2.4.0
-
-### Minor Changes
-
-- [#5638](https://github.com/withastro/astro/pull/5638) [`a467139e1`](https://github.com/withastro/astro/commit/a467139e169ad2eb7931e03004f1d658f7362e59) Thanks [@andreademasi](https://github.com/andreademasi)! - Ignore warnings when traced file fails to parse
-
-## 2.3.6
-
-### Patch Changes
-
-- [#5587](https://github.com/withastro/astro/pull/5587) [`4d9ef23b6`](https://github.com/withastro/astro/commit/4d9ef23b6745b28a92ca985a6a1d86b45c894f3c) Thanks [@JuanM04](https://github.com/JuanM04)! - Support node-fetch and Node 18 fetch
-
-## 2.3.5
-
-### Patch Changes
-
-- [#5514](https://github.com/withastro/astro/pull/5514) [`a1885ea2f`](https://github.com/withastro/astro/commit/a1885ea2f59f26cbdae10c298e1e0d1063d9dca1) Thanks [@JuanM04](https://github.com/JuanM04)! - Updated request-transform methods
-
-## 2.3.4
-
-### Patch Changes
-
-- [#5361](https://github.com/withastro/astro/pull/5361) [`ee750087c`](https://github.com/withastro/astro/commit/ee750087ce360c54d349f160d84bbdafb0ec83b4) Thanks [@matthewp](https://github.com/matthewp)! - Allows @astrojs/image to be used in Vercel SSR
-
-## 2.3.3
-
-### Patch Changes
-
-- [#5241](https://github.com/withastro/astro/pull/5241) [`070da6a79`](https://github.com/withastro/astro/commit/070da6a7926892917f9a3077cd644bd3a1b87e76) Thanks [@matthewp](https://github.com/matthewp)! - Fixes unknown error when using vercel/static
-
-- Updated dependencies [[`b6a478f37`](https://github.com/withastro/astro/commit/b6a478f37648491321077750bfca7bddf3cafadd)]:
- - @astrojs/webapi@1.1.1
-
-## 2.3.2
-
-### Patch Changes
-
-- [#5175](https://github.com/withastro/astro/pull/5175) [`abf41da77`](https://github.com/withastro/astro/commit/abf41da774516395a49aca30693dccdc4f8d7114) Thanks [@JuanM04](https://github.com/JuanM04)! - Edge adapter includes all the generated files (all files inside `dist/`) instead of only `entry.mjs`
-
-## 2.3.1
-
-### Patch Changes
-
-- [#5127](https://github.com/withastro/astro/pull/5127) [`fad25aef2`](https://github.com/withastro/astro/commit/fad25aef2f9b51324cd7aa20701042e9574706a9) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed #5120
-
-## 2.3.0
-
-### Minor Changes
-
-- [#5086](https://github.com/withastro/astro/pull/5086) [`f8198d250`](https://github.com/withastro/astro/commit/f8198d2502bbf7f7daf5854e7e12317e39a66fcc) Thanks [@JuanM04](https://github.com/JuanM04)! - Minify Edge Function output to save space
-
-- [#5085](https://github.com/withastro/astro/pull/5085) [`cd25abae5`](https://github.com/withastro/astro/commit/cd25abae594f9c42d3766753dfeee4f476311f1e) Thanks [@JuanM04](https://github.com/JuanM04)! - Added `includeFiles` and `excludeFiles` options
-
-## 2.2.0
-
-### Minor Changes
-
-- [#5056](https://github.com/withastro/astro/pull/5056) [`e55af8a23`](https://github.com/withastro/astro/commit/e55af8a23233b6335f45b7a04b9d026990fb616c) Thanks [@matthewp](https://github.com/matthewp)! - # New build configuration
-
- The ability to customize SSR build configuration more granularly is now available in Astro. You can now customize the output folder for `server` (the server code for SSR), `client` (your client-side JavaScript and assets), and `serverEntry` (the name of the entrypoint server module). Here are the defaults:
-
- ```js
- import { defineConfig } from 'astro/config';
-
- export default defineConfig({
- output: 'server',
- build: {
- server: './dist/server/',
- client: './dist/client/',
- serverEntry: 'entry.mjs',
- },
- });
- ```
-
- These new configuration options are only supported in SSR mode and are ignored when building to SSG (a static site).
-
- ## Integration hook change
-
- The integration hook `astro:build:start` includes a param `buildConfig` which includes all of these same options. You can continue to use this param in Astro 1.x, but it is deprecated in favor of the new `build.config` options. All of the built-in adapters have been updated to the new format. If you have an integration that depends on this param we suggest upgrading to do this instead:
-
- ```js
- export default function myIntegration() {
- return {
- name: 'my-integration',
- hooks: {
- 'astro:config:setup': ({ updateConfig }) => {
- updateConfig({
- build: {
- server: '...',
- },
- });
- },
- },
- };
- }
- ```
-
-## 2.1.1
-
-### Patch Changes
-
-- [#5033](https://github.com/withastro/astro/pull/5033) [`c1f991408`](https://github.com/withastro/astro/commit/c1f991408b817217dbd4035dcc4ac0a2fecd08b8) Thanks [@JuanM04](https://github.com/JuanM04)! - - Upgraded @vercel/nft to 0.22.1
- - Fix monorepos (#5020)
-
-## 2.1.0
-
-### Minor Changes
-
-- [#4876](https://github.com/withastro/astro/pull/4876) [`d3091f89e`](https://github.com/withastro/astro/commit/d3091f89e92fcfe1ad48daca74055d54b1c853a3) Thanks [@matthewp](https://github.com/matthewp)! - Adds the Astro.cookies API
-
- `Astro.cookies` is a new API for manipulating cookies in Astro components and API routes.
-
- In Astro components, the new `Astro.cookies` object is a map-like object that allows you to get, set, delete, and check for a cookie's existence (`has`):
-
- ```astro
- ---
- type Prefs = {
- darkMode: boolean;
- };
-
- Astro.cookies.set(
- 'prefs',
- { darkMode: true },
- {
- expires: '1 month',
- },
- );
-
- const prefs = Astro.cookies.get('prefs').json();
- ---
-
-
- ```
-
- Once you've set a cookie with Astro.cookies it will automatically be included in the outgoing response.
-
- This API is also available with the same functionality in API routes:
-
- ```js
- export function post({ cookies }) {
- cookies.set('loggedIn', false);
-
- return new Response(null, {
- status: 302,
- headers: {
- Location: '/login',
- },
- });
- }
- ```
-
- See [the RFC](https://github.com/withastro/rfcs/blob/main/proposals/0025-cookie-management.md) to learn more.
-
-## 2.0.1
-
-### Patch Changes
-
-- [#4884](https://github.com/withastro/astro/pull/4884) [`fb91d04a5`](https://github.com/withastro/astro/commit/fb91d04a5cb8f84f5b1be0a4e0c6cd61ec514736) Thanks [@bluwy](https://github.com/bluwy)! - Set SSR target webworker
-
-- Updated dependencies [[`5e4c5252b`](https://github.com/withastro/astro/commit/5e4c5252bd80cbaf6a7ee4d4503ece007664410f)]:
- - @astrojs/webapi@1.1.0
-
-## 2.0.0
-
-### Major Changes
-
-- [#4713](https://github.com/withastro/astro/pull/4713) [`16113c3ae`](https://github.com/withastro/astro/commit/16113c3ae2ebff96136ebd31958fc5eb4369ee0d) Thanks [@JuanM04](https://github.com/JuanM04)! - Use Edge Functions instead of Edge Middlewares
-
-## 1.0.2
-
-### Patch Changes
-
-- [#4558](https://github.com/withastro/astro/pull/4558) [`742966456`](https://github.com/withastro/astro/commit/7429664566f05ecebf6d57906f950627e62e690c) Thanks [@tony-sull](https://github.com/tony-sull)! - Adding the `withastro` keyword to include the adapters on the [Integrations Catalog](https://astro.build/integrations)
-
-## 1.0.1
-
-### Patch Changes
-
-- [#4421](https://github.com/withastro/astro/pull/4421) [`7820096e1`](https://github.com/withastro/astro/commit/7820096e1ba29ecc58aa7e13311a255acd2fe977) Thanks [@bholmesdev](https://github.com/bholmesdev)! - Fix react-dom on Vercel edge
-
-## 1.0.0
-
-### Major Changes
-
-- [`04ad44563`](https://github.com/withastro/astro/commit/04ad445632c67bdd60c1704e1e0dcbcaa27b9308) - > Astro v1.0 is out! Read the [official announcement post](https://astro.build/blog/astro-1/).
-
- **No breaking changes**. This package is now officially stable and compatible with `astro@1.0.0`!
-
-### Patch Changes
-
-- Updated dependencies [[`04ad44563`](https://github.com/withastro/astro/commit/04ad445632c67bdd60c1704e1e0dcbcaa27b9308)]:
- - @astrojs/webapi@1.0.0
-
-## 0.4.0
-
-### Minor Changes
-
-- [#4068](https://github.com/withastro/astro/pull/4068) [`54b33d50f`](https://github.com/withastro/astro/commit/54b33d50fdb995ac056461be7e2128d911624f2d) Thanks [@matthewp](https://github.com/matthewp)! - Add explicit errors when omitting output config
-
-## 0.3.0
-
-### Minor Changes
-
-- [#4015](https://github.com/withastro/astro/pull/4015) [`6fd161d76`](https://github.com/withastro/astro/commit/6fd161d7691cbf9d3ffa4646e46059dfd0940010) Thanks [@matthewp](https://github.com/matthewp)! - New `output` configuration option
-
- This change introduces a new "output target" configuration option (`output`). Setting the output target lets you decide the format of your final build, either:
-
- - `"static"` (default): A static site. Your final build will be a collection of static assets (HTML, CSS, JS) that you can deploy to any static site host.
- - `"server"`: A dynamic server application. Your final build will be an application that will run in a hosted server environment, generating HTML dynamically for different requests.
-
- If `output` is omitted from your config, the default value `"static"` will be used.
-
- When using the `"server"` output target, you must also include a runtime adapter via the `adapter` configuration. An adapter will _adapt_ your final build to run on the deployed platform of your choice (Netlify, Vercel, Node.js, Deno, etc).
-
- To migrate: No action is required for most users. If you currently define an `adapter`, you will need to also add `output: 'server'` to your config file to make it explicit that you are building a server. Here is an example of what that change would look like for someone deploying to Netlify:
-
- ```diff
- import { defineConfig } from 'astro/config';
- import netlify from '@astrojs/netlify/functions';
-
- export default defineConfig({
- adapter: netlify(),
- + output: 'server',
- });
- ```
-
-* [#4018](https://github.com/withastro/astro/pull/4018) [`0cc6ede36`](https://github.com/withastro/astro/commit/0cc6ede362996b9faba57481a790d6eb7fba2045) Thanks [@okikio](https://github.com/okikio)! - Support for 404 and 500 pages in SSR
-
-- [#3973](https://github.com/withastro/astro/pull/3973) [`5a23483ef`](https://github.com/withastro/astro/commit/5a23483efb3ba614b05a00064f84415620605204) Thanks [@matthewp](https://github.com/matthewp)! - Adds support for Astro.clientAddress
-
- The new `Astro.clientAddress` property allows you to get the IP address of the requested user.
-
- ```astro
-
- ```
-
- This property is only available when building for SSR, and only if the adapter you are using supports providing the IP address. If you attempt to access the property in a SSG app it will throw an error.
-
-* [#4020](https://github.com/withastro/astro/pull/4020) [`1666fdb4c`](https://github.com/withastro/astro/commit/1666fdb4c508bed1f41aea16196aa127b64cb506) Thanks [@JuanM04](https://github.com/JuanM04)! - Removed requirement for `ENABLE_VC_BUILD=1`, since Build Output v3 is now stable. [Learn more](https://vercel.com/blog/build-output-api).
-
-## 0.2.6
-
-### Patch Changes
-
-- [#3885](https://github.com/withastro/astro/pull/3885) [`bf5d1cc1e`](https://github.com/withastro/astro/commit/bf5d1cc1e71da38a14658c615e9481f2145cc6e7) Thanks [@delucis](https://github.com/delucis)! - Integration README fixes
-
-## 0.2.5
-
-### Patch Changes
-
-- [#3865](https://github.com/withastro/astro/pull/3865) [`1f9e4857`](https://github.com/withastro/astro/commit/1f9e4857ff2b2cb7db89d619618cdf546cd3b3dc) Thanks [@delucis](https://github.com/delucis)! - Small README fixes
-
-* [#3854](https://github.com/withastro/astro/pull/3854) [`b012ee55`](https://github.com/withastro/astro/commit/b012ee55b107dea0730286263b27d83e530fad5d) Thanks [@bholmesdev](https://github.com/bholmesdev)! - [astro add] Support adapters and third party packages
-
-## 0.2.4
-
-### Patch Changes
-
-- [#3677](https://github.com/withastro/astro/pull/3677) [`8045c8ad`](https://github.com/withastro/astro/commit/8045c8ade16fe4306448b7f98a4560ef0557d378) Thanks [@Jutanium](https://github.com/Jutanium)! - Update READMEs
-
-## 0.2.3
-
-### Patch Changes
-
-- Updated dependencies [[`4de53ecc`](https://github.com/withastro/astro/commit/4de53eccef346bed843b491b7ab93987d7d85655)]:
- - @astrojs/webapi@0.12.0
-
-## 0.2.2
-
-### Patch Changes
-
-- [#3368](https://github.com/withastro/astro/pull/3368) [`9d01f93b`](https://github.com/withastro/astro/commit/9d01f93b1c7db5d4afc4041e6ee73fb52f24d2d1) Thanks [@JuanM04](https://github.com/JuanM04)! - Remove `nodeVersion` option for `serverless` target. Now it is inferred from Vercel
-
-## 0.2.1
-
-### Patch Changes
-
-- [#3355](https://github.com/withastro/astro/pull/3355) [`945f5c68`](https://github.com/withastro/astro/commit/945f5c68e892f6f17e59e41d0dfa2a7841f96bbf) Thanks [@JuanM04](https://github.com/JuanM04)! - Added typescript definitions
-
-## 0.2.0
-
-### Minor Changes
-
-- [#3216](https://github.com/withastro/astro/pull/3216) [`114bf63e`](https://github.com/withastro/astro/commit/114bf63e11f28299b13178ef1a412eed37ab7909) Thanks [@JuanM04](https://github.com/JuanM04)! - **[BREAKING]** Now with Build Output API (v3)! [See the README to get started](https://github.com/withastro/astro/tree/main/packages/integrations/vercel#readme).
-
- - `trailingSlash` redirects works without a `vercel.json` file: just configure them inside your `astro.config.mjs`
- - Multiple deploy targets: `edge`, `serverless` and `static`!
- - When building to `serverless`, your code isn't transpiled to CJS anymore.
-
- **Migrate from v0.1**
-
- 1. Change the import inside `astro.config.mjs`:
- ```diff
- - import vercel from '@astrojs/vercel';
- + import vercel from '@astrojs/vercel/serverless';
- ```
- 2. Rename the `ENABLE_FILE_SYSTEM_API` environment variable to `ENABLE_VC_BUILD`, as Vercel changed it.
- 3. The output folder changed from `.output` to `.vercel/output` — you may need to update your `.gitignore`.
-
-## 0.1.4
-
-### Patch Changes
-
-- [`cafd36ef`](https://github.com/withastro/astro/commit/cafd36ef774755b8efbe9e526a0b5ce7a47095f2) Thanks [@FredKSchott](https://github.com/FredKSchott)! - Update README
-
-* [#3185](https://github.com/withastro/astro/pull/3185) [`eaad1769`](https://github.com/withastro/astro/commit/eaad17694f2120ddbd083bb1754e4418b8ea6aa9) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed `trailingSlash` for non-HTML pages
-
-- [#3176](https://github.com/withastro/astro/pull/3176) [`725c44a7`](https://github.com/withastro/astro/commit/725c44a762dbc2f45a1d47ffa31b7e6e0b22ff95) Thanks [@JuanM04](https://github.com/JuanM04)! - Support trailingSlash
-
-## 0.1.3
-
-### Patch Changes
-
-- [#3051](https://github.com/withastro/astro/pull/3051) [`b0ba22c5`](https://github.com/withastro/astro/commit/b0ba22c5ffab6575706ae904d0ad8cadc3f48d43) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed issues when converting from ESM to CJS
-
-* [#3139](https://github.com/withastro/astro/pull/3139) [`4ac37973`](https://github.com/withastro/astro/commit/4ac3797344943df4124abd4043deda624440f035) Thanks [@JuanM04](https://github.com/JuanM04)! - Added warning when `ENABLE_FILE_SYSTEM_API` is not found
-
-## 0.1.2
-
-### Patch Changes
-
-- [#3081](https://github.com/withastro/astro/pull/3081) [`f665d1a2`](https://github.com/withastro/astro/commit/f665d1a250ef34a9d1cbced9e4441c7e2dc246b8) Thanks [@JuanM04](https://github.com/JuanM04)! - Support dynamic paths
-
-## 0.1.1
-
-### Patch Changes
-
-- [`815d62f1`](https://github.com/withastro/astro/commit/815d62f151a36fef7d09590d4962ca71bda61b32) Thanks [@FredKSchott](https://github.com/FredKSchott)! - no changes.
-
-## 0.1.0
-
-### Patch Changes
-
-- [#3028](https://github.com/withastro/astro/pull/3028) [`982f64f6`](https://github.com/withastro/astro/commit/982f64f69a82d3c5f99b326a2ddcd368435d9b4a) Thanks [@JuanM04](https://github.com/JuanM04)! - Updated esbuild
-
-* [#3008](https://github.com/withastro/astro/pull/3008) [`8bd49c95`](https://github.com/withastro/astro/commit/8bd49c95365f7bbce41e19b7e8658ad639c22f31) Thanks [@JuanM04](https://github.com/JuanM04)! - Updated integrations' `astro:build:done` hook: now it matches the client dist when using SSR
-
-- [#3022](https://github.com/withastro/astro/pull/3022) [`8c04ff1f`](https://github.com/withastro/astro/commit/8c04ff1f0bea42d033832ce5047076e315cb38a3) Thanks [@matthewp](https://github.com/matthewp)! - Allows adapters to export default
-
-* [#3000](https://github.com/withastro/astro/pull/3000) [`b5ed099e`](https://github.com/withastro/astro/commit/b5ed099eaf92b61faf2fb66ebd7179d3e8223ae5) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed build directory and clean-up
-
-## 0.0.3-beta.1
-
-### Patch Changes
-
-- [#3022](https://github.com/withastro/astro/pull/3022) [`8c04ff1f`](https://github.com/withastro/astro/commit/8c04ff1f0bea42d033832ce5047076e315cb38a3) Thanks [@matthewp](https://github.com/matthewp)! - Allows adapters to export default
-
-## 0.0.3-beta.0
-
-### Patch Changes
-
-- [#3008](https://github.com/withastro/astro/pull/3008) [`8bd49c95`](https://github.com/withastro/astro/commit/8bd49c95365f7bbce41e19b7e8658ad639c22f31) Thanks [@JuanM04](https://github.com/JuanM04)! - Updated integrations' `astro:build:done` hook: now it matches the client dist when using SSR
-
-* [#3000](https://github.com/withastro/astro/pull/3000) [`b5ed099e`](https://github.com/withastro/astro/commit/b5ed099eaf92b61faf2fb66ebd7179d3e8223ae5) Thanks [@JuanM04](https://github.com/JuanM04)! - Fixed build directory and clean-up
-
-## 0.0.2
-
-### Patch Changes
-
-- [#2915](https://github.com/withastro/astro/pull/2915) [`e30aa4df`](https://github.com/withastro/astro/commit/e30aa4dfef2bbe874e2fe7f07232bf8a3c092317) Thanks [@JuanM04](https://github.com/JuanM04)! - Add a Vercel adapter for SSR
diff --git a/packages/integrations/vercel/README.md b/packages/integrations/vercel/README.md
index f0f553028610..a9c91875fe74 100644
--- a/packages/integrations/vercel/README.md
+++ b/packages/integrations/vercel/README.md
@@ -1,38 +1,3 @@
# @astrojs/vercel
-This adapter allows Astro to deploy your SSR site to [Vercel](https://www.vercel.com/).
-
-## Documentation
-
-Read the [`@astrojs/vercel` docs][docs]
-
-## Support
-
-- Get help in the [Astro Discord][discord]. Post questions in our `#support` forum, or visit our dedicated `#dev` channel to discuss current development and more!
-
-- Check our [Astro Integration Documentation][astro-integration] for more on integrations.
-
-- Submit bug reports and feature requests as [GitHub issues][issues].
-
-## Contributing
-
-This package is maintained by Astro's Core team. You're welcome to submit an issue or PR! These links will help you get started:
-
-- [Contributor Manual][contributing]
-- [Code of Conduct][coc]
-- [Community Guide][community]
-
-## License
-
-MIT
-
-Copyright (c) 2023–present [Astro][astro]
-
-[astro]: https://astro.build/
-[docs]: https://docs.astro.build/en/guides/integrations-guide/vercel/
-[contributing]: https://github.com/withastro/astro/blob/main/CONTRIBUTING.md
-[coc]: https://github.com/withastro/.github/blob/main/CODE_OF_CONDUCT.md
-[community]: https://github.com/withastro/.github/blob/main/COMMUNITY_GUIDE.md
-[discord]: https://astro.build/chat/
-[issues]: https://github.com/withastro/astro/issues
-[astro-integration]: https://docs.astro.build/en/guides/integrations-guide/
+The Vercel adapter package has moved. Please see [the new repository for the Vercel adapter](https://github.com/withastro/adapters/tree/main/packages/vercel).
diff --git a/packages/integrations/vercel/package.json b/packages/integrations/vercel/package.json
index 75563e91837a..7fef2f9b898f 100644
--- a/packages/integrations/vercel/package.json
+++ b/packages/integrations/vercel/package.json
@@ -1,73 +1,7 @@
{
"name": "@astrojs/vercel",
- "description": "Deploy your site to Vercel",
- "version": "7.8.0",
- "type": "module",
- "author": "withastro",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/withastro/astro.git",
- "directory": "packages/integrations/vercel"
- },
- "keywords": [
- "withastro",
- "astro-adapter"
- ],
- "bugs": "https://github.com/withastro/astro/issues",
- "homepage": "https://docs.astro.build/en/guides/integrations-guide/vercel/",
- "exports": {
- ".": {
- "types": "./types.d.ts"
- },
- "./serverless": "./dist/serverless/adapter.js",
- "./serverless/entrypoint": "./dist/serverless/entrypoint.js",
- "./static": "./dist/static/adapter.js",
- "./speed-insights": "./dist/speed-insights.js",
- "./build-image-service": "./dist/image/build-service.js",
- "./dev-image-service": "./dist/image/dev-service.js",
- "./squoosh-dev-service": "./dist/image/squoosh-dev-service.js",
- "./package.json": "./package.json"
- },
- "typesVersions": {
- "*": {
- "serverless": [
- "dist/serverless/adapter.d.ts"
- ],
- "static": [
- "dist/static/adapter.d.ts"
- ]
- }
- },
- "files": [
- "dist",
- "types.d.ts"
- ],
- "scripts": {
- "build": "astro-scripts build \"src/**/*.ts\" && tsc",
- "build:ci": "astro-scripts build \"src/**/*.ts\"",
- "dev": "astro-scripts dev \"src/**/*.ts\"",
- "test": "astro-scripts test --timeout 50000 \"test/**/!(hosted).test.js\"",
- "test:hosted": "astro-scripts test --timeout 30000 \"test/hosted/*.test.js\""
- },
- "dependencies": {
- "@astrojs/internal-helpers": "workspace:*",
- "@vercel/analytics": "^1.3.1",
- "@vercel/edge": "^1.1.2",
- "@vercel/nft": "^0.27.3",
- "esbuild": "^0.21.5",
- "fast-glob": "^3.3.2",
- "web-vitals": "^3.5.2"
- },
- "peerDependencies": {
- "astro": "^4.2.0"
- },
- "devDependencies": {
- "astro": "workspace:*",
- "astro-scripts": "workspace:*",
- "cheerio": "1.0.0"
- },
- "publishConfig": {
- "provenance": true
- }
+ "version": "0.0.0",
+ "private": true,
+ "keywords": [],
+ "dont_remove": "This is a placeholder for the sake of the docs smoke test"
}
diff --git a/packages/integrations/vercel/src/image/build-service.ts b/packages/integrations/vercel/src/image/build-service.ts
deleted file mode 100644
index e793b896e4d1..000000000000
--- a/packages/integrations/vercel/src/image/build-service.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import type { ExternalImageService } from 'astro';
-import { baseService } from 'astro/assets';
-import { isESMImportedImage, sharedValidateOptions } from './shared.js';
-
-const service: ExternalImageService = {
- ...baseService,
- validateOptions: (options, serviceOptions) =>
- sharedValidateOptions(options, serviceOptions.service.config, 'production'),
- getHTMLAttributes(options) {
- const { inputtedWidth, ...props } = options;
-
- // If `validateOptions` returned a different width than the one of the image, use it for attributes
- if (inputtedWidth) {
- props.width = inputtedWidth;
- }
-
- let targetWidth = props.width;
- let targetHeight = props.height;
- if (isESMImportedImage(props.src)) {
- const aspectRatio = props.src.width / props.src.height;
- if (targetHeight && !targetWidth) {
- // If we have a height but no width, use height to calculate the width
- targetWidth = Math.round(targetHeight * aspectRatio);
- } else if (targetWidth && !targetHeight) {
- // If we have a width but no height, use width to calculate the height
- targetHeight = Math.round(targetWidth / aspectRatio);
- } else if (!targetWidth && !targetHeight) {
- // If we have neither width or height, use the original image's dimensions
- targetWidth = props.src.width;
- targetHeight = props.src.height;
- }
- }
-
- const { src, width, height, format, quality, densities, widths, formats, ...attributes } =
- options;
-
- return {
- ...attributes,
- width: targetWidth,
- height: targetHeight,
- loading: attributes.loading ?? 'lazy',
- decoding: attributes.decoding ?? 'async',
- };
- },
- getURL(options) {
- const fileSrc = isESMImportedImage(options.src)
- ? removeLeadingForwardSlash(options.src.src)
- : options.src;
-
- const searchParams = new URLSearchParams();
- searchParams.append('url', fileSrc);
-
- options.width && searchParams.append('w', options.width.toString());
- options.quality && searchParams.append('q', options.quality.toString());
-
- return '/_vercel/image?' + searchParams;
- },
-};
-
-function removeLeadingForwardSlash(path: string) {
- return path.startsWith('/') ? path.substring(1) : path;
-}
-
-export default service;
diff --git a/packages/integrations/vercel/src/image/dev-service.ts b/packages/integrations/vercel/src/image/dev-service.ts
deleted file mode 100644
index c9702cff9754..000000000000
--- a/packages/integrations/vercel/src/image/dev-service.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { LocalImageService } from 'astro';
-import sharpService from 'astro/assets/services/sharp';
-import { baseDevService } from './shared-dev-service.js';
-
-const service: LocalImageService = {
- ...baseDevService,
- getHTMLAttributes(options, serviceOptions) {
- const { inputtedWidth, ...props } = options;
-
- // If `validateOptions` returned a different width than the one of the image, use it for attributes
- if (inputtedWidth) {
- props.width = inputtedWidth;
- }
-
- return sharpService.getHTMLAttributes
- ? sharpService.getHTMLAttributes(props, serviceOptions)
- : {};
- },
- transform(inputBuffer, transform, serviceOptions) {
- // NOTE: Hardcoding webp here isn't accurate to how the Vercel Image Optimization API works, normally what we should
- // do is setup a custom endpoint that sniff the user's accept-content header and serve the proper format based on the
- // user's Vercel config. However, that's: a lot of work for: not much. The dev service is inaccurate to the prod service
- // in many more ways, this is one of the less offending cases and is, imo, okay, erika - 2023-04-27
- transform.format = transform.src.endsWith('svg') ? 'svg' : 'webp';
-
- // The base sharp service works the same way as the Vercel Image Optimization API, so it's a safe fallback in local
- return sharpService.transform(inputBuffer, transform, serviceOptions);
- },
-};
-
-export default service;
diff --git a/packages/integrations/vercel/src/image/shared-dev-service.ts b/packages/integrations/vercel/src/image/shared-dev-service.ts
deleted file mode 100644
index 8ca87e99aaa9..000000000000
--- a/packages/integrations/vercel/src/image/shared-dev-service.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import type { LocalImageService } from 'astro';
-import { baseService } from 'astro/assets';
-import { sharedValidateOptions } from './shared.js';
-
-export const baseDevService: Omit = {
- ...baseService,
- validateOptions: (options, serviceOptions) =>
- sharedValidateOptions(options, serviceOptions.service.config, 'development'),
- getURL(options) {
- const fileSrc = typeof options.src === 'string' ? options.src : options.src.src;
-
- const searchParams = new URLSearchParams();
- searchParams.append('href', fileSrc);
-
- options.width && searchParams.append('w', options.width.toString());
- options.quality && searchParams.append('q', options.quality.toString());
-
- return '/_image?' + searchParams;
- },
- parseURL(url) {
- const params = url.searchParams;
-
- if (!params.has('href')) {
- return undefined;
- }
-
- const transform = {
- src: params.get('href')!,
- width: params.has('w') ? parseInt(params.get('w')!) : undefined,
- quality: params.get('q'),
- };
-
- return transform;
- },
-};
diff --git a/packages/integrations/vercel/src/image/shared.ts b/packages/integrations/vercel/src/image/shared.ts
deleted file mode 100644
index da9342f2942f..000000000000
--- a/packages/integrations/vercel/src/image/shared.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import type { AstroConfig, ImageMetadata, ImageQualityPreset, ImageTransform } from 'astro';
-
-export function getDefaultImageConfig(astroImageConfig: AstroConfig['image']): VercelImageConfig {
- return {
- sizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
- domains: astroImageConfig.domains ?? [],
- // Cast is necessary here because Vercel's types are slightly different from ours regarding allowed protocols. Behavior should be the same, however.
- remotePatterns: (astroImageConfig.remotePatterns as VercelImageConfig['remotePatterns']) ?? [],
- };
-}
-
-export function isESMImportedImage(src: ImageMetadata | string): src is ImageMetadata {
- return typeof src === 'object';
-}
-
-export type DevImageService = 'sharp' | 'squoosh' | (string & {});
-
-// https://vercel.com/docs/build-output-api/v3/configuration#images
-type ImageFormat = 'image/avif' | 'image/webp';
-
-type RemotePattern = {
- protocol?: 'http' | 'https';
- hostname: string;
- port?: string;
- pathname?: string;
-};
-
-export type VercelImageConfig = {
- /**
- * Supported image widths.
- */
- sizes: number[];
- /**
- * Allowed external domains that can use Image Optimization. Leave empty for only allowing the deployment domain to use Image Optimization.
- */
- domains: string[];
- /**
- * Allowed external patterns that can use Image Optimization. Similar to `domains` but provides more control with RegExp.
- */
- remotePatterns?: RemotePattern[];
- /**
- * Cache duration (in seconds) for the optimized images.
- */
- minimumCacheTTL?: number;
- /**
- * Supported output image formats
- */
- formats?: ImageFormat[];
- /**
- * Allow SVG input image URLs. This is disabled by default for security purposes.
- */
- dangerouslyAllowSVG?: boolean;
- /**
- * Change the [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) of the optimized images.
- */
- contentSecurityPolicy?: string;
-};
-
-export const qualityTable: Record = {
- low: 25,
- mid: 50,
- high: 80,
- max: 100,
-};
-
-export function getAstroImageConfig(
- images: boolean | undefined,
- imagesConfig: VercelImageConfig | undefined,
- command: string,
- devImageService: DevImageService,
- astroImageConfig: AstroConfig['image'],
-) {
- let devService = '@astrojs/vercel/dev-image-service';
-
- switch (devImageService) {
- case 'sharp':
- devService = '@astrojs/vercel/dev-image-service';
- break;
- case 'squoosh':
- devService = '@astrojs/vercel/squoosh-dev-image-service';
- break;
- default:
- if (typeof devImageService === 'string') {
- devService = devImageService;
- } else {
- devService = '@astrojs/vercel/dev-image-service';
- }
- break;
- }
-
- if (images) {
- return {
- image: {
- service: {
- entrypoint: command === 'dev' ? devService : '@astrojs/vercel/build-image-service',
- config: imagesConfig ? imagesConfig : getDefaultImageConfig(astroImageConfig),
- },
- },
- };
- }
-
- return {};
-}
-
-export function sharedValidateOptions(
- options: ImageTransform,
- serviceConfig: Record,
- mode: 'development' | 'production',
-) {
- const vercelImageOptions = serviceConfig as VercelImageConfig;
-
- if (
- mode === 'development' &&
- (!vercelImageOptions.sizes || vercelImageOptions.sizes.length === 0)
- ) {
- throw new Error('Vercel Image Optimization requires at least one size to be configured.');
- }
-
- const configuredWidths = vercelImageOptions.sizes.sort((a, b) => a - b);
-
- // The logic for finding the perfect width is a bit confusing, here it goes:
- // For images where no width has been specified:
- // - For local, imported images, fallback to nearest width we can find in our configured
- // - For remote images, that's an error, width is always required.
- // For images where a width has been specified:
- // - If the width that the user asked for isn't in `sizes`, then fallback to the nearest one, but save the width
- // the user asked for so we can put it on the `img` tag later.
- // - Otherwise, just use as-is.
- // The end goal is:
- // - The size on the page is always the one the user asked for or the base image's size
- // - The actual size of the image file is always one of `sizes`, either the one the user asked for or the nearest to it
- if (!options.width) {
- const src = options.src;
- if (isESMImportedImage(src)) {
- const nearestWidth = configuredWidths.reduce((prev, curr) => {
- return Math.abs(curr - src.width) < Math.abs(prev - src.width) ? curr : prev;
- });
-
- // Use the image's base width to inform the `width` and `height` on the `img` tag
- options.inputtedWidth = src.width;
- options.width = nearestWidth;
- } else {
- throw new Error(`Missing \`width\` parameter for remote image ${options.src}`);
- }
- } else {
- if (!configuredWidths.includes(options.width)) {
- const nearestWidth = configuredWidths.reduce((prev, curr) => {
- return Math.abs(curr - options.width!) < Math.abs(prev - options.width!) ? curr : prev;
- });
-
- // Save the width the user asked for to inform the `width` and `height` on the `img` tag
- options.inputtedWidth = options.width;
- options.width = nearestWidth;
- }
- }
-
- if (options.quality && typeof options.quality === 'string') {
- options.quality = options.quality in qualityTable ? qualityTable[options.quality] : undefined;
- }
-
- if (!options.quality) {
- options.quality = 100;
- }
-
- return options;
-}
diff --git a/packages/integrations/vercel/src/image/squoosh-dev-service.ts b/packages/integrations/vercel/src/image/squoosh-dev-service.ts
deleted file mode 100644
index d3b05bb115f2..000000000000
--- a/packages/integrations/vercel/src/image/squoosh-dev-service.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { LocalImageService } from 'astro';
-import squooshService from 'astro/assets/services/squoosh';
-import { baseDevService } from './shared-dev-service.js';
-
-const service: LocalImageService = {
- ...baseDevService,
- getHTMLAttributes(options, serviceOptions) {
- const { inputtedWidth, ...props } = options;
-
- // If `validateOptions` returned a different width than the one of the image, use it for attributes
- if (inputtedWidth) {
- props.width = inputtedWidth;
- }
-
- return squooshService.getHTMLAttributes
- ? squooshService.getHTMLAttributes(props, serviceOptions)
- : {};
- },
- transform(inputBuffer, transform, serviceOptions) {
- // NOTE: Hardcoding webp here isn't accurate to how the Vercel Image Optimization API works, normally what we should
- // do is setup a custom endpoint that sniff the user's accept-content header and serve the proper format based on the
- // user's Vercel config. However, that's: a lot of work for: not much. The dev service is inaccurate to the prod service
- // in many more ways, this is one of the less offending cases and is, imo, okay, erika - 2023-04-27
- transform.format = transform.src.endsWith('svg') ? 'svg' : 'webp';
-
- // The base squoosh service works the same way as the Vercel Image Optimization API, so it's a safe fallback in local
- return squooshService.transform(inputBuffer, transform, serviceOptions);
- },
-};
-
-export default service;
diff --git a/packages/integrations/vercel/src/lib/nft.ts b/packages/integrations/vercel/src/lib/nft.ts
deleted file mode 100644
index 7f21f3f2712f..000000000000
--- a/packages/integrations/vercel/src/lib/nft.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { relative as relativePath } from 'node:path';
-import { fileURLToPath } from 'node:url';
-import { copyFilesToFolder } from '@astrojs/internal-helpers/fs';
-import type { AstroIntegrationLogger } from 'astro';
-
-export async function copyDependenciesToFunction(
- {
- entry,
- outDir,
- includeFiles,
- excludeFiles,
- logger,
- }: {
- entry: URL;
- outDir: URL;
- includeFiles: URL[];
- excludeFiles: URL[];
- logger: AstroIntegrationLogger;
- },
- // we want to pass the caching by reference, and not by value
- cache: object,
-): Promise<{ handler: string }> {
- const entryPath = fileURLToPath(entry);
- logger.info(`Bundling function ${relativePath(fileURLToPath(outDir), entryPath)}`);
-
- // Get root of folder of the system (like C:\ on Windows or / on Linux)
- let base = entry;
- while (fileURLToPath(base) !== fileURLToPath(new URL('../', base))) {
- base = new URL('../', base);
- }
-
- // The Vite bundle includes an import to `@vercel/nft` for some reason,
- // and that trips up `@vercel/nft` itself during the adapter build. Using a
- // dynamic import helps prevent the issue.
- // TODO: investigate why
- const { nodeFileTrace } = await import('@vercel/nft');
- const result = await nodeFileTrace([entryPath], {
- base: fileURLToPath(base),
- // If you have a route of /dev this appears in source and NFT will try to
- // scan your local /dev :8
- ignore: ['/dev/**'],
- cache,
- });
-
- for (const error of result.warnings) {
- if (error.message.startsWith('Failed to resolve dependency')) {
- const [, module, file] = /Cannot find module '(.+?)' loaded from (.+)/.exec(error.message)!;
-
- // The import(astroRemark) sometimes fails to resolve, but it's not a problem
- if (module === '@astrojs/') continue;
-
- // Sharp is always external and won't be able to be resolved, but that's also not a problem
- if (module === 'sharp') continue;
-
- if (entryPath === file) {
- logger.debug(
- `[@astrojs/vercel] The module "${module}" couldn't be resolved. This may not be a problem, but it's worth checking.`,
- );
- } else {
- logger.debug(
- `[@astrojs/vercel] The module "${module}" inside the file "${file}" couldn't be resolved. This may not be a problem, but it's worth checking.`,
- );
- }
- }
- // parse errors are likely not js and can safely be ignored,
- // such as this html file in "main" meant for nw instead of node:
- // https://github.com/vercel/nft/issues/311
- else if (error.message.startsWith('Failed to parse')) {
- continue;
- } else {
- throw error;
- }
- }
-
- const commonAncestor = await copyFilesToFolder(
- [...result.fileList].map((file) => new URL(file, base)).concat(includeFiles),
- outDir,
- excludeFiles,
- );
-
- return {
- // serverEntry location inside the outDir
- handler: relativePath(commonAncestor, entryPath),
- };
-}
diff --git a/packages/integrations/vercel/src/lib/prerender.ts b/packages/integrations/vercel/src/lib/prerender.ts
deleted file mode 100644
index f69f3b5d470c..000000000000
--- a/packages/integrations/vercel/src/lib/prerender.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { AstroConfig } from 'astro';
-
-export function isServerLikeOutput(config: AstroConfig) {
- return config.output === 'server' || config.output === 'hybrid';
-}
diff --git a/packages/integrations/vercel/src/lib/redirects.ts b/packages/integrations/vercel/src/lib/redirects.ts
deleted file mode 100644
index 1e476cb1f288..000000000000
--- a/packages/integrations/vercel/src/lib/redirects.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-import nodePath from 'node:path';
-import { appendForwardSlash, removeLeadingForwardSlash } from '@astrojs/internal-helpers/path';
-import type { AstroConfig, RouteData, RoutePart } from 'astro';
-
-const pathJoin = nodePath.posix.join;
-
-// https://vercel.com/docs/project-configuration#legacy/routes
-interface VercelRoute {
- src: string;
- methods?: string[];
- dest?: string;
- headers?: Record;
- status?: number;
- continue?: boolean;
-}
-
-// Copied from astro/packages/astro/src/core/routing/manifest/create.ts
-// Disable eslint as we're not sure how to improve this regex yet
-// eslint-disable-next-line regexp/no-super-linear-backtracking
-const ROUTE_DYNAMIC_SPLIT = /\[(.+?\(.+?\)|.+?)\]/;
-const ROUTE_SPREAD = /^\.{3}.+$/;
-function getParts(part: string, file: string) {
- const result: RoutePart[] = [];
- part.split(ROUTE_DYNAMIC_SPLIT).map((str, i) => {
- if (!str) return;
- const dynamic = i % 2 === 1;
-
- const [, content] = dynamic ? /([^(]+)$/.exec(str) || [null, null] : [null, str];
-
- if (!content || (dynamic && !/^(?:\.\.\.)?[\w$]+$/.test(content))) {
- throw new Error(`Invalid route ${file} — parameter name must match /^[a-zA-Z0-9_$]+$/`);
- }
-
- result.push({
- content,
- dynamic,
- spread: dynamic && ROUTE_SPREAD.test(content),
- });
- });
-
- return result;
-}
-
-// Copied from /home/juanm04/dev/misc/astro/packages/astro/src/core/routing/manifest/create.ts
-// 2022-04-26
-function getMatchPattern(segments: RoutePart[][]) {
- return segments
- .map((segment) => {
- return segment[0].spread
- ? '(?:\\/(.*?))?'
- : segment
- .map((part) => {
- if (part)
- return part.dynamic
- ? '([^/]+?)'
- : part.content
- .normalize()
- .replace(/\?/g, '%3F')
- .replace(/#/g, '%23')
- .replace(/%5B/g, '[')
- .replace(/%5D/g, ']')
- .replace(/[*+?^${}()|[\]\\]/g, '\\$&');
- })
- .join('');
- })
- .join('/');
-}
-
-function getReplacePattern(segments: RoutePart[][]) {
- let n = 0;
- let result = '';
-
- for (const segment of segments) {
- for (const part of segment) {
- if (part.dynamic) result += '$' + ++n;
- else result += part.content;
- }
- result += '/';
- }
-
- // Remove trailing slash
- result = result.slice(0, -1);
-
- return result;
-}
-
-function getRedirectLocation(route: RouteData, config: AstroConfig): string {
- if (route.redirectRoute) {
- const pattern = getReplacePattern(route.redirectRoute.segments);
- const path = config.trailingSlash === 'always' ? appendForwardSlash(pattern) : pattern;
- return pathJoin(config.base, path);
- } else if (typeof route.redirect === 'object') {
- return pathJoin(config.base, route.redirect.destination);
- } else {
- return pathJoin(config.base, route.redirect || '');
- }
-}
-
-function getRedirectStatus(route: RouteData): number {
- if (typeof route.redirect === 'object') {
- return route.redirect.status;
- }
- return 301;
-}
-
-export function escapeRegex(content: string) {
- const segments = removeLeadingForwardSlash(content)
- .split(nodePath.posix.sep)
- .filter(Boolean)
- .map((s: string) => {
- return getParts(s, content);
- });
- return `^/${getMatchPattern(segments)}$`;
-}
-
-export function getRedirects(routes: RouteData[], config: AstroConfig): VercelRoute[] {
- let redirects: VercelRoute[] = [];
-
- for (const route of routes) {
- if (route.type === 'redirect') {
- redirects.push({
- src: config.base + getMatchPattern(route.segments),
- headers: { Location: getRedirectLocation(route, config) },
- status: getRedirectStatus(route),
- });
- } else if (route.type === 'page' && route.route !== '/') {
- if (config.trailingSlash === 'always') {
- redirects.push({
- src: config.base + getMatchPattern(route.segments),
- headers: { Location: config.base + getReplacePattern(route.segments) + '/' },
- status: 308,
- });
- } else if (config.trailingSlash === 'never') {
- redirects.push({
- src: config.base + getMatchPattern(route.segments) + '/',
- headers: { Location: config.base + getReplacePattern(route.segments) },
- status: 308,
- });
- }
- }
- }
-
- return redirects;
-}
diff --git a/packages/integrations/vercel/src/lib/speed-insights.ts b/packages/integrations/vercel/src/lib/speed-insights.ts
deleted file mode 100644
index 8e36395360eb..000000000000
--- a/packages/integrations/vercel/src/lib/speed-insights.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-export type VercelSpeedInsightsConfig = {
- enabled: boolean;
-};
-
-export function getSpeedInsightsViteConfig(enabled?: boolean) {
- if (enabled) {
- return {
- define: exposeEnv(['VERCEL_ANALYTICS_ID']),
- };
- }
-
- return {};
-}
-
-/**
- * While Vercel adds the `PUBLIC_` prefix for their `VERCEL_` env vars by default, some env vars
- * like `VERCEL_ANALYTICS_ID` aren't, so handle them here so that it works correctly in runtime.
- */
-export function exposeEnv(envs: string[]): Record {
- const mapped: Record = {};
-
- envs
- .filter((env) => process.env[env])
- .forEach((env) => {
- mapped[`import.meta.env.PUBLIC_${env}`] = JSON.stringify(process.env[env]);
- });
-
- return mapped;
-}
diff --git a/packages/integrations/vercel/src/lib/web-analytics.ts b/packages/integrations/vercel/src/lib/web-analytics.ts
deleted file mode 100644
index d6ee4d78d677..000000000000
--- a/packages/integrations/vercel/src/lib/web-analytics.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-export type VercelWebAnalyticsConfig = {
- enabled: boolean;
-};
-
-export async function getInjectableWebAnalyticsContent({
- mode,
-}: {
- mode: 'development' | 'production';
-}) {
- const base = `window.va = window.va || function () { (window.vaq = window.vaq || []).push(arguments); };`;
-
- if (mode === 'development') {
- return `
- ${base}
- var script = document.createElement('script');
- script.defer = true;
- script.src = 'https://cdn.vercel-insights.com/v1/script.debug.js';
- var head = document.querySelector('head');
- head.appendChild(script);
- `;
- }
-
- return `${base}
- var script = document.createElement('script');
- script.defer = true;
- script.src = '/_vercel/insights/script.js';
- var head = document.querySelector('head');
- head.appendChild(script);
- `;
-}
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
deleted file mode 100644
index 364d2c861401..000000000000
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ /dev/null
@@ -1,589 +0,0 @@
-import { existsSync, readFileSync } from 'node:fs';
-import { basename } from 'node:path';
-import { pathToFileURL } from 'node:url';
-import { removeDir, writeJson } from '@astrojs/internal-helpers/fs';
-import type {
- AstroAdapter,
- AstroConfig,
- AstroIntegration,
- AstroIntegrationLogger,
- RouteData,
-} from 'astro';
-import { AstroError } from 'astro/errors';
-import glob from 'fast-glob';
-import {
- type DevImageService,
- type VercelImageConfig,
- getAstroImageConfig,
- getDefaultImageConfig,
-} from '../image/shared.js';
-import { copyDependenciesToFunction } from '../lib/nft.js';
-import { escapeRegex, getRedirects } from '../lib/redirects.js';
-import {
- type VercelSpeedInsightsConfig,
- getSpeedInsightsViteConfig,
-} from '../lib/speed-insights.js';
-import {
- type VercelWebAnalyticsConfig,
- getInjectableWebAnalyticsContent,
-} from '../lib/web-analytics.js';
-import { generateEdgeMiddleware } from './middleware.js';
-
-const PACKAGE_NAME = '@astrojs/vercel/serverless';
-
-/**
- * The edge function calls the node server at /_render,
- * with the original path as the value of this header.
- */
-export const ASTRO_PATH_HEADER = 'x-astro-path';
-export const ASTRO_PATH_PARAM = 'x_astro_path';
-
-/**
- * The edge function calls the node server at /_render,
- * with the locals serialized into this header.
- */
-export const ASTRO_LOCALS_HEADER = 'x-astro-locals';
-export const ASTRO_MIDDLEWARE_SECRET_HEADER = 'x-astro-middleware-secret';
-export const VERCEL_EDGE_MIDDLEWARE_FILE = 'vercel-edge-middleware';
-
-// Vercel routes the folder names to a path on the deployed website.
-// We attempt to avoid interfering by prefixing with an underscore.
-export const NODE_PATH = '_render';
-const MIDDLEWARE_PATH = '_middleware';
-
-// This isn't documented by vercel anywhere, but unlike serverless
-// and edge functions, isr functions are not passed the original path.
-// Instead, we have to use $0 to refer to the regex match from "src".
-const ISR_PATH = `/_isr?${ASTRO_PATH_PARAM}=$0`;
-
-// https://vercel.com/docs/concepts/functions/serverless-functions/runtimes/node-js#node.js-version
-const SUPPORTED_NODE_VERSIONS: Record<
- string,
- | { status: 'default' }
- | { status: 'beta' }
- | { status: 'retiring'; removal: Date | string; warnDate: Date }
- | { status: 'deprecated'; removal: Date }
-> = {
- 18: { status: 'retiring', removal: 'Early 2025', warnDate: new Date('October 1 2024') },
- 20: { status: 'default' },
-};
-
-function getAdapter({
- edgeMiddleware,
- functionPerRoute,
- middlewareSecret,
- skewProtection,
-}: {
- edgeMiddleware: boolean;
- functionPerRoute: boolean;
- middlewareSecret: string;
- skewProtection: boolean;
-}): AstroAdapter {
- return {
- name: PACKAGE_NAME,
- serverEntrypoint: `${PACKAGE_NAME}/entrypoint`,
- exports: ['default'],
- args: { middlewareSecret, skewProtection },
- adapterFeatures: {
- edgeMiddleware,
- functionPerRoute,
- },
- supportedAstroFeatures: {
- hybridOutput: 'stable',
- staticOutput: 'stable',
- serverOutput: 'stable',
- assets: {
- supportKind: 'stable',
- isSharpCompatible: true,
- isSquooshCompatible: true,
- },
- i18nDomains: 'experimental',
- envGetSecret: 'experimental',
- },
- };
-}
-
-export interface VercelServerlessConfig {
- /** Configuration for [Vercel Web Analytics](https://vercel.com/docs/concepts/analytics). */
- webAnalytics?: VercelWebAnalyticsConfig;
-
- /**
- * @deprecated This option lets you configure the legacy speed insights API which is now deprecated by Vercel.
- *
- * See [Vercel Speed Insights Quickstart](https://vercel.com/docs/speed-insights/quickstart) for instructions on how to use the library instead.
- *
- * https://vercel.com/docs/speed-insights/quickstart
- */
- speedInsights?: VercelSpeedInsightsConfig;
-
- /** Force files to be bundled with your function. This is helpful when you notice missing files. */
- includeFiles?: string[];
-
- /** Exclude any files from the bundling process that would otherwise be included. */
- excludeFiles?: string[];
-
- /** When enabled, an Image Service powered by the Vercel Image Optimization API will be automatically configured and used in production. In development, the image service specified by devImageService will be used instead. */
- imageService?: boolean;
-
- /** Configuration options for [Vercel’s Image Optimization API](https://vercel.com/docs/concepts/image-optimization). See [Vercel’s image configuration documentation](https://vercel.com/docs/build-output-api/v3/configuration#images) for a complete list of supported parameters. */
- imagesConfig?: VercelImageConfig;
-
- /** Allows you to configure which image service to use in development when imageService is enabled. */
- devImageService?: DevImageService;
-
- /** Whether to create the Vercel Edge middleware from an Astro middleware in your code base. */
- edgeMiddleware?: boolean;
-
- /**
- * Whether to split builds into a separate function for each route.
- * @deprecated `functionPerRoute` is deprecated and will be removed in the next major release of the adapter.
- */
- functionPerRoute?: boolean;
-
- /** The maximum duration (in seconds) that Serverless Functions can run before timing out. See the [Vercel documentation](https://vercel.com/docs/functions/serverless-functions/runtimes#maxduration) for the default and maximum limit for your account plan. */
- maxDuration?: number;
-
- /** Whether to cache on-demand rendered pages in the same way as static files. */
- isr?: boolean | VercelISRConfig;
- /**
- * It enables Vercel skew protection: https://vercel.com/docs/deployments/skew-protection
- */
- skewProtection?: boolean;
-}
-
-interface VercelISRConfig {
- /**
- * A secret random string that you create.
- * Its presence in the `__prerender_bypass` cookie will result in fresh responses being served, bypassing the cache. See Vercel’s documentation on [Draft Mode](https://vercel.com/docs/build-output-api/v3/features#draft-mode) for more information.
- * Its presence in the `x-prerender-revalidate` header will result in a fresh response which will then be cached for all future requests to be used. See Vercel’s documentation on [On-Demand Incremental Static Regeneration (ISR)](https://vercel.com/docs/build-output-api/v3/features#on-demand-incremental-static-regeneration-isr) for more information.
- *
- * @default `undefined`
- */
- bypassToken?: string;
-
- /**
- * Expiration time (in seconds) before the pages will be re-generated.
- *
- * Setting to `false` means that the page will stay cached as long as the current deployment is in production.
- *
- * @default `false`
- */
- expiration?: number | false;
-
- /**
- * Paths that will always be served by a serverless function instead of an ISR function.
- *
- * @default `[]`
- */
- exclude?: string[];
-}
-
-export default function vercelServerless({
- webAnalytics,
- speedInsights,
- includeFiles: _includeFiles = [],
- excludeFiles: _excludeFiles = [],
- imageService,
- imagesConfig,
- devImageService = 'sharp',
- functionPerRoute = false,
- edgeMiddleware = false,
- maxDuration,
- isr = false,
- skewProtection = false,
-}: VercelServerlessConfig = {}): AstroIntegration {
- if (maxDuration) {
- if (typeof maxDuration !== 'number') {
- throw new TypeError(`maxDuration must be a number`, { cause: maxDuration });
- }
- if (maxDuration <= 0) {
- throw new TypeError(`maxDuration must be a positive number`, { cause: maxDuration });
- }
- }
-
- let _config: AstroConfig;
- let _buildTempFolder: URL;
- let _serverEntry: string;
- let _entryPoints: Map;
- let _middlewareEntryPoint: URL | undefined;
- // Extra files to be merged with `includeFiles` during build
- const extraFilesToInclude: URL[] = [];
- // Secret used to verify that the caller is the astro-generated edge middleware and not a third-party
- const middlewareSecret = crypto.randomUUID();
-
- return {
- name: PACKAGE_NAME,
- hooks: {
- 'astro:config:setup': async ({ command, config, updateConfig, injectScript, logger }) => {
- if (maxDuration && maxDuration > 900) {
- logger.warn(
- `maxDuration is set to ${maxDuration} seconds, which is longer than the maximum allowed duration of 900 seconds.`,
- );
- logger.warn(
- `Please make sure that your plan allows for this duration. See https://vercel.com/docs/functions/serverless-functions/runtimes#maxduration for more information.`,
- );
- }
-
- if (webAnalytics?.enabled) {
- injectScript(
- 'head-inline',
- await getInjectableWebAnalyticsContent({
- mode: command === 'dev' ? 'development' : 'production',
- }),
- );
- }
- if (command === 'build' && speedInsights?.enabled) {
- injectScript('page', 'import "@astrojs/vercel/speed-insights"');
- }
-
- const vercelConfigPath = new URL('vercel.json', config.root);
- if (existsSync(vercelConfigPath)) {
- try {
- const vercelConfig = JSON.parse(readFileSync(vercelConfigPath, 'utf-8'));
- if (vercelConfig.trailingSlash === true && config.trailingSlash === 'always') {
- logger.warn(
- '\n' +
- `\tYour "vercel.json" \`trailingSlash\` configuration (set to \`true\`) will conflict with your Astro \`trailinglSlash\` configuration (set to \`"always"\`).\n` +
- `\tThis would cause infinite redirects under certain conditions and throw an \`ERR_TOO_MANY_REDIRECTS\` error.\n` +
- `\tTo prevent this, your Astro configuration is updated to \`"ignore"\` during builds.\n`,
- );
- updateConfig({
- trailingSlash: 'ignore',
- });
- }
- } catch (_err) {
- logger.warn(`Your "vercel.json" config is not a valid json file.`);
- }
- }
-
- updateConfig({
- outDir: new URL('./.vercel/output/', config.root),
- build: {
- client: new URL('./.vercel/output/static/', config.root),
- server: new URL('./.vercel/output/_functions/', config.root),
- redirects: false,
- },
- vite: {
- ...getSpeedInsightsViteConfig(speedInsights?.enabled),
- ssr: {
- external: [
- '@vercel/nft',
- ...((await shouldExternalizeAstroEnvSetup()) ? ['astro/env/setup'] : []),
- ],
- },
- },
- ...getAstroImageConfig(
- imageService,
- imagesConfig,
- command,
- devImageService,
- config.image,
- ),
- });
- },
- 'astro:config:done': ({ setAdapter, config, logger }) => {
- if (functionPerRoute === true) {
- logger.warn(
- `\n` +
- `\tVercel's hosting plans might have limits to the number of functions you can create.\n` +
- `\tMake sure to check your plan carefully to avoid incurring additional costs.\n` +
- `\tYou can set functionPerRoute: false to prevent surpassing the limit.\n`,
- );
-
- logger.warn(
- `\n` +
- `\t\`functionPerRoute\` is deprecated and will be removed in a future version of the adapter.\n`,
- );
- }
-
- setAdapter(
- getAdapter({ functionPerRoute, edgeMiddleware, middlewareSecret, skewProtection }),
- );
-
- _config = config;
- _buildTempFolder = config.build.server;
- _serverEntry = config.build.serverEntry;
-
- if (config.output === 'static') {
- throw new AstroError(
- '`output: "server"` or `output: "hybrid"` is required to use the serverless adapter.',
- );
- }
- },
- 'astro:build:ssr': async ({ entryPoints, middlewareEntryPoint }) => {
- _entryPoints = new Map(
- Array.from(entryPoints).filter(([routeData]) => !routeData.prerender),
- );
- _middlewareEntryPoint = middlewareEntryPoint;
- },
- 'astro:build:done': async ({ routes, logger }) => {
- // Merge any includes from `vite.assetsInclude
- if (_config.vite.assetsInclude) {
- const mergeGlobbedIncludes = (globPattern: unknown) => {
- if (typeof globPattern === 'string') {
- const entries = glob.sync(globPattern).map((p) => pathToFileURL(p));
- extraFilesToInclude.push(...entries);
- } else if (Array.isArray(globPattern)) {
- for (const pattern of globPattern) {
- mergeGlobbedIncludes(pattern);
- }
- }
- };
-
- mergeGlobbedIncludes(_config.vite.assetsInclude);
- }
-
- const routeDefinitions: Array<{
- src: string;
- dest: string;
- middlewarePath?: string;
- }> = [];
-
- const includeFiles = _includeFiles
- .map((file) => new URL(file, _config.root))
- .concat(extraFilesToInclude);
- const excludeFiles = _excludeFiles.map((file) => new URL(file, _config.root));
-
- const builder = new VercelBuilder(_config, excludeFiles, includeFiles, logger, maxDuration);
-
- // Multiple entrypoint support
- if (_entryPoints.size) {
- const getRouteFuncName = (route: RouteData) => route.component.replace('src/pages/', '');
-
- const getFallbackFuncName = (entryFile: URL) =>
- basename(entryFile.toString())
- .replace('entry.', '')
- .replace(/\.mjs$/, '');
-
- for (const [route, entryFile] of _entryPoints) {
- const func = route.component.startsWith('src/pages/')
- ? getRouteFuncName(route)
- : getFallbackFuncName(entryFile);
-
- await builder.buildServerlessFolder(entryFile, func);
-
- routeDefinitions.push({
- src: route.pattern.source,
- dest: func,
- });
- }
- } else {
- const entryFile = new URL(_serverEntry, _buildTempFolder);
- if (isr) {
- const isrConfig = typeof isr === 'object' ? isr : {};
- await builder.buildServerlessFolder(entryFile, NODE_PATH);
- if (isrConfig.exclude?.length) {
- const dest = _middlewareEntryPoint ? MIDDLEWARE_PATH : NODE_PATH;
- for (const route of isrConfig.exclude) {
- // vercel interprets src as a regex pattern, so we need to escape it
- routeDefinitions.push({ src: escapeRegex(route), dest });
- }
- }
- await builder.buildISRFolder(entryFile, '_isr', isrConfig);
- for (const route of routes) {
- const src = route.pattern.source;
- const dest = src.startsWith('^\\/_image') ? NODE_PATH : ISR_PATH;
- if (!route.prerender) routeDefinitions.push({ src, dest });
- }
- } else {
- await builder.buildServerlessFolder(entryFile, NODE_PATH);
- const dest = _middlewareEntryPoint ? MIDDLEWARE_PATH : NODE_PATH;
- for (const route of routes) {
- if (!route.prerender) routeDefinitions.push({ src: route.pattern.source, dest });
- }
- }
- }
- if (_middlewareEntryPoint) {
- await builder.buildMiddlewareFolder(
- _middlewareEntryPoint,
- MIDDLEWARE_PATH,
- middlewareSecret,
- );
- }
- const fourOhFourRoute = routes.find((route) => route.pathname === '/404');
- // Output configuration
- // https://vercel.com/docs/build-output-api/v3#build-output-configuration
- await writeJson(new URL(`./config.json`, _config.outDir), {
- version: 3,
- routes: [
- ...getRedirects(routes, _config),
- {
- src: `^/${_config.build.assets}/(.*)$`,
- headers: { 'cache-control': 'public, max-age=31536000, immutable' },
- continue: true,
- },
- { handle: 'filesystem' },
- ...routeDefinitions,
- ...(fourOhFourRoute
- ? [
- {
- src: '/.*',
- dest: fourOhFourRoute.prerender
- ? '/404.html'
- : _middlewareEntryPoint
- ? MIDDLEWARE_PATH
- : NODE_PATH,
- status: 404,
- },
- ]
- : []),
- ],
- ...(imageService || imagesConfig
- ? {
- images: imagesConfig
- ? {
- ...imagesConfig,
- domains: [...imagesConfig.domains, ..._config.image.domains],
- remotePatterns: [
- ...(imagesConfig.remotePatterns ?? []),
- ..._config.image.remotePatterns,
- ],
- }
- : getDefaultImageConfig(_config.image),
- }
- : {}),
- });
-
- // Remove temporary folder
- await removeDir(_buildTempFolder);
- },
- },
- };
-}
-
-type Runtime = `nodejs${string}.x`;
-
-// TODO: remove once we don't use a TLA anymore
-async function shouldExternalizeAstroEnvSetup() {
- try {
- await import('astro/env/setup');
- return false;
- } catch {
- return true;
- }
-}
-
-class VercelBuilder {
- readonly NTF_CACHE = {};
-
- constructor(
- readonly config: AstroConfig,
- readonly excludeFiles: URL[],
- readonly includeFiles: URL[],
- readonly logger: AstroIntegrationLogger,
- readonly maxDuration?: number,
- readonly runtime = getRuntime(process, logger),
- ) {}
-
- async buildServerlessFolder(entry: URL, functionName: string) {
- const { config, includeFiles, excludeFiles, logger, NTF_CACHE, runtime, maxDuration } = this;
- // .vercel/output/functions/.func/
- const functionFolder = new URL(`./functions/${functionName}.func/`, config.outDir);
- const packageJson = new URL(`./functions/${functionName}.func/package.json`, config.outDir);
- const vcConfig = new URL(`./functions/${functionName}.func/.vc-config.json`, config.outDir);
-
- // Copy necessary files (e.g. node_modules/)
- const { handler } = await copyDependenciesToFunction(
- {
- entry,
- outDir: functionFolder,
- includeFiles,
- excludeFiles,
- logger,
- },
- NTF_CACHE,
- );
-
- // Enable ESM
- // https://aws.amazon.com/blogs/compute/using-node-js-es-modules-and-top-level-await-in-aws-lambda/
- await writeJson(packageJson, { type: 'module' });
-
- // Serverless function config
- // https://vercel.com/docs/build-output-api/v3#vercel-primitives/serverless-functions/configuration
- await writeJson(vcConfig, {
- runtime,
- handler: handler.replaceAll('\\', '/'),
- launcherType: 'Nodejs',
- maxDuration,
- supportsResponseStreaming: true,
- });
- }
-
- async buildISRFolder(entry: URL, functionName: string, isr: VercelISRConfig) {
- await this.buildServerlessFolder(entry, functionName);
- const prerenderConfig = new URL(
- `./functions/${functionName}.prerender-config.json`,
- this.config.outDir,
- );
- // https://vercel.com/docs/build-output-api/v3/primitives#prerender-configuration-file
- await writeJson(prerenderConfig, {
- expiration: isr.expiration ?? false,
- bypassToken: isr.bypassToken,
- allowQuery: [ASTRO_PATH_PARAM],
- passQuery: true,
- });
- }
-
- async buildMiddlewareFolder(entry: URL, functionName: string, middlewareSecret: string) {
- const functionFolder = new URL(`./functions/${functionName}.func/`, this.config.outDir);
-
- await generateEdgeMiddleware(
- entry,
- this.config.root,
- new URL(VERCEL_EDGE_MIDDLEWARE_FILE, this.config.srcDir),
- new URL('./middleware.mjs', functionFolder),
- middlewareSecret,
- this.logger,
- );
-
- await writeJson(new URL(`./.vc-config.json`, functionFolder), {
- runtime: 'edge',
- entrypoint: 'middleware.mjs',
- });
- }
-}
-
-function getRuntime(process: NodeJS.Process, logger: AstroIntegrationLogger): Runtime {
- const version = process.version.slice(1); // 'v18.19.0' --> '18.19.0'
- const major = version.split('.')[0]; // '18.19.0' --> '18'
- const support = SUPPORTED_NODE_VERSIONS[major];
- if (support === undefined) {
- logger.warn(
- `\n` +
- `\tThe local Node.js version (${major}) is not supported by Vercel Serverless Functions.\n` +
- `\tYour project will use Node.js 18 as the runtime instead.\n` +
- `\tConsider switching your local version to 18.\n`,
- );
- return 'nodejs18.x';
- }
- if (support.status === 'default') {
- return `nodejs${major}.x`;
- }
- if (support.status === 'retiring') {
- if (support.warnDate && new Date() >= support.warnDate) {
- logger.warn(
- `Your project is being built for Node.js ${major} as the runtime, which is retiring by ${support.removal}.`,
- );
- }
- return `nodejs${major}.x`;
- }
- if (support.status === 'beta') {
- logger.warn(
- `Your project is being built for Node.js ${major} as the runtime, which is currently in beta for Vercel Serverless Functions.`,
- );
- return `nodejs${major}.x`;
- }
- if (support.status === 'deprecated') {
- const removeDate = new Intl.DateTimeFormat(undefined, { dateStyle: 'long' }).format(
- support.removal,
- );
- logger.warn(
- `\n` +
- `\tYour project is being built for Node.js ${major} as the runtime.\n` +
- `\tThis version is deprecated by Vercel Serverless Functions, and scheduled to be disabled on ${removeDate}.\n` +
- `\tConsider upgrading your local version to 18.\n`,
- );
- return `nodejs${major}.x`;
- }
- return 'nodejs18.x';
-}
diff --git a/packages/integrations/vercel/src/serverless/entrypoint.ts b/packages/integrations/vercel/src/serverless/entrypoint.ts
deleted file mode 100644
index a881d701ab36..000000000000
--- a/packages/integrations/vercel/src/serverless/entrypoint.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import type { IncomingMessage, ServerResponse } from 'node:http';
-import type { SSRManifest } from 'astro';
-import { NodeApp, applyPolyfills } from 'astro/app/node';
-import {
- ASTRO_LOCALS_HEADER,
- ASTRO_MIDDLEWARE_SECRET_HEADER,
- ASTRO_PATH_HEADER,
- ASTRO_PATH_PARAM,
-} from './adapter.js';
-
-// Run polyfills immediately so any dependent code can use the globals
-applyPolyfills();
-
-// Won't throw if the virtual module is not available because it's not supported in
-// the users's astro version or if astro:env is not enabled in the project
-await import('astro/env/setup')
- .then((mod) => mod.setGetEnv((key) => process.env[key]))
- .catch(() => {});
-
-export const createExports = (
- manifest: SSRManifest,
- { middlewareSecret, skewProtection }: { middlewareSecret: string; skewProtection: boolean },
-) => {
- const app = new NodeApp(manifest);
- const handler = async (req: IncomingMessage, res: ServerResponse) => {
- const url = new URL(`https://example.com${req.url}`);
- const clientAddress = req.headers['x-forwarded-for'] as string | undefined;
- const localsHeader = req.headers[ASTRO_LOCALS_HEADER];
- const middlewareSecretHeader = req.headers[ASTRO_MIDDLEWARE_SECRET_HEADER];
- const realPath = req.headers[ASTRO_PATH_HEADER] ?? url.searchParams.get(ASTRO_PATH_PARAM);
- if (typeof realPath === 'string') {
- req.url = realPath;
- }
-
- let locals = {};
- if (localsHeader) {
- if (middlewareSecretHeader !== middlewareSecret) {
- res.statusCode = 403;
- res.end('Forbidden');
- return;
- }
- locals =
- typeof localsHeader === 'string' ? JSON.parse(localsHeader) : JSON.parse(localsHeader[0]);
- }
- // hide the secret from the rest of user code
- delete req.headers[ASTRO_MIDDLEWARE_SECRET_HEADER];
-
- // https://vercel.com/docs/deployments/skew-protection#supported-frameworks
- if (skewProtection && process.env.VERCEL_SKEW_PROTECTION_ENABLED === '1') {
- req.headers['x-deployment-id'] = process.env.VERCEL_DEPLOYMENT_ID;
- }
-
- const webResponse = await app.render(req, { addCookieHeader: true, clientAddress, locals });
- await NodeApp.writeResponse(webResponse, res);
- };
-
- return { default: handler };
-};
-
-// HACK: prevent warning
-// @astrojs-ssr-virtual-entry (22:23) "start" is not exported by "dist/serverless/entrypoint.js", imported by "@astrojs-ssr-virtual-entry".
-export function start() {}
diff --git a/packages/integrations/vercel/src/serverless/middleware.ts b/packages/integrations/vercel/src/serverless/middleware.ts
deleted file mode 100644
index 07d0843bf576..000000000000
--- a/packages/integrations/vercel/src/serverless/middleware.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { existsSync } from 'node:fs';
-import { builtinModules } from 'node:module';
-import { fileURLToPath, pathToFileURL } from 'node:url';
-import type { AstroIntegrationLogger } from 'astro';
-import {
- ASTRO_LOCALS_HEADER,
- ASTRO_MIDDLEWARE_SECRET_HEADER,
- ASTRO_PATH_HEADER,
- NODE_PATH,
-} from './adapter.js';
-
-/**
- * It generates the Vercel Edge Middleware file.
- *
- * It creates a temporary file, the edge middleware, with some dynamic info.
- *
- * Then this file gets bundled with esbuild. The bundle phase will inline the Astro middleware code.
- *
- * @param astroMiddlewareEntryPoint
- * @param outPath
- * @returns {Promise} The path to the bundled file
- */
-export async function generateEdgeMiddleware(
- astroMiddlewareEntryPointPath: URL,
- root: URL,
- vercelEdgeMiddlewareHandlerPath: URL,
- outPath: URL,
- middlewareSecret: string,
- logger: AstroIntegrationLogger,
-): Promise {
- const code = edgeMiddlewareTemplate(
- astroMiddlewareEntryPointPath,
- vercelEdgeMiddlewareHandlerPath,
- middlewareSecret,
- logger,
- );
- // https://vercel.com/docs/concepts/functions/edge-middleware#create-edge-middleware
- const bundledFilePath = fileURLToPath(outPath);
- const esbuild = await import('esbuild');
- await esbuild.build({
- stdin: {
- contents: code,
- resolveDir: fileURLToPath(root),
- },
- target: 'es2020',
- platform: 'browser',
- // https://runtime-keys.proposal.wintercg.org/#edge-light
- conditions: ['edge-light', 'worker', 'browser'],
- outfile: bundledFilePath,
- allowOverwrite: true,
- format: 'esm',
- bundle: true,
- minify: false,
- // ensure node built-in modules are namespaced with `node:`
- plugins: [
- {
- name: 'esbuild-namespace-node-built-in-modules',
- setup(build) {
- const filter = new RegExp(builtinModules.map((mod) => `(^${mod}$)`).join('|'));
- build.onResolve({ filter }, (args) => ({ path: 'node:' + args.path, external: true }));
- },
- },
- ],
- });
- return pathToFileURL(bundledFilePath);
-}
-
-function edgeMiddlewareTemplate(
- astroMiddlewareEntryPointPath: URL,
- vercelEdgeMiddlewareHandlerPath: URL,
- middlewareSecret: string,
- logger: AstroIntegrationLogger,
-) {
- const middlewarePath = JSON.stringify(
- fileURLToPath(astroMiddlewareEntryPointPath).replace(/\\/g, '/'),
- );
- const filePathEdgeMiddleware = fileURLToPath(vercelEdgeMiddlewareHandlerPath);
- let handlerTemplateImport = '';
- let handlerTemplateCall = '{}';
- if (existsSync(filePathEdgeMiddleware + '.js') || existsSync(filePathEdgeMiddleware + '.ts')) {
- logger.warn(
- 'Usage of `vercel-edge-middleware.js` is deprecated. You can now use the `waitUntil(promise)` function directly as `ctx.locals.waitUntil(promise)`.',
- );
- const stringified = JSON.stringify(filePathEdgeMiddleware.replace(/\\/g, '/'));
- handlerTemplateImport = `import handler from ${stringified}`;
- handlerTemplateCall = `await handler({ request, context })`;
- } else {
- }
- return `
- ${handlerTemplateImport}
-import { onRequest } from ${middlewarePath};
-import { createContext, trySerializeLocals } from 'astro/middleware';
-export default async function middleware(request, context) {
- const ctx = createContext({
- request,
- params: {}
- });
- ctx.locals = { vercel: { edge: context }, ...${handlerTemplateCall} };
- const { origin } = new URL(request.url);
- const next = async () => {
- const { vercel, ...locals } = ctx.locals;
- const response = await fetch(new URL('/${NODE_PATH}', request.url), {
- headers: {
- ...Object.fromEntries(request.headers.entries()),
- '${ASTRO_MIDDLEWARE_SECRET_HEADER}': '${middlewareSecret}',
- '${ASTRO_PATH_HEADER}': request.url.replace(origin, ''),
- '${ASTRO_LOCALS_HEADER}': trySerializeLocals(locals)
- }
- });
- return new Response(response.body, {
- status: response.status,
- statusText: response.statusText,
- headers: response.headers,
- });
- };
-
- const response = await onRequest(ctx, next);
- // Append cookies from Astro.cookies
- for(const setCookieHeaderValue of ctx.cookies.headers()) {
- response.headers.append('set-cookie', setCookieHeaderValue);
- }
- return response;
-}`;
-}
diff --git a/packages/integrations/vercel/src/speed-insights.ts b/packages/integrations/vercel/src/speed-insights.ts
deleted file mode 100644
index cd2ae7fe8d70..000000000000
--- a/packages/integrations/vercel/src/speed-insights.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import type { Metric } from 'web-vitals';
-import { onCLS, onFCP, onFID, onLCP, onTTFB } from 'web-vitals';
-
-const SPEED_INSIGHTS_INTAKE = 'https://vitals.vercel-analytics.com/v1/vitals';
-
-type Options = { path: string; analyticsId: string };
-
-const getConnectionSpeed = () => {
- return 'connection' in navigator &&
- navigator['connection'] &&
- 'effectiveType' in (navigator['connection'] as unknown as { effectiveType: string })
- ? (navigator['connection'] as unknown as { effectiveType: string })['effectiveType']
- : '';
-};
-
-const sendToSpeedInsights = (metric: Metric, options: Options) => {
- const body = {
- dsn: options.analyticsId,
- id: metric.id,
- page: options.path,
- href: location.href,
- event_name: metric.name,
- value: metric.value.toString(),
- speed: getConnectionSpeed(),
- };
- const blob = new Blob([new URLSearchParams(body).toString()], {
- type: 'application/x-www-form-urlencoded',
- });
- if (navigator.sendBeacon) {
- navigator.sendBeacon(SPEED_INSIGHTS_INTAKE, blob);
- } else
- fetch(SPEED_INSIGHTS_INTAKE, {
- body: blob,
- method: 'POST',
- credentials: 'omit',
- keepalive: true,
- });
-};
-
-function collectWebVitals() {
- const analyticsId = (import.meta as any).env.PUBLIC_VERCEL_ANALYTICS_ID;
-
- if (!analyticsId) {
- console.error('[Speed Insights] VERCEL_ANALYTICS_ID not found');
- return;
- }
-
- const options: Options = { path: window.location.pathname, analyticsId };
-
- try {
- onFID((metric) => sendToSpeedInsights(metric, options));
- onTTFB((metric) => sendToSpeedInsights(metric, options));
- onLCP((metric) => sendToSpeedInsights(metric, options));
- onCLS((metric) => sendToSpeedInsights(metric, options));
- onFCP((metric) => sendToSpeedInsights(metric, options));
- } catch (err) {
- console.error('[Speed Insights]', err);
- }
-}
-
-const mode = (import.meta as any).env.MODE as 'development' | 'production';
-
-if (mode === 'production') {
- collectWebVitals();
-}
diff --git a/packages/integrations/vercel/src/static/adapter.ts b/packages/integrations/vercel/src/static/adapter.ts
deleted file mode 100644
index efe3d2da52a9..000000000000
--- a/packages/integrations/vercel/src/static/adapter.ts
+++ /dev/null
@@ -1,157 +0,0 @@
-import type { AstroAdapter, AstroConfig, AstroIntegration } from 'astro';
-
-import { emptyDir, writeJson } from '@astrojs/internal-helpers/fs';
-import {
- type DevImageService,
- type VercelImageConfig,
- getAstroImageConfig,
- getDefaultImageConfig,
-} from '../image/shared.js';
-import { isServerLikeOutput } from '../lib/prerender.js';
-import { getRedirects } from '../lib/redirects.js';
-import {
- type VercelSpeedInsightsConfig,
- getSpeedInsightsViteConfig,
-} from '../lib/speed-insights.js';
-import {
- type VercelWebAnalyticsConfig,
- getInjectableWebAnalyticsContent,
-} from '../lib/web-analytics.js';
-
-const PACKAGE_NAME = '@astrojs/vercel/static';
-
-function getAdapter(): AstroAdapter {
- return {
- name: PACKAGE_NAME,
- supportedAstroFeatures: {
- assets: {
- supportKind: 'stable',
- isSquooshCompatible: true,
- isSharpCompatible: true,
- },
- staticOutput: 'stable',
- serverOutput: 'unsupported',
- hybridOutput: 'unsupported',
- envGetSecret: 'unsupported',
- },
- adapterFeatures: {
- edgeMiddleware: false,
- functionPerRoute: false,
- },
- };
-}
-
-export interface VercelStaticConfig {
- webAnalytics?: VercelWebAnalyticsConfig;
- /**
- * @deprecated This option lets you configure the legacy speed insights API which is now deprecated by Vercel.
- *
- * See [Vercel Speed Insights Quickstart](https://vercel.com/docs/speed-insights/quickstart) for instructions on how to use the library instead.
- *
- * https://vercel.com/docs/speed-insights/quickstart
- */
- speedInsights?: VercelSpeedInsightsConfig;
- imageService?: boolean;
- imagesConfig?: VercelImageConfig;
- devImageService?: DevImageService;
-}
-
-export default function vercelStatic({
- webAnalytics,
- speedInsights,
- imageService,
- imagesConfig,
- devImageService = 'sharp',
-}: VercelStaticConfig = {}): AstroIntegration {
- let _config: AstroConfig;
-
- return {
- name: '@astrojs/vercel',
- hooks: {
- 'astro:config:setup': async ({ command, config, injectScript, updateConfig }) => {
- if (webAnalytics?.enabled) {
- injectScript(
- 'head-inline',
- await getInjectableWebAnalyticsContent({
- mode: command === 'dev' ? 'development' : 'production',
- }),
- );
- }
- if (command === 'build' && speedInsights?.enabled) {
- injectScript('page', 'import "@astrojs/vercel/speed-insights"');
- }
- const outDir = new URL('./.vercel/output/static/', config.root);
- updateConfig({
- outDir,
- build: {
- format: 'directory',
- redirects: false,
- },
- vite: {
- ...getSpeedInsightsViteConfig(speedInsights?.enabled),
- },
- ...getAstroImageConfig(
- imageService,
- imagesConfig,
- command,
- devImageService,
- config.image,
- ),
- });
- },
- 'astro:config:done': ({ setAdapter, config }) => {
- setAdapter(getAdapter());
- _config = config;
-
- if (isServerLikeOutput(config)) {
- throw new Error(`${PACKAGE_NAME} should be used with output: 'static'`);
- }
- },
- 'astro:build:start': async () => {
- // Ensure to have `.vercel/output` empty.
- // This is because, when building to static, outDir = .vercel/output/static/,
- // so .vercel/output itself won't get cleaned.
- await emptyDir(new URL('./.vercel/output/', _config.root));
- },
- 'astro:build:done': async ({ routes }) => {
- // Output configuration
- // https://vercel.com/docs/build-output-api/v3#build-output-configuration
- await writeJson(new URL('./.vercel/output/config.json', _config.root), {
- version: 3,
- routes: [
- ...getRedirects(routes, _config),
- {
- src: `^/${_config.build.assets}/(.*)$`,
- headers: { 'cache-control': 'public, max-age=31536000, immutable' },
- continue: true,
- },
- { handle: 'filesystem' },
- ...(routes.find((route) => route.pathname === '/404')
- ? [
- {
- src: `/.*`,
- dest: `/404.html`,
- status: 404,
- },
- ]
- : []),
- ],
- ...(imageService || imagesConfig
- ? {
- images: imagesConfig
- ? {
- ...imagesConfig,
- domains: [...imagesConfig.domains, ..._config.image.domains],
- remotePatterns: [
- ...(imagesConfig.remotePatterns ?? []),
- ..._config.image.remotePatterns,
- ],
- }
- : getDefaultImageConfig(_config.image),
- }
- : {}),
- });
- },
- },
- };
-}
diff --git a/packages/integrations/vercel/src/types.d.ts b/packages/integrations/vercel/src/types.d.ts
deleted file mode 100644
index 1c5b8d2db11f..000000000000
--- a/packages/integrations/vercel/src/types.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import type { AnalyticsProps } from '@vercel/analytics';
-
-export type VercelWebAnalyticsBeforeSend = AnalyticsProps['beforeSend'];
diff --git a/packages/integrations/vercel/test/edge-middleware.test.js b/packages/integrations/vercel/test/edge-middleware.test.js
deleted file mode 100644
index 9ae583a119bf..000000000000
--- a/packages/integrations/vercel/test/edge-middleware.test.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Vercel edge middleware', () => {
- /** @type {import('../../../astro/test/test-utils.js').Fixture} */
- let build;
- before(async () => {
- build = await loadFixture({
- root: './fixtures/middleware-with-edge-file/',
- });
- await build.build();
- });
-
- it('an edge function is created', async () => {
- const contents = await build.readFile(
- '../.vercel/output/functions/_middleware.func/.vc-config.json',
- );
- const contentsJSON = JSON.parse(contents);
- assert.equal(contentsJSON.runtime, 'edge');
- assert.equal(contentsJSON.entrypoint, 'middleware.mjs');
- });
-
- it('deployment config points to the middleware edge function', async () => {
- const contents = await build.readFile('../.vercel/output/config.json');
- const { routes } = JSON.parse(contents);
- assert.equal(
- routes.some((route) => route.dest === '_middleware'),
- true,
- );
- });
-
- it('edge sets Set-Cookie headers', async () => {
- let entry = new URL(
- '../.vercel/output/functions/_middleware.func/middleware.mjs',
- build.config.outDir,
- );
- const module = await import(entry);
- const request = new Request('http://example.com/foo');
- const response = await module.default(request, {});
- assert.equal(response.headers.get('set-cookie'), 'foo=bar');
- assert.ok((await response.text()).length, 'Body is included');
- });
-
- // TODO: The path here seems to be inconsistent?
- it.skip('with edge handle file, should successfully build the middleware', async () => {
- const fixture = await loadFixture({
- root: './fixtures/middleware-with-edge-file/',
- });
- await fixture.build();
- const contents = await fixture.readFile(
- // this is abysmal...
- '../.vercel/output/functions/render.func/www/withastro/astro/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/dist/middleware.mjs',
- );
- console.log(contents);
- // assert.equal(contents.includes('title:')).to.be.true;
- // chaiJestSnapshot.setTestName('Middleware with handler file');
- // assert.equal(contents).to.matchSnapshot(true);
- });
-
- // TODO: The path here seems to be inconsistent?
- it.skip('without edge handle file, should successfully build the middleware', async () => {
- const fixture = await loadFixture({
- root: './fixtures/middleware-without-edge-file/',
- });
- await fixture.build();
- const contents = await fixture.readFile(
- // this is abysmal...
- '../.vercel/output/functions/render.func/www/withastro/astro/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/dist/middleware.mjs',
- );
- console.log(contents);
- // assert.equal(contents.includes('title:')).to.be.false;
- // chaiJestSnapshot.setTestName('Middleware without handler file');
- // assert.equal(contents).to.matchSnapshot(true);
- });
-});
diff --git a/packages/integrations/vercel/test/fixtures/basic/astro.config.mjs b/packages/integrations/vercel/test/fixtures/basic/astro.config.mjs
deleted file mode 100644
index 942139f3dcb5..000000000000
--- a/packages/integrations/vercel/test/fixtures/basic/astro.config.mjs
+++ /dev/null
@@ -1,8 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- functionPerRoute: true
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/basic/package.json b/packages/integrations/vercel/test/fixtures/basic/package.json
deleted file mode 100644
index 89fb910ff8b8..000000000000
--- a/packages/integrations/vercel/test/fixtures/basic/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-basic",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/basic/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/basic/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/basic/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/basic/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/basic/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/basic/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/astro.config.mjs b/packages/integrations/vercel/test/fixtures/functionPerRoute/astro.config.mjs
deleted file mode 100644
index eb2c7699e714..000000000000
--- a/packages/integrations/vercel/test/fixtures/functionPerRoute/astro.config.mjs
+++ /dev/null
@@ -1,9 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- functionPerRoute: true
- }),
- output: "server"
-});
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/package.json b/packages/integrations/vercel/test/fixtures/functionPerRoute/package.json
deleted file mode 100644
index e33f178bb200..000000000000
--- a/packages/integrations/vercel/test/fixtures/functionPerRoute/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-function-per-route",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro b/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro
deleted file mode 100644
index c61b83a97ca2..000000000000
--- a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/prerender.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-export const prerender = true;
----
-
-
-
- Prerendered Page
-
-
- Prerendered Page
-
-
diff --git a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/functionPerRoute/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/image/astro.config.mjs b/packages/integrations/vercel/test/fixtures/image/astro.config.mjs
deleted file mode 100644
index 78923f2cbb9b..000000000000
--- a/packages/integrations/vercel/test/fixtures/image/astro.config.mjs
+++ /dev/null
@@ -1,15 +0,0 @@
-import vercel from '@astrojs/vercel/static';
-import { defineConfig } from 'astro/config';
-import { testImageService } from '../../../../../astro/test/test-image-service.js';
-
-export default defineConfig({
- adapter: vercel({imageService: true}),
- image: {
- service: testImageService(),
- domains: ['astro.build'],
- remotePatterns: [{
- protocol: 'https',
- hostname: '**.amazonaws.com',
- }],
- },
-});
diff --git a/packages/integrations/vercel/test/fixtures/image/package.json b/packages/integrations/vercel/test/fixtures/image/package.json
deleted file mode 100644
index 87fefe2e019e..000000000000
--- a/packages/integrations/vercel/test/fixtures/image/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "@test/astro-vercel-image",
- "version": "0.0.0",
- "private": true,
- "scripts": {
- "dev": "astro dev"
- },
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/image/src/assets/astro.jpeg b/packages/integrations/vercel/test/fixtures/image/src/assets/astro.jpeg
deleted file mode 100644
index 40d35ef48fc4..000000000000
Binary files a/packages/integrations/vercel/test/fixtures/image/src/assets/astro.jpeg and /dev/null differ
diff --git a/packages/integrations/vercel/test/fixtures/image/src/assets/penguin.svg b/packages/integrations/vercel/test/fixtures/image/src/assets/penguin.svg
deleted file mode 100644
index d93379b6846f..000000000000
--- a/packages/integrations/vercel/test/fixtures/image/src/assets/penguin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/image/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/image/src/pages/index.astro
deleted file mode 100644
index db7c22eebc64..000000000000
--- a/packages/integrations/vercel/test/fixtures/image/src/pages/index.astro
+++ /dev/null
@@ -1,13 +0,0 @@
----
-import { Image } from "astro:assets";
-import astro from "../assets/astro.jpeg";
-import penguin from "../assets/penguin.svg";
----
-
-
-
-
-
-
-
-
diff --git a/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs b/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs
deleted file mode 100644
index 4b675ab6c7b2..000000000000
--- a/packages/integrations/vercel/test/fixtures/isr/astro.config.mjs
+++ /dev/null
@@ -1,13 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: "server",
- adapter: vercel({
- isr: {
- bypassToken: "1c9e601d-9943-4e7c-9575-005556d774a8",
- expiration: 120,
- exclude: ["/two", "/excluded/[dynamic]"]
- }
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/isr/package.json b/packages/integrations/vercel/test/fixtures/isr/package.json
deleted file mode 100644
index a1fd601d3b1a..000000000000
--- a/packages/integrations/vercel/test/fixtures/isr/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/vercel-isr",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/isr/src/pages/excluded/[dynamic].astro b/packages/integrations/vercel/test/fixtures/isr/src/pages/excluded/[dynamic].astro
deleted file mode 100644
index 54ba67fa8640..000000000000
--- a/packages/integrations/vercel/test/fixtures/isr/src/pages/excluded/[dynamic].astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Dynamic
-
-
- Dynamic
-
-
diff --git a/packages/integrations/vercel/test/fixtures/isr/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/isr/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/isr/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/isr/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/isr/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/isr/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/max-duration/astro.config.mjs b/packages/integrations/vercel/test/fixtures/max-duration/astro.config.mjs
deleted file mode 100644
index b1866a75b11d..000000000000
--- a/packages/integrations/vercel/test/fixtures/max-duration/astro.config.mjs
+++ /dev/null
@@ -1,9 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: "server",
- adapter: vercel({
- maxDuration: 60
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/max-duration/package.json b/packages/integrations/vercel/test/fixtures/max-duration/package.json
deleted file mode 100644
index 9a45d782edd9..000000000000
--- a/packages/integrations/vercel/test/fixtures/max-duration/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "@test/vercel-max-duration",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
-
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/max-duration/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/max-duration/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/max-duration/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/max-duration/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/max-duration/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/max-duration/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/astro.config.mjs b/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/astro.config.mjs
deleted file mode 100644
index f92b18a4ee31..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/astro.config.mjs
+++ /dev/null
@@ -1,9 +0,0 @@
-import vercel from "@astrojs/vercel/serverless";
-import {defineConfig} from "astro/config";
-
-export default defineConfig({
- adapter: vercel({
- edgeMiddleware: true
- }),
- output: 'server'
-});
diff --git a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/package.json b/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/package.json
deleted file mode 100644
index 2579a8c926e4..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/vercel-edge-middleware-with-edge-file",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/middleware.js b/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/middleware.js
deleted file mode 100644
index b1a67f550965..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/middleware.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * @type {import("astro").MiddlewareResponseHandler}
- */
-export const onRequest = async (context, next) => {
- const test = 'something';
- context.cookies.set('foo', 'bar');
- const response = await next();
- return response;
-};
diff --git a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/pages/index.astro
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/vercel-edge-middleware.js b/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/vercel-edge-middleware.js
deleted file mode 100644
index bf69edb3e8bf..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-with-edge-file/src/vercel-edge-middleware.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default function ({ request, context }) {
- return {
- title: 'Hello world',
- };
-}
diff --git a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/astro.config.mjs b/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/astro.config.mjs
deleted file mode 100644
index f92b18a4ee31..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/astro.config.mjs
+++ /dev/null
@@ -1,9 +0,0 @@
-import vercel from "@astrojs/vercel/serverless";
-import {defineConfig} from "astro/config";
-
-export default defineConfig({
- adapter: vercel({
- edgeMiddleware: true
- }),
- output: 'server'
-});
diff --git a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/package.json b/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/package.json
deleted file mode 100644
index d5638ce16a87..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/vercel-edge-middleware-without-edge-file",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/src/middleware.js b/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/src/middleware.js
deleted file mode 100644
index 349a0aa79581..000000000000
--- a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/src/middleware.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * @type {import("astro").MiddlewareResponseHandler}
- */
-export const onRequest = async (context, next) => {
- const test = 'something';
- const response = await next();
- return response;
-};
diff --git a/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/middleware-without-edge-file/src/pages/index.astro
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/packages/integrations/vercel/test/fixtures/no-output/astro.config.mjs b/packages/integrations/vercel/test/fixtures/no-output/astro.config.mjs
deleted file mode 100644
index 179d18d38b5e..000000000000
--- a/packages/integrations/vercel/test/fixtures/no-output/astro.config.mjs
+++ /dev/null
@@ -1,6 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel()
-});
diff --git a/packages/integrations/vercel/test/fixtures/no-output/package.json b/packages/integrations/vercel/test/fixtures/no-output/package.json
deleted file mode 100644
index 604b4e4eaef9..000000000000
--- a/packages/integrations/vercel/test/fixtures/no-output/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-no-output",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/no-output/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/no-output/src/pages/index.astro
deleted file mode 100644
index 6368ce11843b..000000000000
--- a/packages/integrations/vercel/test/fixtures/no-output/src/pages/index.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- testing
-
-
- testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/astro.config.mjs b/packages/integrations/vercel/test/fixtures/prerendered-error-pages/astro.config.mjs
deleted file mode 100644
index 83e1f2f38d54..000000000000
--- a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/astro.config.mjs
+++ /dev/null
@@ -1,7 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: 'server',
- adapter: vercel()
-});
diff --git a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/package.json b/packages/integrations/vercel/test/fixtures/prerendered-error-pages/package.json
deleted file mode 100644
index 5cfc0e24c44d..000000000000
--- a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-prerendered-error-pages",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/404.astro b/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/404.astro
deleted file mode 100644
index 162ff90b6820..000000000000
--- a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/404.astro
+++ /dev/null
@@ -1,4 +0,0 @@
----
-export const prerender = true
----
-404
diff --git a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/prerendered-error-pages/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/redirects-serverless/astro.config.mjs b/packages/integrations/vercel/test/fixtures/redirects-serverless/astro.config.mjs
deleted file mode 100644
index 1071b7e67160..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects-serverless/astro.config.mjs
+++ /dev/null
@@ -1,7 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: 'hybrid',
- adapter: vercel(),
-});
diff --git a/packages/integrations/vercel/test/fixtures/redirects-serverless/package.json b/packages/integrations/vercel/test/fixtures/redirects-serverless/package.json
deleted file mode 100644
index c8de30d66c33..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects-serverless/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-redirects-serverless",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/redirects-serverless/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/redirects-serverless/src/pages/index.astro
deleted file mode 100644
index 9c077e2a381b..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects-serverless/src/pages/index.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Testing
-
-
- Testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/redirects-serverless/src/pages/subpage.astro b/packages/integrations/vercel/test/fixtures/redirects-serverless/src/pages/subpage.astro
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/packages/integrations/vercel/test/fixtures/redirects/astro.config.mjs b/packages/integrations/vercel/test/fixtures/redirects/astro.config.mjs
deleted file mode 100644
index 707805087f19..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects/astro.config.mjs
+++ /dev/null
@@ -1,6 +0,0 @@
-import vercel from '@astrojs/vercel/static';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel(),
-});
diff --git a/packages/integrations/vercel/test/fixtures/redirects/package.json b/packages/integrations/vercel/test/fixtures/redirects/package.json
deleted file mode 100644
index d7dcc54718c6..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-redirects",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/redirects/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/redirects/src/pages/index.astro
deleted file mode 100644
index 9c077e2a381b..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects/src/pages/index.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Testing
-
-
- Testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro b/packages/integrations/vercel/test/fixtures/redirects/src/pages/subpage.astro
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/packages/integrations/vercel/test/fixtures/redirects/src/pages/team/articles/[...slug].astro b/packages/integrations/vercel/test/fixtures/redirects/src/pages/team/articles/[...slug].astro
deleted file mode 100644
index 716d3bd5d4af..000000000000
--- a/packages/integrations/vercel/test/fixtures/redirects/src/pages/team/articles/[...slug].astro
+++ /dev/null
@@ -1,25 +0,0 @@
----
-export const getStaticPaths = (async () => {
- const posts = [
- { slug: 'one', data: {draft: false, title: 'One'} },
- { slug: 'two', data: {draft: false, title: 'Two'} }
- ];
- return posts.map((post) => {
- return {
- params: { slug: post.slug },
- props: { draft: post.data.draft, title: post.data.title },
- };
- });
-})
-
-const { slug } = Astro.params;
-const { title } = Astro.props;
----
-
-
- { title }
-
-
- { title }
-
-
diff --git a/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs b/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs
deleted file mode 100644
index 534197429c8a..000000000000
--- a/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: "server",
- adapter: vercel(),
- experimental: {
- serverIslands: true,
- }
-});
diff --git a/packages/integrations/vercel/test/fixtures/server-islands/package.json b/packages/integrations/vercel/test/fixtures/server-islands/package.json
deleted file mode 100644
index a21ff176a8ff..000000000000
--- a/packages/integrations/vercel/test/fixtures/server-islands/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "@test/vercel-server-islands",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
-
diff --git a/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro b/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro
deleted file mode 100644
index 9d2832bc1878..000000000000
--- a/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro
+++ /dev/null
@@ -1 +0,0 @@
-I'm an island
diff --git a/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro
deleted file mode 100644
index 835126c2bc10..000000000000
--- a/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-import Island from '../components/Island.astro';
----
-
-
- One
-
-
- One
-
-
-
diff --git a/packages/integrations/vercel/test/fixtures/serverless-prerender/astro.config.mjs b/packages/integrations/vercel/test/fixtures/serverless-prerender/astro.config.mjs
deleted file mode 100644
index 4d8f76288a26..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-prerender/astro.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- // Pass some value to make sure it doesn't error out
- includeFiles: ['included.js'],
- }),
- output: 'server'
-});
diff --git a/packages/integrations/vercel/test/fixtures/serverless-prerender/included.js b/packages/integrations/vercel/test/fixtures/serverless-prerender/included.js
deleted file mode 100644
index 4e64b2d616bf..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-prerender/included.js
+++ /dev/null
@@ -1 +0,0 @@
-'works'
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/serverless-prerender/package.json b/packages/integrations/vercel/test/fixtures/serverless-prerender/package.json
deleted file mode 100644
index c51362516aff..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-prerender/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-serverless-prerender",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/serverless-prerender/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/serverless-prerender/src/pages/index.astro
deleted file mode 100644
index b6b833e5358f..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-prerender/src/pages/index.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-export const prerender = import.meta.env.PRERENDER;
----
-
-
-
- testing
-
-
- testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/astro.config.mjs b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/astro.config.mjs
deleted file mode 100644
index 3132bfc53abe..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/astro.config.mjs
+++ /dev/null
@@ -1,11 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- // Pass some value to make sure it doesn't error out
- includeFiles: ['included.js'],
- functionPerRoute: true,
- }),
- output: 'server'
-});
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/included.js b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/included.js
deleted file mode 100644
index 4e64b2d616bf..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/included.js
+++ /dev/null
@@ -1 +0,0 @@
-'works'
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/package.json b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/package.json
deleted file mode 100644
index e22a7e932aea..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-serverless-with-dynamic-routes",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/[id]/index.astro b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/[id]/index.astro
deleted file mode 100644
index 4eab5952d650..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/[id]/index.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-export const prerender = false;
----
-
-
-
- testing {Astro.params.id}
-
-
- testing {Astro.params.id}
-
-
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/api/[id].js b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/api/[id].js
deleted file mode 100644
index f54e673a8919..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/api/[id].js
+++ /dev/null
@@ -1,7 +0,0 @@
-export const prerender = false;
-
-export async function GET({ params }) {
- return Response.json({
- id: params.id
- });
-}
diff --git a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/index.astro
deleted file mode 100644
index b6b833e5358f..000000000000
--- a/packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes/src/pages/index.astro
+++ /dev/null
@@ -1,12 +0,0 @@
----
-export const prerender = import.meta.env.PRERENDER;
----
-
-
-
- testing
-
-
- testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/static-assets/astro.config.mjs b/packages/integrations/vercel/test/fixtures/static-assets/astro.config.mjs
deleted file mode 100644
index 20b0b8e2ba7f..000000000000
--- a/packages/integrations/vercel/test/fixtures/static-assets/astro.config.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
-});
diff --git a/packages/integrations/vercel/test/fixtures/static-assets/package.json b/packages/integrations/vercel/test/fixtures/static-assets/package.json
deleted file mode 100644
index e1b608a856fd..000000000000
--- a/packages/integrations/vercel/test/fixtures/static-assets/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-static-assets",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/static-assets/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/static-assets/src/pages/index.astro
deleted file mode 100644
index 9c077e2a381b..000000000000
--- a/packages/integrations/vercel/test/fixtures/static-assets/src/pages/index.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Testing
-
-
- Testing
-
-
diff --git a/packages/integrations/vercel/test/fixtures/static/astro.config.mjs b/packages/integrations/vercel/test/fixtures/static/astro.config.mjs
deleted file mode 100644
index 6e2d7bff70a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/static/astro.config.mjs
+++ /dev/null
@@ -1,6 +0,0 @@
-import vercel from '@astrojs/vercel/static';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel()
-});
diff --git a/packages/integrations/vercel/test/fixtures/static/package.json b/packages/integrations/vercel/test/fixtures/static/package.json
deleted file mode 100644
index 2f2936e31a31..000000000000
--- a/packages/integrations/vercel/test/fixtures/static/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-static",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/static/src/pages/404.astro b/packages/integrations/vercel/test/fixtures/static/src/pages/404.astro
deleted file mode 100644
index 9e307c5c292c..000000000000
--- a/packages/integrations/vercel/test/fixtures/static/src/pages/404.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- 404
-
-
- 404
-
-
diff --git a/packages/integrations/vercel/test/fixtures/static/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/static/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/static/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/static/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/static/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/static/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs b/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs
deleted file mode 100644
index 94f52a3d6ef6..000000000000
--- a/packages/integrations/vercel/test/fixtures/streaming/astro.config.mjs
+++ /dev/null
@@ -1,7 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- output: "server",
- adapter: vercel()
-});
diff --git a/packages/integrations/vercel/test/fixtures/streaming/package.json b/packages/integrations/vercel/test/fixtures/streaming/package.json
deleted file mode 100644
index 80068581cc33..000000000000
--- a/packages/integrations/vercel/test/fixtures/streaming/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "@test/vercel-streaming",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
-
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/streaming/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/streaming/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/astro.config.mjs b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/astro.config.mjs
deleted file mode 100644
index 794734f786e6..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/astro.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- speedInsights: {
- enabled: true
- }
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/package.json b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/package.json
deleted file mode 100644
index 4c6867fd353a..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-with-speed-insights-enabled-output-as-server",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
\ No newline at end of file
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/astro.config.mjs b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/astro.config.mjs
deleted file mode 100644
index 589aa366249c..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/astro.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import vercel from '@astrojs/vercel/static';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- speedInsights: {
- enabled: true
- }
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/package.json b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/package.json
deleted file mode 100644
index 0022e1e925c1..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-with-speed-insights-enabled-output-as-static",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/astro.config.mjs b/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/astro.config.mjs
deleted file mode 100644
index 7a3cec1fd958..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/astro.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import vercel from '@astrojs/vercel/static';
-import { defineConfig } from 'astro/config';
-
-export default defineConfig({
- adapter: vercel({
- webAnalytics: {
- enabled: true
- }
- })
-});
diff --git a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/package.json b/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/package.json
deleted file mode 100644
index c54ef16c759b..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "@test/astro-vercel-with-web-analytics-enabled-output-as-static",
- "version": "0.0.0",
- "private": true,
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/one.astro b/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/one.astro
deleted file mode 100644
index 0c7fb90a735e..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/one.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- One
-
-
- One
-
-
diff --git a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/two.astro b/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/two.astro
deleted file mode 100644
index e7ba9910e2a6..000000000000
--- a/packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static/src/pages/two.astro
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Two
-
-
- Two
-
-
diff --git a/packages/integrations/vercel/test/hosted/README.md b/packages/integrations/vercel/test/hosted/README.md
deleted file mode 100644
index 9dbb9bbc0260..000000000000
--- a/packages/integrations/vercel/test/hosted/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-The tests in this folder are done directly on a deployed Vercel website (hosted at https://astro-vercel-image-test.vercel.app) and are not run by the test suite. They instead run every week through a GitHub action.
-
-The purpose of those tests is to make sure that everything works as expected while deployed. In a way, they're as E2E as it gets.
diff --git a/packages/integrations/vercel/test/hosted/hosted-astro-project/astro.config.mjs b/packages/integrations/vercel/test/hosted/hosted-astro-project/astro.config.mjs
deleted file mode 100644
index 2eb8e60ab861..000000000000
--- a/packages/integrations/vercel/test/hosted/hosted-astro-project/astro.config.mjs
+++ /dev/null
@@ -1,8 +0,0 @@
-import vercel from '@astrojs/vercel/serverless';
-import { defineConfig } from 'astro/config';
-
-// https://astro.build/config
-export default defineConfig({
- output: 'server',
- adapter: vercel(),
-});
diff --git a/packages/integrations/vercel/test/hosted/hosted-astro-project/package.json b/packages/integrations/vercel/test/hosted/hosted-astro-project/package.json
deleted file mode 100644
index b20c4385b315..000000000000
--- a/packages/integrations/vercel/test/hosted/hosted-astro-project/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "vercel-hosted-astro-project",
- "version": "0.0.0",
- "private": true,
- "scripts": {
- "build": "astro build"
- },
- "dependencies": {
- "@astrojs/vercel": "workspace:*",
- "astro": "workspace:*"
- }
-}
diff --git a/packages/integrations/vercel/test/hosted/hosted-astro-project/src/assets/penguin.png b/packages/integrations/vercel/test/hosted/hosted-astro-project/src/assets/penguin.png
deleted file mode 100644
index 218acde5bc84..000000000000
Binary files a/packages/integrations/vercel/test/hosted/hosted-astro-project/src/assets/penguin.png and /dev/null differ
diff --git a/packages/integrations/vercel/test/hosted/hosted-astro-project/src/pages/index.astro b/packages/integrations/vercel/test/hosted/hosted-astro-project/src/pages/index.astro
deleted file mode 100644
index 256bfb407aaa..000000000000
--- a/packages/integrations/vercel/test/hosted/hosted-astro-project/src/pages/index.astro
+++ /dev/null
@@ -1,6 +0,0 @@
----
-import { Image } from 'astro:assets';
-import penguin from '../assets/penguin.png';
----
-
-
diff --git a/packages/integrations/vercel/test/hosted/hosted.test.js b/packages/integrations/vercel/test/hosted/hosted.test.js
deleted file mode 100644
index e090188a7139..000000000000
--- a/packages/integrations/vercel/test/hosted/hosted.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import assert from 'node:assert/strict';
-import { describe, it } from 'node:test';
-
-const VERCEL_TEST_URL = 'https://astro-vercel-image-test.vercel.app';
-
-describe('Hosted Vercel Tests', () => {
- it('Image endpoint works', async () => {
- const image = await fetch(
- VERCEL_TEST_URL + '/_image?href=%2F_astro%2Fpenguin.e9c64733.png&w=300&f=webp',
- );
-
- assert.equal(image.status, 200);
- });
-});
diff --git a/packages/integrations/vercel/test/image.test.js b/packages/integrations/vercel/test/image.test.js
deleted file mode 100644
index b82ac02bfdb8..000000000000
--- a/packages/integrations/vercel/test/image.test.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import assert from 'node:assert/strict';
-import { after, before, describe, it } from 'node:test';
-import * as cheerio from 'cheerio';
-import { loadFixture } from './test-utils.js';
-
-describe('Image', () => {
- /** @type {import('../../../astro/test/test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/image/',
- });
- await fixture.build();
- });
-
- it('build successful', async () => {
- assert.ok(await fixture.readFile('../.vercel/output/static/index.html'));
- });
-
- it('has link to vercel in build with proper attributes', async () => {
- const html = await fixture.readFile('../.vercel/output/static/index.html');
- const $ = cheerio.load(html);
- const img = $('#basic-image img');
-
- assert.equal(img.attr('src').startsWith('/_vercel/image?url=_astr'), true);
- assert.equal(img.attr('loading'), 'lazy');
- assert.equal(img.attr('width'), '225');
- });
-
- it('has proper vercel config', async () => {
- const vercelConfig = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
-
- assert.deepEqual(vercelConfig.images, {
- sizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
- domains: ['astro.build'],
- remotePatterns: [
- {
- protocol: 'https',
- hostname: '**.amazonaws.com',
- },
- ],
- });
- });
-
- describe('dev', () => {
- let devServer;
-
- before(async () => {
- devServer = await fixture.startDevServer();
- });
-
- after(async () => {
- await devServer.stop();
- });
-
- it('has link to local image in dev with proper attributes', async () => {
- const html = await fixture.fetch('/').then((res) => res.text());
- const $ = cheerio.load(html);
- const img = $('#basic-image img');
-
- assert.equal(img.attr('src').startsWith('/_image?href='), true);
- assert.equal(img.attr('loading'), 'lazy');
- assert.equal(img.attr('width'), '225');
- });
-
- it('supports SVGs', async () => {
- const html = await fixture.fetch('/').then((res) => res.text());
- const $ = cheerio.load(html);
- const img = $('#svg img');
- const src = img.attr('src');
-
- const res = await fixture.fetch(src);
- assert.equal(res.status, 200);
- assert.equal(res.headers.get('content-type'), 'image/svg+xml');
- });
- });
-});
diff --git a/packages/integrations/vercel/test/isr.test.js b/packages/integrations/vercel/test/isr.test.js
deleted file mode 100644
index fb957aa78b56..000000000000
--- a/packages/integrations/vercel/test/isr.test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('ISR', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/isr/',
- });
- await fixture.build();
- });
-
- it('generates expected prerender config', async () => {
- const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_isr.prerender-config.json'),
- );
- assert.deepEqual(vcConfig, {
- expiration: 120,
- bypassToken: '1c9e601d-9943-4e7c-9575-005556d774a8',
- allowQuery: ['x_astro_path'],
- passQuery: true,
- });
- });
-
- it('generates expected routes', async () => {
- const deploymentConfig = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
- // the first two are /_astro/*, and filesystem routes
- assert.deepEqual(deploymentConfig.routes.slice(2), [
- {
- src: '^/two$',
- dest: '_render',
- },
- {
- src: '^/excluded/([^/]+?)$',
- dest: '_render',
- },
- {
- src: '^\\/_image$',
- dest: '_render',
- },
- {
- src: '^\\/excluded\\/([^/]+?)\\/?$',
- dest: '/_isr?x_astro_path=$0',
- },
- {
- src: '^\\/one\\/?$',
- dest: '/_isr?x_astro_path=$0',
- },
- {
- src: '^\\/two\\/?$',
- dest: '/_isr?x_astro_path=$0',
- },
- ]);
- });
-});
diff --git a/packages/integrations/vercel/test/max-duration.test.js b/packages/integrations/vercel/test/max-duration.test.js
deleted file mode 100644
index d5e26fc1a999..000000000000
--- a/packages/integrations/vercel/test/max-duration.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('maxDuration', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/max-duration/',
- });
- await fixture.build();
- });
-
- it('makes it to vercel function configuration', async () => {
- const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json'),
- );
- assert.equal(vcConfig.maxDuration, 60);
- });
-});
diff --git a/packages/integrations/vercel/test/no-output.test.js b/packages/integrations/vercel/test/no-output.test.js
deleted file mode 100644
index 34709804d0b8..000000000000
--- a/packages/integrations/vercel/test/no-output.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Missing output config', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/no-output/',
- });
- });
-
- it('throws during the build', async () => {
- let error = undefined;
- try {
- await fixture.build();
- } catch (err) {
- error = err;
- }
- assert.notEqual(error, undefined);
- assert.match(error.message, /output: "server"/);
- });
-});
diff --git a/packages/integrations/vercel/test/prerendered-error-pages.test.js b/packages/integrations/vercel/test/prerendered-error-pages.test.js
deleted file mode 100644
index 5812c3364731..000000000000
--- a/packages/integrations/vercel/test/prerendered-error-pages.test.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('prerendered error pages routing', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/prerendered-error-pages/',
- });
- await fixture.build();
- });
-
- it('falls back to 404.html', async () => {
- const deploymentConfig = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
- assert.deepEqual(deploymentConfig.routes.at(-1), {
- src: '/.*',
- dest: '/404.html',
- status: 404,
- });
- });
-});
diff --git a/packages/integrations/vercel/test/redirects-serverless.test.js b/packages/integrations/vercel/test/redirects-serverless.test.js
deleted file mode 100644
index 8d7dcf75b403..000000000000
--- a/packages/integrations/vercel/test/redirects-serverless.test.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Redirects Serverless', () => {
- /** @type {import('astro/test/test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/redirects-serverless/',
- redirects: {
- '/one': '/',
- '/other': '/subpage',
- },
- });
- await fixture.build();
- });
-
- it('does not create .html files', async () => {
- let hasErrored = false;
- try {
- await fixture.readFile('../.vercel/output/static/other/index.html');
- } catch {
- hasErrored = true;
- }
- assert.equal(hasErrored, true, 'this file should not exist');
- });
-});
diff --git a/packages/integrations/vercel/test/redirects.test.js b/packages/integrations/vercel/test/redirects.test.js
deleted file mode 100644
index 9d4f9499e85c..000000000000
--- a/packages/integrations/vercel/test/redirects.test.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Redirects', () => {
- /** @type {import('../../../astro/test/test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/redirects/',
- redirects: {
- '/one': '/',
- '/two': '/',
- '/three': {
- status: 302,
- destination: '/',
- },
- '/blog/[...slug]': '/team/articles/[...slug]',
- '/Basic/http-2-0.html': '/posts/http2',
- },
- trailingSlash: 'always',
- });
- await fixture.build();
- });
-
- async function getConfig() {
- const json = await fixture.readFile('../.vercel/output/config.json');
- const config = JSON.parse(json);
-
- return config;
- }
-
- it('define static routes', async () => {
- const config = await getConfig();
-
- const oneRoute = config.routes.find((r) => r.src === '/one');
- assert.equal(oneRoute.headers.Location, '/');
- assert.equal(oneRoute.status, 301);
-
- const twoRoute = config.routes.find((r) => r.src === '/two');
- assert.equal(twoRoute.headers.Location, '/');
- assert.equal(twoRoute.status, 301);
-
- const threeRoute = config.routes.find((r) => r.src === '/three');
- assert.equal(threeRoute.headers.Location, '/');
- assert.equal(threeRoute.status, 302);
- });
-
- it('define redirects for static files', async () => {
- const config = await getConfig();
-
- const staticRoute = config.routes.find((r) => r.src === '/Basic/http-2-0.html');
- assert.notEqual(staticRoute, undefined);
- assert.equal(staticRoute.headers.Location, '/posts/http2');
- assert.equal(staticRoute.status, 301);
- });
-
- it('defines dynamic routes', async () => {
- const config = await getConfig();
-
- const blogRoute = config.routes.find((r) => r.src.startsWith('/blog'));
- assert.notEqual(blogRoute, undefined);
- assert.equal(blogRoute.headers.Location.startsWith('/team/articles'), true);
- assert.equal(blogRoute.status, 301);
- });
-
- it('define trailingSlash redirect for sub pages', async () => {
- const config = await getConfig();
-
- const subpathRoute = config.routes.find((r) => r.src === '/subpage');
- assert.notEqual(subpathRoute, undefined);
- assert.equal(subpathRoute.headers.Location, '/subpage/');
- });
-
- it('does not define trailingSlash redirect for root page', async () => {
- const config = await getConfig();
- assert.equal(
- config.routes.find((r) => r.src === '/'),
- undefined,
- );
- });
-});
diff --git a/packages/integrations/vercel/test/server-islands.test.js b/packages/integrations/vercel/test/server-islands.test.js
deleted file mode 100644
index 0306bb8b28cc..000000000000
--- a/packages/integrations/vercel/test/server-islands.test.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Server Islands', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/server-islands/',
- });
- await fixture.build();
- });
-
- it('server islands route is in the config', async () => {
- const config = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
- let found = null;
- for (let route of config.routes) {
- if (route.src?.includes('_server-islands')) {
- found = route;
- break;
- }
- }
- assert.notEqual(found, null, 'Default server islands route included');
- });
-});
diff --git a/packages/integrations/vercel/test/serverless-prerender.test.js b/packages/integrations/vercel/test/serverless-prerender.test.js
deleted file mode 100644
index 61e239300b88..000000000000
--- a/packages/integrations/vercel/test/serverless-prerender.test.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Serverless prerender', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- process.env.PRERENDER = true;
- fixture = await loadFixture({
- root: './fixtures/serverless-prerender/',
- });
- await fixture.build();
- });
-
- it('build successful', async () => {
- assert.ok(await fixture.readFile('../.vercel/output/static/index.html'));
- });
-
- it('outDir is tree-shaken if not needed', async () => {
- const [file] = await fixture.glob(
- '../.vercel/output/functions/_render.func/packages/integrations/vercel/test/fixtures/serverless-prerender/.vercel/output/_functions/pages/_image.astro.mjs',
- );
- const contents = await fixture.readFile(file);
- assert.ok(!contents.includes('const outDir ='), "outDir is tree-shaken if it's not imported");
- });
-
- // TODO: The path here seems to be inconsistent?
- it.skip('includeFiles work', async () => {
- assert.ok(
- await fixture.readFile(
- '../.vercel/output/functions/render.func/packages/integrations/vercel/test/fixtures/serverless-prerender/dist/middleware.mjs',
- ),
- );
- });
-});
-
-describe('Serverless hybrid rendering', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- process.env.PRERENDER = true;
- fixture = await loadFixture({
- root: './fixtures/serverless-prerender/',
- output: 'hybrid',
- });
- await fixture.build();
- });
-
- it('build successful', async () => {
- assert.ok(await fixture.readFile('../.vercel/output/static/index.html'));
- });
-});
diff --git a/packages/integrations/vercel/test/serverless-with-dynamic-routes.test.js b/packages/integrations/vercel/test/serverless-with-dynamic-routes.test.js
deleted file mode 100644
index 3f9613834723..000000000000
--- a/packages/integrations/vercel/test/serverless-with-dynamic-routes.test.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Serverless with dynamic routes', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- process.env.PRERENDER = true;
- fixture = await loadFixture({
- root: './fixtures/serverless-with-dynamic-routes/',
- output: 'hybrid',
- });
- await fixture.build();
- });
-
- it('build successful', async () => {
- assert.ok(await fixture.readFile('../.vercel/output/static/index.html'));
- assert.ok(
- await fixture.readFile('../.vercel/output/functions/[id]/index.astro.func/.vc-config.json'),
- );
- assert.ok(
- await fixture.readFile('../.vercel/output/functions/api/[id].js.func/.vc-config.json'),
- );
- });
-});
diff --git a/packages/integrations/vercel/test/speed-insights.test.js b/packages/integrations/vercel/test/speed-insights.test.js
deleted file mode 100644
index 28ca84cd20c3..000000000000
--- a/packages/integrations/vercel/test/speed-insights.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Vercel Speed Insights', () => {
- describe('output: server', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/with-speed-insights-enabled/output-as-server/',
- output: 'server',
- });
- await fixture.build();
- });
-
- it('ensures that Vercel Speed Insights is present in the bundle', async () => {
- const [page] = await fixture.readdir('../.vercel/output/static/_astro');
-
- const bundle = await fixture.readFile(`../.vercel/output/static/_astro/${page}`);
-
- assert.match(bundle, /VERCEL_ANALYTICS_ID/);
- });
- });
-
- describe('output: static', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/with-speed-insights-enabled/output-as-static/',
- output: 'static',
- });
- await fixture.build();
- });
-
- it('ensures that Vercel Speed Insights is present in the bundle', async () => {
- const [page] = await fixture.readdir('../.vercel/output/static/_astro');
-
- const bundle = await fixture.readFile(`../.vercel/output/static/_astro/${page}`);
-
- assert.match(bundle, /VERCEL_ANALYTICS_ID/);
- });
- });
-});
diff --git a/packages/integrations/vercel/test/split.test.js b/packages/integrations/vercel/test/split.test.js
deleted file mode 100644
index 4105db7fc79e..000000000000
--- a/packages/integrations/vercel/test/split.test.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('build: split', () => {
- /** @type {import('./test-utils').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/functionPerRoute/',
- output: 'server',
- });
- await fixture.build();
- });
-
- it('creates separate functions for non-prerendered pages', async () => {
- const files = await fixture.readdir('../.vercel/output/functions/');
- assert.equal(files.length, 3);
- assert.equal(files.includes('prerender.astro.func'), false);
- });
-
- it('creates the route definitions in the config.json', async () => {
- const json = await fixture.readFile('../.vercel/output/config.json');
- const config = JSON.parse(json);
- assert.equal(config.routes.length, 5);
- assert.equal(
- config.routes.some((route) => route.dest === 'prerender.astro'),
- false,
- );
- });
-});
diff --git a/packages/integrations/vercel/test/static-assets.test.js b/packages/integrations/vercel/test/static-assets.test.js
deleted file mode 100644
index 37d3a057724b..000000000000
--- a/packages/integrations/vercel/test/static-assets.test.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import assert from 'node:assert/strict';
-import { describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Static Assets', () => {
- /** @type {import('../../../astro/test/test-utils.js').Fixture} */
- let fixture;
-
- const VALID_CACHE_CONTROL = 'public, max-age=31536000, immutable';
-
- async function build({ adapter, assets, output }) {
- fixture = await loadFixture({
- root: './fixtures/static-assets/',
- output,
- adapter,
- build: {
- assets,
- },
- });
- await fixture.build();
- }
-
- async function getConfig() {
- const json = await fixture.readFile('../.vercel/output/config.json');
- const config = JSON.parse(json);
-
- return config;
- }
-
- async function getAssets() {
- return fixture.config.build.assets;
- }
-
- async function checkValidCacheControl(assets) {
- const config = await getConfig();
- const theAssets = assets ?? (await getAssets());
-
- const route = config.routes.find((r) => r.src === `^/${theAssets}/(.*)$`);
- assert.equal(route.headers['cache-control'], VALID_CACHE_CONTROL);
- assert.equal(route.continue, true);
- }
-
- describe('static adapter', () => {
- it('has cache control', async () => {
- const { default: vercel } = await import('@astrojs/vercel/static');
- await build({ adapter: vercel() });
- await checkValidCacheControl();
- });
-
- it('has cache control other assets', async () => {
- const { default: vercel } = await import('@astrojs/vercel/static');
- const assets = '_foo';
- await build({ adapter: vercel(), assets });
- await checkValidCacheControl(assets);
- });
- });
-
- describe('serverless adapter', () => {
- it('has cache control', async () => {
- const { default: vercel } = await import('@astrojs/vercel/serverless');
- await build({ output: 'server', adapter: vercel() });
- await checkValidCacheControl();
- });
-
- it('has cache control other assets', async () => {
- const { default: vercel } = await import('@astrojs/vercel/serverless');
- const assets = '_foo';
- await build({ output: 'server', adapter: vercel(), assets });
- await checkValidCacheControl(assets);
- });
- });
-});
diff --git a/packages/integrations/vercel/test/static.test.js b/packages/integrations/vercel/test/static.test.js
deleted file mode 100644
index e007862d7263..000000000000
--- a/packages/integrations/vercel/test/static.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('static routing', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/static/',
- });
- await fixture.build();
- });
-
- it('falls back to 404.html', async () => {
- const deploymentConfig = JSON.parse(await fixture.readFile('../.vercel/output/config.json'));
- // change the index if necesseary
- assert.deepEqual(deploymentConfig.routes[2], {
- src: '/.*',
- dest: '/404.html',
- status: 404,
- });
- });
-});
diff --git a/packages/integrations/vercel/test/streaming.test.js b/packages/integrations/vercel/test/streaming.test.js
deleted file mode 100644
index 1e4b0f111e05..000000000000
--- a/packages/integrations/vercel/test/streaming.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('streaming', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/streaming/',
- });
- await fixture.build();
- });
-
- it('makes it to vercel function configuration', async () => {
- const vcConfig = JSON.parse(
- await fixture.readFile('../.vercel/output/functions/_render.func/.vc-config.json'),
- );
- assert.equal(vcConfig.supportsResponseStreaming, true);
- });
-});
diff --git a/packages/integrations/vercel/test/test-utils.js b/packages/integrations/vercel/test/test-utils.js
deleted file mode 100644
index 6bb3e7c253f7..000000000000
--- a/packages/integrations/vercel/test/test-utils.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js';
-
-export { fixLineEndings } from '../../../astro/test/test-utils.js';
-
-export function loadFixture(config) {
- if (config?.root) {
- config.root = new URL(config.root, import.meta.url);
- }
- return baseLoadFixture(config);
-}
diff --git a/packages/integrations/vercel/test/web-analytics.test.js b/packages/integrations/vercel/test/web-analytics.test.js
deleted file mode 100644
index d5056d0acb90..000000000000
--- a/packages/integrations/vercel/test/web-analytics.test.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import assert from 'node:assert/strict';
-import { before, describe, it } from 'node:test';
-import { loadFixture } from './test-utils.js';
-
-describe('Vercel Web Analytics', () => {
- describe('output: static', () => {
- /** @type {import('./test-utils.js').Fixture} */
- let fixture;
-
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/with-web-analytics-enabled/output-as-static/',
- output: 'static',
- });
- await fixture.build();
- });
-
- it('ensures that Vercel Web Analytics is present in the header', async () => {
- const pageOne = await fixture.readFile('../.vercel/output/static/one/index.html');
- const pageTwo = await fixture.readFile('../.vercel/output/static/two/index.html');
-
- assert.match(pageOne, /\/_vercel\/insights\/script.js/);
- assert.match(pageTwo, /\/_vercel\/insights\/script.js/);
- });
- });
-});
diff --git a/packages/integrations/vercel/tsconfig.json b/packages/integrations/vercel/tsconfig.json
deleted file mode 100644
index 1504b4b6dfa4..000000000000
--- a/packages/integrations/vercel/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "../../../tsconfig.base.json",
- "include": ["src"],
- "compilerOptions": {
- "outDir": "./dist"
- }
-}
diff --git a/packages/integrations/vercel/types.d.ts b/packages/integrations/vercel/types.d.ts
deleted file mode 100644
index 95719f5bc6bf..000000000000
--- a/packages/integrations/vercel/types.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface EdgeLocals {
- vercel: {
- edge: import('@vercel/edge').RequestContext;
- };
-}
diff --git a/packages/integrations/web-vitals/test/fixtures/basics/package.json b/packages/integrations/web-vitals/test/fixtures/basics/package.json
index 25ab0abc1b75..5dcbdb1f9e10 100644
--- a/packages/integrations/web-vitals/test/fixtures/basics/package.json
+++ b/packages/integrations/web-vitals/test/fixtures/basics/package.json
@@ -9,7 +9,7 @@
},
"dependencies": {
"@astrojs/db": "workspace:*",
- "@astrojs/node": "workspace:*",
+ "@astrojs/node": "^8.3.3",
"@astrojs/web-vitals": "workspace:*",
"astro": "workspace:*"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 98d160c41433..74ce67f4ad9a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -67,8 +67,8 @@ importers:
specifier: workspace:*
version: link:../packages/integrations/mdx
'@astrojs/node':
- specifier: workspace:*
- version: link:../packages/integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@benchmark/timer':
specifier: workspace:*
version: link:packages/timer
@@ -316,7 +316,7 @@ importers:
dependencies:
'@astrojs/node':
specifier: ^8.3.3
- version: link:../../packages/integrations/node
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: ^4.15.1
version: link:../../packages/astro
@@ -331,7 +331,7 @@ importers:
dependencies:
'@astrojs/node':
specifier: ^8.3.3
- version: link:../../packages/integrations/node
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: ^4.15.1
version: link:../../packages/astro
@@ -365,7 +365,7 @@ importers:
devDependencies:
'@astrojs/node':
specifier: ^8.3.3
- version: link:../../packages/integrations/node
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: ^3.6.2
version: link:../../packages/integrations/react
@@ -404,7 +404,7 @@ importers:
dependencies:
'@astrojs/node':
specifier: ^8.3.3
- version: link:../../packages/integrations/node
+ version: 8.3.3(astro@packages+astro)
'@astrojs/svelte':
specifier: ^5.7.0
version: link:../../packages/integrations/svelte
@@ -437,7 +437,7 @@ importers:
devDependencies:
'@astrojs/node':
specifier: ^8.3.3
- version: link:../../packages/integrations/node
+ version: 8.3.3(astro@packages+astro)
'@astrojs/tailwind':
specifier: ^5.1.0
version: link:../../packages/integrations/tailwind
@@ -920,8 +920,8 @@ importers:
specifier: workspace:*
version: link:../../../../db
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: workspace:*
version: link:../../../../integrations/react
@@ -953,8 +953,8 @@ importers:
specifier: workspace:*
version: link:../../../../db
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: workspace:*
version: link:../../../../integrations/react
@@ -1606,8 +1606,8 @@ importers:
specifier: workspace:*
version: link:../../../../integrations/mdx
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: workspace:*
version: link:../../../../integrations/react
@@ -1713,8 +1713,8 @@ importers:
packages/astro/e2e/fixtures/view-transitions:
dependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: workspace:*
version: link:../../../../integrations/react
@@ -2545,8 +2545,8 @@ importers:
packages/astro/test/fixtures/client-address-node:
dependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: workspace:*
version: link:../../..
@@ -3037,8 +3037,8 @@ importers:
packages/astro/test/fixtures/custom-assets-name:
dependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: workspace:*
version: link:../../..
@@ -3884,8 +3884,8 @@ importers:
packages/astro/test/fixtures/ssr-api-route:
dependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: workspace:*
version: link:../../..
@@ -4090,8 +4090,8 @@ importers:
packages/astro/test/fixtures/static-build-ssr:
dependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@test/static-build-pkg':
specifier: workspace:*
version: link:../static-build/pkg
@@ -4465,8 +4465,8 @@ importers:
specifier: workspace:*
version: link:../../..
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../integrations/node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/react':
specifier: ^3.6.2
version: link:../../../../integrations/react
@@ -5048,165 +5048,7 @@ importers:
packages/integrations/netlify: {}
- packages/integrations/node:
- dependencies:
- send:
- specifier: ^0.18.0
- version: 0.18.0
- server-destroy:
- specifier: ^1.0.1
- version: 1.0.1
- devDependencies:
- '@types/node':
- specifier: ^18.17.8
- version: 18.19.31
- '@types/send':
- specifier: ^0.17.4
- version: 0.17.4
- '@types/server-destroy':
- specifier: ^1.0.4
- version: 1.0.4
- astro:
- specifier: workspace:*
- version: link:../../astro
- astro-scripts:
- specifier: workspace:*
- version: link:../../../scripts
- cheerio:
- specifier: 1.0.0
- version: 1.0.0
- express:
- specifier: ^4.19.2
- version: 4.19.2
- node-mocks-http:
- specifier: ^1.15.1
- version: 1.15.1
-
- packages/integrations/node/test/fixtures/api-route:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/bad-urls:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/encoded:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/errors:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/headers:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/image:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/locals:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/node-middleware:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/prerender:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/prerender-404-500:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/preview-headers:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/trailing-slash:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/url:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/node/test/fixtures/well-known-locations:
- dependencies:
- '@astrojs/node':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
+ packages/integrations/node: {}
packages/integrations/partytown:
dependencies:
@@ -5323,8 +5165,8 @@ importers:
version: 3.23.8
devDependencies:
'@astrojs/node':
- specifier: workspace:*
- version: link:../node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
astro:
specifier: workspace:*
version: link:../../astro
@@ -5446,228 +5288,7 @@ importers:
specifier: workspace:*
version: link:../../../../../astro
- packages/integrations/vercel:
- dependencies:
- '@astrojs/internal-helpers':
- specifier: workspace:*
- version: link:../../internal-helpers
- '@vercel/analytics':
- specifier: ^1.3.1
- version: 1.3.1(react@18.3.1)
- '@vercel/edge':
- specifier: ^1.1.2
- version: 1.1.2
- '@vercel/nft':
- specifier: ^0.27.3
- version: 0.27.3
- esbuild:
- specifier: ^0.21.5
- version: 0.21.5
- fast-glob:
- specifier: ^3.3.2
- version: 3.3.2
- web-vitals:
- specifier: ^3.5.2
- version: 3.5.2
- devDependencies:
- astro:
- specifier: workspace:*
- version: link:../../astro
- astro-scripts:
- specifier: workspace:*
- version: link:../../../scripts
- cheerio:
- specifier: 1.0.0
- version: 1.0.0
-
- packages/integrations/vercel/test/fixtures/basic:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/functionPerRoute:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/image:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/isr:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/max-duration:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/middleware-with-edge-file:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/middleware-without-edge-file:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/no-output:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/prerendered-error-pages:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/redirects:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/redirects-serverless:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/server-islands:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/serverless-prerender:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/serverless-with-dynamic-routes:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/static:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/static-assets:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/streaming:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
-
- packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-server:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../../astro
-
- packages/integrations/vercel/test/fixtures/with-speed-insights-enabled/output-as-static:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../../astro
-
- packages/integrations/vercel/test/fixtures/with-web-analytics-enabled/output-as-static:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../../astro
-
- packages/integrations/vercel/test/hosted/hosted-astro-project:
- dependencies:
- '@astrojs/vercel':
- specifier: workspace:*
- version: link:../../..
- astro:
- specifier: workspace:*
- version: link:../../../../../astro
+ packages/integrations/vercel: {}
packages/integrations/vue:
dependencies:
@@ -5809,8 +5430,8 @@ importers:
specifier: workspace:*
version: link:../../../../../db
'@astrojs/node':
- specifier: workspace:*
- version: link:../../../../node
+ specifier: ^8.3.3
+ version: 8.3.3(astro@packages+astro)
'@astrojs/web-vitals':
specifier: workspace:*
version: link:../../..
@@ -6103,6 +5724,11 @@ packages:
prettier-plugin-astro:
optional: true
+ '@astrojs/node@8.3.3':
+ resolution: {integrity: sha512-idrKhnnPSi0ABV+PCQsRQqVNwpOvVDF/+fkwcIiE8sr9J8EMvW9g/oyAt8T4X2OBJ8FUzYPL8klfCdG7r0eB5g==}
+ peerDependencies:
+ astro: ^4.2.0
+
'@astrojs/yaml2ts@0.2.1':
resolution: {integrity: sha512-CBaNwDQJz20E5WxzQh4thLVfhB3JEEGz72wRA+oJp6fQR37QLAqXZJU0mHC+yqMOQ6oj0GfRPJrz6hjf+zm6zA==}
@@ -7136,10 +6762,6 @@ packages:
'@manypkg/get-packages@1.1.3':
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
- '@mapbox/node-pre-gyp@1.0.11':
- resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
- hasBin: true
-
'@markdoc/markdoc@0.4.0':
resolution: {integrity: sha512-fSh4P3Y4E7oaKYc2oNzSIJVPDto7SMzAuQN1Iyx53UxzleA6QzRdNWRxmiPqtVDaDi5dELd2yICoG91csrGrAw==}
engines: {node: '>=14.7.0'}
@@ -7628,25 +7250,6 @@ packages:
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- '@vercel/analytics@1.3.1':
- resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
- peerDependencies:
- next: '>= 13'
- react: ^18 || ^19
- peerDependenciesMeta:
- next:
- optional: true
- react:
- optional: true
-
- '@vercel/edge@1.1.2':
- resolution: {integrity: sha512-wt5SnhsMahWX8U9ZZhFUQoiXhMn/CUxA5xeMdZX1cwyOL1ZbDR3rNI8HRT9RSU73nDxeF6jlnqJyp/0Jy0VM2A==}
-
- '@vercel/nft@0.27.3':
- resolution: {integrity: sha512-oySTdDSzUAFDXpsSLk9Q943o+/Yu/+TCFxnehpFQEf/3khi2stMpTHPVNwFdvZq/Z4Ky93lE+MGHpXCRpMkSCA==}
- engines: {node: '>=16'}
- hasBin: true
-
'@vitejs/plugin-react@4.3.1':
resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -7776,18 +7379,10 @@ packages:
'@webcomponents/template-shadowroot@0.2.1':
resolution: {integrity: sha512-fXL/vIUakyZL62hyvUh+EMwbVoTc0hksublmRz6ai6et8znHkJa6gtqMUZo1oc7dIz46exHSIImml9QTdknMHg==}
- abbrev@1.1.1:
- resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
-
accepts@1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
- acorn-import-attributes@1.9.5:
- resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
- peerDependencies:
- acorn: ^8
-
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -7798,10 +7393,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- agent-base@6.0.2:
- resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
- engines: {node: '>= 6.0.0'}
-
agent-base@7.1.1:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'}
@@ -7853,14 +7444,6 @@ packages:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
- aproba@2.0.0:
- resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-
- are-we-there-yet@2.0.0:
- resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
- engines: {node: '>=10'}
- deprecated: This package is no longer supported.
-
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
@@ -7873,9 +7456,6 @@ packages:
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
array-iterate@2.0.1:
resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
@@ -7910,9 +7490,6 @@ packages:
resolution: {integrity: sha512-cWMaNwUJnf37C/S5TfCkk/15MwbPRwVYALA2jtjkbHjCmAPiDXyNJy2q3p1KAZzDLHAWyarUWSujUoHR4pEgrA==}
engines: {node: '>= 14'}
- async-sema@3.1.1:
- resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
-
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -7972,16 +7549,9 @@ packages:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
- bindings@1.5.0:
- resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
-
birpc@0.2.17:
resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==}
- body-parser@1.20.2:
- resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -8011,18 +7581,10 @@ packages:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
engines: {node: '>=18'}
- bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
-
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- call-bind@1.0.7:
- resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
- engines: {node: '>= 0.4'}
-
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@@ -8217,23 +7779,13 @@ packages:
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
engines: {node: ^14.18.0 || >=16.10.0}
- console-control-strings@1.1.0:
- resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-
content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
- content-type@1.0.5:
- resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
- engines: {node: '>= 0.6'}
-
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie-signature@1.0.6:
- resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
-
cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
@@ -8372,10 +7924,6 @@ packages:
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
engines: {node: '>=18'}
- define-data-property@1.1.4:
- resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
- engines: {node: '>= 0.4'}
-
define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
@@ -8387,9 +7935,6 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- delegates@1.0.0:
- resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-
depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
@@ -8600,15 +8145,7 @@ packages:
resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==}
error-stack-parser-es@0.1.5:
- resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==}
-
- es-define-property@1.0.0:
- resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
- engines: {node: '>= 0.4'}
-
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
+ resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==}
es-module-lexer@1.5.4:
resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
@@ -8739,10 +8276,6 @@ packages:
resolution: {integrity: sha512-uHaC9LYNv6BcW+8SvXcwUUDCrrUxt3GSa61DFvTHj8JC+M0hekMFBwMlCarLQDk5bbpZ2vStpnQPIwRuV98YMw==}
engines: {node: '>=12.0.0'}
- express@4.19.2:
- resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
- engines: {node: '>= 0.10.0'}
-
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
@@ -8792,17 +8325,10 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- file-uri-to-path@1.0.0:
- resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
-
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- finalhandler@1.2.0:
- resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
- engines: {node: '>= 0.8'}
-
find-up-simple@1.0.0:
resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==}
engines: {node: '>=18'}
@@ -8841,10 +8367,6 @@ packages:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
- forwarded@0.2.0:
- resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
- engines: {node: '>= 0.6'}
-
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
@@ -8872,9 +8394,6 @@ packages:
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
engines: {node: '>= 8'}
- fs.realpath@1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
fsevents@2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -8888,11 +8407,6 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- gauge@3.0.2:
- resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
- engines: {node: '>=10'}
- deprecated: This package is no longer supported.
-
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -8908,10 +8422,6 @@ packages:
get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
- get-intrinsic@1.2.4:
- resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
- engines: {node: '>= 0.4'}
-
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -8936,10 +8446,6 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
@@ -8956,9 +8462,6 @@ packages:
resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==}
engines: {node: '>=18'}
- gopd@1.0.1:
- resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
-
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -8980,20 +8483,6 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- has-property-descriptors@1.0.2:
- resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
-
- has-proto@1.0.3:
- resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
- engines: {node: '>= 0.4'}
-
- has-symbols@1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
-
- has-unicode@2.0.1:
- resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
@@ -9105,10 +8594,6 @@ packages:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
- https-proxy-agent@5.0.1:
- resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
- engines: {node: '>= 6'}
-
https-proxy-agent@7.0.4:
resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==}
engines: {node: '>= 14'}
@@ -9156,10 +8641,6 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -9169,10 +8650,6 @@ packages:
inline-style-parser@0.2.3:
resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
- ipaddr.js@1.9.1:
- resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
- engines: {node: '>= 0.10'}
-
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
@@ -9494,10 +8971,6 @@ packages:
magicast@0.3.5:
resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
- make-dir@3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
-
manage-path@2.0.0:
resolution: {integrity: sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A==}
@@ -9601,9 +9074,6 @@ packages:
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
engines: {node: '>=12.13'}
- merge-descriptors@1.0.1:
- resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
-
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
@@ -9876,10 +9346,6 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-gyp-build@4.8.0:
- resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==}
- hasBin: true
-
node-html-parser@6.1.13:
resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==}
@@ -9890,11 +9356,6 @@ packages:
node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
- nopt@5.0.0:
- resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
- engines: {node: '>=6'}
- hasBin: true
-
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
@@ -9910,10 +9371,6 @@ packages:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- npmlog@5.0.1:
- resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
- deprecated: This package is no longer supported.
-
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -9930,9 +9387,6 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
- object-inspect@1.13.1:
- resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
-
ohash@1.1.3:
resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==}
@@ -9944,9 +9398,6 @@ packages:
resolution: {integrity: sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg==}
engines: {node: '>=9.4.0 || ^8.9.4'}
- once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -10070,10 +9521,6 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
-
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -10089,9 +9536,6 @@ packages:
resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==}
engines: {node: '>=16 || 14 >=14.17'}
- path-to-regexp@0.1.7:
- resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
-
path-to-regexp@6.2.2:
resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
@@ -10411,10 +9855,6 @@ packages:
property-information@6.5.0:
resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
- proxy-addr@2.0.7:
- resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
- engines: {node: '>= 0.10'}
-
pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
@@ -10425,10 +9865,6 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- qs@6.11.0:
- resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
- engines: {node: '>=0.6'}
-
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -10439,10 +9875,6 @@ packages:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
- raw-body@2.5.2:
- resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
- engines: {node: '>= 0.8'}
-
react-dom@18.3.1:
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
peerDependencies:
@@ -10472,10 +9904,6 @@ packages:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
-
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -10627,11 +10055,6 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
rollup@4.21.1:
resolution: {integrity: sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -10708,23 +10131,9 @@ packages:
resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==}
engines: {node: '>=10'}
- serve-static@1.15.0:
- resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
- engines: {node: '>= 0.8.0'}
-
server-destroy@1.0.1:
resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
- server-only@0.0.1:
- resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
-
- set-blocking@2.0.0:
- resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
- set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
-
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -10759,10 +10168,6 @@ packages:
shiki@1.14.1:
resolution: {integrity: sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==}
- side-channel@1.0.6:
- resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
- engines: {node: '>= 0.4'}
-
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -10881,9 +10286,6 @@ packages:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
@@ -11276,10 +10678,6 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
- unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
-
update-browserslist-db@1.1.0:
resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==}
hasBin: true
@@ -11298,10 +10696,6 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
uuid-parse@1.1.0:
resolution: {integrity: sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==}
@@ -11312,10 +10706,6 @@ packages:
validate-html-nesting@1.2.2:
resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
- vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
-
vfile-location@5.0.2:
resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
@@ -11569,9 +10959,6 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
- web-vitals@3.5.2:
- resolution: {integrity: sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==}
-
web-vitals@4.2.3:
resolution: {integrity: sha512-/CFAm1mNxSmOj6i0Co+iGFJ58OS4NRGVP+AWS/l509uIK5a1bSoIVaHz/ZumpHTfHSZBpgrJ+wjfpAOrTHok5Q==}
@@ -11626,9 +11013,6 @@ packages:
wicked-good-xpath@1.3.0:
resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==}
- wide-align@1.1.5:
- resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
-
widest-line@4.0.1:
resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
engines: {node: '>=12'}
@@ -11641,9 +11025,6 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
- wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
ws@8.16.0:
resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
engines: {node: '>=10.0.0'}
@@ -11839,6 +11220,14 @@ snapshots:
transitivePeerDependencies:
- typescript
+ '@astrojs/node@8.3.3(astro@packages+astro)':
+ dependencies:
+ astro: link:packages/astro
+ send: 0.18.0
+ server-destroy: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
'@astrojs/yaml2ts@0.2.1':
dependencies:
yaml: 2.5.0
@@ -12938,21 +12327,6 @@ snapshots:
globby: 11.1.0
read-yaml-file: 1.1.0
- '@mapbox/node-pre-gyp@1.0.11':
- dependencies:
- detect-libc: 2.0.3
- https-proxy-agent: 5.0.1
- make-dir: 3.1.0
- node-fetch: 2.7.0
- nopt: 5.0.0
- npmlog: 5.0.1
- rimraf: 3.0.2
- semver: 7.6.3
- tar: 6.2.1
- transitivePeerDependencies:
- - encoding
- - supports-color
-
'@markdoc/markdoc@0.4.0(@types/react@18.3.4)(react@18.3.1)':
optionalDependencies:
'@types/markdown-it': 12.2.3
@@ -13491,32 +12865,6 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
- '@vercel/analytics@1.3.1(react@18.3.1)':
- dependencies:
- server-only: 0.0.1
- optionalDependencies:
- react: 18.3.1
-
- '@vercel/edge@1.1.2': {}
-
- '@vercel/nft@0.27.3':
- dependencies:
- '@mapbox/node-pre-gyp': 1.0.11
- '@rollup/pluginutils': 4.2.1
- acorn: 8.12.1
- acorn-import-attributes: 1.9.5(acorn@8.12.1)
- async-sema: 3.1.1
- bindings: 1.5.0
- estree-walker: 2.0.2
- glob: 7.2.3
- graceful-fs: 4.2.11
- micromatch: 4.0.8
- node-gyp-build: 4.8.0
- resolve-from: 5.0.0
- transitivePeerDependencies:
- - encoding
- - supports-color
-
'@vitejs/plugin-react@4.3.1(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))':
dependencies:
'@babel/core': 7.25.2
@@ -13743,29 +13091,17 @@ snapshots:
'@webcomponents/template-shadowroot@0.2.1': {}
- abbrev@1.1.1: {}
-
accepts@1.3.8:
dependencies:
mime-types: 2.1.35
negotiator: 0.6.3
- acorn-import-attributes@1.9.5(acorn@8.12.1):
- dependencies:
- acorn: 8.12.1
-
acorn-jsx@5.3.2(acorn@8.12.1):
dependencies:
acorn: 8.12.1
acorn@8.12.1: {}
- agent-base@6.0.2:
- dependencies:
- debug: 4.3.6
- transitivePeerDependencies:
- - supports-color
-
agent-base@7.1.1:
dependencies:
debug: 4.3.6
@@ -13821,13 +13157,6 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
- aproba@2.0.0: {}
-
- are-we-there-yet@2.0.0:
- dependencies:
- delegates: 1.0.0
- readable-stream: 3.6.2
-
arg@5.0.2: {}
argparse@1.0.10:
@@ -13840,8 +13169,6 @@ snapshots:
dependencies:
dequal: 2.0.3
- array-flatten@1.1.1: {}
-
array-iterate@2.0.1: {}
array-union@2.1.0: {}
@@ -13875,8 +13202,6 @@ snapshots:
async-listen@3.0.1: {}
- async-sema@3.1.1: {}
-
asynckit@0.4.0: {}
autocannon@7.15.0:
@@ -13955,29 +13280,8 @@ snapshots:
binary-extensions@2.3.0: {}
- bindings@1.5.0:
- dependencies:
- file-uri-to-path: 1.0.0
-
birpc@0.2.17: {}
- body-parser@1.20.2:
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.11.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
boolbase@1.0.0: {}
boxen@7.1.1:
@@ -14020,18 +13324,8 @@ snapshots:
dependencies:
run-applescript: 7.0.0
- bytes@3.1.2: {}
-
cac@6.7.14: {}
- call-bind@1.0.7:
- dependencies:
- es-define-property: 1.0.0
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.2.4
- set-function-length: 1.2.2
-
callsites@3.1.0: {}
camel-case@3.0.0:
@@ -14219,18 +13513,12 @@ snapshots:
consola@3.2.3: {}
- console-control-strings@1.1.0: {}
-
content-disposition@0.5.4:
dependencies:
safe-buffer: 5.2.1
- content-type@1.0.5: {}
-
convert-source-map@2.0.0: {}
- cookie-signature@1.0.6: {}
-
cookie@0.6.0: {}
copy-anything@3.0.5:
@@ -14347,20 +13635,12 @@ snapshots:
bundle-name: 4.1.0
default-browser-id: 5.0.0
- define-data-property@1.1.4:
- dependencies:
- es-define-property: 1.0.0
- es-errors: 1.3.0
- gopd: 1.0.1
-
define-lazy-prop@3.0.0: {}
defu@6.1.4: {}
delayed-stream@1.0.0: {}
- delegates@1.0.0: {}
-
depd@1.1.2: {}
depd@2.0.0: {}
@@ -14465,12 +13745,6 @@ snapshots:
error-stack-parser-es@0.1.5: {}
- es-define-property@1.0.0:
- dependencies:
- get-intrinsic: 1.2.4
-
- es-errors@1.3.0: {}
-
es-module-lexer@1.5.4: {}
esbuild-plugin-copy@2.1.1(esbuild@0.21.5):
@@ -14650,42 +13924,6 @@ snapshots:
expect-type@0.20.0: {}
- express@4.19.2:
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.2
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.6.0
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.2.0
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.1
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.7
- proxy-addr: 2.0.7
- qs: 6.11.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.18.0
- serve-static: 1.15.0
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
-
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
@@ -14735,24 +13973,10 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- file-uri-to-path@1.0.0: {}
-
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
- finalhandler@1.2.0:
- dependencies:
- debug: 2.6.9
- encodeurl: 1.0.2
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.1
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
find-up-simple@1.0.0: {}
find-up@4.1.0:
@@ -14794,8 +14018,6 @@ snapshots:
dependencies:
fetch-blob: 3.2.0
- forwarded@0.2.0: {}
-
fraction.js@4.3.7: {}
fresh@0.5.2: {}
@@ -14828,8 +14050,6 @@ snapshots:
dependencies:
minipass: 3.3.6
- fs.realpath@1.0.0: {}
-
fsevents@2.3.2:
optional: true
@@ -14838,18 +14058,6 @@ snapshots:
function-bind@1.1.2: {}
- gauge@3.0.2:
- dependencies:
- aproba: 2.0.0
- color-support: 1.1.3
- console-control-strings: 1.1.0
- has-unicode: 2.0.1
- object-assign: 4.1.1
- signal-exit: 3.0.7
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wide-align: 1.1.5
-
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
@@ -14858,14 +14066,6 @@ snapshots:
get-func-name@2.0.2: {}
- get-intrinsic@1.2.4:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
- has-proto: 1.0.3
- has-symbols: 1.0.3
- hasown: 2.0.2
-
get-stream@8.0.1: {}
giget@1.2.3:
@@ -14897,15 +14097,6 @@ snapshots:
minipass: 7.1.2
path-scurry: 1.10.2
- glob@7.2.3:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
globals@11.12.0: {}
globals@14.0.0: {}
@@ -14928,10 +14119,6 @@ snapshots:
slash: 5.1.0
unicorn-magic: 0.1.0
- gopd@1.0.1:
- dependencies:
- get-intrinsic: 1.2.4
-
graceful-fs@4.2.11: {}
graphemer@1.4.0: {}
@@ -14949,16 +14136,6 @@ snapshots:
has-flag@4.0.0: {}
- has-property-descriptors@1.0.2:
- dependencies:
- es-define-property: 1.0.0
-
- has-proto@1.0.3: {}
-
- has-symbols@1.0.3: {}
-
- has-unicode@2.0.1: {}
-
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
@@ -15195,13 +14372,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- https-proxy-agent@5.0.1:
- dependencies:
- agent-base: 6.0.2
- debug: 4.3.6
- transitivePeerDependencies:
- - supports-color
-
https-proxy-agent@7.0.4:
dependencies:
agent-base: 7.1.1
@@ -15244,19 +14414,12 @@ snapshots:
imurmurhash@0.1.4: {}
- inflight@1.0.6:
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
-
inherits@2.0.4: {}
inline-style-parser@0.1.1: {}
inline-style-parser@0.2.3: {}
- ipaddr.js@1.9.1: {}
-
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@@ -15582,10 +14745,6 @@ snapshots:
'@babel/types': 7.25.4
source-map-js: 1.2.0
- make-dir@3.1.0:
- dependencies:
- semver: 6.3.1
-
manage-path@2.0.0: {}
markdown-extensions@2.0.0: {}
@@ -15817,8 +14976,6 @@ snapshots:
dependencies:
is-what: 4.1.16
- merge-descriptors@1.0.1: {}
-
merge-descriptors@1.0.3: {}
merge-stream@2.0.0: {}
@@ -16210,8 +15367,6 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
- node-gyp-build@4.8.0: {}
-
node-html-parser@6.1.13:
dependencies:
css-select: 5.1.0
@@ -16234,10 +15389,6 @@ snapshots:
node-releases@2.0.18: {}
- nopt@5.0.0:
- dependencies:
- abbrev: 1.1.1
-
normalize-path@3.0.0: {}
normalize-range@0.1.2: {}
@@ -16248,13 +15399,6 @@ snapshots:
dependencies:
path-key: 4.0.0
- npmlog@5.0.1:
- dependencies:
- are-we-there-yet: 2.0.0
- console-control-strings: 1.1.0
- gauge: 3.0.2
- set-blocking: 2.0.0
-
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
@@ -16271,8 +15415,6 @@ snapshots:
object-hash@3.0.0: {}
- object-inspect@1.13.1: {}
-
ohash@1.1.3: {}
on-finished@2.4.1:
@@ -16281,10 +15423,6 @@ snapshots:
on-net-listen@1.1.2: {}
- once@1.4.0:
- dependencies:
- wrappy: 1.0.2
-
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
@@ -16428,8 +15566,6 @@ snapshots:
path-exists@4.0.0: {}
- path-is-absolute@1.0.1: {}
-
path-key@3.1.1: {}
path-key@4.0.0: {}
@@ -16441,8 +15577,6 @@ snapshots:
lru-cache: 10.2.0
minipass: 7.1.2
- path-to-regexp@0.1.7: {}
-
path-to-regexp@6.2.2: {}
path-type@4.0.0: {}
@@ -16783,34 +15917,18 @@ snapshots:
property-information@6.5.0: {}
- proxy-addr@2.0.7:
- dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
-
pseudomap@1.0.2: {}
psl@1.9.0: {}
punycode@2.3.1: {}
- qs@6.11.0:
- dependencies:
- side-channel: 1.0.6
-
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
range-parser@1.2.1: {}
- raw-body@2.5.2:
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
-
react-dom@18.3.1(react@18.3.1):
dependencies:
loose-envify: 1.4.0
@@ -16841,12 +15959,6 @@ snapshots:
pify: 4.0.1
strip-bom: 3.0.0
- readable-stream@3.6.2:
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
-
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
@@ -17084,10 +16196,6 @@ snapshots:
rfdc@1.4.1: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
rollup@4.21.1:
dependencies:
'@types/estree': 1.0.5
@@ -17185,30 +16293,8 @@ snapshots:
seroval@1.1.1: {}
- serve-static@1.15.0:
- dependencies:
- encodeurl: 1.0.2
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.18.0
- transitivePeerDependencies:
- - supports-color
-
server-destroy@1.0.1: {}
- server-only@0.0.1: {}
-
- set-blocking@2.0.0: {}
-
- set-function-length@1.2.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.2.4
- gopd: 1.0.1
- has-property-descriptors: 1.0.2
-
setprototypeof@1.2.0: {}
sharp@0.33.3:
@@ -17270,13 +16356,6 @@ snapshots:
'@shikijs/core': 1.14.1
'@types/hast': 3.0.4
- side-channel@1.0.6:
- dependencies:
- call-bind: 1.0.7
- es-errors: 1.3.0
- get-intrinsic: 1.2.4
- object-inspect: 1.13.1
-
siginfo@2.0.0: {}
signal-exit@3.0.7: {}
@@ -17390,10 +16469,6 @@ snapshots:
get-east-asian-width: 1.2.0
strip-ansi: 7.1.0
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
-
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
@@ -17799,8 +16874,6 @@ snapshots:
universalify@2.0.1: {}
- unpipe@1.0.0: {}
-
update-browserslist-db@1.1.0(browserslist@4.23.3):
dependencies:
browserslist: 4.23.3
@@ -17820,16 +16893,12 @@ snapshots:
util-deprecate@1.0.2: {}
- utils-merge@1.0.1: {}
-
uuid-parse@1.1.0: {}
uuid@8.3.2: {}
validate-html-nesting@1.2.2: {}
- vary@1.1.2: {}
-
vfile-location@5.0.2:
dependencies:
'@types/unist': 3.0.3
@@ -18114,8 +17183,6 @@ snapshots:
web-streams-polyfill@3.3.3: {}
- web-vitals@3.5.2: {}
-
web-vitals@4.2.3: {}
webidl-conversions@3.0.1: {}
@@ -18164,10 +17231,6 @@ snapshots:
wicked-good-xpath@1.3.0: {}
- wide-align@1.1.5:
- dependencies:
- string-width: 4.2.3
-
widest-line@4.0.1:
dependencies:
string-width: 5.1.2
@@ -18184,8 +17247,6 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.0
- wrappy@1.0.2: {}
-
ws@8.16.0: {}
xml-name-validator@5.0.0: {}