diff --git a/.changeset/curly-mails-lie.md b/.changeset/curly-mails-lie.md deleted file mode 100644 index 70f57323fd3d..000000000000 --- a/.changeset/curly-mails-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fix dev routing for `server:defer` islands when adapters opt into handling prerendered routes in Astro core. Server island requests are now treated as prerender-handler eligible so prerendered pages using `prerenderEnvironment: 'node'` can load island content without `400` errors. diff --git a/.changeset/fair-buttons-float.md b/.changeset/fair-buttons-float.md deleted file mode 100644 index f23f307d54a8..000000000000 --- a/.changeset/fair-buttons-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fixes `astro:actions` validation to check resolved routes, so projects using default static output with at least one `prerender = false` page or endpoint no longer fail during startup. diff --git a/.changeset/fair-points-raise.md b/.changeset/fair-points-raise.md deleted file mode 100644 index aab0298e9d1a..000000000000 --- a/.changeset/fair-points-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Avoid a `MaxListenersExceededWarning` during `astro dev` startup by increasing the shared Vite watcher listener limit when attaching content server listeners. diff --git a/.changeset/few-houses-dance.md b/.changeset/few-houses-dance.md deleted file mode 100644 index d0bf72bde5c0..000000000000 --- a/.changeset/few-houses-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@astrojs/preact': patch ---- - -Fix `useId()` collisions across multiple Astro islands by seeding a unique per-island root mask for Preact SSR and hydration. diff --git a/.changeset/fix-before-hydration-client.md b/.changeset/fix-before-hydration-client.md deleted file mode 100644 index 0c2d37e862d8..000000000000 --- a/.changeset/fix-before-hydration-client.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Emit the `before-hydration` script chunk for the `client` Vite environment. The chunk was only emitted for `prerender` and `ssr` environments, causing a 404 when browsers tried to load it. This broke hydration for any integration using `injectScript('before-hydration', ...)`, including Lit SSR. diff --git a/.changeset/green-forks-laugh.md b/.changeset/green-forks-laugh.md new file mode 100644 index 000000000000..1bd99ddf2e05 --- /dev/null +++ b/.changeset/green-forks-laugh.md @@ -0,0 +1,6 @@ +--- +'@astrojs/language-server': patch +'astro-vscode': patch +--- + +Fixes completions sometimes not working inside the `href` attribute diff --git a/.changeset/odd-bears-chew.md b/.changeset/odd-bears-chew.md deleted file mode 100644 index 6aa6c434c7b4..000000000000 --- a/.changeset/odd-bears-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Ensure custom prerenderers are always torn down during build, even when `getStaticPaths()` throws. diff --git a/.changeset/polite-poets-push.md b/.changeset/polite-poets-push.md deleted file mode 100644 index b115cd83646c..000000000000 --- a/.changeset/polite-poets-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fixes an issue where the build incorrectly leaked server entrypoint into the client environment, causing adapters to emit warnings during the build. diff --git a/.changeset/script-style-expression-highlighting.md b/.changeset/script-style-expression-highlighting.md new file mode 100644 index 000000000000..ea9c119032bb --- /dev/null +++ b/.changeset/script-style-expression-highlighting.md @@ -0,0 +1,5 @@ +--- +'astro-vscode': patch +--- + +Fix syntax highlighting for script and style tags inside expressions (e.g. ternaries and logical operators) diff --git a/.changeset/slick-pans-smash.md b/.changeset/slick-pans-smash.md deleted file mode 100644 index f07d114e378d..000000000000 --- a/.changeset/slick-pans-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fixes JSON schema generation for content collection schemas that have differences between their input and output shapes. diff --git a/.changeset/small-jeans-whisper.md b/.changeset/small-jeans-whisper.md deleted file mode 100644 index 8fa739b57a38..000000000000 --- a/.changeset/small-jeans-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'astro': patch ---- - -Fix `Astro.url.pathname` for the root page when using `build.format: "file"` so it resolves to `/index.html` instead of `/.html` during builds. diff --git a/.changeset/soft-lamps-warn.md b/.changeset/soft-lamps-warn.md deleted file mode 100644 index 9c5459d23bb6..000000000000 --- a/.changeset/soft-lamps-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'create-astro': patch ---- - -Avoid spawning package manager commands with `shell: true` to prevent Node.js DEP0190 warnings during `create-astro` runs on newer Node versions. diff --git a/.changeset/tame-phones-run.md b/.changeset/tame-phones-run.md deleted file mode 100644 index 138ab8c741bf..000000000000 --- a/.changeset/tame-phones-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@astrojs/check': patch ---- - -Fixes Astro not being able to find astro check sometimes diff --git a/.changeset/ten-rats-wave.md b/.changeset/ten-rats-wave.md deleted file mode 100644 index 884a6c608e81..000000000000 --- a/.changeset/ten-rats-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@astrojs/cloudflare': patch ---- - -Include workerd response details in Cloudflare prerenderer errors to make `getStaticPaths()` failures easier to diagnose. diff --git a/.changeset/wet-cases-grow.md b/.changeset/wet-cases-grow.md deleted file mode 100644 index bd7d347d6649..000000000000 --- a/.changeset/wet-cases-grow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@astrojs/language-server': patch -'astro-vscode': patch ---- - -Updates Volar services to 0.0.70. This updates notably mean that the transitive dependency yaml-language-server no longer depends on a vulnerable version of lodash, causing warnings to show when installing the language server. diff --git a/examples/basics/package.json b/examples/basics/package.json index f088a3ecf20b..17d131bd0789 100644 --- a/examples/basics/package.json +++ b/examples/basics/package.json @@ -13,6 +13,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^6.0.4" + "astro": "^6.0.5" } } diff --git a/examples/blog/package.json b/examples/blog/package.json index aa255b1411b5..e4baef57a5d0 100644 --- a/examples/blog/package.json +++ b/examples/blog/package.json @@ -13,10 +13,10 @@ "astro": "astro" }, "dependencies": { - "@astrojs/mdx": "^5.0.0", + "@astrojs/mdx": "^5.0.1", "@astrojs/rss": "^4.0.17", "@astrojs/sitemap": "^3.7.1", - "astro": "^6.0.4", + "astro": "^6.0.5", "sharp": "^0.34.3" } } diff --git a/examples/component/package.json b/examples/component/package.json index f23dea398e4d..9675b4ac3826 100644 --- a/examples/component/package.json +++ b/examples/component/package.json @@ -18,7 +18,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^6.0.4" + "astro": "^6.0.5" }, "peerDependencies": { "astro": "^5.0.0 || ^6.0.0" diff --git a/examples/container-with-vitest/package.json b/examples/container-with-vitest/package.json index 4679f4ae7ba1..0c973a913af4 100644 --- a/examples/container-with-vitest/package.json +++ b/examples/container-with-vitest/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@astrojs/react": "^5.0.0", - "astro": "^6.0.4", + "astro": "^6.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", "vitest": "^3.2.4" diff --git a/examples/framework-alpine/package.json b/examples/framework-alpine/package.json index 669279fb0ad4..afba715913c2 100644 --- a/examples/framework-alpine/package.json +++ b/examples/framework-alpine/package.json @@ -16,6 +16,6 @@ "@astrojs/alpinejs": "^0.5.0", "@types/alpinejs": "^3.13.11", "alpinejs": "^3.15.8", - "astro": "^6.0.4" + "astro": "^6.0.5" } } diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json index fe4ccf8e8c73..f20ec0c8d487 100644 --- a/examples/framework-multiple/package.json +++ b/examples/framework-multiple/package.json @@ -13,14 +13,14 @@ "astro": "astro" }, "dependencies": { - "@astrojs/preact": "^5.0.0", + "@astrojs/preact": "^5.0.1", "@astrojs/react": "^5.0.0", "@astrojs/solid-js": "^6.0.0", - "@astrojs/svelte": "^8.0.0", - "@astrojs/vue": "^6.0.0", + "@astrojs/svelte": "^8.0.1", + "@astrojs/vue": "^6.0.1", "@types/react": "^18.3.28", "@types/react-dom": "^18.3.7", - "astro": "^6.0.4", + "astro": "^6.0.5", "preact": "^10.28.4", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/examples/framework-preact/package.json b/examples/framework-preact/package.json index 5a814ae159ed..5fb0a9cf7b3e 100644 --- a/examples/framework-preact/package.json +++ b/examples/framework-preact/package.json @@ -13,9 +13,9 @@ "astro": "astro" }, "dependencies": { - "@astrojs/preact": "^5.0.0", + "@astrojs/preact": "^5.0.1", "@preact/signals": "^2.8.1", - "astro": "^6.0.4", + "astro": "^6.0.5", "preact": "^10.28.4" } } diff --git a/examples/framework-react/package.json b/examples/framework-react/package.json index e1fdf588ec20..ce357e9f4e20 100644 --- a/examples/framework-react/package.json +++ b/examples/framework-react/package.json @@ -16,7 +16,7 @@ "@astrojs/react": "^5.0.0", "@types/react": "^18.3.28", "@types/react-dom": "^18.3.7", - "astro": "^6.0.4", + "astro": "^6.0.5", "react": "^18.3.1", "react-dom": "^18.3.1" } diff --git a/examples/framework-solid/package.json b/examples/framework-solid/package.json index 26d3231ab462..441d925d6efd 100644 --- a/examples/framework-solid/package.json +++ b/examples/framework-solid/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@astrojs/solid-js": "^6.0.0", - "astro": "^6.0.4", + "astro": "^6.0.5", "solid-js": "^1.9.11" } } diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json index 9d2439dc39b4..8943aef382a2 100644 --- a/examples/framework-svelte/package.json +++ b/examples/framework-svelte/package.json @@ -13,8 +13,8 @@ "astro": "astro" }, "dependencies": { - "@astrojs/svelte": "^8.0.0", - "astro": "^6.0.4", + "@astrojs/svelte": "^8.0.1", + "astro": "^6.0.5", "svelte": "^5.53.5" } } diff --git a/examples/framework-vue/package.json b/examples/framework-vue/package.json index 2882907ec483..1b3176c548b8 100644 --- a/examples/framework-vue/package.json +++ b/examples/framework-vue/package.json @@ -13,8 +13,8 @@ "astro": "astro" }, "dependencies": { - "@astrojs/vue": "^6.0.0", - "astro": "^6.0.4", + "@astrojs/vue": "^6.0.1", + "astro": "^6.0.5", "vue": "^3.5.29" } } diff --git a/examples/hackernews/package.json b/examples/hackernews/package.json index 0ace824df9ba..5de90b288f89 100644 --- a/examples/hackernews/package.json +++ b/examples/hackernews/package.json @@ -13,7 +13,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/node": "^10.0.1", - "astro": "^6.0.4" + "@astrojs/node": "^10.0.2", + "astro": "^6.0.5" } } diff --git a/examples/integration/package.json b/examples/integration/package.json index 71847c80e03a..bbc3d41ba473 100644 --- a/examples/integration/package.json +++ b/examples/integration/package.json @@ -18,7 +18,7 @@ ], "scripts": {}, "devDependencies": { - "astro": "^6.0.4" + "astro": "^6.0.5" }, "peerDependencies": { "astro": "^4.0.0" diff --git a/examples/minimal/package.json b/examples/minimal/package.json index 75bbb46ed22c..982f5440952a 100644 --- a/examples/minimal/package.json +++ b/examples/minimal/package.json @@ -13,6 +13,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^6.0.4" + "astro": "^6.0.5" } } diff --git a/examples/portfolio/package.json b/examples/portfolio/package.json index 3c11a0c0bd83..2b0f55bb64a0 100644 --- a/examples/portfolio/package.json +++ b/examples/portfolio/package.json @@ -13,6 +13,6 @@ "astro": "astro" }, "dependencies": { - "astro": "^6.0.4" + "astro": "^6.0.5" } } diff --git a/examples/ssr/package.json b/examples/ssr/package.json index 026ed8ba93ca..85fc2a063d24 100644 --- a/examples/ssr/package.json +++ b/examples/ssr/package.json @@ -14,9 +14,9 @@ "server": "node dist/server/entry.mjs" }, "dependencies": { - "@astrojs/node": "^10.0.1", - "@astrojs/svelte": "^8.0.0", - "astro": "^6.0.4", + "@astrojs/node": "^10.0.2", + "@astrojs/svelte": "^8.0.1", + "astro": "^6.0.5", "svelte": "^5.53.5" } } diff --git a/examples/starlog/package.json b/examples/starlog/package.json index 89754a55da07..3f4ffd994cda 100644 --- a/examples/starlog/package.json +++ b/examples/starlog/package.json @@ -9,7 +9,7 @@ "astro": "astro" }, "dependencies": { - "astro": "^6.0.4", + "astro": "^6.0.5", "sass": "^1.97.3", "sharp": "^0.34.3" }, diff --git a/examples/toolbar-app/package.json b/examples/toolbar-app/package.json index 74229754e697..61e75473d4f2 100644 --- a/examples/toolbar-app/package.json +++ b/examples/toolbar-app/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@types/node": "^18.17.8", - "astro": "^6.0.4" + "astro": "^6.0.5" }, "engines": { "node": ">=22.12.0" diff --git a/examples/with-markdoc/package.json b/examples/with-markdoc/package.json index 2fa47df5dafd..e4c97d99ea1d 100644 --- a/examples/with-markdoc/package.json +++ b/examples/with-markdoc/package.json @@ -13,7 +13,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/markdoc": "^1.0.0", - "astro": "^6.0.4" + "@astrojs/markdoc": "^1.0.1", + "astro": "^6.0.5" } } diff --git a/examples/with-mdx/package.json b/examples/with-mdx/package.json index 8b1b5c2bde1c..b521d8bb9491 100644 --- a/examples/with-mdx/package.json +++ b/examples/with-mdx/package.json @@ -13,9 +13,9 @@ "astro": "astro" }, "dependencies": { - "@astrojs/mdx": "^5.0.0", - "@astrojs/preact": "^5.0.0", - "astro": "^6.0.4", + "@astrojs/mdx": "^5.0.1", + "@astrojs/preact": "^5.0.1", + "astro": "^6.0.5", "preact": "^10.28.4" } } diff --git a/examples/with-nanostores/package.json b/examples/with-nanostores/package.json index bc5ae95ffdd4..b669520a7d07 100644 --- a/examples/with-nanostores/package.json +++ b/examples/with-nanostores/package.json @@ -13,9 +13,9 @@ "astro": "astro" }, "dependencies": { - "@astrojs/preact": "^5.0.0", + "@astrojs/preact": "^5.0.1", "@nanostores/preact": "^1.0.0", - "astro": "^6.0.4", + "astro": "^6.0.5", "nanostores": "^1.1.1", "preact": "^10.28.4" } diff --git a/examples/with-tailwindcss/package.json b/examples/with-tailwindcss/package.json index d0f49fac0d2f..81fc91b73461 100644 --- a/examples/with-tailwindcss/package.json +++ b/examples/with-tailwindcss/package.json @@ -13,10 +13,10 @@ "astro": "astro" }, "dependencies": { - "@astrojs/mdx": "^5.0.0", + "@astrojs/mdx": "^5.0.1", "@tailwindcss/vite": "^4.2.1", "@types/canvas-confetti": "^1.9.0", - "astro": "^6.0.4", + "astro": "^6.0.5", "canvas-confetti": "^1.9.4", "tailwindcss": "^4.2.1" } diff --git a/examples/with-vitest/package.json b/examples/with-vitest/package.json index ff1167715ca3..4761f30b41f3 100644 --- a/examples/with-vitest/package.json +++ b/examples/with-vitest/package.json @@ -14,7 +14,7 @@ "test": "vitest" }, "dependencies": { - "astro": "^6.0.4", + "astro": "^6.0.5", "vitest": "^3.2.4" } } diff --git a/package.json b/package.json index 08ec341971c9..1dc0d42c5d7c 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "prettier-plugin-astro": "^0.14.1", "publint": "^0.3.17", "tinyglobby": "^0.2.15", - "turbo": "^2.8.11", + "turbo": "^2.8.15", "typescript": "~5.9.3", "typescript-eslint": "^8.56.1", "valibot": "^1.2.0" diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index 95ad8a961879..574b420831d8 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,29 @@ # astro +## 6.0.5 + +### Patch Changes + +- [#15891](https://github.com/withastro/astro/pull/15891) [`b889231`](https://github.com/withastro/astro/commit/b88923114e3cfe30c945680a62c7bd7f667bbf4d) Thanks [@matthewp](https://github.com/matthewp)! - Fix dev routing for `server:defer` islands when adapters opt into handling prerendered routes in Astro core. Server island requests are now treated as prerender-handler eligible so prerendered pages using `prerenderEnvironment: 'node'` can load island content without `400` errors. + +- [#15890](https://github.com/withastro/astro/pull/15890) [`765a887`](https://github.com/withastro/astro/commit/765a8871ed5fb30bb0211e2f8524bd97081acbca) Thanks [@matthewp](https://github.com/matthewp)! - Fixes `astro:actions` validation to check resolved routes, so projects using default static output with at least one `prerender = false` page or endpoint no longer fail during startup. + +- [#15884](https://github.com/withastro/astro/pull/15884) [`dcd2c8e`](https://github.com/withastro/astro/commit/dcd2c8e2df88ad81a027b49f6f9dcdba614f836a) Thanks [@matthewp](https://github.com/matthewp)! - Avoid a `MaxListenersExceededWarning` during `astro dev` startup by increasing the shared Vite watcher listener limit when attaching content server listeners. + +- [#15904](https://github.com/withastro/astro/pull/15904) [`23d5244`](https://github.com/withastro/astro/commit/23d5244361f9452c1d124600d2cc97aa3fe4a63c) Thanks [@jlukic](https://github.com/jlukic)! - Emit the `before-hydration` script chunk for the `client` Vite environment. The chunk was only emitted for `prerender` and `ssr` environments, causing a 404 when browsers tried to load it. This broke hydration for any integration using `injectScript('before-hydration', ...)`, including Lit SSR. + +- [#15933](https://github.com/withastro/astro/pull/15933) [`325901e`](https://github.com/withastro/astro/commit/325901e623462babd8d07ba7527e141e08ef1901) Thanks [@ematipico](https://github.com/ematipico)! - Fixes an issue where ` + diff --git a/packages/astro/test/fixtures/csp/src/pages/svg.astro b/packages/astro/test/fixtures/csp/src/pages/svg.astro new file mode 100644 index 000000000000..488a99c7c503 --- /dev/null +++ b/packages/astro/test/fixtures/csp/src/pages/svg.astro @@ -0,0 +1,17 @@ +--- +import Icon from "../assets/test.svg" +--- + + + + + + Image CSP Test + + +
+

Image with layout

+ +
+ + diff --git a/packages/astro/test/units/build/server-islands.test.js b/packages/astro/test/units/build/server-islands.test.js index 56a9cfdd15d1..319ff88a0075 100644 --- a/packages/astro/test/units/build/server-islands.test.js +++ b/packages/astro/test/units/build/server-islands.test.js @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { promises as fs } from 'node:fs'; import path from 'node:path'; import { describe, it } from 'node:test'; -import { fileURLToPath } from 'node:url'; +import { fileURLToPath, pathToFileURL } from 'node:url'; import { AstroBuilder } from '../../../dist/core/build/index.js'; import { parseRoute } from '../../../dist/core/routing/parse-route.js'; import { createBasicSettings, defaultLogger } from '../test-utils.js'; @@ -22,6 +22,25 @@ async function readFilesRecursive(dir) { return files.flat(); } +function forceDoubleQuotedServerIslandPlaceholders() { + return { + name: 'force-double-quoted-server-island-placeholders', + enforce: 'pre', + renderChunk(code) { + if (!code.includes("'$$server-islands-map$$'")) { + return; + } + + return { + code: code + .replace(/'\$\$server-islands-map\$\$'/g, () => '"$$server-islands-map$$"') + .replace(/'\$\$server-islands-name-map\$\$'/g, () => '"$$server-islands-name-map$$"'), + map: null, + }; + }, + }; +} + describe('Build: Server islands in prerendered pages', () => { it('builds successfully when server:defer is only used in prerendered pages', async () => { const root = new URL('./_temp-fixtures/', import.meta.url); @@ -115,8 +134,140 @@ describe('Build: Server islands in prerendered pages', () => { `Server island manifest should contain Island component but got:\n${manifestContent}`, ); assert.ok( - !manifestContent.includes('$$server-islands-map$$'), + /serverIslandMap\s*=\s*new Map\(/.test(manifestContent), + `Server island map should be materialized in output but got:\n${manifestContent}`, + ); + assert.ok( + /serverIslandNameMap\s*=\s*new Map\(/.test(manifestContent), + `Server island name map should be materialized in output but got:\n${manifestContent}`, + ); + assert.ok( + !manifestContent.includes('$$server-islands-map$$') && + !manifestContent.includes('$$server-islands-name-map$$'), + `Server island manifest should not include placeholders but got:\n${manifestContent}`, + ); + + assert.ok(manifestFilePath, 'Server island manifest chunk path should exist'); + const manifestModule = await import(pathToFileURL(manifestFilePath).href); + const islandLoader = manifestModule.serverIslandMap.get('Island'); + assert.equal(typeof islandLoader, 'function', 'Island loader should be a function'); + await assert.doesNotReject( + async () => islandLoader(), + 'Server island chunk import should resolve at runtime', + ); + }); + + it('replaces server island placeholders even when quote style changes in generated chunks', async () => { + const root = new URL('./_temp-fixtures/', import.meta.url); + + const settings = await createBasicSettings({ + root: fileURLToPath(root), + output: 'server', + adapter: { + name: 'test-adapter', + hooks: { + 'astro:config:done': ({ setAdapter }) => { + setAdapter({ + name: 'test-adapter', + serverEntrypoint: 'astro/app', + exports: ['manifest', 'createApp'], + supportedAstroFeatures: { + serverOutput: 'stable', + }, + adapterFeatures: { + buildOutput: 'server', + }, + }); + }, + }, + }, + vite: { + plugins: [ + virtualAstroModules(root, { + 'src/components/Island.astro': [ + '---', + '---', + '

I am a server island

', + ].join('\n'), + 'src/pages/index.astro': [ + '---', + "import Island from '../components/Island.astro';", + 'export const prerender = true;', + '---', + '', + 'Test', + '', + '', + '', + '', + ].join('\n'), + }), + forceDoubleQuotedServerIslandPlaceholders(), + ], + }, + }); + + const routesList = { + routes: [ + parseRoute('index.astro', settings, { + component: 'src/pages/index.astro', + prerender: true, + }), + ], + }; + + const { injectServerIslandRoute } = await import( + '../../../dist/core/server-islands/endpoint.js' + ); + injectServerIslandRoute(settings.config, routesList); + + process.env.ASTRO_KEY = 'eKBaVEuI7YjfanEXHuJe/pwZKKt3LkAHeMxvTU7aR0M='; + + try { + const builder = new AstroBuilder(settings, { + logger: defaultLogger, + mode: 'production', + runtimeMode: 'production', + teardownCompiler: false, + routesList, + sync: false, + }); + await builder.run(); + } finally { + delete process.env.ASTRO_KEY; + } + + const serverOutputDir = fileURLToPath(settings.config.build.server); + const outputFiles = await readFilesRecursive(serverOutputDir); + const manifestFilePath = outputFiles.find((file) => file.includes('server-island-manifest')); + const manifestContent = manifestFilePath ? await fs.readFile(manifestFilePath, 'utf-8') : null; + + assert.ok(manifestContent, 'Server island manifest chunk should be emitted'); + assert.ok( + /['"]Island['"]/.test(manifestContent), + `Server island manifest should contain Island component but got:\n${manifestContent}`, + ); + assert.ok( + /serverIslandMap\s*=\s*new Map\(/.test(manifestContent), + `Server island map should be materialized in output but got:\n${manifestContent}`, + ); + assert.ok( + /serverIslandNameMap\s*=\s*new Map\(/.test(manifestContent), + `Server island name map should be materialized in output but got:\n${manifestContent}`, + ); + assert.ok( + !manifestContent.includes('$$server-islands-map$$') && + !manifestContent.includes('$$server-islands-name-map$$'), `Server island manifest should not include placeholders but got:\n${manifestContent}`, ); + + assert.ok(manifestFilePath, 'Server island manifest chunk path should exist'); + const manifestModule = await import(pathToFileURL(manifestFilePath).href); + const islandLoader = manifestModule.serverIslandMap.get('Island'); + assert.equal(typeof islandLoader, 'function', 'Island loader should be a function'); + await assert.doesNotReject( + async () => islandLoader(), + 'Server island chunk import should resolve at runtime', + ); }); }); diff --git a/packages/create-astro/CHANGELOG.md b/packages/create-astro/CHANGELOG.md index d96bd44b2287..a07bbf7d5e84 100644 --- a/packages/create-astro/CHANGELOG.md +++ b/packages/create-astro/CHANGELOG.md @@ -1,5 +1,11 @@ # create-astro +## 5.0.1 + +### Patch Changes + +- [#15885](https://github.com/withastro/astro/pull/15885) [`817afb6`](https://github.com/withastro/astro/commit/817afb6d2217a9ed590690163e5df8d50c910ab6) Thanks [@matthewp](https://github.com/matthewp)! - Avoid spawning package manager commands with `shell: true` to prevent Node.js DEP0190 warnings during `create-astro` runs on newer Node versions. + ## 5.0.0 ### Major Changes diff --git a/packages/create-astro/package.json b/packages/create-astro/package.json index 96c955baa4e2..358f2be71f32 100644 --- a/packages/create-astro/package.json +++ b/packages/create-astro/package.json @@ -1,6 +1,6 @@ { "name": "create-astro", - "version": "5.0.0", + "version": "5.0.1", "type": "module", "author": "withastro", "license": "MIT", diff --git a/packages/integrations/cloudflare/CHANGELOG.md b/packages/integrations/cloudflare/CHANGELOG.md index edf7d85600f9..6c14e2ecc5d4 100644 --- a/packages/integrations/cloudflare/CHANGELOG.md +++ b/packages/integrations/cloudflare/CHANGELOG.md @@ -1,5 +1,18 @@ # @astrojs/cloudflare +## 13.1.2 + +### Patch Changes + +- [#15888](https://github.com/withastro/astro/pull/15888) [`925252e`](https://github.com/withastro/astro/commit/925252e8c361a169d1f4dc1e3677b96b9e815dea) Thanks [@matthewp](https://github.com/matthewp)! - Fixes a bug where dependencies imported by prerender-only `server:defer` islands could remain as bare imports in server output, causing module resolution failures in preview and Cloudflare Workers. + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + +- [#15875](https://github.com/withastro/astro/pull/15875) [`c43ef8a`](https://github.com/withastro/astro/commit/c43ef8a565564770f022bd7cf9d2fcccf5949308) Thanks [@matthewp](https://github.com/matthewp)! - Include workerd response details in Cloudflare prerenderer errors to make `getStaticPaths()` failures easier to diagnose. + +- Updated dependencies []: + - @astrojs/underscore-redirects@1.0.1 + ## 13.1.1 ### Patch Changes diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index f5f0eaae21c6..2e6d561899e9 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/cloudflare", "description": "Deploy your site to Cloudflare Workers", - "version": "13.1.1", + "version": "13.1.2", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -50,7 +50,7 @@ "vite": "^7.3.1" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0", + "astro": "^6.0.0", "wrangler": "^4.61.1" }, "devDependencies": { diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 1886b5dbd134..c94f71bacb9e 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -294,10 +294,11 @@ export default function createIntegration({ { enforce: 'post', name: '@astrojs/cloudflare:cf-externals', - applyToEnvironment: (environment) => environment.name === 'ssr', + applyToEnvironment: (environment) => + environment.name === 'ssr' || environment.name === 'prerender', config(conf) { if (conf.ssr) { - // Cloudflare does not support externalizing modules in the ssr environment + // Cloudflare does not support externalizing modules in server environments conf.ssr.external = undefined; conf.ssr.noExternal = true; } diff --git a/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/astro.config.mjs new file mode 100644 index 000000000000..8489d7d3348f --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/astro.config.mjs @@ -0,0 +1,6 @@ +import { defineConfig } from 'astro/config'; +import cloudflare from '@astrojs/cloudflare'; + +export default defineConfig({ + adapter: cloudflare(), +}); diff --git a/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/components/Island.astro b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/components/Island.astro new file mode 100644 index 000000000000..e81f7b07c0b3 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/components/Island.astro @@ -0,0 +1,7 @@ +--- +import { uneval } from 'devalue'; + +const encoded = uneval({ message: 'hello world' }); +--- + +

Encoded: {encoded}

diff --git a/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/pages/index.astro new file mode 100644 index 000000000000..892bc9336cb4 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/server-island-prerender-deps/src/pages/index.astro @@ -0,0 +1,11 @@ +--- +import Island from '../components/Island.astro'; + +export const prerender = true; +--- + + + + + + diff --git a/packages/integrations/cloudflare/test/server-island-prerender-deps.test.js b/packages/integrations/cloudflare/test/server-island-prerender-deps.test.js new file mode 100644 index 000000000000..a6111f43f540 --- /dev/null +++ b/packages/integrations/cloudflare/test/server-island-prerender-deps.test.js @@ -0,0 +1,46 @@ +import assert from 'node:assert/strict'; +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { describe, it } from 'node:test'; +import { fileURLToPath } from 'node:url'; +import { loadFixture } from './_test-utils.js'; + +async function readFilesRecursive(dir) { + const entries = await fs.readdir(dir, { withFileTypes: true }); + const files = await Promise.all( + entries.map(async (entry) => { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + return readFilesRecursive(fullPath); + } + return [fullPath]; + }), + ); + return files.flat(); +} + +describe('Cloudflare server island prerender dependencies', () => { + it('bundles third-party imports for prerender-only server islands', async () => { + const fixture = await loadFixture({ + root: './fixtures/server-island-prerender-deps/', + }); + + await fixture.build(); + + const serverOutputDir = fileURLToPath(fixture.config.build.server); + const outputFiles = await readFilesRecursive(serverOutputDir); + const islandChunkPath = outputFiles.find((file) => { + const normalized = file.replaceAll(path.sep, '/'); + return normalized.includes('/chunks/Island_') && normalized.endsWith('.mjs'); + }); + + assert.ok(islandChunkPath, 'Server island chunk should be emitted'); + + const islandChunkCode = await fs.readFile(islandChunkPath, 'utf-8'); + assert.equal( + islandChunkCode.includes("from 'devalue'") || islandChunkCode.includes('from "devalue"'), + false, + `Server island chunk should not keep bare devalue imports:\n${islandChunkCode}`, + ); + }); +}); diff --git a/packages/integrations/markdoc/CHANGELOG.md b/packages/integrations/markdoc/CHANGELOG.md index cc6ffb1f84b7..ae93a444af8b 100644 --- a/packages/integrations/markdoc/CHANGELOG.md +++ b/packages/integrations/markdoc/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/markdoc +## 1.0.1 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 1.0.0 ### Minor Changes diff --git a/packages/integrations/markdoc/package.json b/packages/integrations/markdoc/package.json index be987a6f0862..33772b42859b 100644 --- a/packages/integrations/markdoc/package.json +++ b/packages/integrations/markdoc/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/markdoc", "description": "Add support for Markdoc in your Astro site", - "version": "1.0.0", + "version": "1.0.1", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -71,7 +71,7 @@ "htmlparser2": "^10.1.0" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0" + "astro": "^6.0.0" }, "devDependencies": { "@types/markdown-it": "^14.1.2", diff --git a/packages/integrations/mdx/CHANGELOG.md b/packages/integrations/mdx/CHANGELOG.md index 1b171c74eb99..a34c6a544d3e 100644 --- a/packages/integrations/mdx/CHANGELOG.md +++ b/packages/integrations/mdx/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/mdx +## 5.0.1 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 5.0.0 ### Major Changes diff --git a/packages/integrations/mdx/package.json b/packages/integrations/mdx/package.json index d4f9e424c5a7..5a689df34acc 100644 --- a/packages/integrations/mdx/package.json +++ b/packages/integrations/mdx/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/mdx", "description": "Add support for MDX pages in your Astro site", - "version": "5.0.0", + "version": "5.0.1", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -49,7 +49,7 @@ "vfile": "^6.0.3" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0" + "astro": "^6.0.0" }, "devDependencies": { "@shikijs/rehype": "^4.0.0", diff --git a/packages/integrations/netlify/CHANGELOG.md b/packages/integrations/netlify/CHANGELOG.md index 3d3406a60305..0839c38da803 100644 --- a/packages/integrations/netlify/CHANGELOG.md +++ b/packages/integrations/netlify/CHANGELOG.md @@ -1,5 +1,14 @@ # @astrojs/netlify +## 7.0.3 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + +- Updated dependencies []: + - @astrojs/underscore-redirects@1.0.1 + ## 7.0.2 ### Patch Changes diff --git a/packages/integrations/netlify/package.json b/packages/integrations/netlify/package.json index a9c7a7cac4b8..f4a3a75092a6 100644 --- a/packages/integrations/netlify/package.json +++ b/packages/integrations/netlify/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/netlify", "description": "Deploy your site to Netlify", - "version": "7.0.2", + "version": "7.0.3", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -50,7 +50,7 @@ "vite": "^7.3.1" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0" + "astro": "^6.0.0" }, "devDependencies": { "@types/node": "^22.10.6", diff --git a/packages/integrations/node/CHANGELOG.md b/packages/integrations/node/CHANGELOG.md index 7476cf961d84..1e784c8a5b69 100644 --- a/packages/integrations/node/CHANGELOG.md +++ b/packages/integrations/node/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/node +## 10.0.2 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 10.0.1 ### Patch Changes diff --git a/packages/integrations/node/package.json b/packages/integrations/node/package.json index 5a2a5e13e319..b351cab60160 100644 --- a/packages/integrations/node/package.json +++ b/packages/integrations/node/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/node", "description": "Deploy your site to a Node.js server", - "version": "10.0.1", + "version": "10.0.2", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", @@ -38,7 +38,7 @@ "server-destroy": "^1.0.1" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0" + "astro": "^6.0.0" }, "devDependencies": { "@types/node": "^22.10.6", diff --git a/packages/integrations/preact/CHANGELOG.md b/packages/integrations/preact/CHANGELOG.md index 838f864ac366..6c0041c6d1e5 100644 --- a/packages/integrations/preact/CHANGELOG.md +++ b/packages/integrations/preact/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/preact +## 5.0.1 + +### Patch Changes + +- [#15881](https://github.com/withastro/astro/pull/15881) [`de2860c`](https://github.com/withastro/astro/commit/de2860c88c8ce500f8f747df770d3b8cc2d3c1c6) Thanks [@matthewp](https://github.com/matthewp)! - Fix `useId()` collisions across multiple Astro islands by seeding a unique per-island root mask for Preact SSR and hydration. + ## 5.0.0 ### Major Changes diff --git a/packages/integrations/preact/package.json b/packages/integrations/preact/package.json index b4c72c106f2b..2c4da81b14c2 100644 --- a/packages/integrations/preact/package.json +++ b/packages/integrations/preact/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/preact", "description": "Use Preact components within Astro", - "version": "5.0.0", + "version": "5.0.1", "type": "module", "types": "./dist/index.d.ts", "author": "withastro", diff --git a/packages/integrations/svelte/CHANGELOG.md b/packages/integrations/svelte/CHANGELOG.md index 610257038f49..459688e456f5 100644 --- a/packages/integrations/svelte/CHANGELOG.md +++ b/packages/integrations/svelte/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/svelte +## 8.0.1 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 8.0.0 ### Major Changes diff --git a/packages/integrations/svelte/package.json b/packages/integrations/svelte/package.json index cc313b53ac1e..5680d5d716c8 100644 --- a/packages/integrations/svelte/package.json +++ b/packages/integrations/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@astrojs/svelte", - "version": "8.0.0", + "version": "8.0.1", "description": "Use Svelte components within Astro", "type": "module", "types": "./dist/index.d.ts", @@ -49,7 +49,7 @@ "svelte": "^5.53.6" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0", + "astro": "^6.0.0", "svelte": "^5.43.6", "typescript": "^5.3.3" }, diff --git a/packages/integrations/vercel/CHANGELOG.md b/packages/integrations/vercel/CHANGELOG.md index 2a6f21c51c4a..73d80d0673ca 100644 --- a/packages/integrations/vercel/CHANGELOG.md +++ b/packages/integrations/vercel/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/vercel +## 10.0.1 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 10.0.0 ### Major Changes diff --git a/packages/integrations/vercel/package.json b/packages/integrations/vercel/package.json index 9dd68aac96b2..d989b8e3a577 100644 --- a/packages/integrations/vercel/package.json +++ b/packages/integrations/vercel/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/vercel", "description": "Deploy your site to Vercel", - "version": "10.0.0", + "version": "10.0.1", "type": "module", "author": "withastro", "license": "MIT", @@ -55,7 +55,7 @@ "tinyglobby": "^0.2.15" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0" + "astro": "^6.0.0" }, "devDependencies": { "astro": "workspace:*", diff --git a/packages/integrations/vue/CHANGELOG.md b/packages/integrations/vue/CHANGELOG.md index 87c7316964c8..6733d42b3731 100644 --- a/packages/integrations/vue/CHANGELOG.md +++ b/packages/integrations/vue/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/vue +## 6.0.1 + +### Patch Changes + +- [#15934](https://github.com/withastro/astro/pull/15934) [`6f8f0bc`](https://github.com/withastro/astro/commit/6f8f0bc4e22e958ccc2164acb1aa8cce21c43148) Thanks [@ematipico](https://github.com/ematipico)! - Updates the Astro `peerDependencies#astro` to be `6.0.0`. + ## 6.0.0 ### Major Changes diff --git a/packages/integrations/vue/package.json b/packages/integrations/vue/package.json index 2e6ec1d92d6e..bfeb3ac18037 100644 --- a/packages/integrations/vue/package.json +++ b/packages/integrations/vue/package.json @@ -1,6 +1,6 @@ { "name": "@astrojs/vue", - "version": "6.0.0", + "version": "6.0.1", "description": "Use Vue components within Astro", "type": "module", "types": "./dist/index.d.ts", @@ -52,7 +52,7 @@ "vue": "^3.5.29" }, "peerDependencies": { - "astro": "^6.0.0-alpha.0", + "astro": "^6.0.0", "vue": "^3.5.24" }, "engines": { diff --git a/packages/language-tools/astro-check/CHANGELOG.md b/packages/language-tools/astro-check/CHANGELOG.md index fe26b8bb3adb..c0c07912194f 100644 --- a/packages/language-tools/astro-check/CHANGELOG.md +++ b/packages/language-tools/astro-check/CHANGELOG.md @@ -1,5 +1,14 @@ # @astrojs/check +## 0.9.8 + +### Patch Changes + +- [#15892](https://github.com/withastro/astro/pull/15892) [`a2f597d`](https://github.com/withastro/astro/commit/a2f597d02c70c1d8aa4b0f88168de6a8b5f5186e) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Fixes Astro not being able to find astro check sometimes + +- Updated dependencies [[`7b4b254`](https://github.com/withastro/astro/commit/7b4b2549437eb099c5e96025dcf8d24ea56f30d0)]: + - @astrojs/language-server@2.16.5 + ## 0.9.7 ### Patch Changes diff --git a/packages/language-tools/astro-check/package.json b/packages/language-tools/astro-check/package.json index 2916604ce667..6b73c4227acf 100644 --- a/packages/language-tools/astro-check/package.json +++ b/packages/language-tools/astro-check/package.json @@ -1,7 +1,7 @@ { "name": "@astrojs/check", "description": "Type checking and diagnostics for Astro projects", - "version": "0.9.7", + "version": "0.9.8", "author": "withastro", "license": "MIT", "homepage": "https://github.com/withastro/astro/tree/main/packages/language-tools/astro-check", @@ -31,7 +31,7 @@ "test": "astro-scripts test \"**/*.test.ts\" --tsx true" }, "dependencies": { - "@astrojs/language-server": "^2.16.1", + "@astrojs/language-server": "^2.16.5", "chokidar": "^4.0.3", "kleur": "^4.1.5", "yargs": "^17.7.2" diff --git a/packages/language-tools/language-server/CHANGELOG.md b/packages/language-tools/language-server/CHANGELOG.md index 7883dc5c411b..9f3f046d8b7e 100644 --- a/packages/language-tools/language-server/CHANGELOG.md +++ b/packages/language-tools/language-server/CHANGELOG.md @@ -1,5 +1,11 @@ # @astrojs/language-server +## 2.16.5 + +### Patch Changes + +- [#15895](https://github.com/withastro/astro/pull/15895) [`7b4b254`](https://github.com/withastro/astro/commit/7b4b2549437eb099c5e96025dcf8d24ea56f30d0) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updates Volar services to 0.0.70. This updates notably mean that the transitive dependency yaml-language-server no longer depends on a vulnerable version of lodash, causing warnings to show when installing the language server. + ## 2.16.4 ### Patch Changes diff --git a/packages/language-tools/language-server/package.json b/packages/language-tools/language-server/package.json index 2e1d1aee1c8c..105350f9f2e8 100644 --- a/packages/language-tools/language-server/package.json +++ b/packages/language-tools/language-server/package.json @@ -1,6 +1,6 @@ { "name": "@astrojs/language-server", - "version": "2.16.4", + "version": "2.16.5", "author": "withastro", "license": "MIT", "repository": { diff --git a/packages/language-tools/language-server/src/plugins/html.ts b/packages/language-tools/language-server/src/plugins/html.ts index 783e2f5ab373..888f71087c1b 100644 --- a/packages/language-tools/language-server/src/plugins/html.ts +++ b/packages/language-tools/language-server/src/plugins/html.ts @@ -5,7 +5,7 @@ import * as html from 'vscode-html-languageservice'; import { URI, Utils } from 'vscode-uri'; import { AstroVirtualCode } from '../core/index.js'; import { astroAttributes, astroElements, classListAttribute } from './html-data.js'; -import { isInComponentStartTag } from './utils.js'; +import { isInComponentStartTag, isInsideExpression } from './utils.js'; export const create = (): LanguageServicePlugin => { const htmlPlugin = createHtmlService({ @@ -44,9 +44,18 @@ export const create = (): LanguageServicePlugin => { const sourceScript = decoded && context.language.scripts.get(decoded[0]); const root = sourceScript?.generated?.root; if (!(root instanceof AstroVirtualCode)) return; + const offset = document.offsetAt(position); // Don't return completions if the current node is a component - if (isInComponentStartTag(root.htmlDocument, document.offsetAt(position))) { + if (isInComponentStartTag(root.htmlDocument, offset)) { + return null; + } + + const currentNode = root.htmlDocument.findNodeAt(offset); + const sourceText = root.snapshot.getText(0, root.snapshot.getLength()); + + // Let the TypeScript service handle `{...}` expressions in HTML attributes. + if (isInsideExpression(sourceText, currentNode.start, offset)) { return null; } diff --git a/packages/language-tools/language-server/test/typescript/completions.test.ts b/packages/language-tools/language-server/test/typescript/completions.test.ts index bfd45d0f2fd7..f4366fed5e7f 100644 --- a/packages/language-tools/language-server/test/typescript/completions.test.ts +++ b/packages/language-tools/language-server/test/typescript/completions.test.ts @@ -122,4 +122,26 @@ describe('TypeScript - Completions', async () => { const allLabels = completions?.items.map((item) => item.label); assert.ok(allLabels.includes('alert')); }); + + it('Can get completions inside HTML attribute expressions', async () => { + const documents = [ + { + content: '---\nconst something = "Hello";\n---\n\nClick here', + position: Position.create(4, 13), + }, + { + content: '---\nconst something = "Hello";\n---\n\n{some}', + position: Position.create(4, 12), + }, + ]; + + for (const { content, position } of documents) { + const document = await languageServer.openFakeDocument(content, 'astro'); + const completions = await languageServer.handle.sendCompletionRequest(document.uri, position); + + const allLabels = completions?.items.map((item) => item.label); + assert.ok(allLabels); + assert.ok(allLabels.includes('something')); + } + }); }); diff --git a/packages/language-tools/vscode/CHANGELOG.md b/packages/language-tools/vscode/CHANGELOG.md index 4192d8b8dfc9..0a56f5ebd6be 100644 --- a/packages/language-tools/vscode/CHANGELOG.md +++ b/packages/language-tools/vscode/CHANGELOG.md @@ -1,5 +1,11 @@ # astro-vscode +## 2.16.12 + +### Patch Changes + +- [#15895](https://github.com/withastro/astro/pull/15895) [`7b4b254`](https://github.com/withastro/astro/commit/7b4b2549437eb099c5e96025dcf8d24ea56f30d0) Thanks [@Princesseuh](https://github.com/Princesseuh)! - Updates Volar services to 0.0.70. This updates notably mean that the transitive dependency yaml-language-server no longer depends on a vulnerable version of lodash, causing warnings to show when installing the language server. + ## 2.16.11 ### Patch Changes diff --git a/packages/language-tools/vscode/package.json b/packages/language-tools/vscode/package.json index 156e6ef95c98..ba0997d1a6bb 100644 --- a/packages/language-tools/vscode/package.json +++ b/packages/language-tools/vscode/package.json @@ -24,7 +24,7 @@ "color": "#17191E", "theme": "dark" }, - "version": "2.16.11", + "version": "2.16.12", "author": "withastro", "license": "MIT", "publisher": "astro-build", @@ -246,7 +246,7 @@ "update-grammar-snapshots": "node ./test/grammar/test.mjs --updateSnapshot" }, "devDependencies": { - "@astrojs/language-server": "^2.16.4", + "@astrojs/language-server": "^2.16.5", "@astrojs/ts-plugin": "^1.10.7", "@types/mocha": "^10.0.10", "@types/node": "^20.9.0", diff --git a/packages/language-tools/vscode/syntaxes/astro.tmLanguage.json b/packages/language-tools/vscode/syntaxes/astro.tmLanguage.json index 931508b706f3..8471d36eb862 100644 --- a/packages/language-tools/vscode/syntaxes/astro.tmLanguage.json +++ b/packages/language-tools/vscode/syntaxes/astro.tmLanguage.json @@ -3,7 +3,7 @@ "scopeName": "source.astro", "fileTypes": ["astro"], "injections": { - "L:(meta.script.astro) (meta.lang.json) - (meta source)": { + "L:(meta.script.astro) (meta.lang.json) - (meta.embedded.block source)": { "patterns": [ { "begin": "(?<=>)(?!)(?=[^\\n]+])", @@ -44,7 +44,7 @@ } ] }, - "L:(meta.script.astro) (meta.lang.ts | meta.lang.typescript) - (meta source)": { + "L:(meta.script.astro) (meta.lang.ts | meta.lang.typescript) - (meta.embedded.block source)": { "patterns": [ { "begin": "(?<=>)(?=[^\\n]+])", @@ -70,7 +70,7 @@ } ] }, - "L:meta.script.astro - meta.lang - (meta source)": { + "L:meta.script.astro - meta.lang - (meta.embedded.block source)": { "patterns": [ { "begin": "(?<=>)(?=[^\\n]+])", @@ -96,7 +96,7 @@ } ] }, - "L:meta.style.astro meta.lang.stylus - (meta source)": { + "L:meta.style.astro meta.lang.stylus - (meta.embedded.block source)": { "patterns": [ { "begin": "(?<=>)(?!)(?!)(?!)(?!)(?!)(?!)(?!.astro (meta.lang. | meta.lang. | ...) - (meta source)' + # 'L:meta..astro (meta.lang. | meta.lang. | ...) - (meta.embedded.block source)' # patterns: [{begin: '(?<=>)(?!, patterns: [{ include: source. }]}] # Style/Script Languages # JSON | 'application/ld+json' - 'L:(meta.script.astro) (meta.lang.json) - (meta source)': + 'L:(meta.script.astro) (meta.lang.json) - (meta.embedded.block source)': patterns: [ { @@ -28,7 +28,7 @@ injections: ] # JavaScript | 'javascript' | 'source.js' | 'partytown' - 'L:(meta.script.astro) (meta.lang.js | meta.lang.javascript | meta.lang.partytown | meta.lang.node) - (meta source)': + 'L:(meta.script.astro) (meta.lang.js | meta.lang.javascript | meta.lang.partytown | meta.lang.node) - (meta.embedded.block source)': patterns: [ { @@ -48,7 +48,7 @@ injections: ] # TypeScript | 'ts' - 'L:(meta.script.astro) (meta.lang.ts | meta.lang.typescript) - (meta source)': + 'L:(meta.script.astro) (meta.lang.ts | meta.lang.typescript) - (meta.embedded.block source)': patterns: [ { @@ -69,7 +69,7 @@ injections: # Script Languages # Default (JavaScript) - 'L:meta.script.astro - meta.lang - (meta source)': + 'L:meta.script.astro - meta.lang - (meta.embedded.block source)': patterns: [ { @@ -92,7 +92,7 @@ injections: # Style Languages # Stylus | 'stylus' | 'source.stylus' - 'L:meta.style.astro meta.lang.stylus - (meta source)': + 'L:meta.style.astro meta.lang.stylus - (meta.embedded.block source)': patterns: [ { @@ -105,7 +105,7 @@ injections: ] # Sass | 'sass' | 'source.sass' - 'L:meta.style.astro meta.lang.sass - (meta source)': + 'L:meta.style.astro meta.lang.sass - (meta.embedded.block source)': patterns: [ { @@ -118,7 +118,7 @@ injections: ] # CSS | 'css' | 'source.css' - 'L:meta.style.astro meta.lang.css - (meta source)': + 'L:meta.style.astro meta.lang.css - (meta.embedded.block source)': patterns: [ { @@ -131,7 +131,7 @@ injections: ] # SCSS | 'scss' | 'source.css.scss' - 'L:meta.style.astro meta.lang.scss - (meta source)': + 'L:meta.style.astro meta.lang.scss - (meta.embedded.block source)': patterns: [ { @@ -144,7 +144,7 @@ injections: ] # Less | 'less' | 'source.css.less' - 'L:meta.style.astro meta.lang.less - (meta source)': + 'L:meta.style.astro meta.lang.less - (meta.embedded.block source)': patterns: [ { @@ -157,7 +157,7 @@ injections: ] # PostCSS | 'postcss' | 'source.css.postcss' - 'L:meta.style.astro meta.lang.postcss - (meta source)': + 'L:meta.style.astro meta.lang.postcss - (meta.embedded.block source)': patterns: [ { @@ -170,7 +170,7 @@ injections: ] # Default (CSS) - 'L:meta.style.astro - meta.lang - (meta source)': + 'L:meta.style.astro - meta.lang - (meta.embedded.block source)': patterns: [ { @@ -182,6 +182,14 @@ injections: }, ] + # ---- SCRIPT/STYLE INSIDE EXPRESSIONS + # Inside expressions ({...}), content is scoped as source.tsx. We need to inject + # script/style tag handling so they get proper language injection instead of being + # treated as plain JSX elements. + 'L:meta.embedded.expression.astro - meta.embedded.block': + patterns: + - include: '#tags-lang' + # Start of grammar. patterns: - include: '#scope' diff --git a/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro b/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro new file mode 100644 index 000000000000..fe46f84e36dc --- /dev/null +++ b/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro @@ -0,0 +1,13 @@ +--- +const view = 'Gallery'; +--- + +{view === 'Gallery' ? ( + +) : null} + +{view === 'Gallery' && } diff --git a/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro.snap b/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro.snap new file mode 100644 index 000000000000..d08c7043564f --- /dev/null +++ b/packages/language-tools/vscode/test/grammar/fixtures/script/expression.astro.snap @@ -0,0 +1,42 @@ +>--- +#^^^ source.astro comment +>const view = 'Gallery'; +#^^^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.block.astro source.ts +>--- +#^^^ source.astro comment +> +>{view === 'Gallery' ? ( +#^ source.astro punctuation.section.embedded.begin.astro +# ^^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +> +#^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro +# ^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro punctuation.definition.tag.begin.astro +# ^^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro punctuation.definition.tag.end.astro +>) : null} +#^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +# ^ source.astro punctuation.section.embedded.end.astro +> +>{view === 'Gallery' && } +#^ source.astro punctuation.section.embedded.begin.astro +# ^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.start.astro punctuation.definition.tag.begin.astro +# ^^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.start.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.start.astro punctuation.definition.tag.end.astro +# ^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.embedded.block.astro source.js +# ^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro punctuation.definition.tag.begin.astro +# ^^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.script.astro meta.script.astro meta.tag.end.astro punctuation.definition.tag.end.astro +# ^ source.astro punctuation.section.embedded.end.astro +> \ No newline at end of file diff --git a/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro b/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro new file mode 100644 index 000000000000..e7a7899db47a --- /dev/null +++ b/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro @@ -0,0 +1,11 @@ +--- +const view = 'Gallery'; +--- + +{view === 'Gallery' ? ( + +) : null} + +{view === 'Gallery' && } diff --git a/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro.snap b/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro.snap new file mode 100644 index 000000000000..b65095a754fe --- /dev/null +++ b/packages/language-tools/vscode/test/grammar/fixtures/style/expression.astro.snap @@ -0,0 +1,38 @@ +>--- +#^^^ source.astro comment +>const view = 'Gallery'; +#^^^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.block.astro source.ts +>--- +#^^^ source.astro comment +> +>{view === 'Gallery' ? ( +#^ source.astro punctuation.section.embedded.begin.astro +# ^^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +> +#^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.embedded.block.astro source.css +# ^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro punctuation.definition.tag.begin.astro +# ^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro punctuation.definition.tag.end.astro +>) : null} +#^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +# ^ source.astro punctuation.section.embedded.end.astro +> +>{view === 'Gallery' && } +#^ source.astro punctuation.section.embedded.begin.astro +# ^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.start.astro punctuation.definition.tag.begin.astro +# ^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.start.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.start.astro punctuation.definition.tag.end.astro +# ^^^^^^^^^^^^^^^^^^^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.embedded.block.astro source.css +# ^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro punctuation.definition.tag.begin.astro +# ^^^^^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro entity.name.tag.astro +# ^ source.astro meta.embedded.expression.astro source.tsx meta.scope.tag.style.astro meta.style.astro meta.tag.end.astro punctuation.definition.tag.end.astro +# ^ source.astro punctuation.section.embedded.end.astro +> \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3eb644db812e..3581faeff88f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,8 +69,8 @@ importers: specifier: ^0.2.15 version: 0.2.15 turbo: - specifier: ^2.8.11 - version: 2.8.11 + specifier: ^2.8.15 + version: 2.8.15 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -189,13 +189,13 @@ importers: examples/basics: dependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/blog: dependencies: '@astrojs/mdx': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/mdx '@astrojs/rss': specifier: ^4.0.17 @@ -204,7 +204,7 @@ importers: specifier: ^3.7.1 version: link:../../packages/integrations/sitemap astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro sharp: specifier: ^0.34.3 @@ -213,7 +213,7 @@ importers: examples/component: devDependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/container-with-vitest: @@ -222,7 +222,7 @@ importers: specifier: ^5.0.0 version: link:../../packages/integrations/react astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -253,13 +253,13 @@ importers: specifier: ^3.15.8 version: 3.15.8 astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/framework-multiple: dependencies: '@astrojs/preact': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/preact '@astrojs/react': specifier: ^5.0.0 @@ -268,10 +268,10 @@ importers: specifier: ^6.0.0 version: link:../../packages/integrations/solid '@astrojs/svelte': - specifier: ^8.0.0 + specifier: ^8.0.1 version: link:../../packages/integrations/svelte '@astrojs/vue': - specifier: ^6.0.0 + specifier: ^6.0.1 version: link:../../packages/integrations/vue '@types/react': specifier: ^18.3.28 @@ -280,7 +280,7 @@ importers: specifier: ^18.3.7 version: 18.3.7(@types/react@18.3.28) astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro preact: specifier: ^10.28.4 @@ -304,13 +304,13 @@ importers: examples/framework-preact: dependencies: '@astrojs/preact': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/preact '@preact/signals': specifier: ^2.8.1 version: 2.8.1(preact@10.28.4) astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro preact: specifier: ^10.28.4 @@ -328,7 +328,7 @@ importers: specifier: ^18.3.7 version: 18.3.7(@types/react@18.3.28) astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro react: specifier: ^18.3.1 @@ -343,7 +343,7 @@ importers: specifier: ^6.0.0 version: link:../../packages/integrations/solid astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro solid-js: specifier: ^1.9.11 @@ -352,10 +352,10 @@ importers: examples/framework-svelte: dependencies: '@astrojs/svelte': - specifier: ^8.0.0 + specifier: ^8.0.1 version: link:../../packages/integrations/svelte astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro svelte: specifier: ^5.53.5 @@ -364,10 +364,10 @@ importers: examples/framework-vue: dependencies: '@astrojs/vue': - specifier: ^6.0.0 + specifier: ^6.0.1 version: link:../../packages/integrations/vue astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro vue: specifier: ^3.5.29 @@ -376,40 +376,40 @@ importers: examples/hackernews: dependencies: '@astrojs/node': - specifier: ^10.0.1 + specifier: ^10.0.2 version: link:../../packages/integrations/node astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/integration: devDependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/minimal: dependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/portfolio: dependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/ssr: dependencies: '@astrojs/node': - specifier: ^10.0.1 + specifier: ^10.0.2 version: link:../../packages/integrations/node '@astrojs/svelte': - specifier: ^8.0.0 + specifier: ^8.0.1 version: link:../../packages/integrations/svelte astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro svelte: specifier: ^5.53.5 @@ -418,7 +418,7 @@ importers: examples/starlog: dependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro sass: specifier: ^1.97.3 @@ -433,28 +433,28 @@ importers: specifier: ^18.17.8 version: 18.19.130 astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/with-markdoc: dependencies: '@astrojs/markdoc': - specifier: ^1.0.0 + specifier: ^1.0.1 version: link:../../packages/integrations/markdoc astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro examples/with-mdx: dependencies: '@astrojs/mdx': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/mdx '@astrojs/preact': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/preact astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro preact: specifier: ^10.28.4 @@ -463,13 +463,13 @@ importers: examples/with-nanostores: dependencies: '@astrojs/preact': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/preact '@nanostores/preact': specifier: ^1.0.0 version: 1.0.0(nanostores@1.1.1)(preact@10.28.4) astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro nanostores: specifier: ^1.1.1 @@ -481,7 +481,7 @@ importers: examples/with-tailwindcss: dependencies: '@astrojs/mdx': - specifier: ^5.0.0 + specifier: ^5.0.1 version: link:../../packages/integrations/mdx '@tailwindcss/vite': specifier: ^4.2.1 @@ -490,7 +490,7 @@ importers: specifier: ^1.9.0 version: 1.9.0 astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro canvas-confetti: specifier: ^1.9.4 @@ -502,7 +502,7 @@ importers: examples/with-vitest: dependencies: astro: - specifier: ^6.0.4 + specifier: ^6.0.5 version: link:../../packages/astro vitest: specifier: ^3.2.4 @@ -6720,7 +6720,7 @@ importers: packages/language-tools/astro-check: dependencies: '@astrojs/language-server': - specifier: ^2.16.1 + specifier: ^2.16.5 version: link:../language-server chokidar: specifier: ^4.0.3 @@ -6917,7 +6917,7 @@ importers: version: 0.14.1 devDependencies: '@astrojs/language-server': - specifier: ^2.16.4 + specifier: ^2.16.5 version: link:../language-server '@astrojs/ts-plugin': specifier: ^1.10.7 @@ -15219,38 +15219,38 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - turbo-darwin-64@2.8.11: - resolution: {integrity: sha512-XKaCWaz4OCt77oYYvGCIRpvYD4c/aNaKjRkUpv+e8rN3RZb+5Xsyew4yRO+gaHdMIUhQznXNXfHlhs+/p7lIhA==} + turbo-darwin-64@2.8.15: + resolution: {integrity: sha512-EElCh+Ltxex9lXYrouV3hHjKP3HFP31G91KMghpNHR/V99CkFudRcHcnWaorPbzAZizH1m8o2JkLL8rptgb8WQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.8.11: - resolution: {integrity: sha512-VvynLHGUNvQ9k7GZjRPSsRcK4VkioTfFb7O7liAk4nHKjEcMdls7GqxzjVWgJiKz3hWmQGaP9hRa9UUnhVWCxA==} + turbo-darwin-arm64@2.8.15: + resolution: {integrity: sha512-ORmvtqHiHwvNynSWvLIleyU8dKtwQ4ILk39VsEwfKSEzSHWYWYxZhBmD9GAGRPlNl7l7S1irrziBlDEGVpq+vQ==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.8.11: - resolution: {integrity: sha512-cbSn37dcm+EmkQ7DD0euy7xV7o2el4GAOr1XujvkAyKjjNvQ+6QIUeDgQcwAx3D17zPpDvfDMJY2dLQadWnkmQ==} + turbo-linux-64@2.8.15: + resolution: {integrity: sha512-Bk1E61a+PCWUTfhqfXFlhEJMLp6nak0J0Qt14IZX1og1zyaiBLkM6M1GQFbPpiWfbUcdLwRaYQhO0ySB07AJ8w==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.8.11: - resolution: {integrity: sha512-+trymp2s2aBrhS04l6qFxcExzZ8ffndevuUB9c5RCeqsVpZeiWuGQlWNm5XjOmzoMayxRARZ5ma7yiWbGMiLqQ==} + turbo-linux-arm64@2.8.15: + resolution: {integrity: sha512-3BX0Vk+XkP0uiZc8pkjQGNsAWjk5ojC53bQEMp6iuhSdWpEScEFmcT6p7DL7bcJmhP2mZ1HlAu0A48wrTGCtvg==} cpu: [arm64] os: [linux] - turbo-windows-64@2.8.11: - resolution: {integrity: sha512-3kJjFSM4yw1n9Uzmi+XkAUgCae19l/bH6RJ442xo7mnZm0tpOjo33F+FYHoSVpIWVMd0HG0LDccyafPSdylQbA==} + turbo-windows-64@2.8.15: + resolution: {integrity: sha512-m14ogunMF+grHZ1jzxSCO6q0gEfF1tmr+0LU+j1QNd/M1X33tfKnQqmpkeUR/REsGjfUlkQlh6PAzqlT3cA3Pg==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.8.11: - resolution: {integrity: sha512-JOM4uF2vuLsJUvibdR6X9QqdZr6BhC6Nhlrw4LKFPsXZZI/9HHLoqAiYRpE4MuzIwldCH/jVySnWXrI1SKto0g==} + turbo-windows-arm64@2.8.15: + resolution: {integrity: sha512-HWh6dnzhl7nu5gRwXeqP61xbyDBNmQ4UCeWNa+si4/6RAtHlKEcZTNs7jf4U+oqBnbtv4uxbKZZPf/kN0EK4+A==} cpu: [arm64] os: [win32] - turbo@2.8.11: - resolution: {integrity: sha512-H+rwSHHPLoyPOSoHdmI1zY0zy0GGj1Dmr7SeJW+nZiWLz2nex8EJ+fkdVabxXFMNEux+aywI4Sae8EqhmnOv4A==} + turbo@2.8.15: + resolution: {integrity: sha512-ERZf7pKOR155NKs/PZt1+83NrSEJfUL7+p9/TGZg/8xzDVMntXEFQlX4CsNJQTyu4h3j+dZYiQWOOlv5pssuHQ==} hasBin: true twoslash-protocol@0.3.6: @@ -25197,32 +25197,32 @@ snapshots: tunnel@0.0.6: {} - turbo-darwin-64@2.8.11: + turbo-darwin-64@2.8.15: optional: true - turbo-darwin-arm64@2.8.11: + turbo-darwin-arm64@2.8.15: optional: true - turbo-linux-64@2.8.11: + turbo-linux-64@2.8.15: optional: true - turbo-linux-arm64@2.8.11: + turbo-linux-arm64@2.8.15: optional: true - turbo-windows-64@2.8.11: + turbo-windows-64@2.8.15: optional: true - turbo-windows-arm64@2.8.11: + turbo-windows-arm64@2.8.15: optional: true - turbo@2.8.11: + turbo@2.8.15: optionalDependencies: - turbo-darwin-64: 2.8.11 - turbo-darwin-arm64: 2.8.11 - turbo-linux-64: 2.8.11 - turbo-linux-arm64: 2.8.11 - turbo-windows-64: 2.8.11 - turbo-windows-arm64: 2.8.11 + turbo-darwin-64: 2.8.15 + turbo-darwin-arm64: 2.8.15 + turbo-linux-64: 2.8.15 + turbo-linux-arm64: 2.8.15 + turbo-windows-64: 2.8.15 + turbo-windows-arm64: 2.8.15 twoslash-protocol@0.3.6: {}