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