From ad146a7e3a32464fedd0c19c0b80ab430e87d9ef Mon Sep 17 00:00:00 2001 From: Michael Aufreiter Date: Sun, 26 Jul 2026 18:03:47 +0200 Subject: [PATCH 1/9] Migrate to SvelteKit 3 --- ARCHITECTURE.md | 13 +- CLAUDE.md | 2 +- IMPLEMENTATION_PLAN.md | 11 + README.md | 6 +- docker-compose.yml | 2 + fly.toml | 1 + package.json | 18 +- pnpm-lock.yaml | 522 ++++++++++-------- scripts/check-assets.js | 2 +- scripts/mirror-sweep.js | 4 +- scripts/restore-assets.js | 2 +- src/env.ts | 2 +- src/hooks.server.ts | 6 +- src/lib/api.remote.ts | 24 +- src/lib/client/asset_upload.ts | 2 +- src/lib/client/process_asset.ts | 2 +- src/lib/client/process_video.ts | 2 +- src/lib/demo_doc.ts | 2 +- src/lib/document_graph.ts | 2 +- src/lib/document_schema.ts | 2 +- src/lib/index.ts | 2 +- src/lib/new_page.ts | 4 +- src/lib/page_metadata.ts | 4 +- src/lib/server/asset_storage.ts | 4 +- src/lib/server/auth.ts | 2 +- src/lib/server/db.ts | 2 +- src/lib/server/db_snapshot.ts | 2 +- src/lib/server/markdown/compose.ts | 2 +- src/lib/server/markdown/convert.ts | 4 +- src/lib/server/markdown/registry.ts | 2 +- src/lib/server/s3.ts | 2 +- src/lib/server/seed_initial_documents.ts | 4 +- src/routes/+layout.server.ts | 6 +- src/routes/+page.server.ts | 2 +- src/routes/[page_id]/+page.server.ts | 14 +- src/routes/api/assets/+server.ts | 6 +- src/routes/api/assets/[asset_id]/+server.ts | 6 +- .../api/assets/[asset_id]/variants/+server.ts | 6 +- src/routes/assets/[...path]/+server.ts | 4 +- .../assets/[...path]/asset-response.test.ts | 2 +- src/routes/components/Accordion.svelte | 2 +- src/routes/components/App.svelte | 18 +- src/routes/components/AuthDialog.svelte | 2 +- src/routes/components/Button.svelte | 2 +- src/routes/components/CaptionedFigure.svelte | 2 +- src/routes/components/Code.svelte | 2 +- .../components/DescriptiveGallery.svelte | 2 +- .../components/DescriptiveGalleryItem.svelte | 2 +- .../components/DescriptiveListing.svelte | 2 +- .../components/DescriptiveListingItem.svelte | 2 +- src/routes/components/Emphasis.svelte | 2 +- src/routes/components/Feature.svelte | 2 +- src/routes/components/Figure.svelte | 2 +- src/routes/components/Footer.svelte | 2 +- src/routes/components/FooterLink.svelte | 2 +- src/routes/components/Gallery.svelte | 2 +- src/routes/components/GalleryItem.svelte | 2 +- src/routes/components/Heading1.svelte | 2 +- src/routes/components/Heading1XL.svelte | 2 +- src/routes/components/Heading2.svelte | 2 +- src/routes/components/Heading3.svelte | 2 +- src/routes/components/Heading4.svelte | 2 +- src/routes/components/Highlight.svelte | 2 +- src/routes/components/Image.svelte | 4 +- src/routes/components/Link.svelte | 7 +- src/routes/components/LinkPreview.svelte | 7 +- src/routes/components/Media.svelte | 2 +- src/routes/components/MediaControls.svelte | 2 +- src/routes/components/Nav.svelte | 2 +- src/routes/components/NavButton.svelte | 2 +- src/routes/components/NavLink.svelte | 2 +- src/routes/components/NavMedia.svelte | 2 +- src/routes/components/Page.svelte | 2 +- src/routes/components/PageDeleteDialog.svelte | 2 +- src/routes/components/PageUrlDialog.svelte | 2 +- src/routes/components/PagesDrawer.svelte | 13 +- src/routes/components/Paragraph.svelte | 2 +- src/routes/components/ParagraphLG.svelte | 2 +- src/routes/components/ParagraphSM.svelte | 2 +- src/routes/components/ParagraphXL.svelte | 2 +- src/routes/components/Preformatted.svelte | 4 +- src/routes/components/Prose.svelte | 2 +- src/routes/components/ProseGrid.svelte | 2 +- src/routes/components/ProseGridItem.svelte | 2 +- .../components/SizableViewboxControls.svelte | 4 +- src/routes/components/Strong.svelte | 2 +- src/routes/components/SupportingMedia.svelte | 2 +- src/routes/components/Toolbar.svelte | 2 +- src/routes/components/Video.svelte | 4 +- .../components/page_browser_context.svelte.ts | 2 +- src/routes/create_session.ts | 8 +- src/routes/new/+page.server.ts | 2 +- src/routes/new/+page.svelte | 2 +- src/routes/svedit_context.ts | 2 +- svelte.config.js | 1 - tsconfig.json | 3 +- vite.config.ts | 3 +- 97 files changed, 466 insertions(+), 407 deletions(-) delete mode 100644 svelte.config.js diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 8d796c82..530354f9 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -77,7 +77,7 @@ Guidelines: ## SvelteKit configuration -The app uses Svelte's experimental async features and SvelteKit's remote functions. All SvelteKit configuration is passed to the `sveltekit()` plugin in `vite.config.ts` (the newer configuration style, expected to become the default in SvelteKit 3); `svelte.config.js` stays an empty stub so tools that require its presence keep working. The "svelte.config.js is ignored" warning printed by dev/build/check commands is expected with this setup. +The app targets the SvelteKit 3 prerelease line, beginning with `@sveltejs/kit@3.0.0-next.12`. All SvelteKit configuration is passed to the `sveltekit()` plugin in `vite.config.ts`; SvelteKit 3 no longer supports `svelte.config.js`. Internal library imports use the package-level `#lib` subpath alias declared in `package.json`, replacing SvelteKit 2's generated `$lib` alias. The app uses Svelte's experimental async features, SvelteKit remote functions, and explicit environment variables. ```ts sveltekit({ @@ -95,6 +95,8 @@ sveltekit({ **Experimental async** allows `await` in Svelte markup and top-level `await` in ` diff --git a/src/routes/components/LinkPreview.svelte b/src/routes/components/LinkPreview.svelte index c62d5fdd..a08f6598 100644 --- a/src/routes/components/LinkPreview.svelte +++ b/src/routes/components/LinkPreview.svelte @@ -2,6 +2,7 @@ import { get_svedit_context } from '../svedit_context.js'; import { get_app_context } from '../app_context.js'; import { resolve } from '$app/paths'; + import type { PathnameWithSearchOrHash } from '$app/types'; import { serialize_path } from 'svedit'; import Media from './Media.svelte'; @@ -18,7 +19,7 @@ if (!app.has_backend) return null; if (!href) return null; - const api_module = await import('$lib/api.remote.js'); + const api_module = await import('#lib/api.remote.js'); return await api_module.get_internal_link_preview(href); }); @@ -55,7 +56,9 @@ function get_preview_href(href: unknown) { if (typeof href !== 'string') return ''; - return href.startsWith('/') && !href.startsWith('//') ? resolve(href as any) : href; + if (!href.startsWith('/') || href.startsWith('//')) return href; + if (href === '/') return resolve('/'); + return resolve(href.slice(1) as PathnameWithSearchOrHash); } diff --git a/src/routes/components/Media.svelte b/src/routes/components/Media.svelte index d0c6756e..46f20223 100644 --- a/src/routes/components/Media.svelte +++ b/src/routes/components/Media.svelte @@ -2,7 +2,7 @@ import Image from './Image.svelte'; import Video from './Video.svelte'; - import type { PreviewMediaNode } from '$lib/page_metadata.js'; + import type { PreviewMediaNode } from '#lib/page_metadata.js'; // Accepts both document media nodes (Nodes['image'] / Nodes['video']) and // derived preview nodes — anything with the media display shape. diff --git a/src/routes/components/MediaControls.svelte b/src/routes/components/MediaControls.svelte index 8a51695c..482dd36e 100644 --- a/src/routes/components/MediaControls.svelte +++ b/src/routes/components/MediaControls.svelte @@ -1,6 +1,6 @@
- + +
From 0c285506cdbff0cb038aa41bae63630c0f8a7d9d Mon Sep 17 00:00:00 2001 From: Michael Aufreiter Date: Mon, 27 Jul 2026 23:43:35 +0200 Subject: [PATCH 7/9] Linting --- src/routes/components/EditLink.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/components/EditLink.svelte b/src/routes/components/EditLink.svelte index 71f7c5e4..ddf74f32 100644 --- a/src/routes/components/EditLink.svelte +++ b/src/routes/components/EditLink.svelte @@ -156,7 +156,7 @@ Open in new tab From f1e28c42909cdba31a2f98c6d5f0308e1885abbf Mon Sep 17 00:00:00 2001 From: Michael Aufreiter Date: Tue, 28 Jul 2026 00:13:40 +0200 Subject: [PATCH 8/9] Linting --- src/routes/components/Toolbar.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/components/Toolbar.svelte b/src/routes/components/Toolbar.svelte index 2efafe50..ccb4eff0 100644 --- a/src/routes/components/Toolbar.svelte +++ b/src/routes/components/Toolbar.svelte @@ -288,7 +288,7 @@ {#if !app_commands.save_document.disabled}