aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--benchmark/bench/codspeed.js78
-rw-r--r--benchmark/packages/adapter/src/server.ts2
-rw-r--r--examples/framework-multiple/package.json4
-rw-r--r--examples/framework-multiple/src/components/svelte/SvelteCounter.svelte15
-rw-r--r--examples/framework-solid/package.json2
-rw-r--r--examples/framework-svelte/package.json4
-rw-r--r--examples/framework-svelte/src/components/Counter.svelte15
-rw-r--r--examples/ssr/package.json4
-rw-r--r--examples/ssr/src/components/AddToCart.svelte5
-rw-r--r--examples/ssr/src/components/Cart.svelte4
-rw-r--r--packages/astro/CHANGELOG.md8
-rw-r--r--packages/astro/e2e/fixtures/client-only/package.json2
-rw-r--r--packages/astro/e2e/fixtures/client-only/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/errors/package.json2
-rw-r--r--packages/astro/e2e/fixtures/errors/src/components/svelte/SvelteRuntimeError.svelte2
-rw-r--r--packages/astro/e2e/fixtures/multiple-frameworks/package.json2
-rw-r--r--packages/astro/e2e/fixtures/multiple-frameworks/src/components/svelte/SvelteCounter.svelte10
-rw-r--r--packages/astro/e2e/fixtures/nested-in-preact/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-in-preact/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/nested-in-react/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-in-react/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/nested-in-solid/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-in-solid/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/nested-in-svelte/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-in-svelte/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/nested-in-vue/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-in-vue/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/nested-recursive/package.json2
-rw-r--r--packages/astro/e2e/fixtures/nested-recursive/src/components/svelte/SvelteCounter.svelte11
-rw-r--r--packages/astro/e2e/fixtures/svelte-component/package.json2
-rw-r--r--packages/astro/e2e/fixtures/svelte-component/src/components/Counter.svelte17
-rw-r--r--packages/astro/e2e/fixtures/svelte-component/src/components/Stuff.svelte4
-rw-r--r--packages/astro/e2e/fixtures/svelte-component/src/components/SvelteComponent.svelte2
-rw-r--r--packages/astro/e2e/fixtures/svelte-component/src/components/ToggleSlots.svelte4
-rw-r--r--packages/astro/e2e/fixtures/view-transitions/package.json8
-rw-r--r--packages/astro/e2e/fixtures/view-transitions/src/components/SvelteCounter.svelte10
-rw-r--r--packages/astro/src/transitions/router.ts2
-rw-r--r--packages/astro/test/fixtures/0-css/package.json2
-rw-r--r--packages/astro/test/fixtures/0-css/svelte.config.mjs5
-rw-r--r--packages/astro/test/fixtures/alias-tsconfig-baseurl-only/package.json2
-rw-r--r--packages/astro/test/fixtures/alias-tsconfig/package.json2
-rw-r--r--packages/astro/test/fixtures/alias/package.json2
-rw-r--r--packages/astro/test/fixtures/astro-children/package.json2
-rw-r--r--packages/astro/test/fixtures/astro-children/src/components/Component.svelte6
-rw-r--r--packages/astro/test/fixtures/astro-client-only/package.json2
-rw-r--r--packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounter.svelte8
-rw-r--r--packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounterStandalone.svelte8
-rw-r--r--packages/astro/test/fixtures/astro-dynamic/package.json2
-rw-r--r--packages/astro/test/fixtures/astro-dynamic/src/components/PersistentCounter.svelte8
-rw-r--r--packages/astro/test/fixtures/astro-dynamic/src/components/SvelteCounter.svelte10
-rw-r--r--packages/astro/test/fixtures/astro-markdown/astro.config.mjs6
-rw-r--r--packages/astro/test/fixtures/astro-markdown/package.json1
-rw-r--r--packages/astro/test/fixtures/astro-markdown/src/components/Counter.svelte5
-rw-r--r--packages/astro/test/fixtures/astro-slots-nested/package.json2
-rw-r--r--packages/astro/test/fixtures/component-library-shared/Counter.svelte9
-rw-r--r--packages/astro/test/fixtures/component-library/package.json2
-rw-r--r--packages/astro/test/fixtures/css-dangling-references/package.json2
-rw-r--r--packages/astro/test/fixtures/css-dangling-references/src/components/Wrapper.svelte3
-rw-r--r--packages/astro/test/fixtures/fetch/package.json2
-rw-r--r--packages/astro/test/fixtures/jsx/package.json2
-rw-r--r--packages/astro/test/fixtures/jsx/src/components/SvelteCounter.svelte6
-rw-r--r--packages/astro/test/fixtures/postcss/package.json2
-rw-r--r--packages/astro/test/fixtures/reuse-injected-entrypoint/src/to-inject.astro14
-rw-r--r--packages/astro/test/fixtures/server-islands/hybrid/package.json2
-rw-r--r--packages/astro/test/fixtures/server-islands/ssr/package.json2
-rw-r--r--packages/astro/test/fixtures/slots-svelte/package.json2
-rw-r--r--packages/astro/test/fixtures/slots-svelte/src/components/Counter.svelte8
-rw-r--r--packages/astro/test/fixtures/svelte-component/package.json2
-rw-r--r--packages/astro/test/fixtures/svelte-component/src/components/TypeScript.svelte2
-rw-r--r--packages/astro/test/fixtures/vue-with-multi-renderer/package.json2
-rw-r--r--packages/astro/test/postcss.test.js6
-rw-r--r--packages/astro/test/reuse-injected-entrypoint.test.js26
-rw-r--r--packages/integrations/solid/CHANGELOG.md6
-rw-r--r--packages/integrations/solid/package.json2
-rw-r--r--packages/integrations/solid/src/server.ts4
-rw-r--r--packages/integrations/svelte/CHANGELOG.md21
-rw-r--r--packages/integrations/svelte/client-v5.js60
-rw-r--r--packages/integrations/svelte/client.js125
-rw-r--r--packages/integrations/svelte/client.svelte.js79
-rw-r--r--packages/integrations/svelte/package.json22
-rw-r--r--packages/integrations/svelte/server-v5.d.ts2
-rw-r--r--packages/integrations/svelte/server-v5.js57
-rw-r--r--packages/integrations/svelte/server.js48
-rw-r--r--packages/integrations/svelte/src/index.ts99
-rw-r--r--pnpm-lock.yaml260
85 files changed, 555 insertions, 694 deletions
diff --git a/benchmark/bench/codspeed.js b/benchmark/bench/codspeed.js
index 2ad783e8a..2643b1ec8 100644
--- a/benchmark/bench/codspeed.js
+++ b/benchmark/bench/codspeed.js
@@ -2,7 +2,6 @@ import path from 'node:path';
import { withCodSpeed } from '@codspeed/tinybench-plugin';
import { Bench } from 'tinybench';
import { exec } from 'tinyexec';
-import { renderPages } from '../make-project/render-default.js';
import { astroBin } from './_util.js';
export async function run({ memory: _memory, render, stress: _stress }) {
@@ -10,40 +9,55 @@ export async function run({ memory: _memory, render, stress: _stress }) {
iterations: 10,
};
const bench = process.env.CODSPEED ? withCodSpeed(new Bench(options)) : new Bench(options);
- let app;
- bench.add(
- 'Rendering',
- async () => {
+ await exec(astroBin, ['build'], {
+ nodeOptions: {
+ cwd: render.root,
+ stdio: 'inherit',
+ },
+ });
+
+ const entry = new URL('./dist/server/entry.mjs', `file://${render.root}`);
+ const { manifest, createApp } = await import(entry);
+ const streamingApp = createApp(manifest, true);
+ const nonStreamingApp = createApp(manifest, false);
+ bench
+ .add('Rendering: streaming [true], .astro file', async () => {
console.info('Start task.');
- const result = {};
- for (const fileName of renderPages) {
- const pathname = '/' + fileName.slice(0, -path.extname(fileName).length);
- const request = new Request(new URL(pathname, 'http://exmpale.com'));
- const response = await app.render(request);
- const html = await response.text();
- if (!result[pathname]) result[pathname] = [];
- result[pathname].push(html);
- }
+ const request = new Request(new URL('http://exmpale.com/astro'));
+ await streamingApp.render(request);
console.info('Finish task.');
- return result;
- },
- {
- async beforeAll() {
- // build for rendering
- await exec(astroBin, ['build'], {
- nodeOptions: {
- cwd: render.root,
- stdio: 'inherit',
- },
- });
+ })
+ .add('Rendering: streaming [true], .md file', async () => {
+ console.info('Start task.');
+ const request = new Request(new URL('http://exmpale.com/md'));
+ await streamingApp.render(request);
+ console.info('Finish task.');
+ })
+ .add('Rendering: streaming [true], .mdx file', async () => {
+ console.info('Start task.');
+ const request = new Request(new URL('http://exmpale.com/mdx'));
+ await streamingApp.render(request);
+ console.info('Finish task.');
+ })
- const entry = new URL('./dist/server/entry.mjs', `file://${render.root}`);
- const { manifest, createApp } = await import(entry);
- app = createApp(manifest);
- app.manifest = manifest;
- },
- },
- );
+ .add('Rendering: streaming [false], .astro file', async () => {
+ console.info('Start task.');
+ const request = new Request(new URL('http://exmpale.com/astro'));
+ await nonStreamingApp.render(request);
+ console.info('Finish task.');
+ })
+ .add('Rendering: streaming [false], .md file', async () => {
+ console.info('Start task.');
+ const request = new Request(new URL('http://exmpale.com/md'));
+ await nonStreamingApp.render(request);
+ console.info('Finish task.');
+ })
+ .add('Rendering: streaming [false], .mdx file', async () => {
+ console.info('Start task.');
+ const request = new Request(new URL('http://exmpale.com/mdx'));
+ await nonStreamingApp.render(request);
+ console.info('Finish task.');
+ });
await bench.run();
console.table(bench.table());
diff --git a/benchmark/packages/adapter/src/server.ts b/benchmark/packages/adapter/src/server.ts
index ca69fe28f..10e212adb 100644
--- a/benchmark/packages/adapter/src/server.ts
+++ b/benchmark/packages/adapter/src/server.ts
@@ -7,11 +7,9 @@ applyPolyfills();
class MyApp extends App {
#manifest: SSRManifest | undefined;
- #streaming: boolean;
constructor(manifest: SSRManifest, streaming = false) {
super(manifest, streaming);
this.#manifest = manifest;
- this.#streaming = streaming;
}
async render(request: Request) {
diff --git a/examples/framework-multiple/package.json b/examples/framework-multiple/package.json
index 4bbb93465..bca343000 100644
--- a/examples/framework-multiple/package.json
+++ b/examples/framework-multiple/package.json
@@ -12,7 +12,7 @@
"dependencies": {
"@astrojs/preact": "^3.5.3",
"@astrojs/react": "^3.6.2",
- "@astrojs/solid-js": "^4.4.2",
+ "@astrojs/solid-js": "^4.4.3",
"@astrojs/svelte": "^6.0.0-beta.2",
"@astrojs/vue": "^5.0.0-beta.1",
"@types/react": "^18.3.12",
@@ -22,7 +22,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/examples/framework-multiple/src/components/svelte/SvelteCounter.svelte b/examples/framework-multiple/src/components/svelte/SvelteCounter.svelte
index 01e58574a..641312ae1 100644
--- a/examples/framework-multiple/src/components/svelte/SvelteCounter.svelte
+++ b/examples/framework-multiple/src/components/svelte/SvelteCounter.svelte
@@ -2,7 +2,14 @@
A counter written with Svelte
-->
<script lang="ts">
- let count = 0;
+ import type { Snippet } from 'svelte';
+
+ interface Props {
+ children?: Snippet
+ }
+
+ let { children }: Props = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,10 +21,10 @@ A counter written with Svelte
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{count}</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div class="counter-message">
- <slot />
+ {@render children?.()}
</div>
diff --git a/examples/framework-solid/package.json b/examples/framework-solid/package.json
index 31b0691ca..da283570d 100644
--- a/examples/framework-solid/package.json
+++ b/examples/framework-solid/package.json
@@ -10,7 +10,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/solid-js": "^4.4.2",
+ "@astrojs/solid-js": "^4.4.3",
"astro": "^5.0.0-beta.8",
"solid-js": "^1.9.2"
}
diff --git a/examples/framework-svelte/package.json b/examples/framework-svelte/package.json
index c7308a1ab..56e22f6be 100644
--- a/examples/framework-svelte/package.json
+++ b/examples/framework-svelte/package.json
@@ -10,8 +10,8 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/svelte": "^6.0.0-beta.2",
+ "@astrojs/svelte": "^6.0.0",
"astro": "^5.0.0-beta.8",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/examples/framework-svelte/src/components/Counter.svelte b/examples/framework-svelte/src/components/Counter.svelte
index 1353736aa..a11538645 100644
--- a/examples/framework-svelte/src/components/Counter.svelte
+++ b/examples/framework-svelte/src/components/Counter.svelte
@@ -1,5 +1,12 @@
<script lang="ts">
- let count = 0;
+ import type { Snippet } from 'svelte';
+
+ interface Props {
+ children?: Snippet
+ }
+
+ let { children }: Props = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -11,12 +18,12 @@
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{count}</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div class="message">
- <slot />
+ {@render children?.()}
</div>
<style>
diff --git a/examples/ssr/package.json b/examples/ssr/package.json
index 63d27d3b2..1a468ec12 100644
--- a/examples/ssr/package.json
+++ b/examples/ssr/package.json
@@ -12,8 +12,8 @@
},
"dependencies": {
"@astrojs/node": "^9.0.0-alpha.1",
- "@astrojs/svelte": "^6.0.0-beta.2",
+ "@astrojs/svelte": "^6.0.0",
"astro": "^5.0.0-beta.8",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/examples/ssr/src/components/AddToCart.svelte b/examples/ssr/src/components/AddToCart.svelte
index 0f7a97a93..bae888b6b 100644
--- a/examples/ssr/src/components/AddToCart.svelte
+++ b/examples/ssr/src/components/AddToCart.svelte
@@ -1,7 +1,6 @@
<script>
import { addToUserCart } from '../api';
- export let id = 0;
- export let name = '';
+ let { id, name } = $props()
function notifyCartItem(id) {
window.dispatchEvent(new CustomEvent('add-to-cart', {
@@ -49,6 +48,6 @@ button:hover {
text-transform: uppercase;
}
</style>
-<button on:click={addToCart}>
+<button click={addToCart}>
<span class="pretext">Add to cart</span>
</button>
diff --git a/examples/ssr/src/components/Cart.svelte b/examples/ssr/src/components/Cart.svelte
index 74db0bc79..5d4b7d251 100644
--- a/examples/ssr/src/components/Cart.svelte
+++ b/examples/ssr/src/components/Cart.svelte
@@ -1,5 +1,5 @@
<script>
- export let count = 0;
+ let { count } = $props()
let items = new Set();
function onAddToCart(ev) {
@@ -27,7 +27,7 @@
font-size: 24px;
}
</style>
-<svelte:window on:add-to-cart={onAddToCart}/>
+<svelte:window onadd-to-cart={onAddToCart}/>
<a href="/cart" class="cart">
<span class="material-icons cart-icon">shopping_cart</span>
<span class="count">{count}</span>
diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md
index 2d5bd7070..0cae3a4da 100644
--- a/packages/astro/CHANGELOG.md
+++ b/packages/astro/CHANGELOG.md
@@ -1195,6 +1195,14 @@
- Updated dependencies [[`83a2a64`](https://github.com/withastro/astro/commit/83a2a648418ad30f4eb781d1c1b5f2d8a8ac846e)]:
- @astrojs/markdown-remark@6.0.0-alpha.0
+## 4.16.13
+
+### Patch Changes
+
+- [#12436](https://github.com/withastro/astro/pull/12436) [`453ec6b`](https://github.com/withastro/astro/commit/453ec6b12f8c021e0bd0fd0ea9f71c8fc280f4b1) Thanks [@martrapp](https://github.com/martrapp)! - Fixes a potential null access in the clientside router
+
+- [#12392](https://github.com/withastro/astro/pull/12392) [`0462219`](https://github.com/withastro/astro/commit/0462219612183b65867aaaef9fa538d89f201999) Thanks [@apatel369](https://github.com/apatel369)! - Fixes an issue where scripts were not correctly injected during the build. The issue was triggered when there were injected routes with the same `entrypoint` and different `pattern`
+
## 4.16.12
### Patch Changes
diff --git a/packages/astro/e2e/fixtures/client-only/package.json b/packages/astro/e2e/fixtures/client-only/package.json
index 846d05536..b8ff80595 100644
--- a/packages/astro/e2e/fixtures/client-only/package.json
+++ b/packages/astro/e2e/fixtures/client-only/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/client-only/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/client-only/src/components/svelte/SvelteCounter.svelte
index cc9fe8c93..d87611414 100644
--- a/packages/astro/e2e/fixtures/client-only/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/client-only/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button class="increment" on:click={add}>+</button>
+ <button class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/errors/package.json b/packages/astro/e2e/fixtures/errors/package.json
index 3730d61f1..77c406778 100644
--- a/packages/astro/e2e/fixtures/errors/package.json
+++ b/packages/astro/e2e/fixtures/errors/package.json
@@ -14,7 +14,7 @@
"react-dom": "^18.3.1",
"sass": "^1.80.6",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/errors/src/components/svelte/SvelteRuntimeError.svelte b/packages/astro/e2e/fixtures/errors/src/components/svelte/SvelteRuntimeError.svelte
index 54dbab6a7..69d62a884 100644
--- a/packages/astro/e2e/fixtures/errors/src/components/svelte/SvelteRuntimeError.svelte
+++ b/packages/astro/e2e/fixtures/errors/src/components/svelte/SvelteRuntimeError.svelte
@@ -1,5 +1,5 @@
<script>
- export let shouldThrow = true;
+ let { shouldThrow } = $props();
if (shouldThrow) {
throw new Error('SvelteRuntimeError');
diff --git a/packages/astro/e2e/fixtures/multiple-frameworks/package.json b/packages/astro/e2e/fixtures/multiple-frameworks/package.json
index 81cc37a6f..2dc333796 100644
--- a/packages/astro/e2e/fixtures/multiple-frameworks/package.json
+++ b/packages/astro/e2e/fixtures/multiple-frameworks/package.json
@@ -17,7 +17,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/multiple-frameworks/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/multiple-frameworks/src/components/svelte/SvelteCounter.svelte
index d6870af3c..fdaa73399 100644
--- a/packages/astro/e2e/fixtures/multiple-frameworks/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/multiple-frameworks/src/components/svelte/SvelteCounter.svelte
@@ -1,7 +1,7 @@
<script>
- export let id;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -13,12 +13,12 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button class="increment" on:click={add}>+</button>
+ <button class="increment" onclick={add}>+</button>
</div>
<div class="counter-message">
- <slot />
+ {@render children?.()}
</div>
<style>
diff --git a/packages/astro/e2e/fixtures/nested-in-preact/package.json b/packages/astro/e2e/fixtures/nested-in-preact/package.json
index 75416af37..b7ee395b7 100644
--- a/packages/astro/e2e/fixtures/nested-in-preact/package.json
+++ b/packages/astro/e2e/fixtures/nested-in-preact/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/nested-in-preact/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-in-preact/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-in-preact/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-in-preact/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/nested-in-react/package.json b/packages/astro/e2e/fixtures/nested-in-react/package.json
index 533ddb156..8482e4a95 100644
--- a/packages/astro/e2e/fixtures/nested-in-react/package.json
+++ b/packages/astro/e2e/fixtures/nested-in-react/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/nested-in-react/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-in-react/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-in-react/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-in-react/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/nested-in-solid/package.json b/packages/astro/e2e/fixtures/nested-in-solid/package.json
index b8c3a4dbc..a0cb765f1 100644
--- a/packages/astro/e2e/fixtures/nested-in-solid/package.json
+++ b/packages/astro/e2e/fixtures/nested-in-solid/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/nested-in-solid/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-in-solid/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-in-solid/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-in-solid/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/nested-in-svelte/package.json b/packages/astro/e2e/fixtures/nested-in-svelte/package.json
index d40b37c67..7a76711b6 100644
--- a/packages/astro/e2e/fixtures/nested-in-svelte/package.json
+++ b/packages/astro/e2e/fixtures/nested-in-svelte/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/nested-in-svelte/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-in-svelte/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-in-svelte/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-in-svelte/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/nested-in-vue/package.json b/packages/astro/e2e/fixtures/nested-in-vue/package.json
index 82c8c6d32..9ee7a0ea4 100644
--- a/packages/astro/e2e/fixtures/nested-in-vue/package.json
+++ b/packages/astro/e2e/fixtures/nested-in-vue/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/nested-in-vue/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-in-vue/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-in-vue/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-in-vue/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/nested-recursive/package.json b/packages/astro/e2e/fixtures/nested-recursive/package.json
index f2ac36dc7..feeb21cb8 100644
--- a/packages/astro/e2e/fixtures/nested-recursive/package.json
+++ b/packages/astro/e2e/fixtures/nested-recursive/package.json
@@ -15,7 +15,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
},
"scripts": {
diff --git a/packages/astro/e2e/fixtures/nested-recursive/src/components/svelte/SvelteCounter.svelte b/packages/astro/e2e/fixtures/nested-recursive/src/components/svelte/SvelteCounter.svelte
index 733f58076..654df4f8b 100644
--- a/packages/astro/e2e/fixtures/nested-recursive/src/components/svelte/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/nested-recursive/src/components/svelte/SvelteCounter.svelte
@@ -1,8 +1,7 @@
<script>
- export let id;
- let children;
- let count = 0;
+ let { id, children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -14,11 +13,11 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre id={`${id}-count`}>{ count }</pre>
- <button id={`${id}-increment`} class="increment" on:click={add}>+</button>
+ <button id={`${id}-increment`} class="increment" onclick={add}>+</button>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
</div>
diff --git a/packages/astro/e2e/fixtures/svelte-component/package.json b/packages/astro/e2e/fixtures/svelte-component/package.json
index 04acc35e7..c4baf8616 100644
--- a/packages/astro/e2e/fixtures/svelte-component/package.json
+++ b/packages/astro/e2e/fixtures/svelte-component/package.json
@@ -6,6 +6,6 @@
"@astrojs/mdx": "workspace:*",
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/e2e/fixtures/svelte-component/src/components/Counter.svelte b/packages/astro/e2e/fixtures/svelte-component/src/components/Counter.svelte
index 2f05ce798..de8555f87 100644
--- a/packages/astro/e2e/fixtures/svelte-component/src/components/Counter.svelte
+++ b/packages/astro/e2e/fixtures/svelte-component/src/components/Counter.svelte
@@ -1,6 +1,13 @@
<script lang="ts">
- export let id: string;
- export let count: number = 0;
+ import type { Snippet } from 'svelte';
+
+ interface Props {
+ id: number;
+ count: number;
+ children?: Snippet
+ }
+
+ let { id, count, children }: Props = $props();
function add() {
count += 1;
@@ -12,12 +19,12 @@
</script>
<div {id} class="counter">
- <button class="decrement" on:click={subtract}>-</button>
+ <button class="decrement" onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button class="increment" on:click={add}>+</button>
+ <button class="increment" onclick={add}>+</button>
</div>
<div id={`${id}-message`} class="message">
- <slot />
+ {@render children?.()}
</div>
<style>
diff --git a/packages/astro/e2e/fixtures/svelte-component/src/components/Stuff.svelte b/packages/astro/e2e/fixtures/svelte-component/src/components/Stuff.svelte
index 9d7f1d4e0..ef2938423 100644
--- a/packages/astro/e2e/fixtures/svelte-component/src/components/Stuff.svelte
+++ b/packages/astro/e2e/fixtures/svelte-component/src/components/Stuff.svelte
@@ -1,4 +1,4 @@
<script>
- export let id;
+ let { id, children } = $props();
</script>
-<div {id}>Slot goes here:<slot /></div>
+<div {id}>Slot goes here:{@render children?.()}</div>
diff --git a/packages/astro/e2e/fixtures/svelte-component/src/components/SvelteComponent.svelte b/packages/astro/e2e/fixtures/svelte-component/src/components/SvelteComponent.svelte
index ff6894c00..0076cbe12 100644
--- a/packages/astro/e2e/fixtures/svelte-component/src/components/SvelteComponent.svelte
+++ b/packages/astro/e2e/fixtures/svelte-component/src/components/SvelteComponent.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
- export let id: string;
+ let { id } = $props<{ id: string }>();
</script>
<div {id}>Framework client:only component</div>
diff --git a/packages/astro/e2e/fixtures/svelte-component/src/components/ToggleSlots.svelte b/packages/astro/e2e/fixtures/svelte-component/src/components/ToggleSlots.svelte
index 3a8595ff5..1d404b3b7 100644
--- a/packages/astro/e2e/fixtures/svelte-component/src/components/ToggleSlots.svelte
+++ b/packages/astro/e2e/fixtures/svelte-component/src/components/ToggleSlots.svelte
@@ -1,9 +1,9 @@
<script>
- let isNavOpen = false;
+ let isNavOpen = $state(false);
const toggleNav = () => (isNavOpen = !isNavOpen);
</script>
-<button id="toggle" on:click={toggleNav}>
+<button id="toggle" onclick={toggleNav}>
{#if isNavOpen}
<slot name="open" />
{:else}
diff --git a/packages/astro/e2e/fixtures/view-transitions/package.json b/packages/astro/e2e/fixtures/view-transitions/package.json
index 84efaa227..3c94c2700 100644
--- a/packages/astro/e2e/fixtures/view-transitions/package.json
+++ b/packages/astro/e2e/fixtures/view-transitions/package.json
@@ -5,14 +5,14 @@
"dependencies": {
"@astrojs/node": "^8.3.4",
"@astrojs/react": "workspace:*",
+ "@astrojs/solid-js": "workspace:*",
"@astrojs/svelte": "workspace:*",
"@astrojs/vue": "workspace:*",
- "@astrojs/solid-js": "workspace:*",
"astro": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "svelte": "^4.2.19",
- "vue": "^3.5.12",
- "solid-js": "^1.9.3"
+ "solid-js": "^1.9.3",
+ "svelte": "^5.1.16",
+ "vue": "^3.5.12"
}
}
diff --git a/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteCounter.svelte b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteCounter.svelte
index 669ee1a5a..5fa67040d 100644
--- a/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteCounter.svelte
+++ b/packages/astro/e2e/fixtures/view-transitions/src/components/SvelteCounter.svelte
@@ -1,6 +1,6 @@
<script lang="ts">
- let count = 0;
- export let prefix = "";
+ let { prefix, children } = $props()
+ let count = $state(0);
function add() {
count += 1;
@@ -12,12 +12,12 @@
</script>
<div class="counter">
- <button on:click={subtract} class="decrement">-</button>
+ <button onclick={subtract} class="decrement">-</button>
<pre>{prefix}{count}</pre>
- <button on:click={add} class="increment">+</button>
+ <button onclick={add} class="increment">+</button>
</div>
<div class="message">
- <slot />
+ {@render children?.()}
</div>
<style>
diff --git a/packages/astro/src/transitions/router.ts b/packages/astro/src/transitions/router.ts
index bc0b861da..925aab0a6 100644
--- a/packages/astro/src/transitions/router.ts
+++ b/packages/astro/src/transitions/router.ts
@@ -636,7 +636,7 @@ if (inBrowser) {
'scroll',
() => {
if (intervalId !== undefined) return;
- (lastIndex = history.state.index), (lastY = scrollY), (lastX = scrollX);
+ (lastIndex = history.state?.index), (lastY = scrollY), (lastX = scrollX);
intervalId = window.setInterval(scrollInterval, 50);
},
{ passive: true },
diff --git a/packages/astro/test/fixtures/0-css/package.json b/packages/astro/test/fixtures/0-css/package.json
index c460f11db..8956aaf0a 100644
--- a/packages/astro/test/fixtures/0-css/package.json
+++ b/packages/astro/test/fixtures/0-css/package.json
@@ -9,7 +9,7 @@
"astro": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/fixtures/0-css/svelte.config.mjs b/packages/astro/test/fixtures/0-css/svelte.config.mjs
new file mode 100644
index 000000000..cbaee33df
--- /dev/null
+++ b/packages/astro/test/fixtures/0-css/svelte.config.mjs
@@ -0,0 +1,5 @@
+import { vitePreprocess } from '@astrojs/svelte';
+
+export default {
+ preprocess: vitePreprocess(),
+};
diff --git a/packages/astro/test/fixtures/alias-tsconfig-baseurl-only/package.json b/packages/astro/test/fixtures/alias-tsconfig-baseurl-only/package.json
index 0ae8cb82c..61ea81e43 100644
--- a/packages/astro/test/fixtures/alias-tsconfig-baseurl-only/package.json
+++ b/packages/astro/test/fixtures/alias-tsconfig-baseurl-only/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/alias-tsconfig/package.json b/packages/astro/test/fixtures/alias-tsconfig/package.json
index 833a0a068..07e81ac0b 100644
--- a/packages/astro/test/fixtures/alias-tsconfig/package.json
+++ b/packages/astro/test/fixtures/alias-tsconfig/package.json
@@ -6,6 +6,6 @@
"@astrojs/svelte": "workspace:*",
"@test/namespace-package": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/alias/package.json b/packages/astro/test/fixtures/alias/package.json
index bd0599c5d..c237d7a6e 100644
--- a/packages/astro/test/fixtures/alias/package.json
+++ b/packages/astro/test/fixtures/alias/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/astro-children/package.json b/packages/astro/test/fixtures/astro-children/package.json
index 14e6da06e..7f341a250 100644
--- a/packages/astro/test/fixtures/astro-children/package.json
+++ b/packages/astro/test/fixtures/astro-children/package.json
@@ -8,7 +8,7 @@
"@astrojs/vue": "workspace:*",
"astro": "workspace:*",
"preact": "^10.24.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/fixtures/astro-children/src/components/Component.svelte b/packages/astro/test/fixtures/astro-children/src/components/Component.svelte
index 4276a78b8..87a939e67 100644
--- a/packages/astro/test/fixtures/astro-children/src/components/Component.svelte
+++ b/packages/astro/test/fixtures/astro-children/src/components/Component.svelte
@@ -1,3 +1,7 @@
+<script>
+ let { children } = $props();
+</script>
+
<div id="svelte">
- <slot />
+ {@render children?.()}
</div>
diff --git a/packages/astro/test/fixtures/astro-client-only/package.json b/packages/astro/test/fixtures/astro-client-only/package.json
index e6f71f353..524570175 100644
--- a/packages/astro/test/fixtures/astro-client-only/package.json
+++ b/packages/astro/test/fixtures/astro-client-only/package.json
@@ -9,6 +9,6 @@
"astro": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounter.svelte b/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounter.svelte
index 855be29ea..f4d7180df 100644
--- a/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounter.svelte
+++ b/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounter.svelte
@@ -1,8 +1,8 @@
<script>
import './logResize';
- let count = parseInt(localStorage.getItem('test:count')) || 0;
- $: localStorage.setItem('test:count', count);
+ let count = $state(parseInt(localStorage.getItem('test:count')) || 0)
+ $effect(() => localStorage.setItem('test:count', count));
function add() {
count += 1;
@@ -18,7 +18,7 @@
}
</style>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
diff --git a/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounterStandalone.svelte b/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounterStandalone.svelte
index c851a42f8..cb2d51496 100644
--- a/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounterStandalone.svelte
+++ b/packages/astro/test/fixtures/astro-client-only/src/components/PersistentCounterStandalone.svelte
@@ -1,8 +1,8 @@
<script>
import './logResize';
- let count = parseInt(localStorage.getItem('test:count')) || 0;
- $: localStorage.setItem('test:count', count);
+ let count = $state(parseInt(localStorage.getItem('test:count')) || 0)
+ $effect(() => localStorage.setItem('test:count', count));
function add() {
count += 1;
@@ -18,7 +18,7 @@
}
</style>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
diff --git a/packages/astro/test/fixtures/astro-dynamic/package.json b/packages/astro/test/fixtures/astro-dynamic/package.json
index 3d606041a..a308d8796 100644
--- a/packages/astro/test/fixtures/astro-dynamic/package.json
+++ b/packages/astro/test/fixtures/astro-dynamic/package.json
@@ -8,6 +8,6 @@
"astro": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/astro-dynamic/src/components/PersistentCounter.svelte b/packages/astro/test/fixtures/astro-dynamic/src/components/PersistentCounter.svelte
index 1b74b3408..7790b66b3 100644
--- a/packages/astro/test/fixtures/astro-dynamic/src/components/PersistentCounter.svelte
+++ b/packages/astro/test/fixtures/astro-dynamic/src/components/PersistentCounter.svelte
@@ -2,8 +2,8 @@
<script>
import './logResize';
- let count = parseInt(localStorage.getItem('test:count')) || 0;
- $: localStorage.setItem('test:count', count);
+ let count = $state(parseInt(localStorage.getItem('test:count')) || 0)
+ $effect(() => localStorage.setItem('test:count', count));
function add() {
count += 1;
@@ -15,8 +15,8 @@
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
\ No newline at end of file
diff --git a/packages/astro/test/fixtures/astro-dynamic/src/components/SvelteCounter.svelte b/packages/astro/test/fixtures/astro-dynamic/src/components/SvelteCounter.svelte
index 8d6b3f5e1..d4972b7f9 100644
--- a/packages/astro/test/fixtures/astro-dynamic/src/components/SvelteCounter.svelte
+++ b/packages/astro/test/fixtures/astro-dynamic/src/components/SvelteCounter.svelte
@@ -1,7 +1,7 @@
<script>
- let children;
- let count = 0;
+ let { children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -13,10 +13,10 @@
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div class="children">
- <slot />
+ {@render children?.()}
</div>
diff --git a/packages/astro/test/fixtures/astro-markdown/astro.config.mjs b/packages/astro/test/fixtures/astro-markdown/astro.config.mjs
index ac3f1ab64..201ce52f2 100644
--- a/packages/astro/test/fixtures/astro-markdown/astro.config.mjs
+++ b/packages/astro/test/fixtures/astro-markdown/astro.config.mjs
@@ -1,8 +1,6 @@
-import svelte from "@astrojs/svelte";
-import { defineConfig } from 'astro/config';
+import { defineConfig } from "astro/config";
// https://astro.build/config
export default defineConfig({
- integrations: [svelte()],
- site: 'https://astro.build/',
+ site: "https://astro.build/",
});
diff --git a/packages/astro/test/fixtures/astro-markdown/package.json b/packages/astro/test/fixtures/astro-markdown/package.json
index c1903a941..9fe9dae01 100644
--- a/packages/astro/test/fixtures/astro-markdown/package.json
+++ b/packages/astro/test/fixtures/astro-markdown/package.json
@@ -3,7 +3,6 @@
"version": "0.0.0",
"private": true,
"dependencies": {
- "@astrojs/svelte": "workspace:*",
"astro": "workspace:*"
}
}
diff --git a/packages/astro/test/fixtures/astro-markdown/src/components/Counter.svelte b/packages/astro/test/fixtures/astro-markdown/src/components/Counter.svelte
deleted file mode 100644
index 4e91b2659..000000000
--- a/packages/astro/test/fixtures/astro-markdown/src/components/Counter.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-<script>
- export let count = 0;
-</script>
-
-<button onClick={() => count += 1}>{count}</button>
diff --git a/packages/astro/test/fixtures/astro-slots-nested/package.json b/packages/astro/test/fixtures/astro-slots-nested/package.json
index 114e369d6..6d541872e 100644
--- a/packages/astro/test/fixtures/astro-slots-nested/package.json
+++ b/packages/astro/test/fixtures/astro-slots-nested/package.json
@@ -13,7 +13,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/fixtures/component-library-shared/Counter.svelte b/packages/astro/test/fixtures/component-library-shared/Counter.svelte
index 2f4c07339..0ca9f08b0 100644
--- a/packages/astro/test/fixtures/component-library-shared/Counter.svelte
+++ b/packages/astro/test/fixtures/component-library-shared/Counter.svelte
@@ -1,5 +1,6 @@
<script>
- let count = 0;
+ let { children } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -11,12 +12,12 @@
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div class="message">
- <slot />
+ {@render children?.()}
</div>
<style>
diff --git a/packages/astro/test/fixtures/component-library/package.json b/packages/astro/test/fixtures/component-library/package.json
index 02f65ab8d..7538d70a5 100644
--- a/packages/astro/test/fixtures/component-library/package.json
+++ b/packages/astro/test/fixtures/component-library/package.json
@@ -11,6 +11,6 @@
"preact": "^10.24.3",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/css-dangling-references/package.json b/packages/astro/test/fixtures/css-dangling-references/package.json
index be0392db0..1b4ea51e7 100644
--- a/packages/astro/test/fixtures/css-dangling-references/package.json
+++ b/packages/astro/test/fixtures/css-dangling-references/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
} \ No newline at end of file
diff --git a/packages/astro/test/fixtures/css-dangling-references/src/components/Wrapper.svelte b/packages/astro/test/fixtures/css-dangling-references/src/components/Wrapper.svelte
index 083040742..33ab3b380 100644
--- a/packages/astro/test/fixtures/css-dangling-references/src/components/Wrapper.svelte
+++ b/packages/astro/test/fixtures/css-dangling-references/src/components/Wrapper.svelte
@@ -1,6 +1,5 @@
<script>
-
- export let path
+ let { path } = $props();
const allAppModules = import.meta.glob('./*.svelte')
diff --git a/packages/astro/test/fixtures/fetch/package.json b/packages/astro/test/fixtures/fetch/package.json
index 110f14dad..280c58bf9 100644
--- a/packages/astro/test/fixtures/fetch/package.json
+++ b/packages/astro/test/fixtures/fetch/package.json
@@ -8,7 +8,7 @@
"@astrojs/vue": "workspace:*",
"astro": "workspace:*",
"preact": "^10.24.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/fixtures/jsx/package.json b/packages/astro/test/fixtures/jsx/package.json
index 2f5983029..b47b4c917 100644
--- a/packages/astro/test/fixtures/jsx/package.json
+++ b/packages/astro/test/fixtures/jsx/package.json
@@ -16,7 +16,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/fixtures/jsx/src/components/SvelteCounter.svelte b/packages/astro/test/fixtures/jsx/src/components/SvelteCounter.svelte
index 3d6f1b2bd..f45740811 100644
--- a/packages/astro/test/fixtures/jsx/src/components/SvelteCounter.svelte
+++ b/packages/astro/test/fixtures/jsx/src/components/SvelteCounter.svelte
@@ -1,6 +1,6 @@
<script>
- let count = 0;
+ let count = $state(0);
function add() {
count += 1;
@@ -13,9 +13,9 @@
<div id="svelte">
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{count}</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div class="children">Svelte</div>
</div>
diff --git a/packages/astro/test/fixtures/postcss/package.json b/packages/astro/test/fixtures/postcss/package.json
index c83201040..492521464 100644
--- a/packages/astro/test/fixtures/postcss/package.json
+++ b/packages/astro/test/fixtures/postcss/package.json
@@ -10,7 +10,7 @@
"autoprefixer": "^10.4.20",
"postcss": "^8.4.47",
"solid-js": "^1.9.3",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
},
"devDependencies": {
diff --git a/packages/astro/test/fixtures/reuse-injected-entrypoint/src/to-inject.astro b/packages/astro/test/fixtures/reuse-injected-entrypoint/src/to-inject.astro
index 13d5bac25..c8cc21da0 100644
--- a/packages/astro/test/fixtures/reuse-injected-entrypoint/src/to-inject.astro
+++ b/packages/astro/test/fixtures/reuse-injected-entrypoint/src/to-inject.astro
@@ -1,12 +1,6 @@
---
---
-<html lang="en">
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width" />
- <title>Routing</title>
- </head>
- <body>
- <h1>to-inject.astro</h1>
- </body>
-</html> \ No newline at end of file
+<h1>to-inject.astro</h1>
+<script>
+ console.log('to-inject.astro');
+</script>
diff --git a/packages/astro/test/fixtures/server-islands/hybrid/package.json b/packages/astro/test/fixtures/server-islands/hybrid/package.json
index 03e184e63..f34f93b32 100644
--- a/packages/astro/test/fixtures/server-islands/hybrid/package.json
+++ b/packages/astro/test/fixtures/server-islands/hybrid/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/server-islands/ssr/package.json b/packages/astro/test/fixtures/server-islands/ssr/package.json
index 16e044fe3..27cd8be8b 100644
--- a/packages/astro/test/fixtures/server-islands/ssr/package.json
+++ b/packages/astro/test/fixtures/server-islands/ssr/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/slots-svelte/package.json b/packages/astro/test/fixtures/slots-svelte/package.json
index ddfa80d33..0625c77e2 100644
--- a/packages/astro/test/fixtures/slots-svelte/package.json
+++ b/packages/astro/test/fixtures/slots-svelte/package.json
@@ -6,6 +6,6 @@
"@astrojs/mdx": "workspace:*",
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/slots-svelte/src/components/Counter.svelte b/packages/astro/test/fixtures/slots-svelte/src/components/Counter.svelte
index b03e016b7..e4606601b 100644
--- a/packages/astro/test/fixtures/slots-svelte/src/components/Counter.svelte
+++ b/packages/astro/test/fixtures/slots-svelte/src/components/Counter.svelte
@@ -1,6 +1,6 @@
<script>
- let count = 0;
- export let id;
+ let { id } = $props();
+ let count = $state(0);
function add() {
count += 1;
@@ -12,9 +12,9 @@
</script>
<div class="counter">
- <button on:click={subtract}>-</button>
+ <button onclick={subtract}>-</button>
<pre>{ count }</pre>
- <button on:click={add}>+</button>
+ <button onclick={add}>+</button>
</div>
<div id={id}>
<slot><h1 id="fallback">Fallback</h1></slot><slot name="named" /><slot name="dash-case" />
diff --git a/packages/astro/test/fixtures/svelte-component/package.json b/packages/astro/test/fixtures/svelte-component/package.json
index 830d980b7..3f4223780 100644
--- a/packages/astro/test/fixtures/svelte-component/package.json
+++ b/packages/astro/test/fixtures/svelte-component/package.json
@@ -5,6 +5,6 @@
"dependencies": {
"@astrojs/svelte": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19"
+ "svelte": "^5.1.16"
}
}
diff --git a/packages/astro/test/fixtures/svelte-component/src/components/TypeScript.svelte b/packages/astro/test/fixtures/svelte-component/src/components/TypeScript.svelte
index d74ae47ec..bbacb3b24 100644
--- a/packages/astro/test/fixtures/svelte-component/src/components/TypeScript.svelte
+++ b/packages/astro/test/fixtures/svelte-component/src/components/TypeScript.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
- export let message: string;
+ let { message } = $props();
</script>
<div id="svelte-ts">{ message }</div>
diff --git a/packages/astro/test/fixtures/vue-with-multi-renderer/package.json b/packages/astro/test/fixtures/vue-with-multi-renderer/package.json
index d2e756c97..339dcfd24 100644
--- a/packages/astro/test/fixtures/vue-with-multi-renderer/package.json
+++ b/packages/astro/test/fixtures/vue-with-multi-renderer/package.json
@@ -6,7 +6,7 @@
"@astrojs/svelte": "workspace:*",
"@astrojs/vue": "workspace:*",
"astro": "workspace:*",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vue": "^3.5.12"
}
}
diff --git a/packages/astro/test/postcss.test.js b/packages/astro/test/postcss.test.js
index 562765e30..145db478f 100644
--- a/packages/astro/test/postcss.test.js
+++ b/packages/astro/test/postcss.test.js
@@ -37,15 +37,15 @@ describe('PostCSS', () => {
});
it('works in JSX', () => {
- assert.match(bundledCSS, /\.solid(\.(w|-)*)*\.nested/);
+ assert.match(bundledCSS, /\.solid(\.[\w-]+)?\.nested/);
});
it('works in Vue', () => {
- assert.match(bundledCSS, /\.vue(\.(w|-)*)*\.nested/);
+ assert.match(bundledCSS, /\.vue(\.[\w-]+)?\.nested/);
});
it('works in Svelte', () => {
- assert.match(bundledCSS, /\.svelte(\.(w|-)*)*\.nested/);
+ assert.match(bundledCSS, /\.svelte(\.[\w-]+)?\.nested/);
});
it('ignores CSS in public/', async () => {
diff --git a/packages/astro/test/reuse-injected-entrypoint.test.js b/packages/astro/test/reuse-injected-entrypoint.test.js
index 5593f054a..d0b004a45 100644
--- a/packages/astro/test/reuse-injected-entrypoint.test.js
+++ b/packages/astro/test/reuse-injected-entrypoint.test.js
@@ -13,11 +13,13 @@ const routes = [
description: 'matches /injected-a to to-inject.astro',
url: '/injected-a',
h1: 'to-inject.astro',
+ scriptContent: 'console.log("to-inject.astro");',
},
{
description: 'matches /injected-b to to-inject.astro',
url: '/injected-b',
h1: 'to-inject.astro',
+ scriptContent: 'console.log("to-inject.astro");',
},
{
description: 'matches /dynamic-a/id-1 to [id].astro',
@@ -66,7 +68,7 @@ describe('Reuse injected entrypoint', () => {
await fixture.build();
});
- routes.forEach(({ description, url, fourOhFour, h1, p, htmlMatch }) => {
+ routes.forEach(({ description, url, fourOhFour, h1, p, htmlMatch, scriptContent }) => {
const isEndpoint = htmlMatch && !h1 && !p;
it(description, async () => {
@@ -91,6 +93,15 @@ describe('Reuse injected entrypoint', () => {
if (htmlMatch) {
assert.equal(html, htmlMatch);
}
+
+ if (scriptContent) {
+ const scriptTags = $('script[type="module"]').toArray();
+ const scriptFound = scriptTags.some((script) => {
+ const scriptText = $(script).text();
+ return scriptText.includes(scriptContent.trim());
+ });
+ assert(scriptFound, `Expected script content to be injected in SSG ${url}`);
+ }
});
});
});
@@ -111,7 +122,7 @@ describe('Reuse injected entrypoint', () => {
await devServer.stop();
});
- routes.forEach(({ description, url, fourOhFour, h1, p, htmlMatch }) => {
+ routes.forEach(({ description, url, fourOhFour, h1, p, htmlMatch, scriptContent }) => {
// checks URLs as written above
it(description, async () => {
const html = await fixture.fetch(url).then((res) => res.text());
@@ -133,6 +144,17 @@ describe('Reuse injected entrypoint', () => {
if (htmlMatch) {
assert.equal(html, htmlMatch);
}
+
+ if (scriptContent) {
+ const scriptTags = $('script[type="module"]').toArray();
+ const scriptFound = scriptTags.some((script) => {
+ const scriptSrc = $(script).attr('src');
+ return (
+ scriptSrc && scriptSrc.includes('/to-inject.astro?astro&type=script&index=0&lang.ts')
+ );
+ });
+ assert(scriptFound, `Expected script content to be injected in dev ${url}`);
+ }
});
});
});
diff --git a/packages/integrations/solid/CHANGELOG.md b/packages/integrations/solid/CHANGELOG.md
index 9f69e7e2f..2ded2af1e 100644
--- a/packages/integrations/solid/CHANGELOG.md
+++ b/packages/integrations/solid/CHANGELOG.md
@@ -1,5 +1,11 @@
# @astrojs/solid-js
+## 4.4.3
+
+### Patch Changes
+
+- [#12364](https://github.com/withastro/astro/pull/12364) [`9fc2ab8`](https://github.com/withastro/astro/commit/9fc2ab8cc848739a21bfa3f754e9bec4926dc034) Thanks [@jdtjenkins](https://github.com/jdtjenkins)! - Handles checking Svelte 5 component functions to avoid processing them as Solid components
+
## 4.4.2
### Patch Changes
diff --git a/packages/integrations/solid/package.json b/packages/integrations/solid/package.json
index 731fa0899..33b27651f 100644
--- a/packages/integrations/solid/package.json
+++ b/packages/integrations/solid/package.json
@@ -1,6 +1,6 @@
{
"name": "@astrojs/solid-js",
- "version": "4.4.2",
+ "version": "4.4.3",
"description": "Use Solid components within Astro",
"type": "module",
"types": "./dist/index.d.ts",
diff --git a/packages/integrations/solid/src/server.ts b/packages/integrations/solid/src/server.ts
index d03b4c74c..8d66fffe1 100644
--- a/packages/integrations/solid/src/server.ts
+++ b/packages/integrations/solid/src/server.ts
@@ -23,6 +23,10 @@ async function check(
) {
if (typeof Component !== 'function') return false;
if (Component.name === 'QwikComponent') return false;
+ // Svelte component renders fine by Solid as an empty string. The only way to detect
+ // if this isn't a Solid but Svelte component is to unfortunately copy the check
+ // implementation of the Svelte renderer.
+ if (Component.toString().includes('$$payload')) return false;
// There is nothing particularly special about Solid components. Basically they are just functions.
// In general, components from other frameworks (eg, MDX, React, etc.) tend to render as "undefined",
diff --git a/packages/integrations/svelte/CHANGELOG.md b/packages/integrations/svelte/CHANGELOG.md
index 494262a9e..ab1373bc5 100644
--- a/packages/integrations/svelte/CHANGELOG.md
+++ b/packages/integrations/svelte/CHANGELOG.md
@@ -1,5 +1,26 @@
# @astrojs/svelte
+## 6.0.0
+
+### Major Changes
+
+- [#12364](https://github.com/withastro/astro/pull/12364) [`9fc2ab8`](https://github.com/withastro/astro/commit/9fc2ab8cc848739a21bfa3f754e9bec4926dc034) Thanks [@jdtjenkins](https://github.com/jdtjenkins)! - Adds support for Svelte 5. Svelte 3 and 4 are no longer supported.
+
+ The integration will now also no longer add `vitePreprocess()` by default if a preprocessor is not set up in `svelte.config.js`. It is recommended to set up the Svelte config manually so that features like IDE completion and syntax highlighting work properly.
+
+ If you're using SCSS, Stylus, etc in your Svelte component style tags, make sure that the preprocessor is also set up in `svelte.config.js`. For example:
+
+ ```js
+ // svelte.config.js
+ import { vitePreprocess } from '@astrojs/svelte';
+
+ export default {
+ preprocess: vitePreprocess(),
+ };
+ ```
+
+ Refer to the [Svelte 5 migration guide](https://svelte.dev/docs/svelte/v5-migration-guide) and [`@sveltejs/vite-plugin-svelte` changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md#400) for details of their respective breaking changes.
+
## 6.0.0-beta.2
### Patch Changes
diff --git a/packages/integrations/svelte/client-v5.js b/packages/integrations/svelte/client-v5.js
deleted file mode 100644
index 123e544f6..000000000
--- a/packages/integrations/svelte/client-v5.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import { createRawSnippet, hydrate, mount, unmount } from 'svelte';
-
-const existingApplications = new WeakMap();
-
-export default (element) => {
- return async (Component, props, slotted, { client }) => {
- if (!element.hasAttribute('ssr')) return;
-
- let children = undefined;
- let $$slots = undefined;
- let renderFns = {};
-
- for (const [key, value] of Object.entries(slotted)) {
- // Legacy slot support
- $$slots ??= {};
- if (key === 'default') {
- $$slots.default = true;
- children = createRawSnippet(() => ({
- render: () => `<astro-slot>${value}</astro-slot>`,
- }));
- } else {
- $$slots[key] = createRawSnippet(() => ({
- render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
- }));
- }
- // @render support for Svelte ^5.0
- if (key === 'default') {
- renderFns.children = createRawSnippet(() => ({
- render: () => `<astro-slot>${value}</astro-slot>`,
- }));
- } else {
- renderFns[key] = createRawSnippet(() => ({
- render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
- }));
- }
- }
-
- const bootstrap = client !== 'only' ? hydrate : mount;
- if (existingApplications.has(element)) {
- existingApplications.get(element).$set({
- ...props,
- children,
- $$slots,
- ...renderFns,
- });
- } else {
- const component = bootstrap(Component, {
- target: element,
- props: {
- ...props,
- children,
- $$slots,
- ...renderFns,
- },
- });
- existingApplications.set(element, component);
- element.addEventListener('astro:unmount', () => unmount(component), { once: true });
- }
- };
-};
diff --git a/packages/integrations/svelte/client.js b/packages/integrations/svelte/client.js
deleted file mode 100644
index 288c7a661..000000000
--- a/packages/integrations/svelte/client.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const noop = () => {};
-
-let originalConsoleWarning;
-let consoleFilterRefs = 0;
-
-const existingApplications = new WeakMap();
-
-export default (element) => {
- return (Component, props, slotted, { client }) => {
- if (!element.hasAttribute('ssr')) return;
- const slots = {};
- for (const [key, value] of Object.entries(slotted)) {
- slots[key] = createSlotDefinition(key, value);
- }
-
- try {
- if (import.meta.env.DEV) useConsoleFilter();
-
- if (existingApplications.has(element)) {
- existingApplications.get(element).$set({ ...props, $$slots: slots, $$scope: { ctx: [] } });
- } else {
- const component = new Component({
- target: element,
- props: {
- ...props,
- $$slots: slots,
- $$scope: { ctx: [] },
- },
- hydrate: client !== 'only',
- $$inline: true,
- });
- existingApplications.set(element, component);
-
- element.addEventListener('astro:unmount', () => component.$destroy(), { once: true });
- }
- } finally {
- if (import.meta.env.DEV) finishUsingConsoleFilter();
- }
- };
-};
-
-function createSlotDefinition(key, children) {
- let parent;
- return [
- () => ({
- // mount
- m(target) {
- parent = target;
- target.insertAdjacentHTML(
- 'beforeend',
- `<astro-slot${key === 'default' ? '' : ` name="${key}"`}>${children}</astro-slot>`,
- );
- },
- // create
- c: noop,
- // hydrate
- l: noop,
- // destroy
- d() {
- if (!parent) return;
- const slot = parent.querySelector(
- `astro-slot${key === 'default' ? ':not([name])' : `[name="${key}"]`}`,
- );
- if (slot) slot.remove();
- },
- }),
- noop,
- noop,
- ];
-}
-
-/**
- * Reduces console noise by filtering known non-problematic warnings.
- *
- * Performs reference counting to allow parallel usage from async code.
- *
- * To stop filtering, please ensure that there always is a matching call
- * to `finishUsingConsoleFilter` afterwards.
- */
-function useConsoleFilter() {
- consoleFilterRefs++;
-
- if (!originalConsoleWarning) {
- originalConsoleWarning = console.warn;
- try {
- console.warn = filteredConsoleWarning;
- } catch {
- // If we're unable to hook `console.warn`, just accept it
- }
- }
-}
-
-/**
- * Indicates that the filter installed by `useConsoleFilter`
- * is no longer needed by the calling code.
- */
-function finishUsingConsoleFilter() {
- consoleFilterRefs--;
-
- // Note: Instead of reverting `console.warning` back to the original
- // when the reference counter reaches 0, we leave our hook installed
- // to prevent potential race conditions once `check` is made async
-}
-
-/**
- * Hook/wrapper function for the global `console.warning` function.
- *
- * Ignores known non-problematic errors while any code is using the console filter.
- * Otherwise, simply forwards all arguments to the original function.
- */
-function filteredConsoleWarning(msg, ...rest) {
- if (consoleFilterRefs > 0 && typeof msg === 'string') {
- // Astro passes `class` and `data-astro-cid` props to the Svelte component, which
- // outputs the following warning, which we can safely filter out.
-
- // NOTE: In practice data-astro-cid props have a hash suffix. Hence the use of a
- // quoted prop name string without a closing quote.
-
- const isKnownSvelteError =
- msg.endsWith("was created with unknown prop 'class'") ||
- msg.includes("was created with unknown prop 'data-astro-cid");
- if (isKnownSvelteError) return;
- }
- originalConsoleWarning(msg, ...rest);
-}
diff --git a/packages/integrations/svelte/client.svelte.js b/packages/integrations/svelte/client.svelte.js
new file mode 100644
index 000000000..1bff1bf24
--- /dev/null
+++ b/packages/integrations/svelte/client.svelte.js
@@ -0,0 +1,79 @@
+import { createRawSnippet, hydrate, mount, unmount } from 'svelte';
+
+/** @type {WrakMap<any, ReturnType<typeof createComponent>} */
+const existingApplications = new WeakMap();
+
+export default (element) => {
+ return async (Component, props, slotted, { client }) => {
+ if (!element.hasAttribute('ssr')) return;
+
+ let children = undefined;
+ let _$$slots = undefined;
+ let renderFns = {};
+
+ for (const [key, value] of Object.entries(slotted)) {
+ // Legacy slot support
+ _$$slots ??= {};
+ if (key === 'default') {
+ _$$slots.default = true;
+ children = createRawSnippet(() => ({
+ render: () => `<astro-slot>${value}</astro-slot>`,
+ }));
+ } else {
+ _$$slots[key] = createRawSnippet(() => ({
+ render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
+ }));
+ }
+ // @render support for Svelte ^5.0
+ if (key === 'default') {
+ renderFns.children = createRawSnippet(() => ({
+ render: () => `<astro-slot>${value}</astro-slot>`,
+ }));
+ } else {
+ renderFns[key] = createRawSnippet(() => ({
+ render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
+ }));
+ }
+ }
+
+ const resolvedProps = {
+ ...props,
+ children,
+ $$slots: _$$slots,
+ ...renderFns,
+ };
+ if (existingApplications.has(element)) {
+ existingApplications.get(element).setProps(resolvedProps);
+ } else {
+ const component = createComponent(Component, element, resolvedProps, client !== 'only');
+ existingApplications.set(element, component);
+ element.addEventListener('astro:unmount', () => component.destroy(), { once: true });
+ }
+ };
+};
+
+/**
+ * @param {any} Component
+ * @param {HTMLElement} target
+ * @param {Record<string, any>} props
+ * @param {boolean} shouldHydrate
+ */
+function createComponent(Component, target, props, shouldHydrate) {
+ let propsState = $state(props);
+ const bootstrap = shouldHydrate ? hydrate : mount;
+ const component = bootstrap(Component, { target, props: propsState });
+ return {
+ setProps(newProps) {
+ Object.assign(propsState, newProps);
+ // Remove props in `propsState` but not in `newProps`
+ for (const key in propsState) {
+ if (!(key in newProps)) {
+ delete propsState[key];
+ }
+ }
+ },
+ destroy() {
+ unmount(component);
+ },
+ };
+}
diff --git a/packages/integrations/svelte/package.json b/packages/integrations/svelte/package.json
index e436b4d30..2c07837e5 100644
--- a/packages/integrations/svelte/package.json
+++ b/packages/integrations/svelte/package.json
@@ -1,6 +1,6 @@
{
"name": "@astrojs/svelte",
- "version": "6.0.0-beta.2",
+ "version": "6.0.0",
"description": "Use Svelte components within Astro",
"type": "module",
"types": "./dist/index.d.ts",
@@ -23,26 +23,18 @@
".": "./dist/index.js",
"./editor": "./dist/editor.cjs",
"./*": "./*",
- "./client.js": "./client.js",
- "./client-v5.js": "./client-v5.js",
+ "./client.js": "./client.svelte.js",
"./server.js": {
"default": "./server.js",
"types": "./server.d.ts"
},
- "./server-v5.js": {
- "default": "./server-v5.js",
- "types": "./server-v5.d.ts"
- },
"./package.json": "./package.json"
},
"files": [
"dist",
"client.js",
- "client-v5.js",
"server.js",
- "server.d.ts",
- "server-v5.js",
- "server-v5.d.ts"
+ "server.d.ts"
],
"scripts": {
"build": "astro-scripts build \"src/index.ts\" && astro-scripts build \"src/editor.cts\" --force-cjs --no-clean-dist && tsc",
@@ -50,18 +42,18 @@
"dev": "astro-scripts dev \"src/**/*.ts\""
},
"dependencies": {
- "@sveltejs/vite-plugin-svelte": "^3.1.2",
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
"svelte2tsx": "^0.7.22"
},
"devDependencies": {
"astro": "workspace:*",
"astro-scripts": "workspace:*",
- "svelte": "^4.2.19",
+ "svelte": "^5.1.16",
"vite": "6.0.0-beta.6"
},
"peerDependencies": {
- "astro": "^5.0.0-alpha.0",
- "svelte": "^4.0.0 || ^5.0.0-next.190",
+ "astro": "^4.0.0",
+ "svelte": "^5.1.16",
"typescript": "^5.3.3"
},
"engines": {
diff --git a/packages/integrations/svelte/server-v5.d.ts b/packages/integrations/svelte/server-v5.d.ts
deleted file mode 100644
index bb2f29556..000000000
--- a/packages/integrations/svelte/server-v5.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import type { NamedSSRLoadedRendererValue } from 'astro';
-export default NamedSSRLoadedRendererValue;
diff --git a/packages/integrations/svelte/server-v5.js b/packages/integrations/svelte/server-v5.js
deleted file mode 100644
index a38d38260..000000000
--- a/packages/integrations/svelte/server-v5.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import { createRawSnippet } from 'svelte';
-import { render } from 'svelte/server';
-
-function check(Component) {
- // Svelte 5 generated components always accept these two props
- const str = Component.toString();
- return str.includes('$$payload') && str.includes('$$props');
-}
-
-function needsHydration(metadata) {
- // Adjust how this is hydrated only when the version of Astro supports `astroStaticSlot`
- return metadata.astroStaticSlot ? !!metadata.hydrate : true;
-}
-
-async function renderToStaticMarkup(Component, props, slotted, metadata) {
- const tagName = needsHydration(metadata) ? 'astro-slot' : 'astro-static-slot';
-
- let children = undefined;
- let $$slots = undefined;
- const renderProps = {};
-
- for (const [key, value] of Object.entries(slotted)) {
- // Legacy slot support
- $$slots ??= {};
- if (key === 'default') {
- $$slots.default = true;
- children = createRawSnippet(() => ({
- render: () => `<${tagName}>${value}</${tagName}>`,
- }));
- } else {
- $$slots[key] = createRawSnippet(() => ({
- render: () => `<${tagName} name="${key}">${value}</${tagName}>`,
- }));
- }
- // @render support for Svelte ^5.0
- const slotName = key === 'default' ? 'children' : key;
- renderProps[slotName] = createRawSnippet(() => ({
- render: () => `<${tagName}${key !== 'default' ? ` name="${key}"` : ''}>${value}</${tagName}>`,
- }));
- }
-
- const result = render(Component, {
- props: {
- ...props,
- children,
- $$slots,
- ...renderProps,
- },
- });
- return { html: result.body };
-}
-
-export default {
- check,
- renderToStaticMarkup,
- supportsAstroStaticSlot: true,
-};
diff --git a/packages/integrations/svelte/server.js b/packages/integrations/svelte/server.js
index 9878d3b59..ac133dced 100644
--- a/packages/integrations/svelte/server.js
+++ b/packages/integrations/svelte/server.js
@@ -1,5 +1,13 @@
+import { createRawSnippet } from 'svelte';
+import { render } from 'svelte/server';
+
function check(Component) {
- return Component['render'] && Component['$$render'];
+ if (typeof Component !== 'function') return false;
+ // Svelte 5 generated components always accept a `$$payload` prop.
+ // This assumes that the SSR build does not minify it (which Astro enforces by default).
+ // This isn't the best check, but the only other option otherwise is to try to render the
+ // component, which is taxing. We'll leave it as a last resort for the future for now.
+ return Component.toString().includes('$$payload');
}
function needsHydration(metadata) {
@@ -9,16 +17,44 @@ function needsHydration(metadata) {
async function renderToStaticMarkup(Component, props, slotted, metadata) {
const tagName = needsHydration(metadata) ? 'astro-slot' : 'astro-static-slot';
- const slots = {};
+
+ let children = undefined;
+ let $$slots = undefined;
+ const renderProps = {};
+
for (const [key, value] of Object.entries(slotted)) {
- slots[key] = () =>
- `<${tagName}${key === 'default' ? '' : ` name="${key}"`}>${value}</${tagName}>`;
+ // Legacy slot support
+ $$slots ??= {};
+ if (key === 'default') {
+ $$slots.default = true;
+ children = createRawSnippet(() => ({
+ render: () => `<${tagName}>${value}</${tagName}>`,
+ }));
+ } else {
+ $$slots[key] = createRawSnippet(() => ({
+ render: () => `<${tagName} name="${key}">${value}</${tagName}>`,
+ }));
+ }
+ // @render support for Svelte ^5.0
+ const slotName = key === 'default' ? 'children' : key;
+ renderProps[slotName] = createRawSnippet(() => ({
+ render: () => `<${tagName}${key !== 'default' ? ` name="${key}"` : ''}>${value}</${tagName}>`,
+ }));
}
- const { html } = Component.render(props, { $$slots: slots });
- return { html };
+
+ const result = render(Component, {
+ props: {
+ ...props,
+ children,
+ $$slots,
+ ...renderProps,
+ },
+ });
+ return { html: result.body };
}
export default {
+ name: '@astrojs/svelte',
check,
renderToStaticMarkup,
supportsAstroStaticSlot: true,
diff --git a/packages/integrations/svelte/src/index.ts b/packages/integrations/svelte/src/index.ts
index b0db3505c..0db02aff3 100644
--- a/packages/integrations/svelte/src/index.ts
+++ b/packages/integrations/svelte/src/index.ts
@@ -1,111 +1,36 @@
-import { fileURLToPath } from 'node:url';
import type { Options } from '@sveltejs/vite-plugin-svelte';
import { svelte, vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import type { AstroIntegration, AstroRenderer, ContainerRenderer } from 'astro';
-import { VERSION } from 'svelte/compiler';
-import type { UserConfig } from 'vite';
-
-const isSvelte5 = Number.parseInt(VERSION.split('.').at(0)!) >= 5;
function getRenderer(): AstroRenderer {
return {
name: '@astrojs/svelte',
- clientEntrypoint: isSvelte5 ? '@astrojs/svelte/client-v5.js' : '@astrojs/svelte/client.js',
- serverEntrypoint: isSvelte5 ? '@astrojs/svelte/server-v5.js' : '@astrojs/svelte/server.js',
+ clientEntrypoint: '@astrojs/svelte/client.js',
+ serverEntrypoint: '@astrojs/svelte/server.js',
};
}
export function getContainerRenderer(): ContainerRenderer {
return {
name: '@astrojs/svelte',
- serverEntrypoint: isSvelte5 ? '@astrojs/svelte/server-v5.js' : '@astrojs/svelte/server.js',
- };
-}
-
-async function svelteConfigHasPreprocess(root: URL) {
- const svelteConfigFiles = ['./svelte.config.js', './svelte.config.cjs', './svelte.config.mjs'];
- for (const file of svelteConfigFiles) {
- const filePath = fileURLToPath(new URL(file, root));
- try {
- // Suppress warnings by vite: "The above dynamic import cannot be analyzed by Vite."
- const config = (await import(/* @vite-ignore */ filePath)).default;
- return !!config.preprocess;
- } catch {}
- }
-}
-
-type ViteConfigurationArgs = {
- isDev: boolean;
- options?: Options | OptionsCallback;
- root: URL;
-};
-
-async function getViteConfiguration({
- options,
- isDev,
- root,
-}: ViteConfigurationArgs): Promise<UserConfig> {
- const defaultOptions: Partial<Options> = {
- emitCss: true,
- compilerOptions: { dev: isDev },
- };
-
- // `hydratable` does not need to be set in Svelte 5 as it's always hydratable by default
- if (!isSvelte5) {
- // @ts-ignore ignore Partial type above
- defaultOptions.compilerOptions.hydratable = true;
- }
-
- // Disable hot mode during the build
- if (!isDev) {
- defaultOptions.hot = false;
- }
-
- let resolvedOptions: Partial<Options>;
-
- if (!options) {
- resolvedOptions = defaultOptions;
- } else if (typeof options === 'function') {
- resolvedOptions = options(defaultOptions);
- } else {
- resolvedOptions = {
- ...options,
- ...defaultOptions,
- compilerOptions: {
- ...options.compilerOptions,
- // Always use dev and hydratable from defaults
- ...defaultOptions.compilerOptions,
- },
- };
- }
-
- if (!resolvedOptions.preprocess && !(await svelteConfigHasPreprocess(root))) {
- resolvedOptions.preprocess = vitePreprocess();
- }
-
- return {
- optimizeDeps: {
- include: [isSvelte5 ? '@astrojs/svelte/client-v5.js' : '@astrojs/svelte/client.js'],
- exclude: [isSvelte5 ? '@astrojs/svelte/server-v5.js' : '@astrojs/svelte/server.js'],
- },
- plugins: [svelte(resolvedOptions)],
+ serverEntrypoint: '@astrojs/svelte/server.js',
};
}
-type OptionsCallback = (defaultOptions: Options) => Options;
-export default function (options?: Options | OptionsCallback): AstroIntegration {
+export default function svelteIntegration(options?: Options): AstroIntegration {
return {
name: '@astrojs/svelte',
hooks: {
- // Anything that gets returned here is merged into Astro Config
- 'astro:config:setup': async ({ command, updateConfig, addRenderer, config }) => {
+ 'astro:config:setup': async ({ updateConfig, addRenderer }) => {
addRenderer(getRenderer());
updateConfig({
- vite: await getViteConfiguration({
- options,
- isDev: command === 'dev',
- root: config.root,
- }),
+ vite: {
+ optimizeDeps: {
+ include: ['@astrojs/svelte/client.js'],
+ exclude: ['@astrojs/svelte/server.js'],
+ },
+ plugins: [svelte(options)],
+ },
});
},
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b4099b989..bae575df2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -216,7 +216,7 @@ importers:
specifier: ^3.6.2
version: link:../../packages/integrations/react
'@astrojs/solid-js':
- specifier: ^4.4.2
+ specifier: ^4.4.3
version: link:../../packages/integrations/solid
'@astrojs/svelte':
specifier: ^6.0.0-beta.2
@@ -246,8 +246,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -291,7 +291,7 @@ importers:
examples/framework-solid:
dependencies:
'@astrojs/solid-js':
- specifier: ^4.4.2
+ specifier: ^4.4.3
version: link:../../packages/integrations/solid
astro:
specifier: ^5.0.0-beta.8
@@ -303,14 +303,14 @@ importers:
examples/framework-svelte:
dependencies:
'@astrojs/svelte':
- specifier: ^6.0.0-beta.2
+ specifier: ^6.0.0
version: link:../../packages/integrations/svelte
astro:
specifier: ^5.0.0-beta.8
version: link:../../packages/astro
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
examples/framework-vue:
dependencies:
@@ -357,14 +357,14 @@ importers:
specifier: ^9.0.0-alpha.1
version: 9.0.0-alpha.1(astro@packages+astro)
'@astrojs/svelte':
- specifier: ^6.0.0-beta.2
+ specifier: ^6.0.0
version: link:../../packages/integrations/svelte
astro:
specifier: ^5.0.0-beta.8
version: link:../../packages/astro
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
examples/starlog:
dependencies:
@@ -911,8 +911,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1035,8 +1035,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1092,8 +1092,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1148,8 +1148,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1188,8 +1188,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1228,8 +1228,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1268,8 +1268,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1308,8 +1308,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1348,8 +1348,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1544,8 +1544,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/e2e/fixtures/tailwindcss:
dependencies:
@@ -1610,8 +1610,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1748,8 +1748,8 @@ importers:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1769,8 +1769,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/alias-tsconfig:
dependencies:
@@ -1784,8 +1784,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/alias-tsconfig-baseurl-only:
dependencies:
@@ -1796,8 +1796,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/alias-tsconfig/deps/namespace-package: {}
@@ -1921,8 +1921,8 @@ importers:
specifier: ^10.24.3
version: 10.24.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -1954,8 +1954,8 @@ importers:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/astro-client-only/pkg: {}
@@ -2046,8 +2046,8 @@ importers:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/astro-env:
dependencies:
@@ -2153,9 +2153,6 @@ importers:
packages/astro/test/fixtures/astro-markdown:
dependencies:
- '@astrojs/svelte':
- specifier: workspace:*
- version: link:../../../../integrations/svelte
astro:
specifier: workspace:*
version: link:../../..
@@ -2382,8 +2379,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -2466,8 +2463,8 @@ importers:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/component-library-shared:
dependencies:
@@ -2772,8 +2769,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/css-import-as-inline:
dependencies:
@@ -3024,8 +3021,8 @@ importers:
specifier: ^10.24.3
version: 10.24.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -3228,8 +3225,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -3416,8 +3413,8 @@ importers:
specifier: ^1.9.3
version: 1.9.3
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -3610,8 +3607,8 @@ importers:
specifier: workspace:*
version: link:../../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/server-islands/ssr:
dependencies:
@@ -3622,8 +3619,8 @@ importers:
specifier: workspace:*
version: link:../../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/set-html:
dependencies:
@@ -3691,8 +3688,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/slots-vue:
dependencies:
@@ -4016,8 +4013,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
packages/astro/test/fixtures/tailwindcss:
dependencies:
@@ -4148,8 +4145,8 @@ importers:
specifier: workspace:*
version: link:../../..
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vue:
specifier: ^3.5.12
version: 3.5.12(typescript@5.6.3)
@@ -5110,11 +5107,11 @@ importers:
packages/integrations/svelte:
dependencies:
'@sveltejs/vite-plugin-svelte':
- specifier: ^3.1.2
- version: 3.1.2(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
+ specifier: ^4.0.0
+ version: 4.0.0(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
svelte2tsx:
specifier: ^0.7.22
- version: 0.7.22(svelte@4.2.19)(typescript@5.6.3)
+ version: 0.7.22(svelte@5.1.16)(typescript@5.6.3)
devDependencies:
astro:
specifier: workspace:*
@@ -5123,8 +5120,8 @@ importers:
specifier: workspace:*
version: link:../../../scripts
svelte:
- specifier: ^4.2.19
- version: 4.2.19
+ specifier: ^5.1.16
+ version: 5.1.16
vite:
specifier: 6.0.0-beta.6
version: 6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)
@@ -7021,19 +7018,19 @@ packages:
peerDependencies:
solid-js: ^1.8.6
- '@sveltejs/vite-plugin-svelte-inspector@2.1.0':
- resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
- engines: {node: ^18.0.0 || >=20}
+ '@sveltejs/vite-plugin-svelte-inspector@3.0.1':
+ resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22}
peerDependencies:
- '@sveltejs/vite-plugin-svelte': ^3.0.0
- svelte: ^4.0.0 || ^5.0.0-next.0
+ '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0
+ svelte: ^5.0.0-next.96 || ^5.0.0
vite: ^5.0.0
- '@sveltejs/vite-plugin-svelte@3.1.2':
- resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
- engines: {node: ^18.0.0 || >=20}
+ '@sveltejs/vite-plugin-svelte@4.0.0':
+ resolution: {integrity: sha512-kpVJwF+gNiMEsoHaw+FJL76IYiwBikkxYU83+BpqQLdVMff19KeRKLd2wisS8niNBMJ2omv5gG+iGDDwd8jzag==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22}
peerDependencies:
- svelte: ^4.0.0 || ^5.0.0-next.0
+ svelte: ^5.0.0-next.96 || ^5.0.0
vite: ^5.0.0
'@trysound/sax@0.2.0':
@@ -7417,6 +7414,11 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-typescript@1.4.13:
+ resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==}
+ peerDependencies:
+ acorn: '>=8.9.0'
+
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
@@ -7716,9 +7718,6 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
- code-red@1.0.4:
- resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
-
collapse-white-space@2.1.0:
resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
@@ -8206,6 +8205,9 @@ packages:
jiti:
optional: true
+ esm-env@1.1.4:
+ resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==}
+
esm@3.2.25:
resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
engines: {node: '>=6'}
@@ -8223,6 +8225,9 @@ packages:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
+ esrap@1.2.2:
+ resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==}
+
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@@ -9501,9 +9506,6 @@ packages:
perfect-debounce@1.0.0:
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
- periscopic@3.1.0:
- resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
-
picocolors@1.1.0:
resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
@@ -10310,21 +10312,15 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svelte-hmr@0.16.0:
- resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
- engines: {node: ^12.20 || ^14.13.1 || >= 16}
- peerDependencies:
- svelte: ^3.19.0 || ^4.0.0
-
svelte2tsx@0.7.22:
resolution: {integrity: sha512-hf55ujq17ufVpDQlJzaQfRr9EjlLIwGmFlpKq4uYrQAQFw/99q1OcVYyBT6568iJySgBUY9PdccURrORmfetmQ==}
peerDependencies:
svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
- svelte@4.2.19:
- resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
- engines: {node: '>=16'}
+ svelte@5.1.16:
+ resolution: {integrity: sha512-QcY+om9r8+uTcSfeFuv8++ExdfwVCKeT+Y7GPSZ6rQPczvy62BMtvMoi0rScabgv+upGE5jxKjd7M4u23+AjGA==}
+ engines: {node: '>=18'}
svg-tags@1.0.0:
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
@@ -11055,6 +11051,9 @@ packages:
resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
engines: {node: '>=18'}
+ zimmerframe@1.1.2:
+ resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
+
zod-to-json-schema@3.23.5:
resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==}
peerDependencies:
@@ -12563,26 +12562,25 @@ snapshots:
dependencies:
solid-js: 1.9.3
- '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)))(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))':
+ '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)))(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
+ '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
debug: 4.3.7
- svelte: 4.2.19
+ svelte: 5.1.16
vite: 6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)
transitivePeerDependencies:
- supports-color
- '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))':
+ '@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)))(svelte@4.2.19)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
+ '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)))(svelte@5.1.16)(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
debug: 4.3.7
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.12
- svelte: 4.2.19
- svelte-hmr: 0.16.0(svelte@4.2.19)
+ svelte: 5.1.16
vite: 6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1)
- vitefu: 0.2.5(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
+ vitefu: 1.0.3(vite@6.0.0-beta.6(@types/node@18.19.50)(jiti@1.21.6)(sass@1.80.6)(yaml@2.5.1))
transitivePeerDependencies:
- supports-color
@@ -13092,6 +13090,10 @@ snapshots:
dependencies:
acorn: 8.14.0
+ acorn-typescript@1.4.13(acorn@8.14.0):
+ dependencies:
+ acorn: 8.14.0
+
acorn@8.14.0: {}
agent-base@7.1.1:
@@ -13427,14 +13429,6 @@ snapshots:
clsx@2.1.1: {}
- code-red@1.0.4:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
- '@types/estree': 1.0.6
- acorn: 8.14.0
- estree-walker: 3.0.3
- periscopic: 3.1.0
-
collapse-white-space@2.1.0: {}
color-convert@2.0.1:
@@ -13850,6 +13844,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ esm-env@1.1.4: {}
+
esm@3.2.25: {}
espree@10.3.0:
@@ -13864,6 +13860,11 @@ snapshots:
dependencies:
estraverse: 5.3.0
+ esrap@1.2.2:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@types/estree': 1.0.6
+
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
@@ -15502,12 +15503,6 @@ snapshots:
perfect-debounce@1.0.0: {}
- periscopic@3.1.0:
- dependencies:
- '@types/estree': 1.0.6
- estree-walker: 3.0.3
- is-reference: 3.0.2
-
picocolors@1.1.0: {}
picomatch@2.3.1: {}
@@ -16506,33 +16501,28 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- svelte-hmr@0.16.0(svelte@4.2.19):
- dependencies:
- svelte: 4.2.19
-
- svelte2tsx@0.7.22(svelte@4.2.19)(typescript@5.6.3):
+ svelte2tsx@0.7.22(svelte@5.1.16)(typescript@5.6.3):
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
- svelte: 4.2.19
+ svelte: 5.1.16
typescript: 5.6.3
- svelte@4.2.19:
+ svelte@5.1.16:
dependencies:
'@ampproject/remapping': 2.3.0
'@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
'@types/estree': 1.0.6
acorn: 8.14.0
+ acorn-typescript: 1.4.13(acorn@8.14.0)
aria-query: 5.3.2
axobject-query: 4.1.0
- code-red: 1.0.4
- css-tree: 2.3.1
- estree-walker: 3.0.3
+ esm-env: 1.1.4
+ esrap: 1.2.2
is-reference: 3.0.2
locate-character: 3.0.0
magic-string: 0.30.12
- periscopic: 3.1.0
+ zimmerframe: 1.1.2
svg-tags@1.0.0: {}
@@ -17280,6 +17270,8 @@ snapshots:
yoctocolors@2.1.1: {}
+ zimmerframe@1.1.2: {}
+
zod-to-json-schema@3.23.5(zod@3.23.8):
dependencies:
zod: 3.23.8