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 @@