diff --git a/.changeset/free-bats-march.md b/.changeset/free-bats-march.md new file mode 100644 index 000000000..b10826dca --- /dev/null +++ b/.changeset/free-bats-march.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat(cli): wrap links with `resolve()` function to follow [best practices](https://svelte.dev/docs/kit/$app-paths#resolve) diff --git a/packages/addons/common.ts b/packages/addons/common.ts index a1a8f2ce5..2cde17a6e 100644 --- a/packages/addons/common.ts +++ b/packages/addons/common.ts @@ -63,18 +63,22 @@ export function addEslintConfigPrettier(content: string): string { return generateCode(); } -export function addToDemoPage(content: string, path: string): string { - const { template, generateCode } = parseSvelte(content); +export function addToDemoPage(existingContent: string, path: string, typescript: boolean): string { + const { script, template, generateCode } = parseSvelte(existingContent, { typescript }); for (const node of template.ast.childNodes) { - if (node.type === 'tag' && node.attribs['href'] === `/demo/${path}`) { - return content; + // we use inclules as it could be "/demo/${path}" or "resolve("demo/${path}")" or "resolve('demo/${path}')" + if (node.type === 'tag' && node.attribs['href'].includes(`/demo/${path}`)) { + return existingContent; } } - const newLine = template.source ? '\n' : ''; - const src = template.source + `${newLine}${path}`; - return generateCode({ template: src }); + imports.addNamed(script.ast, { imports: ['resolve'], from: '$app/paths' }); + + return generateCode({ + script: script.generateCode(), + template: `${path}\n${template.source}` + }); } /** diff --git a/packages/addons/lucia/index.ts b/packages/addons/lucia/index.ts index 3fa87d713..1507c4918 100644 --- a/packages/addons/lucia/index.ts +++ b/packages/addons/lucia/index.ts @@ -396,7 +396,7 @@ export default defineAddon({ if (options.demo) { sv.file(`${kit?.routesDirectory}/demo/+page.svelte`, (content) => { - return addToDemoPage(content, 'lucia'); + return addToDemoPage(content, 'lucia', typescript); }); sv.file(`${kit!.routesDirectory}/demo/lucia/login/+page.server.${ext}`, (content) => { diff --git a/packages/addons/paraglide/index.ts b/packages/addons/paraglide/index.ts index 86532e77a..bee25e136 100644 --- a/packages/addons/paraglide/index.ts +++ b/packages/addons/paraglide/index.ts @@ -178,7 +178,7 @@ export default defineAddon({ if (options.demo) { sv.file(`${kit.routesDirectory}/demo/+page.svelte`, (content) => { - return addToDemoPage(content, 'paraglide'); + return addToDemoPage(content, 'paraglide', typescript); }); // add usage example diff --git a/packages/create/templates/demo/src/routes/Header.svelte b/packages/create/templates/demo/src/routes/Header.svelte index 1eb310ba3..0e719eb08 100644 --- a/packages/create/templates/demo/src/routes/Header.svelte +++ b/packages/create/templates/demo/src/routes/Header.svelte @@ -1,4 +1,5 @@ + About @@ -20,7 +24,7 @@

- The Sverdle page illustrates SvelteKit's data loading and form handling. Try - using it with JavaScript disabled! + The Sverdle page illustrates SvelteKit's data loading and form + handling. Try using it with JavaScript disabled!

diff --git a/packages/create/templates/demo/src/routes/sverdle/+page.svelte b/packages/create/templates/demo/src/routes/sverdle/+page.svelte index 74aba2699..98d43fca8 100644 --- a/packages/create/templates/demo/src/routes/sverdle/+page.svelte +++ b/packages/create/templates/demo/src/routes/sverdle/+page.svelte @@ -1,5 +1,6 @@