diff --git a/.changeset/odd-tips-jam.md b/.changeset/odd-tips-jam.md new file mode 100644 index 0000000000000..4332a4eba1147 --- /dev/null +++ b/.changeset/odd-tips-jam.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Correctly handles content layer data where the transformed value does not match the input schema diff --git a/benchmark/package.json b/benchmark/package.json index 60c8621d2eb20..149dc2096028c 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/examples/container-with-vitest/package.json b/examples/container-with-vitest/package.json index f303bc8d53e72..ad506accb1774 100644 --- a/examples/container-with-vitest/package.json +++ b/examples/container-with-vitest/package.json @@ -19,7 +19,7 @@ "vitest": "^2.0.5" }, "devDependencies": { - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0" } } diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index 3be7e7fadc6aa..affa57486c832 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -16,7 +16,7 @@ "@astrojs/solid-js": "^4.4.1", "@astrojs/svelte": "^5.7.0", "@astrojs/vue": "^4.5.0", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "^4.15.1", "preact": "^10.23.2", diff --git a/examples/framework-react/package.json b/examples/framework-react/package.json index 6b30f929ee2a8..e26dd6c7932d8 100644 --- a/examples/framework-react/package.json +++ b/examples/framework-react/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@astrojs/react": "^3.6.2", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "^4.15.1", "react": "^18.3.1", diff --git a/examples/server-islands/package.json b/examples/server-islands/package.json index e0813abfe6075..cf1f7b20c77c6 100644 --- a/examples/server-islands/package.json +++ b/examples/server-islands/package.json @@ -14,11 +14,11 @@ "@astrojs/react": "^3.6.2", "@astrojs/tailwind": "^5.1.0", "@fortawesome/fontawesome-free": "^6.6.0", - "@tailwindcss/forms": "^0.5.7", - "@types/react": "^18.3.4", + "@tailwindcss/forms": "^0.5.8", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "^4.15.1", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "react": "^18.3.1", "react-dom": "^18.3.1", "tailwindcss": "^3.4.10" diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index 04a20c8e52ec3..55cf3f6ec4e69 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -17,7 +17,7 @@ "astro": "^4.15.1", "autoprefixer": "^10.4.20", "canvas-confetti": "^1.9.3", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "tailwindcss": "^3.4.10" } } diff --git a/package.json b/package.json index fd6fe1fab3e73..afdf3301518fa 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "only-allow": "^1.2.1", "prettier": "^3.3.3", "prettier-plugin-astro": "^0.14.1", - "turbo": "^2.1.0", + "turbo": "^2.1.1", "typescript": "~5.5.4", "typescript-eslint": "^8.3.0" }, diff --git a/packages/astro/e2e/fixtures/actions-blog/package.json b/packages/astro/e2e/fixtures/actions-blog/package.json index 545ae2d37befe..1bb4b45574190 100644 --- a/packages/astro/e2e/fixtures/actions-blog/package.json +++ b/packages/astro/e2e/fixtures/actions-blog/package.json @@ -12,9 +12,9 @@ "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": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "react": "^18.3.1", diff --git a/packages/astro/e2e/fixtures/actions-react-19/package.json b/packages/astro/e2e/fixtures/actions-react-19/package.json index aa5fa90ddf6f9..ef6b4fe6a2b0d 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 9958ee2878572..efbfeec68de4b 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/tailwindcss/package.json b/packages/astro/e2e/fixtures/tailwindcss/package.json index 599bca6ac93e1..14d4c210b2031 100644 --- a/packages/astro/e2e/fixtures/tailwindcss/package.json +++ b/packages/astro/e2e/fixtures/tailwindcss/package.json @@ -6,7 +6,7 @@ "@astrojs/tailwind": "workspace:*", "astro": "workspace:*", "autoprefixer": "^10.4.20", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "tailwindcss": "^3.4.10" } } diff --git a/packages/astro/e2e/fixtures/view-transitions/package.json b/packages/astro/e2e/fixtures/view-transitions/package.json index 0a0ad81f2672b..e40816ffd8fd8 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/package.json b/packages/astro/package.json index e0bff6a332dd9..99d29eb803fd3 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -128,7 +128,7 @@ "@astrojs/telemetry": "workspace:*", "@babel/core": "^7.25.2", "@babel/plugin-transform-react-jsx": "^7.25.2", - "@babel/types": "^7.25.4", + "@babel/types": "^7.25.6", "@oslojs/encoding": "^0.4.1", "@rollup/pluginutils": "^5.1.0", "@types/babel__core": "^7.20.5", @@ -173,11 +173,11 @@ "prompts": "^2.4.2", "rehype": "^13.0.1", "semver": "^7.6.3", - "shiki": "^1.14.1", + "shiki": "^1.16.1", "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "tinyexec": "^0.3.0", - "tsconfck": "^3.1.1", + "tsconfck": "^3.1.3", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "vite": "^5.4.2", @@ -201,7 +201,7 @@ "@types/common-ancestor-path": "^1.0.2", "@types/cssesc": "^3.0.2", "@types/debug": "^4.1.12", - "@types/diff": "^5.2.1", + "@types/diff": "^5.2.2", "@types/dlv": "^1.1.4", "@types/dom-view-transitions": "^1.0.5", "@types/hast": "^3.0.4", @@ -214,7 +214,7 @@ "@types/yargs-parser": "^21.0.3", "astro-scripts": "workspace:*", "cheerio": "1.0.0", - "eol": "^0.9.1", + "eol": "^0.10.0", "execa": "^8.0.1", "expect-type": "^0.20.0", "mdast-util-mdx": "^3.0.0", @@ -226,7 +226,7 @@ "rehype-slug": "^6.0.0", "rehype-toc": "^3.0.2", "remark-code-titles": "^0.1.2", - "rollup": "^4.21.1", + "rollup": "^4.21.2", "sass": "^1.77.8", "undici": "^6.19.8", "unified": "^11.0.5" diff --git a/packages/astro/performance/fixtures/md/package.json b/packages/astro/performance/fixtures/md/package.json index 90db727e48255..76ea903128af9 100644 --- a/packages/astro/performance/fixtures/md/package.json +++ b/packages/astro/performance/fixtures/md/package.json @@ -16,7 +16,7 @@ "dependencies": { "@astrojs/react": "workspace:*", "@performance/utils": "workspace:*", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "react": "^18.3.1", diff --git a/packages/astro/performance/fixtures/mdoc/package.json b/packages/astro/performance/fixtures/mdoc/package.json index 5bcd443ae0f1e..115798883e364 100644 --- a/packages/astro/performance/fixtures/mdoc/package.json +++ b/packages/astro/performance/fixtures/mdoc/package.json @@ -17,7 +17,7 @@ "@astrojs/markdoc": "workspace:*", "@astrojs/react": "workspace:*", "@performance/utils": "workspace:*", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "react": "^18.3.1", diff --git a/packages/astro/performance/fixtures/mdx/package.json b/packages/astro/performance/fixtures/mdx/package.json index e1fc69d0d092b..a634aac45b659 100644 --- a/packages/astro/performance/fixtures/mdx/package.json +++ b/packages/astro/performance/fixtures/mdx/package.json @@ -17,7 +17,7 @@ "@astrojs/mdx": "workspace:*", "@astrojs/react": "workspace:*", "@performance/utils": "workspace:*", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "react": "^18.3.1", diff --git a/packages/astro/src/content/content-layer.ts b/packages/astro/src/content/content-layer.ts index 606754eac85be..e14eed43b7115 100644 --- a/packages/astro/src/content/content-layer.ts +++ b/packages/astro/src/content/content-layer.ts @@ -1,6 +1,4 @@ import { promises as fs, existsSync } from 'node:fs'; -import { isAbsolute } from 'node:path'; -import { fileURLToPath } from 'node:url'; import * as fastq from 'fastq'; import type { FSWatcher } from 'vite'; import xxhash from 'xxhash-wasm'; @@ -19,7 +17,6 @@ import { getEntryConfigByExtMap, getEntryDataAndImages, globalContentConfigObserver, - posixRelative, } from './utils.js'; export interface ContentLayerOptions { @@ -188,7 +185,7 @@ export class ContentLayer { const collectionWithResolvedSchema = { ...collection, schema }; const parseData: LoaderContext['parseData'] = async ({ id, data, filePath = '' }) => { - const { imageImports, data: parsedData } = await getEntryDataAndImages( + const { data: parsedData } = await getEntryDataAndImages( { id, collection: name, @@ -201,15 +198,6 @@ export class ContentLayer { collectionWithResolvedSchema, false, ); - if (imageImports?.length) { - this.#store.addAssetImports( - imageImports, - // This path may already be relative, if we're re-parsing an existing entry - isAbsolute(filePath) - ? posixRelative(fileURLToPath(this.#settings.config.root), filePath) - : filePath, - ); - } return parsedData; }; diff --git a/packages/astro/src/content/data-store.ts b/packages/astro/src/content/data-store.ts index 76cefc411a76d..fbf31d0f1372c 100644 --- a/packages/astro/src/content/data-store.ts +++ b/packages/astro/src/content/data-store.ts @@ -33,6 +33,7 @@ export interface DataEntry = Record; } /** diff --git a/packages/astro/src/content/loaders/glob.ts b/packages/astro/src/content/loaders/glob.ts index 260d32c620299..e0b1d79c1b948 100644 --- a/packages/astro/src/content/loaders/glob.ts +++ b/packages/astro/src/content/loaders/glob.ts @@ -107,15 +107,11 @@ export function glob(globOptions: GlobOptions): Loader { store.addModuleImport(existingEntry.filePath); } - if (existingEntry.rendered?.metadata?.imagePaths?.length) { + if (existingEntry.assetImports?.length) { // Add asset imports for existing entries - store.addAssetImports( - existingEntry.rendered.metadata.imagePaths, - existingEntry.filePath, - ); + store.addAssetImports(existingEntry.assetImports, existingEntry.filePath); } - // Re-parsing to resolve images and other effects - await parseData(existingEntry); + return; } @@ -156,10 +152,9 @@ export function glob(globOptions: GlobOptions): Loader { filePath: relativePath, digest, rendered, + assetImports: rendered?.metadata?.imagePaths, }); - if (rendered?.metadata?.imagePaths?.length) { - store.addAssetImports(rendered.metadata.imagePaths, relativePath); - } + // todo: add an explicit way to opt in to deferred rendering } else if ('contentModuleTypes' in entryType) { store.set({ diff --git a/packages/astro/src/content/mutable-data-store.ts b/packages/astro/src/content/mutable-data-store.ts index 200951848046d..29acf4506bf72 100644 --- a/packages/astro/src/content/mutable-data-store.ts +++ b/packages/astro/src/content/mutable-data-store.ts @@ -1,7 +1,9 @@ import { promises as fs, type PathLike, existsSync } from 'node:fs'; import * as devalue from 'devalue'; +import { Traverse } from 'neotraverse/modern'; import { imageSrcToImportId, importIdToSymbolName } from '../assets/utils/resolveImports.js'; import { AstroError, AstroErrorData } from '../core/errors/index.js'; +import { IMAGE_IMPORT_PREFIX } from './consts.js'; import { type DataEntry, DataStore, type RenderedContent } from './data-store.js'; import { contentModuleToId } from './utils.js'; @@ -53,7 +55,7 @@ export class MutableDataStore extends DataStore { this.#saveToDiskDebounced(); } - addAssetImport(assetImport: string, filePath: string) { + addAssetImport(assetImport: string, filePath?: string) { const id = imageSrcToImportId(assetImport, filePath); if (id) { this.#assetImports.add(id); @@ -64,7 +66,7 @@ export class MutableDataStore extends DataStore { } } - addAssetImports(assets: Array, filePath: string) { + addAssetImports(assets: Array, filePath?: string) { assets.forEach((asset) => this.addAssetImport(asset, filePath)); } @@ -195,7 +197,7 @@ export default new Map([\n${lines.join(',\n')}]); entries: () => this.entries(collectionName), values: () => this.values(collectionName), keys: () => this.keys(collectionName), - set: ({ id: key, data, body, filePath, deferredRender, digest, rendered }) => { + set: ({ id: key, data, body, filePath, deferredRender, digest, rendered, assetImports }) => { if (!key) { throw new Error(`ID must be a non-empty string`); } @@ -206,6 +208,15 @@ export default new Map([\n${lines.join(',\n')}]); return false; } } + const foundAssets = new Set(assetImports); + // Check for image imports in the data. These will have been prefixed during schema parsing + new Traverse(data).forEach((_, val) => { + if (typeof val === 'string' && val.startsWith(IMAGE_IMPORT_PREFIX)) { + const src = val.replace(IMAGE_IMPORT_PREFIX, ''); + foundAssets.add(src); + } + }); + const entry: DataEntry = { id, data, @@ -221,6 +232,12 @@ export default new Map([\n${lines.join(',\n')}]); } entry.filePath = filePath; } + + if (foundAssets.size) { + entry.assetImports = Array.from(foundAssets); + this.addAssetImports(entry.assetImports, filePath); + } + if (digest) { entry.digest = digest; } @@ -334,6 +351,12 @@ export interface ScopedDataStore { * If an entry is a deferred, its rendering phase is delegated to a virtual module during the runtime phase. */ deferredRender?: boolean; + /** + * Assets such as images to process during the build. These should be files on disk, with a path relative to filePath. + * Any values that use image() in the schema will already be added automatically. + * @internal + */ + assetImports?: Array; }) => boolean; values: () => Array; keys: () => Array; diff --git a/packages/astro/test/content-layer.test.js b/packages/astro/test/content-layer.test.js index d8d6a3b4512f9..0590e7e590207 100644 --- a/packages/astro/test/content-layer.test.js +++ b/packages/astro/test/content-layer.test.js @@ -162,17 +162,21 @@ describe('Content Layer', () => { it('updates the store on new builds', async () => { assert.equal(json.increment.data.lastValue, 1); + assert.equal(json.entryWithReference.data.something?.content, 'transform me'); await fixture.build(); const newJson = devalue.parse(await fixture.readFile('/collections.json')); assert.equal(newJson.increment.data.lastValue, 2); + assert.equal(newJson.entryWithReference.data.something?.content, 'transform me'); }); it('clears the store on new build with force flag', async () => { let newJson = devalue.parse(await fixture.readFile('/collections.json')); assert.equal(newJson.increment.data.lastValue, 2); + assert.equal(newJson.entryWithReference.data.something?.content, 'transform me'); await fixture.build({ force: true }, {}); newJson = devalue.parse(await fixture.readFile('/collections.json')); assert.equal(newJson.increment.data.lastValue, 1); + assert.equal(newJson.entryWithReference.data.something?.content, 'transform me'); }); it('clears the store on new build if the config has changed', async () => { diff --git a/packages/astro/test/fixtures/client-address-node/package.json b/packages/astro/test/fixtures/client-address-node/package.json index 4b1c6a5ee098d..4db07f1306d82 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/content-layer/content-outside-src/columbia-copy.md b/packages/astro/test/fixtures/content-layer/content-outside-src/columbia-copy.md index e5ca2b3a5358e..fba81378ee299 100644 --- a/packages/astro/test/fixtures/content-layer/content-outside-src/columbia-copy.md +++ b/packages/astro/test/fixtures/content-layer/content-outside-src/columbia-copy.md @@ -5,6 +5,7 @@ publishedDate: 'Sat May 21 2022 00:00:00 GMT-0400 (Eastern Daylight Time)' tags: [space, 90s] cat: tabby heroImage: "./shuttle.jpg" +something: "transform me" --- **Source:** [Wikipedia](https://en.wikipedia.org/wiki/Space_Shuttle_Endeavour) diff --git a/packages/astro/test/fixtures/content-layer/src/content/config.ts b/packages/astro/test/fixtures/content-layer/src/content/config.ts index 5e25d83b95de5..8f06b4362909a 100644 --- a/packages/astro/test/fixtures/content-layer/src/content/config.ts +++ b/packages/astro/test/fixtures/content-layer/src/content/config.ts @@ -78,6 +78,7 @@ const spacecraft = defineCollection({ tags: z.array(z.string()), heroImage: image().optional(), cat: reference('cats').optional(), + something: z.string().optional().transform(str => ({ type: 'test', content: str })) }), }); @@ -120,9 +121,9 @@ const increment = defineCollection({ schema: async () => z.object({ lastValue: z.number(), lastUpdated: z.date(), + }), }, - }); export const collections = { blog, dogs, cats, numbers, spacecraft, increment, images }; diff --git a/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js b/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js index 7db3156ca2e0e..87c8cc052680d 100644 --- a/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js +++ b/packages/astro/test/fixtures/content-layer/src/pages/collections.json.js @@ -17,7 +17,6 @@ export async function GET() { const increment = await getEntry('increment', 'value'); const images = await getCollection('images'); - return new Response( devalue.stringify({ customLoader, diff --git a/packages/astro/test/fixtures/custom-assets-name/package.json b/packages/astro/test/fixtures/custom-assets-name/package.json index 00237fbddfdc7..3530f9f0a824b 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/postcss/package.json b/packages/astro/test/fixtures/postcss/package.json index fad256924cc59..45438302bd8fa 100644 --- a/packages/astro/test/fixtures/postcss/package.json +++ b/packages/astro/test/fixtures/postcss/package.json @@ -8,7 +8,7 @@ "@astrojs/vue": "workspace:*", "astro": "workspace:*", "autoprefixer": "^10.4.20", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "solid-js": "^1.8.22", "svelte": "^4.2.19", "vue": "^3.4.38" diff --git a/packages/astro/test/fixtures/ssr-api-route/package.json b/packages/astro/test/fixtures/ssr-api-route/package.json index ab761dd6b1e6f..7af4e57b02ae3 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/ssr-prerender-chunks/package.json b/packages/astro/test/fixtures/ssr-prerender-chunks/package.json index c386358b8e55c..503388b258f6a 100644 --- a/packages/astro/test/fixtures/ssr-prerender-chunks/package.json +++ b/packages/astro/test/fixtures/ssr-prerender-chunks/package.json @@ -5,7 +5,7 @@ "dependencies": { "@astrojs/react": "workspace:*", "@test/ssr-prerender-chunks-test-adapter": "link:./deps/test-adapter", - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "react": "^18.3.1", diff --git a/packages/astro/test/fixtures/static-build-ssr/package.json b/packages/astro/test/fixtures/static-build-ssr/package.json index 6c8f1e4992354..9c39f2b2f898b 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/astro/test/fixtures/tailwindcss-ts/package.json b/packages/astro/test/fixtures/tailwindcss-ts/package.json index a609e7b90d123..f20ea92e9b717 100644 --- a/packages/astro/test/fixtures/tailwindcss-ts/package.json +++ b/packages/astro/test/fixtures/tailwindcss-ts/package.json @@ -5,7 +5,7 @@ "dependencies": { "@astrojs/tailwind": "workspace:*", "astro": "workspace:*", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "tailwindcss": "^3.4.10" } } diff --git a/packages/astro/test/fixtures/tailwindcss/package.json b/packages/astro/test/fixtures/tailwindcss/package.json index 4997356860599..6e175dff1abdd 100644 --- a/packages/astro/test/fixtures/tailwindcss/package.json +++ b/packages/astro/test/fixtures/tailwindcss/package.json @@ -7,7 +7,7 @@ "@astrojs/tailwind": "workspace:*", "astro": "workspace:*", "autoprefixer": "^10.4.20", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "tailwindcss": "^3.4.10" } } diff --git a/packages/db/test/fixtures/ticketing-example/package.json b/packages/db/test/fixtures/ticketing-example/package.json index 9386c7f963750..ba89c8c761d05 100644 --- a/packages/db/test/fixtures/ticketing-example/package.json +++ b/packages/db/test/fixtures/ticketing-example/package.json @@ -12,12 +12,12 @@ "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": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", - "open-props": "^1.7.5", + "open-props": "^1.7.6", "react": "^18.3.1", "react-dom": "^18.3.1", "simple-stack-form": "^0.1.12", diff --git a/packages/integrations/mdx/package.json b/packages/integrations/mdx/package.json index 6d835144ea695..240ee74292fc0 100644 --- a/packages/integrations/mdx/package.json +++ b/packages/integrations/mdx/package.json @@ -63,12 +63,12 @@ "mdast-util-mdx-jsx": "^3.1.3", "mdast-util-to-string": "^4.0.0", "rehype-mathjax": "^6.0.0", - "rehype-pretty-code": "^0.13.2", + "rehype-pretty-code": "^0.14.0", "remark-math": "^6.0.0", "remark-rehype": "^11.1.0", "remark-shiki-twoslash": "^3.1.3", "remark-toc": "^9.0.0", - "shiki": "^1.14.1", + "shiki": "^1.16.1", "unified": "^11.0.5", "vite": "^5.4.2" }, diff --git a/packages/integrations/node/CHANGELOG.md b/packages/integrations/node/CHANGELOG.md deleted file mode 100644 index 738cfc3672e02..0000000000000 --- 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 23ce77c2e8596..e02111adc13fe 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 a5f754275646a..656c453933a97 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 36d9ee30f4882..0000000000000 --- 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 7e299740c6dc3..0000000000000 --- 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 5cc4c4a469191..0000000000000 --- 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 518155c4a8450..0000000000000 --- 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 72b4e0fd67596..0000000000000 --- 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 725f7afa68fb1..0000000000000 --- 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 1bb27e002f1ca..0000000000000 --- 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 76e672d2fc368..0000000000000 --- 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 010053de58f53..0000000000000 --- 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 804a5ccf4797c..0000000000000 --- 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 0b71f94cd6ced..0000000000000 --- 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 9323516e83e70..0000000000000 --- 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 edc6ae78b0378..0000000000000 --- 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 802fa6e256239..0000000000000 --- 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 c4d9bdd2b4eb4..0000000000000 --- 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 65a8765e811cb..0000000000000 --- 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 b1c7ce26368c6..0000000000000 --- 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 3f1b236de76b3..0000000000000 --- 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 7297b9643c67f..0000000000000 --- 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 baf22c93ec3ab..0000000000000 --- 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 1dfa8bb3c69be..0000000000000 --- 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 9ecb884bf89b1..0000000000000 --- 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 73c1196632e18..0000000000000 --- 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 10ddd6d257e01..0000000000000 --- 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 3500779730493..0000000000000 --- 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 2820cf17ee2d1..0000000000000 --- "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 c8473f594ec0b..0000000000000 --- "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 e9fcfe654cf5b..0000000000000 --- 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 65b8ae62c15da..0000000000000 --- 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()} -
- Footer -
\ 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 b7ee6b4efa4d5..0000000000000 --- 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 be702d5ef730a..0000000000000 --- 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 6a0858521083c..0000000000000 --- 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 a9ff193df8489..0000000000000 --- 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 c469fd66f5a53..0000000000000 --- 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 91244e838bf97..0000000000000 --- 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 97719dfa9eb34..0000000000000 --- 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 133cbd423172c..0000000000000 --- 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 dc76082db36c2..0000000000000 --- 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 aaae88e59aca2..0000000000000 --- 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 03e74c6049693..0000000000000 --- 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 36906da3a0908..0000000000000 --- 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 3c1fc477531d8..0000000000000 --- 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 fb7c30cbc543d..0000000000000 --- 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 d974737ee5305..0000000000000 --- 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 f543ae062e4fa..0000000000000 --- 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 b8a9e122e8d17..0000000000000 --- 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 72f7af07158f7..0000000000000 --- 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 9c6bcacaa1e33..0000000000000 --- 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 94066576deab3..0000000000000 --- 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 e9ea42a12b959..0000000000000 --- 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 a09d7f894bbba..0000000000000 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 474a2f0c950ad..0000000000000 --- 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"; ---- - -Penguins 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 8932503605095..0000000000000 --- 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 35be7dc01ef2a..0000000000000 --- 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 e349ca41d8273..0000000000000 --- 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 3c279e37bdba3..0000000000000 --- 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 224a875ecc8f0..0000000000000 --- 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 224a875ecc8f0..0000000000000 --- 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 7a49010f1ffd0..0000000000000 --- 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 79f4944bc9050..0000000000000 --- 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 28ff7d223b369..0000000000000 --- 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 423db341a46e7..0000000000000 --- 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 f962fe991e3ff..0000000000000 --- 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 5f331948a60db..0000000000000 --- 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 1795c26b07afc..0000000000000 --- 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 8f8024a6083b6..0000000000000 --- 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 37fd1c1d39c47..0000000000000 --- 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 ef91ad0ffa912..0000000000000 --- 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 99d103567db24..0000000000000 --- 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 af6bad2fbc212..0000000000000 --- 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 0ae3211abca96..0000000000000 --- 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 13d619d7864e7..0000000000000 --- 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 f3a26721d7d32..0000000000000 --- 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 e29377d88843b..0000000000000 --- 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 c0e5d07aa4377..0000000000000 --- 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 cd35843de7a21..0000000000000 --- 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 ec2d5e3cfd185..0000000000000 --- 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 10ddd6d257e01..0000000000000 --- 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 7ee28f21340c1..0000000000000 --- 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 50b7b7201b9c0..0000000000000 --- 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 5ce768ca55bb5..0000000000000 --- 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 a4c415519a086..0000000000000 --- 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 aa370d18df548..0000000000000 --- 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 f349011fd36e6..0000000000000 --- 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 003429f5209c2..0000000000000 --- 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 f018b6ec7ca59..0000000000000 --- 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 0967ef424bce6..0000000000000 --- 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 daae260f1948c..0000000000000 --- 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 00b1766c799d9..0000000000000 --- 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 5303fe37ee914..0000000000000 --- 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 6d2776079d6ed..0000000000000 --- 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 d1b016a513506..0000000000000 --- 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 2535fcb35bf75..0000000000000 --- 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 e699a1b3c01b1..0000000000000 --- 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 3fd9d0508d6ed..0000000000000 --- 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 facd32d471087..0000000000000 --- 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 10faba5cf9b79..0000000000000 --- 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 9ea8fcdddc399..0000000000000 --- 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 77ca458366388..0000000000000 --- 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 0951d6c27cc99..0000000000000 --- 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 1504b4b6dfa40..0000000000000 --- 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/preact/package.json b/packages/integrations/preact/package.json index d7fb6b47ab2ab..31006ab707ea0 100644 --- a/packages/integrations/preact/package.json +++ b/packages/integrations/preact/package.json @@ -40,7 +40,7 @@ "@preact/preset-vite": "2.8.2", "@preact/signals": "^1.3.0", "babel-plugin-transform-hook-names": "^1.0.2", - "preact-render-to-string": "^6.5.9" + "preact-render-to-string": "^6.5.10" }, "devDependencies": { "astro": "workspace:*", diff --git a/packages/integrations/react/package.json b/packages/integrations/react/package.json index 4e7901bff9642..4f45a472d1be3 100644 --- a/packages/integrations/react/package.json +++ b/packages/integrations/react/package.json @@ -59,7 +59,7 @@ "ultrahtml": "^1.5.3" }, "devDependencies": { - "@types/react": "^18.3.4", + "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "astro": "workspace:*", "astro-scripts": "workspace:*", diff --git a/packages/integrations/sitemap/package.json b/packages/integrations/sitemap/package.json index f7f3223ea7a67..b48e974692f9f 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/tailwind/package.json b/packages/integrations/tailwind/package.json index 89781ec150eb3..fb0ee9182ee08 100644 --- a/packages/integrations/tailwind/package.json +++ b/packages/integrations/tailwind/package.json @@ -34,7 +34,7 @@ }, "dependencies": { "autoprefixer": "^10.4.20", - "postcss": "^8.4.41", + "postcss": "^8.4.43", "postcss-load-config": "^4.0.2" }, "devDependencies": { diff --git a/packages/integrations/vercel/CHANGELOG.md b/packages/integrations/vercel/CHANGELOG.md deleted file mode 100644 index 4a8d6343a6e8a..0000000000000 --- 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 f0f553028610c..a9c91875fe740 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 75563e91837a5..7fef2f9b898f8 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 e793b896e4d19..0000000000000 --- 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 c9702cff9754f..0000000000000 --- 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 8ca87e99aaa97..0000000000000 --- 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 da9342f2942f6..0000000000000 --- 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 d3b05bb115f25..0000000000000 --- 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 7f21f3f2712f6..0000000000000 --- 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 f69f3b5d470c6..0000000000000 --- 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 1e476cb1f2884..0000000000000 --- 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 8e36395360eb0..0000000000000 --- 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 d6ee4d78d6774..0000000000000 --- 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 364d2c861401e..0000000000000 --- 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 a881d701ab361..0000000000000 --- 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 07d0843bf576e..0000000000000 --- 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 cd2ae7fe8d705..0000000000000 --- 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 efe3d2da52a9d..0000000000000 --- 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 1c5b8d2db11fc..0000000000000 --- 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 9ae583a119bf2..0000000000000 --- 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 942139f3dcb5c..0000000000000 --- 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 89fb910ff8b8c..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 eb2c7699e714d..0000000000000 --- 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 e33f178bb2000..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 c61b83a97ca27..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 78923f2cbb9bb..0000000000000 --- 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 87fefe2e019e9..0000000000000 --- 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 40d35ef48fc4e..0000000000000 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 d93379b6846fe..0000000000000 --- 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 db7c22eebc64e..0000000000000 --- 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"; ---- - -
- Astro -
- -
- Astro -
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 4b675ab6c7b2a..0000000000000 --- 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 a1fd601d3b1ad..0000000000000 --- 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 54ba67fa86405..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 b1866a75b11d9..0000000000000 --- 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 9a45d782edd9f..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 f92b18a4ee31e..0000000000000 --- 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 2579a8c926e47..0000000000000 --- 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 b1a67f550965f..0000000000000 --- 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 e69de29bb2d1d..0000000000000 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 bf69edb3e8bfa..0000000000000 --- 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 f92b18a4ee31e..0000000000000 --- 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 d5638ce16a877..0000000000000 --- 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 349a0aa79581e..0000000000000 --- 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 e69de29bb2d1d..0000000000000 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 179d18d38b5e5..0000000000000 --- 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 604b4e4eaef9b..0000000000000 --- 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 6368ce11843b9..0000000000000 --- 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 83e1f2f38d544..0000000000000 --- 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 5cfc0e24c44dc..0000000000000 --- 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 162ff90b6820d..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 1071b7e671605..0000000000000 --- 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 c8de30d66c334..0000000000000 --- 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 9c077e2a381bb..0000000000000 --- 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 e69de29bb2d1d..0000000000000 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 707805087f197..0000000000000 --- 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 d7dcc54718c6c..0000000000000 --- 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 9c077e2a381bb..0000000000000 --- 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 e69de29bb2d1d..0000000000000 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 716d3bd5d4af0..0000000000000 --- 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 534197429c8a3..0000000000000 --- 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 a21ff176a8ff8..0000000000000 --- 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 9d2832bc18789..0000000000000 --- 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 835126c2bc105..0000000000000 --- 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 4d8f76288a26e..0000000000000 --- 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 4e64b2d616bf1..0000000000000 --- 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 c51362516aff2..0000000000000 --- 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 b6b833e5358f2..0000000000000 --- 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 3132bfc53abe3..0000000000000 --- 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 4e64b2d616bf1..0000000000000 --- 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 e22a7e932aea6..0000000000000 --- 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 4eab5952d6501..0000000000000 --- 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 f54e673a8919d..0000000000000 --- 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 b6b833e5358f2..0000000000000 --- 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 20b0b8e2ba7f4..0000000000000 --- 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 e1b608a856fd5..0000000000000 --- 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 9c077e2a381bb..0000000000000 --- 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 6e2d7bff70a6a..0000000000000 --- 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 2f2936e31a314..0000000000000 --- 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 9e307c5c292c6..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 94f52a3d6ef6d..0000000000000 --- 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 80068581cc33c..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 794734f786e61..0000000000000 --- 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 4c6867fd353a5..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 589aa366249c3..0000000000000 --- 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 0022e1e925c13..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 7a3cec1fd9589..0000000000000 --- 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 c54ef16c759bb..0000000000000 --- 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 0c7fb90a735e6..0000000000000 --- 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 e7ba9910e2a62..0000000000000 --- 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 9dbb9bbc02608..0000000000000 --- 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 2eb8e60ab861c..0000000000000 --- 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 b20c4385b3151..0000000000000 --- 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 218acde5bc849..0000000000000 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 256bfb407aaa5..0000000000000 --- 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 e090188a71394..0000000000000 --- 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 b82ac02bfdb8c..0000000000000 --- 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 fb957aa78b56c..0000000000000 --- 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 d5e26fc1a9996..0000000000000 --- 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 34709804d0b83..0000000000000 --- 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 5812c3364731f..0000000000000 --- 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 8d7dcf75b4036..0000000000000 --- 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 9d4f9499e85ca..0000000000000 --- 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 0306bb8b28cc2..0000000000000 --- 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 61e239300b88e..0000000000000 --- 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 3f96138347234..0000000000000 --- 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 28ca84cd20c36..0000000000000 --- 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 4105db7fc79e9..0000000000000 --- 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 37d3a057724b4..0000000000000 --- 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 e007862d72631..0000000000000 --- 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 1e4b0f111e054..0000000000000 --- 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 6bb3e7c253f72..0000000000000 --- 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 d5056d0acb901..0000000000000 --- 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 1504b4b6dfa40..0000000000000 --- 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 95719f5bc6bf1..0000000000000 --- 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/vue/package.json b/packages/integrations/vue/package.json index 9817101b582a3..8861fb38f1560 100644 --- a/packages/integrations/vue/package.json +++ b/packages/integrations/vue/package.json @@ -44,7 +44,7 @@ "test": "astro-scripts test \"test/**/*.test.js\"" }, "dependencies": { - "@vitejs/plugin-vue": "^5.1.2", + "@vitejs/plugin-vue": "^5.1.3", "@vitejs/plugin-vue-jsx": "^4.0.1", "@vue/compiler-sfc": "^3.4.38", "vite-plugin-vue-devtools": "^7.3.9" diff --git a/packages/integrations/web-vitals/test/fixtures/basics/package.json b/packages/integrations/web-vitals/test/fixtures/basics/package.json index 25ab0abc1b750..5dcbdb1f9e106 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/packages/markdown/remark/package.json b/packages/markdown/remark/package.json index 56af78c37a2a6..50e8ef1f27cb9 100644 --- a/packages/markdown/remark/package.json +++ b/packages/markdown/remark/package.json @@ -45,7 +45,7 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.0", "remark-smartypants": "^3.0.2", - "shiki": "^1.14.1", + "shiki": "^1.16.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98d160c414336..416425a189ff6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,8 +52,8 @@ importers: specifier: ^0.14.1 version: 0.14.1 turbo: - specifier: ^2.1.0 - version: 2.1.0 + specifier: ^2.1.1 + version: 2.1.1 typescript: specifier: ~5.5.4 version: 5.5.4 @@ -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 @@ -159,8 +159,8 @@ importers: version: 2.0.5(@types/node@18.19.31)(jsdom@23.2.0)(sass@1.77.8) devDependencies: '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -213,8 +213,8 @@ importers: specifier: ^4.5.0 version: link:../../packages/integrations/vue '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -261,8 +261,8 @@ importers: specifier: ^3.6.2 version: link:../../packages/integrations/react '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -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 @@ -376,11 +376,11 @@ importers: specifier: ^6.6.0 version: 6.6.0 '@tailwindcss/forms': - specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.10) + specifier: ^0.5.8 + version: 0.5.8(tailwindcss@3.4.10) '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -388,8 +388,8 @@ importers: specifier: ^4.15.1 version: link:../../packages/astro postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 react: specifier: ^18.3.1 version: 18.3.1 @@ -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 @@ -533,13 +533,13 @@ importers: version: link:../../packages/astro autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.41) + version: 10.4.20(postcss@8.4.43) canvas-confetti: specifier: ^1.9.3 version: 1.9.3 postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 tailwindcss: specifier: ^3.4.10 version: 3.4.10 @@ -574,14 +574,14 @@ importers: specifier: ^7.25.2 version: 7.25.2(@babel/core@7.25.2) '@babel/types': - specifier: ^7.25.4 - version: 7.25.4 + specifier: ^7.25.6 + version: 7.25.6 '@oslojs/encoding': specifier: ^0.4.1 version: 0.4.1 '@rollup/pluginutils': specifier: ^5.1.0 - version: 5.1.0(rollup@4.21.1) + version: 5.1.0(rollup@4.21.2) '@types/babel__core': specifier: ^7.20.5 version: 7.20.5 @@ -709,8 +709,8 @@ importers: specifier: ^7.6.3 version: 7.6.3 shiki: - specifier: ^1.14.1 - version: 1.14.1 + specifier: ^1.16.1 + version: 1.16.1 string-width: specifier: ^7.2.0 version: 7.2.0 @@ -721,8 +721,8 @@ importers: specifier: ^0.3.0 version: 0.3.0 tsconfck: - specifier: ^3.1.1 - version: 3.1.1(typescript@5.5.4) + specifier: ^3.1.3 + version: 3.1.3(typescript@5.5.4) unist-util-visit: specifier: ^5.0.0 version: 5.0.0 @@ -783,8 +783,8 @@ importers: specifier: ^4.1.12 version: 4.1.12 '@types/diff': - specifier: ^5.2.1 - version: 5.2.1 + specifier: ^5.2.2 + version: 5.2.2 '@types/dlv': specifier: ^1.1.4 version: 1.1.4 @@ -822,8 +822,8 @@ importers: specifier: 1.0.0 version: 1.0.0 eol: - specifier: ^0.9.1 - version: 0.9.1 + specifier: ^0.10.0 + version: 0.10.0 execa: specifier: ^8.0.1 version: 8.0.1 @@ -858,8 +858,8 @@ importers: specifier: ^0.1.2 version: 0.1.2 rollup: - specifier: ^4.21.1 - version: 4.21.1 + specifier: ^4.21.2 + version: 4.21.2 sass: specifier: ^1.77.8 version: 1.77.8 @@ -920,14 +920,14 @@ 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 '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -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 @@ -1687,10 +1687,10 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.41) + version: 10.4.20(postcss@8.4.43) postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 tailwindcss: specifier: ^3.4.10 version: 3.4.10 @@ -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 @@ -1770,8 +1770,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1797,8 +1797,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -1824,8 +1824,8 @@ importers: specifier: workspace:* version: link:../utils '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -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:../../.. @@ -3517,10 +3517,10 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.41) + version: 10.4.20(postcss@8.4.43) postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 solid-js: specifier: ^1.8.22 version: 1.8.22 @@ -3533,7 +3533,7 @@ importers: devDependencies: postcss-preset-env: specifier: ^10.0.2 - version: 10.0.2(postcss@8.4.41) + version: 10.0.2(postcss@8.4.43) packages/astro/test/fixtures/preact-compat-component: dependencies: @@ -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:../../.. @@ -3974,8 +3974,8 @@ importers: specifier: link:./deps/test-adapter version: link:deps/test-adapter '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -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 @@ -4141,10 +4141,10 @@ importers: version: link:../../.. autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.41) + version: 10.4.20(postcss@8.4.43) postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 tailwindcss: specifier: ^3.4.10 version: 3.4.10 @@ -4158,8 +4158,8 @@ importers: specifier: workspace:* version: link:../../.. postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 tailwindcss: specifier: ^3.4.10 version: 3.4.10 @@ -4312,7 +4312,7 @@ importers: version: 1.0.2 drizzle-orm: specifier: ^0.31.2 - version: 0.31.4(@libsql/client@0.10.0)(@types/react@18.3.4)(react@18.3.1) + version: 0.31.4(@libsql/client@0.10.0)(@types/react@18.3.5)(react@18.3.1) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -4465,14 +4465,14 @@ 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 '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -4480,8 +4480,8 @@ importers: specifier: workspace:* version: link:../../../../astro open-props: - specifier: ^1.7.5 - version: 1.7.5 + specifier: ^1.7.6 + version: 1.7.6 react: specifier: ^18.3.1 version: 18.3.1 @@ -4604,7 +4604,7 @@ importers: version: link:../../astro-prism '@markdoc/markdoc': specifier: ^0.4.0 - version: 0.4.0(@types/react@18.3.4)(react@18.3.1) + version: 0.4.0(@types/react@18.3.5)(react@18.3.1) esbuild: specifier: ^0.21.5 version: 0.21.5 @@ -4866,8 +4866,8 @@ importers: specifier: ^6.0.0 version: 6.0.0 rehype-pretty-code: - specifier: ^0.13.2 - version: 0.13.2(shiki@1.14.1) + specifier: ^0.14.0 + version: 0.14.0(shiki@1.16.1) remark-math: specifier: ^6.0.0 version: 6.0.0 @@ -4881,8 +4881,8 @@ importers: specifier: ^9.0.0 version: 9.0.0 shiki: - specifier: ^1.14.1 - version: 1.14.1 + specifier: ^1.16.1 + version: 1.16.1 unified: specifier: ^11.0.5 version: 11.0.5 @@ -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: @@ -5242,8 +5084,8 @@ importers: specifier: ^1.0.2 version: 1.0.2(@babel/core@7.25.2) preact-render-to-string: - specifier: ^6.5.9 - version: 6.5.9(preact@10.23.2) + specifier: ^6.5.10 + version: 6.5.10(preact@10.23.2) devDependencies: astro: specifier: workspace:* @@ -5265,8 +5107,8 @@ importers: version: 1.5.3 devDependencies: '@types/react': - specifier: ^18.3.4 - version: 18.3.4 + specifier: ^18.3.5 + version: 18.3.5 '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 @@ -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 @@ -5416,13 +5258,13 @@ importers: dependencies: autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.41) + version: 10.4.20(postcss@8.4.43) postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.4.43 + version: 8.4.43 postcss-load-config: specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.41) + version: 4.0.2(postcss@8.4.43) devDependencies: astro: specifier: workspace:* @@ -5446,234 +5288,13 @@ 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: '@vitejs/plugin-vue': - specifier: ^5.1.2 - version: 5.1.2(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) + specifier: ^5.1.3 + version: 5.1.3(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.1 version: 4.0.1(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) @@ -5682,7 +5303,7 @@ importers: version: 3.4.38 vite-plugin-vue-devtools: specifier: ^7.3.9 - version: 7.3.9(rollup@4.21.1)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) + version: 7.3.9(rollup@4.21.2)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) devDependencies: astro: specifier: workspace:* @@ -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:../../.. @@ -5863,8 +5484,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 shiki: - specifier: ^1.14.1 - version: 1.14.1 + specifier: ^1.16.1 + version: 1.16.1 unified: specifier: ^11.0.5 version: 11.0.5 @@ -6026,8 +5647,8 @@ importers: specifier: ^0.3.0 version: 0.3.0 tsconfck: - specifier: ^3.1.1 - version: 3.1.1(typescript@5.5.4) + specifier: ^3.1.3 + version: 3.1.3(typescript@5.5.4) packages: @@ -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==} @@ -6294,8 +5920,8 @@ packages: resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.4': - resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@biomejs/biome@1.8.3': @@ -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'} @@ -7239,88 +6861,91 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.1': - resolution: {integrity: sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==} + '@rollup/rollup-android-arm-eabi@4.21.2': + resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.1': - resolution: {integrity: sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==} + '@rollup/rollup-android-arm64@4.21.2': + resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.1': - resolution: {integrity: sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==} + '@rollup/rollup-darwin-arm64@4.21.2': + resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.1': - resolution: {integrity: sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==} + '@rollup/rollup-darwin-x64@4.21.2': + resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.1': - resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.21.2': + resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.1': - resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==} + '@rollup/rollup-linux-arm-musleabihf@4.21.2': + resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.1': - resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==} + '@rollup/rollup-linux-arm64-gnu@4.21.2': + resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.1': - resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==} + '@rollup/rollup-linux-arm64-musl@4.21.2': + resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': - resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': + resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.1': - resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==} + '@rollup/rollup-linux-riscv64-gnu@4.21.2': + resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.1': - resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==} + '@rollup/rollup-linux-s390x-gnu@4.21.2': + resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.1': - resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==} + '@rollup/rollup-linux-x64-gnu@4.21.2': + resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.1': - resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==} + '@rollup/rollup-linux-x64-musl@4.21.2': + resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.1': - resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==} + '@rollup/rollup-win32-arm64-msvc@4.21.2': + resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.1': - resolution: {integrity: sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==} + '@rollup/rollup-win32-ia32-msvc@4.21.2': + resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.1': - resolution: {integrity: sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==} + '@rollup/rollup-win32-x64-msvc@4.21.2': + resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==} cpu: [x64] os: [win32] - '@shikijs/core@1.14.1': - resolution: {integrity: sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==} + '@shikijs/core@1.16.1': + resolution: {integrity: sha512-aI0hBtw+a6KsJp2jcD4YuQqKpeCbURMZbhHVozDknJpm+KJqeMRkEnfBC8BaKE/5XC+uofPgCLsa/TkTk0Ba0w==} + + '@shikijs/vscode-textmate@9.2.0': + resolution: {integrity: sha512-5FinaOp6Vdh/dl4/yaOTh0ZeKch+rYS8DUb38V3GMKYVkdqzxw53lViRKUYkVILRiVQT7dcPC7VvAKOR73zVtQ==} '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} @@ -7346,10 +6971,10 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 - '@tailwindcss/forms@0.5.7': - resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} + '@tailwindcss/forms@0.5.8': + resolution: {integrity: sha512-DJs7B7NPD0JH7BVvdHWNviWmunlFhuEkz7FyFxE4japOWYMLl9b1D6+Z9mivJJPWr6AEbmlPqgiFRyLwFB1SgQ==} peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20' '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -7406,8 +7031,8 @@ packages: '@types/deep-diff@1.0.5': resolution: {integrity: sha512-PQyNSy1YMZU1hgZA5tTYfHPpUAo9Dorn1PZho2/budQLfqLu3JIP37JAavnwYpR1S2yFZTXa3hxaE4ifGW5jaA==} - '@types/diff@5.2.1': - resolution: {integrity: sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==} + '@types/diff@5.2.2': + resolution: {integrity: sha512-qVqLpd49rmJA2nZzLVsmfS/aiiBpfVE95dHhPVwG0NmSBAt+riPxnj53wq2oBq5m4Q2RF1IWFEUpnZTgrQZfEQ==} '@types/dlv@1.1.4': resolution: {integrity: sha512-m8KmImw4Jt+4rIgupwfivrWEOnj1LzkmKkqbh075uG13eTQ1ZxHWT6T0vIdSQhLIjQCiR0n0lZdtyDOPO1x2Mw==} @@ -7511,8 +7136,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.4': - resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} + '@types/react@18.3.5': + resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} '@types/relateurl@0.2.33': resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==} @@ -7628,25 +7253,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} @@ -7660,8 +7266,8 @@ packages: vite: ^5.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@5.1.2': - resolution: {integrity: sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==} + '@vitejs/plugin-vue@5.1.3': + resolution: {integrity: sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 @@ -7776,18 +7382,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 +7396,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 +7447,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 +7459,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 +7493,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 +7552,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 +7584,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 +7782,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 +7927,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 +7938,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'} @@ -8596,20 +8144,12 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - eol@0.9.1: - resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} + eol@0.10.0: + resolution: {integrity: sha512-+w3ktYrOphcIqC1XKmhQYvM+o2uxgQFiimL7B6JPZJlWVxf7Lno9e/JWLPIgbHo7DoZ+b7jsf/NzrUcNe6ZTZQ==} 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'} - es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} @@ -8739,10 +8279,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 +8328,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 +8370,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 +8397,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 +8410,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 +8425,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 +8449,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 +8465,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 +8486,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 +8597,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 +8644,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 +8653,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==} @@ -9378,10 +8858,12 @@ packages: libsql@0.3.19: resolution: {integrity: sha512-Aj5cQ5uk/6fHdmeW0TiXK42FqUlwx7ytmMLPSaUQPin5HKKKuUPD62MAbN4OEweGBBI7q1BekoEN4gPUEL6MZA==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] libsql@0.4.1: resolution: {integrity: sha512-qZlR9Yu1zMBeLChzkE/cKfoKV3Esp9cn9Vx5Zirn4AVhDWPcjYhKwbtJcMuHehgk3mH+fJr9qW+3vesBWbQpBg==} + cpu: [x64, arm64, wasm32] os: [darwin, linux, win32] lilconfig@2.1.0: @@ -9494,10 +8976,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 +9079,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 +9351,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 +9361,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 +9376,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 +9392,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 +9403,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'} @@ -9963,8 +9419,8 @@ packages: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} hasBin: true - open-props@1.7.5: - resolution: {integrity: sha512-DajjLQDJgIa0i+QdB2q5M8lNLo2ICk+DbDh4TsqNsT1tAO8Zm8F7dndSkLMQkobT98lbvDMMpJWO8NT0ibjrjA==} + open-props@1.7.6: + resolution: {integrity: sha512-fE3E22x8lCf6gJrPO3L54NKrPaqQGxeKoXLz4JIXrhALD3Ua1kkE2kMw8HmlTKYF9BSLLMfoVfsT3UC1PJcaww==} open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} @@ -10070,10 +9526,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 +9541,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==} @@ -10342,12 +9791,12 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + postcss@8.4.43: + resolution: {integrity: sha512-gJAQVYbh5R3gYm33FijzCZj7CHyQ3hWMgJMprLUlIYqCwTeZhBQ19wp0e9mA25BUbEvY5+EXuuaAjqQsrBxQBQ==} engines: {node: ^10 || ^12 || >=14} - preact-render-to-string@6.5.9: - resolution: {integrity: sha512-Fn9R89h6qrQeSRmsH2O2fWzqpVwsJgEL9UTly5nGEV2ldhVuG+9JhXdNJ6zreIkOZcBT20+AOMwlG1x72znJ+g==} + preact-render-to-string@6.5.10: + resolution: {integrity: sha512-BJdypTQaBA5UbTF9NKZS3zP93Sw33tZOxNXIfuHofqOZFoMdsquNkVebs/HkEw0in/Qbi6Ep/Anngnj+VsHeBQ==} peerDependencies: preact: '>=10' @@ -10411,10 +9860,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 +9870,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 +9880,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 +9909,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'} @@ -10506,8 +9939,8 @@ packages: rehype-parse@9.0.0: resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} - rehype-pretty-code@0.13.2: - resolution: {integrity: sha512-F+PaFMscfJOcSHcR2b//+hk/0jT56hmGDqXcVD6VC9j0CUSGiqv8YxaWUyhR7qEIRRSbzAVxx+0uxzk+akXs+w==} + rehype-pretty-code@0.14.0: + resolution: {integrity: sha512-hBeKF/Wkkf3zyUS8lal9RCUuhypDWLQc+h9UrP9Pav25FUm/AQAVh4m5gdvJxh4Oz+U+xKvdsV01p1LdvsZTiQ==} engines: {node: '>=18'} peerDependencies: shiki: ^1.3.0 @@ -10627,13 +10060,8 @@ 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==} + rollup@4.21.2: + resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10708,23 +10136,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==} @@ -10756,12 +10170,8 @@ packages: shiki@0.10.1: resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} - 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'} + shiki@1.16.1: + resolution: {integrity: sha512-tCJIMaxDVB1mEIJ5TvfZU7kCPB5eo9fli5+21Olc/bmyv+w8kye3JOp+LZRmGkAyT71hrkefQhTiY+o9mBikRQ==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -10881,9 +10291,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==} @@ -11093,8 +10500,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfck@3.1.1: - resolution: {integrity: sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==} + tsconfck@3.1.3: + resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -11109,38 +10516,38 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - turbo-darwin-64@2.1.0: - resolution: {integrity: sha512-gHwpDk2gyB7qZ57gUUwDIS/IkglqEjjVtPZCTxmCRg28Tiwjui0azsLVKrnHP9UZHllozwbi28x8HXLXLEFF1w==} + turbo-darwin-64@2.1.1: + resolution: {integrity: sha512-aYNuJpZlCoi0Htd79fl/2DywpewGKijdXeOfg9KzNuPVKzSMYlAXuAlNGh0MKjiOcyqxQGL7Mq9LFhwA0VpDpQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.1.0: - resolution: {integrity: sha512-GLaqGetNC6eS4eqXgsheLOHic/OcnGCGDi5boVf+TFZTXYH6YE15L4ugZha4xHXCr1KouCLILHh+f8EHEmWylg==} + turbo-darwin-arm64@2.1.1: + resolution: {integrity: sha512-tifJKD8yHY48rHXPMcM8o1jI/Jk2KCaXiNjTKvvy9Zsim61BZksNVLelIbrRoCGwAN6PUBZO2lGU5iL/TQJ5Pw==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.1.0: - resolution: {integrity: sha512-VzBOsj7JyGoZtiNZZ6brjnY7UehRnClluw7pwznuLPzClkqOOPMd2jOcgkWxnP/xW4NBmOoFANXXrtvKBD4f2w==} + turbo-linux-64@2.1.1: + resolution: {integrity: sha512-Js6d/bSQe9DuV9c7ITXYpsU/ADzFHABdz1UIHa7Oqjj9VOEbFeA9WpAn0c+mdJrVD+IXJFbbDZUjN7VYssmtcg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.1.0: - resolution: {integrity: sha512-St7svJnOO5g4F6R7Z32e10I/0M3e6qpNjEYybXwPNul9NSfnUXeky4WoKaALwqNhyJ7nYemoFpZ1d+i8hFQTHg==} + turbo-linux-arm64@2.1.1: + resolution: {integrity: sha512-LidzTCq0yvQ+N8w8Qub9FmhQ/mmEIeoqFi7DSupekEV2EjvE9jw/zYc9Pk67X+g7dHVfgOnvVzmrjChdxpFePw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.1.0: - resolution: {integrity: sha512-iSobNud2MrJ1SZ1upVPlErT8xexsr0MQtKapdfq6z0M0rBnrDGEq5bUCSScWyGu+O4+glB4br9xkTAkGFqaxqQ==} + turbo-windows-64@2.1.1: + resolution: {integrity: sha512-GKc9ZywKwy4xLDhwXd6H07yzl0TB52HjXMrFLyHGhCVnf/w0oq4sLJv2sjbvuarPjsyx4xnCBJ3m3oyL2XmFtA==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.1.0: - resolution: {integrity: sha512-d61jN4rjE5PnUfF66GKrKoj8S8Ql4FGXzFFzZz4kjsHpZZzCTtqlzPZBmd1byzGYhDPTorTqG3G1USohbdyohA==} + turbo-windows-arm64@2.1.1: + resolution: {integrity: sha512-oFKkMj11KKUv3xSK9/fhAEQTxLUp1Ol1EOktwc32+SFtEU0uls7kosAz0b+qe8k3pJGEMFdDPdqoEjyJidbxtQ==} cpu: [arm64] os: [win32] - turbo@2.1.0: - resolution: {integrity: sha512-A969/LO/sPHKlapIarY2VVzqQ5JnnW2/1kksZlnMEpsRD6gwOELvVL+ozfMiO7av9RILt3UeN02L17efr6HUCA==} + turbo@2.1.1: + resolution: {integrity: sha512-u9gUDkmR9dFS8b5kAYqIETK4OnzsS4l2ragJ0+soSMHh6VEeNHjTfSjk1tKxCqLyziCrPogadxP680J+v6yGHw==} hasBin: true type-check@0.4.0: @@ -11276,10 +10683,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 +10701,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 +10711,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 +10964,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 +11018,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 +11030,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 +11225,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 @@ -11861,7 +11255,7 @@ snapshots: '@babel/parser': 7.25.4 '@babel/template': 7.25.0 '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 debug: 4.3.6 gensync: 1.0.0-beta.2 @@ -11872,14 +11266,14 @@ snapshots: '@babel/generator@7.25.5': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-compilation-targets@7.25.2': dependencies: @@ -11906,32 +11300,32 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-member-expression-to-functions@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -11947,7 +11341,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-plugin-utils@7.24.8': {} @@ -11963,20 +11357,20 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/helper-string-parser@7.24.8': {} @@ -11987,7 +11381,7 @@ snapshots: '@babel/helpers@7.25.0': dependencies: '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/highlight@7.24.7': dependencies: @@ -11998,7 +11392,7 @@ snapshots: '@babel/parser@7.25.4': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.25.2)': dependencies: @@ -12058,7 +11452,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -12080,7 +11474,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@babel/traverse@7.25.4': dependencies: @@ -12088,13 +11482,13 @@ snapshots: '@babel/generator': 7.25.5 '@babel/parser': 7.25.4 '@babel/template': 7.25.0 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.4': + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -12352,201 +11746,201 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-cascade-layers@5.0.0(postcss@8.4.41)': + '@csstools/postcss-cascade-layers@5.0.0(postcss@8.4.43)': dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - '@csstools/postcss-color-function@4.0.2(postcss@8.4.41)': + '@csstools/postcss-color-function@4.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-color-mix-function@3.0.2(postcss@8.4.41)': + '@csstools/postcss-color-mix-function@3.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-content-alt-text@2.0.1(postcss@8.4.41)': + '@csstools/postcss-content-alt-text@2.0.1(postcss@8.4.43)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-exponential-functions@2.0.1(postcss@8.4.41)': + '@csstools/postcss-exponential-functions@2.0.1(postcss@8.4.43)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.4.41)': + '@csstools/postcss-font-format-keywords@4.0.0(postcss@8.4.43)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@2.0.2(postcss@8.4.41)': + '@csstools/postcss-gamut-mapping@2.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-gradients-interpolation-method@5.0.2(postcss@8.4.41)': + '@csstools/postcss-gradients-interpolation-method@5.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-hwb-function@4.0.2(postcss@8.4.41)': + '@csstools/postcss-hwb-function@4.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-ic-unit@4.0.0(postcss@8.4.41)': + '@csstools/postcss-ic-unit@4.0.0(postcss@8.4.43)': dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@2.0.0(postcss@8.4.41)': + '@csstools/postcss-initial@2.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-is-pseudo-class@5.0.0(postcss@8.4.41)': + '@csstools/postcss-is-pseudo-class@5.0.0(postcss@8.4.43)': dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - '@csstools/postcss-light-dark-function@2.0.2(postcss@8.4.41)': + '@csstools/postcss-light-dark-function@2.0.2(postcss@8.4.43)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.4.41)': + '@csstools/postcss-logical-float-and-clear@3.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-logical-overflow@2.0.0(postcss@8.4.41)': + '@csstools/postcss-logical-overflow@2.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.4.41)': + '@csstools/postcss-logical-overscroll-behavior@2.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-logical-resize@3.0.0(postcss@8.4.41)': + '@csstools/postcss-logical-resize@3.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@3.0.1(postcss@8.4.41)': + '@csstools/postcss-logical-viewport-units@3.0.1(postcss@8.4.43)': dependencies: '@csstools/css-tokenizer': 3.0.1 - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-media-minmax@2.0.1(postcss@8.4.41)': + '@csstools/postcss-media-minmax@2.0.1(postcss@8.4.43)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.1(postcss@8.4.41)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.1(postcss@8.4.43)': dependencies: '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-nested-calc@4.0.0(postcss@8.4.41)': + '@csstools/postcss-nested-calc@4.0.0(postcss@8.4.43)': dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.4.41)': + '@csstools/postcss-normalize-display-values@4.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@4.0.2(postcss@8.4.41)': + '@csstools/postcss-oklab-function@4.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.4.41)': + '@csstools/postcss-progressive-custom-properties@4.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-relative-color-syntax@3.0.2(postcss@8.4.41)': + '@csstools/postcss-relative-color-syntax@3.0.2(postcss@8.4.43)': dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - '@csstools/postcss-scope-pseudo-class@4.0.0(postcss@8.4.41)': + '@csstools/postcss-scope-pseudo-class@4.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - '@csstools/postcss-stepped-value-functions@4.0.1(postcss@8.4.41)': + '@csstools/postcss-stepped-value-functions@4.0.1(postcss@8.4.43)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.4.41)': + '@csstools/postcss-text-decoration-shorthand@4.0.1(postcss@8.4.43)': dependencies: '@csstools/color-helpers': 5.0.1 - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@4.0.1(postcss@8.4.41)': + '@csstools/postcss-trigonometric-functions@4.0.1(postcss@8.4.43)': dependencies: '@csstools/css-calc': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.41 + postcss: 8.4.43 - '@csstools/postcss-unset-value@4.0.0(postcss@8.4.41)': + '@csstools/postcss-unset-value@4.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 '@csstools/selector-resolve-nested@2.0.0(postcss-selector-parser@6.1.0)': dependencies: @@ -12556,9 +11950,9 @@ snapshots: dependencies: postcss-selector-parser: 6.1.0 - '@csstools/utilities@2.0.0(postcss@8.4.41)': + '@csstools/utilities@2.0.0(postcss@8.4.43)': dependencies: - postcss: 8.4.41 + postcss: 8.4.43 '@emmetio/abbreviation@2.3.3': dependencies: @@ -12938,25 +12332,10 @@ 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)': + '@markdoc/markdoc@0.4.0(@types/react@18.3.5)(react@18.3.1)': optionalDependencies: '@types/markdown-it': 12.2.3 - '@types/react': 18.3.4 + '@types/react': 18.3.5 react: 18.3.1 '@mdx-js/mdx@3.0.1': @@ -13073,66 +12452,69 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.21.1)': + '@rollup/pluginutils@5.1.0(rollup@4.21.2)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.21.1 + rollup: 4.21.2 - '@rollup/rollup-android-arm-eabi@4.21.1': + '@rollup/rollup-android-arm-eabi@4.21.2': optional: true - '@rollup/rollup-android-arm64@4.21.1': + '@rollup/rollup-android-arm64@4.21.2': optional: true - '@rollup/rollup-darwin-arm64@4.21.1': + '@rollup/rollup-darwin-arm64@4.21.2': optional: true - '@rollup/rollup-darwin-x64@4.21.1': + '@rollup/rollup-darwin-x64@4.21.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.1': + '@rollup/rollup-linux-arm-gnueabihf@4.21.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.1': + '@rollup/rollup-linux-arm-musleabihf@4.21.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.1': + '@rollup/rollup-linux-arm64-gnu@4.21.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.1': + '@rollup/rollup-linux-arm64-musl@4.21.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.21.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.1': + '@rollup/rollup-linux-riscv64-gnu@4.21.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.1': + '@rollup/rollup-linux-s390x-gnu@4.21.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.1': + '@rollup/rollup-linux-x64-gnu@4.21.2': optional: true - '@rollup/rollup-linux-x64-musl@4.21.1': + '@rollup/rollup-linux-x64-musl@4.21.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.1': + '@rollup/rollup-win32-arm64-msvc@4.21.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.1': + '@rollup/rollup-win32-ia32-msvc@4.21.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.1': + '@rollup/rollup-win32-x64-msvc@4.21.2': optional: true - '@shikijs/core@1.14.1': + '@shikijs/core@1.16.1': dependencies: + '@shikijs/vscode-textmate': 9.2.0 '@types/hast': 3.0.4 + '@shikijs/vscode-textmate@9.2.0': {} + '@sindresorhus/merge-streams@2.3.0': {} '@solidjs/router@0.14.3(solid-js@1.8.22)': @@ -13162,7 +12544,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.10)': + '@tailwindcss/forms@0.5.8(tailwindcss@3.4.10)': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 3.4.10 @@ -13180,23 +12562,23 @@ snapshots: '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@types/body-parser@1.19.5': dependencies: @@ -13228,7 +12610,7 @@ snapshots: '@types/deep-diff@1.0.5': {} - '@types/diff@5.2.1': {} + '@types/diff@5.2.2': {} '@types/dlv@1.1.4': {} @@ -13334,9 +12716,9 @@ snapshots: '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.4 + '@types/react': 18.3.5 - '@types/react@18.3.4': + '@types/react@18.3.5': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -13491,32 +12873,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 @@ -13538,7 +12894,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.1.2(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4))': + '@vitejs/plugin-vue@5.1.3(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4))': dependencies: vite: 5.4.2(@types/node@18.19.31)(sass@1.77.8) vue: 3.4.38(typescript@5.5.4) @@ -13635,7 +12991,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) '@babel/template': 7.25.0 '@babel/traverse': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 '@vue/babel-helper-vue-transform-on': 1.2.2 '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.25.2) camelcase: 6.3.0 @@ -13677,7 +13033,7 @@ snapshots: '@vue/shared': 3.4.38 estree-walker: 2.0.2 magic-string: 0.30.11 - postcss: 8.4.41 + postcss: 8.4.43 source-map-js: 1.2.0 '@vue/compiler-ssr@3.4.38': @@ -13743,29 +13099,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 +13165,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 +13177,6 @@ snapshots: dependencies: dequal: 2.0.3 - array-flatten@1.1.1: {} - array-iterate@2.0.1: {} array-union@2.1.0: {} @@ -13875,8 +13210,6 @@ snapshots: async-listen@3.0.1: {} - async-sema@3.1.1: {} - asynckit@0.4.0: {} autocannon@7.15.0: @@ -13905,14 +13238,14 @@ snapshots: subarg: 1.0.0 timestring: 6.0.0 - autoprefixer@10.4.20(postcss@8.4.41): + autoprefixer@10.4.20(postcss@8.4.43): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001649 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 axobject-query@4.1.0: {} @@ -13922,7 +13255,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 html-entities: 2.3.3 validate-html-nesting: 1.2.2 @@ -13955,29 +13288,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 +13332,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 +13521,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: @@ -14251,21 +13547,21 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-blank-pseudo@7.0.0(postcss@8.4.41): + css-blank-pseudo@7.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - css-has-pseudo@7.0.0(postcss@8.4.41): + css-has-pseudo@7.0.0(postcss@8.4.43): dependencies: '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - css-prefers-color-scheme@10.0.0(postcss@8.4.41): + css-prefers-color-scheme@10.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 css-select@5.1.0: dependencies: @@ -14347,20 +13643,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: {} @@ -14417,10 +13705,10 @@ snapshots: dotenv@8.6.0: {} - drizzle-orm@0.31.4(@libsql/client@0.10.0)(@types/react@18.3.4)(react@18.3.1): + drizzle-orm@0.31.4(@libsql/client@0.10.0)(@types/react@18.3.5)(react@18.3.1): optionalDependencies: '@libsql/client': 0.10.0 - '@types/react': 18.3.4 + '@types/react': 18.3.5 react: 18.3.1 dset@3.1.3: {} @@ -14461,16 +13749,10 @@ snapshots: entities@4.5.0: {} - eol@0.9.1: {} + eol@0.10.0: {} 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 +13932,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 +13981,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 +14026,6 @@ snapshots: dependencies: fetch-blob: 3.2.0 - forwarded@0.2.0: {} - fraction.js@4.3.7: {} fresh@0.5.2: {} @@ -14828,8 +14058,6 @@ snapshots: dependencies: minipass: 3.3.6 - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -14838,18 +14066,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 +14074,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 +14105,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 +14127,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 +14144,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 +14380,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 +14422,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: @@ -15579,13 +14750,9 @@ snapshots: magicast@0.3.5: dependencies: '@babel/parser': 7.25.4 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 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 +14984,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 +15375,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 +15397,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 +15407,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 +15423,6 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.1: {} - ohash@1.1.3: {} on-finished@2.4.1: @@ -16281,10 +15431,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 @@ -16301,7 +15447,7 @@ snapshots: dependencies: which-pm-runs: 1.1.0 - open-props@1.7.5: {} + open-props@1.7.6: {} open@10.1.0: dependencies: @@ -16428,8 +15574,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 +15585,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: {} @@ -16485,238 +15627,238 @@ snapshots: port-authority@2.0.1: {} - postcss-attribute-case-insensitive@7.0.0(postcss@8.4.41): + postcss-attribute-case-insensitive@7.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-clamp@4.1.0(postcss@8.4.41): + postcss-clamp@4.1.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@7.0.2(postcss@8.4.41): + postcss-color-functional-notation@7.0.2(postcss@8.4.43): dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - postcss-color-hex-alpha@10.0.0(postcss@8.4.41): + postcss-color-hex-alpha@10.0.0(postcss@8.4.43): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@10.0.0(postcss@8.4.41): + postcss-color-rebeccapurple@10.0.0(postcss@8.4.43): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-custom-media@11.0.1(postcss@8.4.41): + postcss-custom-media@11.0.1(postcss@8.4.43): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - postcss: 8.4.41 + postcss: 8.4.43 - postcss-custom-properties@14.0.1(postcss@8.4.41): + postcss-custom-properties@14.0.1(postcss@8.4.43): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-custom-selectors@8.0.1(postcss@8.4.41): + postcss-custom-selectors@8.0.1(postcss@8.4.43): dependencies: '@csstools/cascade-layer-name-parser': 2.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-dir-pseudo-class@9.0.0(postcss@8.4.41): + postcss-dir-pseudo-class@9.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-double-position-gradients@6.0.0(postcss@8.4.41): + postcss-double-position-gradients@6.0.0(postcss@8.4.43): dependencies: - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-focus-visible@10.0.0(postcss@8.4.41): + postcss-focus-visible@10.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-focus-within@9.0.0(postcss@8.4.41): + postcss-focus-within@9.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-font-variant@5.0.0(postcss@8.4.41): + postcss-font-variant@5.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-gap-properties@6.0.0(postcss@8.4.41): + postcss-gap-properties@6.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-image-set-function@7.0.0(postcss@8.4.41): + postcss-image-set-function@7.0.0(postcss@8.4.43): dependencies: - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.4.41): + postcss-import@15.1.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.41): + postcss-js@4.0.1(postcss@8.4.43): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.41 + postcss: 8.4.43 - postcss-lab-function@7.0.2(postcss@8.4.41): + postcss-lab-function@7.0.2(postcss@8.4.43): dependencies: '@csstools/css-color-parser': 3.0.2(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) '@csstools/css-tokenizer': 3.0.1 - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/utilities': 2.0.0(postcss@8.4.41) - postcss: 8.4.41 + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/utilities': 2.0.0(postcss@8.4.43) + postcss: 8.4.43 - postcss-load-config@4.0.2(postcss@8.4.41): + postcss-load-config@4.0.2(postcss@8.4.43): dependencies: lilconfig: 3.1.1 yaml: 2.5.0 optionalDependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-logical@8.0.0(postcss@8.4.41): + postcss-logical@8.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-nested@6.0.1(postcss@8.4.41): + postcss-nested@6.0.1(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-nesting@13.0.0(postcss@8.4.41): + postcss-nesting@13.0.0(postcss@8.4.43): dependencies: '@csstools/selector-resolve-nested': 2.0.0(postcss-selector-parser@6.1.0) '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.0) - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-opacity-percentage@2.0.0(postcss@8.4.41): + postcss-opacity-percentage@2.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-overflow-shorthand@6.0.0(postcss@8.4.41): + postcss-overflow-shorthand@6.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.4.41): + postcss-page-break@3.0.4(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-place@10.0.0(postcss@8.4.41): + postcss-place@10.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-value-parser: 4.2.0 - postcss-preset-env@10.0.2(postcss@8.4.41): - dependencies: - '@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.41) - '@csstools/postcss-color-function': 4.0.2(postcss@8.4.41) - '@csstools/postcss-color-mix-function': 3.0.2(postcss@8.4.41) - '@csstools/postcss-content-alt-text': 2.0.1(postcss@8.4.41) - '@csstools/postcss-exponential-functions': 2.0.1(postcss@8.4.41) - '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.4.41) - '@csstools/postcss-gamut-mapping': 2.0.2(postcss@8.4.41) - '@csstools/postcss-gradients-interpolation-method': 5.0.2(postcss@8.4.41) - '@csstools/postcss-hwb-function': 4.0.2(postcss@8.4.41) - '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.41) - '@csstools/postcss-initial': 2.0.0(postcss@8.4.41) - '@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.41) - '@csstools/postcss-light-dark-function': 2.0.2(postcss@8.4.41) - '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.41) - '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.41) - '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.41) - '@csstools/postcss-logical-resize': 3.0.0(postcss@8.4.41) - '@csstools/postcss-logical-viewport-units': 3.0.1(postcss@8.4.41) - '@csstools/postcss-media-minmax': 2.0.1(postcss@8.4.41) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.1(postcss@8.4.41) - '@csstools/postcss-nested-calc': 4.0.0(postcss@8.4.41) - '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.4.41) - '@csstools/postcss-oklab-function': 4.0.2(postcss@8.4.41) - '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.41) - '@csstools/postcss-relative-color-syntax': 3.0.2(postcss@8.4.41) - '@csstools/postcss-scope-pseudo-class': 4.0.0(postcss@8.4.41) - '@csstools/postcss-stepped-value-functions': 4.0.1(postcss@8.4.41) - '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.4.41) - '@csstools/postcss-trigonometric-functions': 4.0.1(postcss@8.4.41) - '@csstools/postcss-unset-value': 4.0.0(postcss@8.4.41) - autoprefixer: 10.4.20(postcss@8.4.41) + postcss-preset-env@10.0.2(postcss@8.4.43): + dependencies: + '@csstools/postcss-cascade-layers': 5.0.0(postcss@8.4.43) + '@csstools/postcss-color-function': 4.0.2(postcss@8.4.43) + '@csstools/postcss-color-mix-function': 3.0.2(postcss@8.4.43) + '@csstools/postcss-content-alt-text': 2.0.1(postcss@8.4.43) + '@csstools/postcss-exponential-functions': 2.0.1(postcss@8.4.43) + '@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.4.43) + '@csstools/postcss-gamut-mapping': 2.0.2(postcss@8.4.43) + '@csstools/postcss-gradients-interpolation-method': 5.0.2(postcss@8.4.43) + '@csstools/postcss-hwb-function': 4.0.2(postcss@8.4.43) + '@csstools/postcss-ic-unit': 4.0.0(postcss@8.4.43) + '@csstools/postcss-initial': 2.0.0(postcss@8.4.43) + '@csstools/postcss-is-pseudo-class': 5.0.0(postcss@8.4.43) + '@csstools/postcss-light-dark-function': 2.0.2(postcss@8.4.43) + '@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.4.43) + '@csstools/postcss-logical-overflow': 2.0.0(postcss@8.4.43) + '@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.4.43) + '@csstools/postcss-logical-resize': 3.0.0(postcss@8.4.43) + '@csstools/postcss-logical-viewport-units': 3.0.1(postcss@8.4.43) + '@csstools/postcss-media-minmax': 2.0.1(postcss@8.4.43) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.1(postcss@8.4.43) + '@csstools/postcss-nested-calc': 4.0.0(postcss@8.4.43) + '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.4.43) + '@csstools/postcss-oklab-function': 4.0.2(postcss@8.4.43) + '@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.4.43) + '@csstools/postcss-relative-color-syntax': 3.0.2(postcss@8.4.43) + '@csstools/postcss-scope-pseudo-class': 4.0.0(postcss@8.4.43) + '@csstools/postcss-stepped-value-functions': 4.0.1(postcss@8.4.43) + '@csstools/postcss-text-decoration-shorthand': 4.0.1(postcss@8.4.43) + '@csstools/postcss-trigonometric-functions': 4.0.1(postcss@8.4.43) + '@csstools/postcss-unset-value': 4.0.0(postcss@8.4.43) + autoprefixer: 10.4.20(postcss@8.4.43) browserslist: 4.23.3 - css-blank-pseudo: 7.0.0(postcss@8.4.41) - css-has-pseudo: 7.0.0(postcss@8.4.41) - css-prefers-color-scheme: 10.0.0(postcss@8.4.41) + css-blank-pseudo: 7.0.0(postcss@8.4.43) + css-has-pseudo: 7.0.0(postcss@8.4.43) + css-prefers-color-scheme: 10.0.0(postcss@8.4.43) cssdb: 8.1.0 - postcss: 8.4.41 - postcss-attribute-case-insensitive: 7.0.0(postcss@8.4.41) - postcss-clamp: 4.1.0(postcss@8.4.41) - postcss-color-functional-notation: 7.0.2(postcss@8.4.41) - postcss-color-hex-alpha: 10.0.0(postcss@8.4.41) - postcss-color-rebeccapurple: 10.0.0(postcss@8.4.41) - postcss-custom-media: 11.0.1(postcss@8.4.41) - postcss-custom-properties: 14.0.1(postcss@8.4.41) - postcss-custom-selectors: 8.0.1(postcss@8.4.41) - postcss-dir-pseudo-class: 9.0.0(postcss@8.4.41) - postcss-double-position-gradients: 6.0.0(postcss@8.4.41) - postcss-focus-visible: 10.0.0(postcss@8.4.41) - postcss-focus-within: 9.0.0(postcss@8.4.41) - postcss-font-variant: 5.0.0(postcss@8.4.41) - postcss-gap-properties: 6.0.0(postcss@8.4.41) - postcss-image-set-function: 7.0.0(postcss@8.4.41) - postcss-lab-function: 7.0.2(postcss@8.4.41) - postcss-logical: 8.0.0(postcss@8.4.41) - postcss-nesting: 13.0.0(postcss@8.4.41) - postcss-opacity-percentage: 2.0.0(postcss@8.4.41) - postcss-overflow-shorthand: 6.0.0(postcss@8.4.41) - postcss-page-break: 3.0.4(postcss@8.4.41) - postcss-place: 10.0.0(postcss@8.4.41) - postcss-pseudo-class-any-link: 10.0.0(postcss@8.4.41) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.41) - postcss-selector-not: 8.0.0(postcss@8.4.41) - - postcss-pseudo-class-any-link@10.0.0(postcss@8.4.41): - dependencies: - postcss: 8.4.41 + postcss: 8.4.43 + postcss-attribute-case-insensitive: 7.0.0(postcss@8.4.43) + postcss-clamp: 4.1.0(postcss@8.4.43) + postcss-color-functional-notation: 7.0.2(postcss@8.4.43) + postcss-color-hex-alpha: 10.0.0(postcss@8.4.43) + postcss-color-rebeccapurple: 10.0.0(postcss@8.4.43) + postcss-custom-media: 11.0.1(postcss@8.4.43) + postcss-custom-properties: 14.0.1(postcss@8.4.43) + postcss-custom-selectors: 8.0.1(postcss@8.4.43) + postcss-dir-pseudo-class: 9.0.0(postcss@8.4.43) + postcss-double-position-gradients: 6.0.0(postcss@8.4.43) + postcss-focus-visible: 10.0.0(postcss@8.4.43) + postcss-focus-within: 9.0.0(postcss@8.4.43) + postcss-font-variant: 5.0.0(postcss@8.4.43) + postcss-gap-properties: 6.0.0(postcss@8.4.43) + postcss-image-set-function: 7.0.0(postcss@8.4.43) + postcss-lab-function: 7.0.2(postcss@8.4.43) + postcss-logical: 8.0.0(postcss@8.4.43) + postcss-nesting: 13.0.0(postcss@8.4.43) + postcss-opacity-percentage: 2.0.0(postcss@8.4.43) + postcss-overflow-shorthand: 6.0.0(postcss@8.4.43) + postcss-page-break: 3.0.4(postcss@8.4.43) + postcss-place: 10.0.0(postcss@8.4.43) + postcss-pseudo-class-any-link: 10.0.0(postcss@8.4.43) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.43) + postcss-selector-not: 8.0.0(postcss@8.4.43) + + postcss-pseudo-class-any-link@10.0.0(postcss@8.4.43): + dependencies: + postcss: 8.4.43 postcss-selector-parser: 6.1.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.4.41): + postcss-replace-overflow-wrap@4.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 - postcss-selector-not@8.0.0(postcss@8.4.41): + postcss-selector-not@8.0.0(postcss@8.4.43): dependencies: - postcss: 8.4.41 + postcss: 8.4.43 postcss-selector-parser: 6.1.0 postcss-selector-parser@6.1.0: @@ -16726,13 +15868,13 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.41: + postcss@8.4.43: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 source-map-js: 1.2.0 - preact-render-to-string@6.5.9(preact@10.23.2): + preact-render-to-string@6.5.10(preact@10.23.2): dependencies: preact: 10.23.2 @@ -16783,34 +15925,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 +15967,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 @@ -16897,13 +16017,13 @@ snapshots: hast-util-from-html: 2.0.2 unified: 11.0.5 - rehype-pretty-code@0.13.2(shiki@1.14.1): + rehype-pretty-code@0.14.0(shiki@1.16.1): dependencies: '@types/hast': 3.0.4 hast-util-to-string: 3.0.0 parse-numeric-range: 1.3.0 rehype-parse: 9.0.0 - shiki: 1.14.1 + shiki: 1.16.1 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -17084,30 +16204,26 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup@4.21.1: + rollup@4.21.2: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.1 - '@rollup/rollup-android-arm64': 4.21.1 - '@rollup/rollup-darwin-arm64': 4.21.1 - '@rollup/rollup-darwin-x64': 4.21.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.1 - '@rollup/rollup-linux-arm-musleabihf': 4.21.1 - '@rollup/rollup-linux-arm64-gnu': 4.21.1 - '@rollup/rollup-linux-arm64-musl': 4.21.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.1 - '@rollup/rollup-linux-riscv64-gnu': 4.21.1 - '@rollup/rollup-linux-s390x-gnu': 4.21.1 - '@rollup/rollup-linux-x64-gnu': 4.21.1 - '@rollup/rollup-linux-x64-musl': 4.21.1 - '@rollup/rollup-win32-arm64-msvc': 4.21.1 - '@rollup/rollup-win32-ia32-msvc': 4.21.1 - '@rollup/rollup-win32-x64-msvc': 4.21.1 + '@rollup/rollup-android-arm-eabi': 4.21.2 + '@rollup/rollup-android-arm64': 4.21.2 + '@rollup/rollup-darwin-arm64': 4.21.2 + '@rollup/rollup-darwin-x64': 4.21.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.2 + '@rollup/rollup-linux-arm-musleabihf': 4.21.2 + '@rollup/rollup-linux-arm64-gnu': 4.21.2 + '@rollup/rollup-linux-arm64-musl': 4.21.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2 + '@rollup/rollup-linux-riscv64-gnu': 4.21.2 + '@rollup/rollup-linux-s390x-gnu': 4.21.2 + '@rollup/rollup-linux-x64-gnu': 4.21.2 + '@rollup/rollup-linux-x64-musl': 4.21.2 + '@rollup/rollup-win32-arm64-msvc': 4.21.2 + '@rollup/rollup-win32-ia32-msvc': 4.21.2 + '@rollup/rollup-win32-x64-msvc': 4.21.2 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -17185,30 +16301,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: @@ -17265,18 +16359,12 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 5.2.0 - shiki@1.14.1: + shiki@1.16.1: dependencies: - '@shikijs/core': 1.14.1 + '@shikijs/core': 1.16.1 + '@shikijs/vscode-textmate': 9.2.0 '@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: {} @@ -17332,7 +16420,7 @@ snapshots: dependencies: '@babel/generator': 7.25.5 '@babel/helper-module-imports': 7.24.7 - '@babel/types': 7.25.4 + '@babel/types': 7.25.6 solid-js: 1.8.22 transitivePeerDependencies: - supports-color @@ -17390,10 +16478,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 @@ -17522,11 +16606,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.41 - postcss-import: 15.1.0(postcss@8.4.41) - postcss-js: 4.0.1(postcss@8.4.41) - postcss-load-config: 4.0.2(postcss@8.4.41) - postcss-nested: 6.0.1(postcss@8.4.41) + postcss: 8.4.43 + postcss-import: 15.1.0(postcss@8.4.43) + postcss-js: 4.0.1(postcss@8.4.43) + postcss-load-config: 4.0.2(postcss@8.4.43) + postcss-nested: 6.0.1(postcss@8.4.43) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -17618,7 +16702,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfck@3.1.1(typescript@5.5.4): + tsconfck@3.1.3(typescript@5.5.4): optionalDependencies: typescript: 5.5.4 @@ -17626,32 +16710,32 @@ snapshots: tslib@2.6.2: {} - turbo-darwin-64@2.1.0: + turbo-darwin-64@2.1.1: optional: true - turbo-darwin-arm64@2.1.0: + turbo-darwin-arm64@2.1.1: optional: true - turbo-linux-64@2.1.0: + turbo-linux-64@2.1.1: optional: true - turbo-linux-arm64@2.1.0: + turbo-linux-arm64@2.1.1: optional: true - turbo-windows-64@2.1.0: + turbo-windows-64@2.1.1: optional: true - turbo-windows-arm64@2.1.0: + turbo-windows-arm64@2.1.1: optional: true - turbo@2.1.0: + turbo@2.1.1: optionalDependencies: - turbo-darwin-64: 2.1.0 - turbo-darwin-arm64: 2.1.0 - turbo-linux-64: 2.1.0 - turbo-linux-arm64: 2.1.0 - turbo-windows-64: 2.1.0 - turbo-windows-arm64: 2.1.0 + turbo-darwin-64: 2.1.1 + turbo-darwin-arm64: 2.1.1 + turbo-linux-64: 2.1.1 + turbo-linux-arm64: 2.1.1 + turbo-windows-64: 2.1.1 + turbo-windows-arm64: 2.1.1 type-check@0.4.0: dependencies: @@ -17668,7 +16752,7 @@ snapshots: types-react-dom@19.0.0-alpha.3: dependencies: - '@types/react': 18.3.4 + '@types/react': 18.3.5 types-react@19.0.0-alpha.3: dependencies: @@ -17799,8 +16883,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 +16902,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 @@ -17867,10 +16945,10 @@ snapshots: - supports-color - terser - vite-plugin-inspect@0.8.5(rollup@4.21.1)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8)): + vite-plugin-inspect@0.8.5(rollup@4.21.2)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.21.1) + '@rollup/pluginutils': 5.1.0(rollup@4.21.2) debug: 4.3.6 error-stack-parser-es: 0.1.5 fs-extra: 11.2.0 @@ -17896,7 +16974,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.3.9(rollup@4.21.1)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)): + vite-plugin-vue-devtools@7.3.9(rollup@4.21.2)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)): dependencies: '@vue/devtools-core': 7.3.9(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8))(vue@3.4.38(typescript@5.5.4)) '@vue/devtools-kit': 7.3.9 @@ -17904,7 +16982,7 @@ snapshots: execa: 8.0.1 sirv: 2.0.4 vite: 5.4.2(@types/node@18.19.31)(sass@1.77.8) - vite-plugin-inspect: 0.8.5(rollup@4.21.1)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8)) + vite-plugin-inspect: 0.8.5(rollup@4.21.2)(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8)) vite-plugin-vue-inspector: 5.1.3(vite@5.4.2(@types/node@18.19.31)(sass@1.77.8)) transitivePeerDependencies: - '@nuxt/kit' @@ -17935,8 +17013,8 @@ snapshots: vite@5.4.2(@types/node@18.19.31)(sass@1.77.8): dependencies: esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.21.1 + postcss: 8.4.43 + rollup: 4.21.2 optionalDependencies: '@types/node': 18.19.31 fsevents: 2.3.3 @@ -18114,8 +17192,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 +17240,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 +17256,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: {} diff --git a/scripts/package.json b/scripts/package.json index bbf3e970606ed..bb939b2782dc7 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -14,6 +14,6 @@ "kleur": "^4.1.5", "p-limit": "^6.1.0", "tinyexec": "^0.3.0", - "tsconfck": "^3.1.1" + "tsconfck": "^3.1.3" } }