diff --git a/.changeset/loud-geese-change.md b/.changeset/loud-geese-change.md
new file mode 100644
index 000000000..49cbf1864
--- /dev/null
+++ b/.changeset/loud-geese-change.md
@@ -0,0 +1,5 @@
+---
+'@sveltejs/sv-utils': patch
+---
+
+fix: `svelte.addFragment` now accept types
diff --git a/.changeset/olive-camels-smoke.md b/.changeset/olive-camels-smoke.md
new file mode 100644
index 000000000..f52b86d51
--- /dev/null
+++ b/.changeset/olive-camels-smoke.md
@@ -0,0 +1,5 @@
+---
+"sv": patch
+---
+
+fix(paraglide): type and lint errors
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/input.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/input.svelte
new file mode 100644
index 000000000..14218c793
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/input.svelte
@@ -0,0 +1,3 @@
+
+
+
This is a Svelte component.
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/output.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/output.svelte
new file mode 100644
index 000000000..755877a49
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/output.svelte
@@ -0,0 +1,4 @@
+
+
+This is a Svelte component.
+{1 + 2}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/run.ts b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/run.ts
new file mode 100644
index 000000000..c92874e95
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script-ts/run.ts
@@ -0,0 +1,5 @@
+import { type SvelteAst, svelte } from '../../../../../index.ts';
+
+export function run(ast: SvelteAst.Root): void {
+ svelte.addFragment(ast, '{1 + 2}');
+}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/input.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/input.svelte
new file mode 100644
index 000000000..b6edf8bb2
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/input.svelte
@@ -0,0 +1,3 @@
+
+
+This is a Svelte component.
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/output.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/output.svelte
new file mode 100644
index 000000000..feb1846e6
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/output.svelte
@@ -0,0 +1,4 @@
+
+
+This is a Svelte component.
+{1 + 2}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/run.ts b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/run.ts
new file mode 100644
index 000000000..c92874e95
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-js-with-script/run.ts
@@ -0,0 +1,5 @@
+import { type SvelteAst, svelte } from '../../../../../index.ts';
+
+export function run(ast: SvelteAst.Root): void {
+ svelte.addFragment(ast, '{1 + 2}');
+}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/input.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/input.svelte
new file mode 100644
index 000000000..14218c793
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/input.svelte
@@ -0,0 +1,3 @@
+
+
+This is a Svelte component.
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/output.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/output.svelte
new file mode 100644
index 000000000..12b028a33
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/output.svelte
@@ -0,0 +1,4 @@
+
+
+This is a Svelte component.
+{1 as number}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/run.ts b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/run.ts
new file mode 100644
index 000000000..68ce125d3
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts-with-script-ts/run.ts
@@ -0,0 +1,5 @@
+import { type SvelteAst, svelte } from '../../../../../index.ts';
+
+export function run(ast: SvelteAst.Root): void {
+ svelte.addFragment(ast, '{1 as number}', { language: 'ts' });
+}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/input.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/input.svelte
new file mode 100644
index 000000000..c106d7f93
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/input.svelte
@@ -0,0 +1 @@
+This is a Svelte component.
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/output.svelte b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/output.svelte
new file mode 100644
index 000000000..12b028a33
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/output.svelte
@@ -0,0 +1,4 @@
+
+
+This is a Svelte component.
+{1 as number}
diff --git a/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/run.ts b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/run.ts
new file mode 100644
index 000000000..68ce125d3
--- /dev/null
+++ b/packages/sv-utils/src/tests/svelte/svelte/common/to-fragment-ts/run.ts
@@ -0,0 +1,5 @@
+import { type SvelteAst, svelte } from '../../../../../index.ts';
+
+export function run(ast: SvelteAst.Root): void {
+ svelte.addFragment(ast, '{1 as number}', { language: 'ts' });
+}
diff --git a/packages/sv-utils/src/tooling/svelte/index.ts b/packages/sv-utils/src/tooling/svelte/index.ts
index 02bbbaf7e..8e4e468fd 100644
--- a/packages/sv-utils/src/tooling/svelte/index.ts
+++ b/packages/sv-utils/src/tooling/svelte/index.ts
@@ -87,9 +87,13 @@ export function addFragment(
content: string,
options?: {
mode?: 'append' | 'prepend';
+ language?: 'ts' | 'js';
}
): void {
- const { ast: fragmentAst } = parseSvelte(content);
+ if (options?.language === 'ts') ensureScript(ast, { language: 'ts' });
+
+ const source = options?.language === 'ts' ? `${content}` : content;
+ const { ast: fragmentAst } = parseSvelte(source);
if (options?.mode === 'prepend') {
ast.fragment.nodes.unshift(...fragmentAst.fragment.nodes);
diff --git a/packages/sv/src/addons/paraglide.ts b/packages/sv/src/addons/paraglide.ts
index 8d288183f..d2f2d2f5a 100644
--- a/packages/sv/src/addons/paraglide.ts
+++ b/packages/sv/src/addons/paraglide.ts
@@ -1,5 +1,5 @@
import { log } from '@clack/prompts';
-import { color, type SvelteAst, transforms } from '@sveltejs/sv-utils';
+import { color, createPrinter, dedent, type SvelteAst, transforms } from '@sveltejs/sv-utils';
import { defineAddon, defineAddonOptions } from '../core/config.ts';
import { addToDemoPage } from './common.ts';
@@ -54,6 +54,7 @@ export default defineAddon({
if (!isKit) unsupported('Requires SvelteKit');
},
run: ({ sv, options, file, language, directory }) => {
+ const [ts] = createPrinter(language === 'ts');
const paraglideOutDir = `${directory.lib}/paraglide`;
sv.devDependency('@inlang/paraglide-js', '^2.10.0');
@@ -196,13 +197,23 @@ export default defineAddon({
from: '$lib/paraglide/runtime'
});
js.imports.addNamed(ast.instance.content, { imports: ['page'], from: '$app/state' });
+ js.imports.addNamed(ast.instance.content, { imports: ['resolve'], from: '$app/paths' });
+ if (language === 'ts') {
+ js.imports.addNamed(ast.instance.content, {
+ imports: ['Pathname'],
+ from: '$app/types',
+ isType: true
+ });
+ }
svelte.addFragment(
ast,
- `
- {#each locales as locale}
-
{locale}
- {/each}
-
`
+ dedent`
+
+ {#each locales as locale (locale)}
+
{locale}
+ {/each}
+
`,
+ { language }
);
})
);
diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/+layout.svelte b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/+layout.svelte
index b22ec360f..70b0cbf40 100644
--- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/+layout.svelte
+++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/+layout.svelte
@@ -1,4 +1,6 @@