feat: upgrade to SvelteKit 3 and adapter-bun
Some checks failed
Test and deploy staging / staging (push) Failing after 43s
Some checks failed
Test and deploy staging / staging (push) Failing after 43s
Run the sveltekit-3 migration and finish its manual tasks:
- Move kit config into the sveltekit() Vite plugin; drop svelte.config.js
- Replace $lib with #lib subpath imports
- Declare env vars in src/env.ts and import them from $app/env/{private,public}
- Consolidate param matchers into src/params.ts
- Use error(status, message), Response.json, refreshAll and goto reset/shallow
- Fall back to a full page load when goto rejects a login return path
Switch from adapter-node to adapter-bun: the build script runs Vite under
Bun (the adapter requires it) and the image starts with `bun ./build`.
Runtime env names (PORT, BODY_SIZE_LIMIT, ADDRESS_HEADER, ...) are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import './language-learner.css';
|
||||
import { onMount } from 'svelte';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
|
||||
let { children } = $props();
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { allEntries, allLessons } from '$lib/language-learner/course';
|
||||
import { COURSES, loadCourse } from '$lib/language-learner/courses';
|
||||
import { allEntries, allLessons } from '#lib/language-learner/course.js';
|
||||
import { COURSES, loadCourse } from '#lib/language-learner/courses/index.js';
|
||||
import type { PageServerLoad } from './$types';
|
||||
|
||||
// Counted on the server so the overview doesn't download three full courses.
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<script lang="ts">
|
||||
import * as AlertDialog from '$lib/components/ui/alert-dialog/index.js';
|
||||
import * as AlertDialog from '#lib/components/ui/alert-dialog/index.js';
|
||||
let resetTarget = $state<{ code: LangCode; name: string } | null>(null);
|
||||
import { resolve } from '$app/paths';
|
||||
import ArrowRight from 'lucide-svelte/icons/arrow-right';
|
||||
import Flame from 'lucide-svelte/icons/flame';
|
||||
import ProgressBar from '$lib/components/ProgressBar.svelte';
|
||||
import { Button } from '$lib/components/ui/button/index.js';
|
||||
import * as Card from '$lib/components/ui/card/index.js';
|
||||
import { Badge } from '$lib/components/ui/badge/index.js';
|
||||
import { COURSES } from '$lib/language-learner/courses';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import type { LangCode } from '$lib/language-learner/types';
|
||||
import ProgressBar from '#lib/components/ProgressBar.svelte';
|
||||
import { Button } from '#lib/components/ui/button/index.js';
|
||||
import * as Card from '#lib/components/ui/card/index.js';
|
||||
import { Badge } from '#lib/components/ui/badge/index.js';
|
||||
import { COURSES } from '#lib/language-learner/courses/index.js';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
import type { LangCode } from '#lib/language-learner/types.js';
|
||||
|
||||
let { data } = $props();
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { isLang, loadCourse } from '$lib/language-learner/courses';
|
||||
import { loadDrills } from '$lib/language-learner/drills';
|
||||
import { isLang, loadCourse } from '#lib/language-learner/courses/index.js';
|
||||
import { loadDrills } from '#lib/language-learner/drills/index.js';
|
||||
import type { LayoutLoad } from './$types';
|
||||
|
||||
export const load: LayoutLoad = async ({ params }) => {
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
import ArrowLeft from 'lucide-svelte/icons/arrow-left';
|
||||
import Check from 'lucide-svelte/icons/check';
|
||||
import Flame from 'lucide-svelte/icons/flame';
|
||||
import ProgressBar from '$lib/components/ProgressBar.svelte';
|
||||
import { allLessons } from '$lib/language-learner/course';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import { dayKey } from '$lib/language-learner/srs';
|
||||
import { MODES } from '$lib/language-learner/modes';
|
||||
import ProgressBar from '#lib/components/ProgressBar.svelte';
|
||||
import { allLessons } from '#lib/language-learner/course.js';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
import { dayKey } from '#lib/language-learner/srs.js';
|
||||
import { MODES } from '#lib/language-learner/modes.js';
|
||||
|
||||
let { data } = $props();
|
||||
const course = $derived(data.course);
|
||||
@@ -22,7 +22,7 @@
|
||||
</script>
|
||||
|
||||
<a
|
||||
href={resolve('/projects/language-learner')}
|
||||
href={resolve('projects/language-learner')}
|
||||
class="mb-6 inline-flex items-center gap-1 text-sm ll-muted hover:text-[var(--site-text)]"
|
||||
><ArrowLeft size={14} aria-hidden="true" /> language learner</a
|
||||
>
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
import { onMount } from 'svelte';
|
||||
import ArrowLeft from 'lucide-svelte/icons/arrow-left';
|
||||
import ArrowRight from 'lucide-svelte/icons/arrow-right';
|
||||
import { lessonSession } from '$lib/language-learner/exercises';
|
||||
import { romanize } from '$lib/language-learner/hangul';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import { seeded } from '$lib/language-learner/random';
|
||||
import { hasVoice } from '$lib/language-learner/speech';
|
||||
import type { Exercise, SessionResult } from '$lib/language-learner/types';
|
||||
import Results from '$lib/language-learner/ui/Results.svelte';
|
||||
import Session from '$lib/language-learner/ui/Session.svelte';
|
||||
import Speak from '$lib/language-learner/ui/Speak.svelte';
|
||||
import { lessonSession } from '#lib/language-learner/exercises.js';
|
||||
import { romanize } from '#lib/language-learner/hangul.js';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
import { seeded } from '#lib/language-learner/random.js';
|
||||
import { hasVoice } from '#lib/language-learner/speech.js';
|
||||
import type { Exercise, SessionResult } from '#lib/language-learner/types.js';
|
||||
import Results from '#lib/language-learner/ui/Results.svelte';
|
||||
import Session from '#lib/language-learner/ui/Session.svelte';
|
||||
import Speak from '#lib/language-learner/ui/Speak.svelte';
|
||||
|
||||
let { data } = $props();
|
||||
const course = $derived(data.course);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { marked } from 'marked';
|
||||
import { allLessons } from '$lib/language-learner/course';
|
||||
import { allLessons } from '#lib/language-learner/course.js';
|
||||
import type { PageLoad } from './$types';
|
||||
|
||||
export const load: PageLoad = async ({ parent, params }) => {
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
import { resolve } from '$app/paths';
|
||||
import { onMount } from 'svelte';
|
||||
import ArrowLeft from 'lucide-svelte/icons/arrow-left';
|
||||
import { mixed, reviews, scopeOf } from '$lib/language-learner/challenges';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import { seeded, type Rng } from '$lib/language-learner/random';
|
||||
import { hasVoice } from '$lib/language-learner/speech';
|
||||
import { dayKey } from '$lib/language-learner/srs';
|
||||
import type { Exercise, SessionResult } from '$lib/language-learner/types';
|
||||
import Results from '$lib/language-learner/ui/Results.svelte';
|
||||
import Session from '$lib/language-learner/ui/Session.svelte';
|
||||
import { mixed, reviews, scopeOf } from '#lib/language-learner/challenges.js';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
import { seeded, type Rng } from '#lib/language-learner/random.js';
|
||||
import { hasVoice } from '#lib/language-learner/speech.js';
|
||||
import { dayKey } from '#lib/language-learner/srs.js';
|
||||
import type { Exercise, SessionResult } from '#lib/language-learner/types.js';
|
||||
import Results from '#lib/language-learner/ui/Results.svelte';
|
||||
import Session from '#lib/language-learner/ui/Session.svelte';
|
||||
|
||||
let { data } = $props();
|
||||
const course = $derived(data.course);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { error } from '@sveltejs/kit';
|
||||
import { MODES } from '$lib/language-learner/modes';
|
||||
import { MODES } from '#lib/language-learner/modes.js';
|
||||
import type { PageLoad } from './$types';
|
||||
|
||||
export type Mode =
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
import { resolve } from '$app/paths';
|
||||
import { onMount } from 'svelte';
|
||||
import ArrowLeft from 'lucide-svelte/icons/arrow-left';
|
||||
import { allLessons } from '$lib/language-learner/course';
|
||||
import { romanize } from '$lib/language-learner/hangul';
|
||||
import { progress } from '$lib/language-learner/progress.svelte';
|
||||
import { hasVoice } from '$lib/language-learner/speech';
|
||||
import { mastery, type Mastery } from '$lib/language-learner/srs';
|
||||
import { normalize } from '$lib/language-learner/text';
|
||||
import Speak from '$lib/language-learner/ui/Speak.svelte';
|
||||
import { allLessons } from '#lib/language-learner/course.js';
|
||||
import { romanize } from '#lib/language-learner/hangul.js';
|
||||
import { progress } from '#lib/language-learner/progress.svelte.js';
|
||||
import { hasVoice } from '#lib/language-learner/speech.js';
|
||||
import { mastery, type Mastery } from '#lib/language-learner/srs.js';
|
||||
import { normalize } from '#lib/language-learner/text.js';
|
||||
import Speak from '#lib/language-learner/ui/Speak.svelte';
|
||||
|
||||
let { data } = $props();
|
||||
const course = $derived(data.course);
|
||||
|
||||
Reference in New Issue
Block a user