Skip to content

Commit 177caf9

Browse files
committed
Migrate to Svelte 5 and Sveltekit 2
1 parent cc9e48d commit 177caf9

15 files changed

+1676
-3031
lines changed

.eslintignore

Lines changed: 0 additions & 16 deletions
This file was deleted.

.eslintrc.cjs

Lines changed: 0 additions & 20 deletions
This file was deleted.

.yarn/install-state.gz

23.4 KB
Binary file not shown.

.yarnrc.yml

Lines changed: 0 additions & 1 deletion
This file was deleted.

eslint.config.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// @ts-check
2+
3+
import eslint from '@eslint/js';
4+
import globals from 'globals';
5+
import tseslint from 'typescript-eslint';
6+
import eslintPluginSvelte from 'eslint-plugin-svelte';
7+
import eslintConfigPrettier from 'eslint-config-prettier';
8+
import * as svelteParser from 'svelte-eslint-parser';
9+
import * as typescriptParser from '@typescript-eslint/parser';
10+
import svelteConfig from './svelte.config.js';
11+
12+
export default [
13+
{
14+
ignores: [
15+
'**/DS_Store',
16+
'node_modules/',
17+
'docs/',
18+
'.svelte-kit/',
19+
'**/package',
20+
'**/.env',
21+
'**/.env.*',
22+
'**/!.env.example',
23+
// Ignore files for PNPM, NPM and YARN
24+
'**/pnpm-lock.yaml',
25+
'**/package-lock.json',
26+
'**/yarn.lock',
27+
'**/.pnp.cjs',
28+
'**/.pnp.loader.mjs',
29+
'.yarn/'
30+
]
31+
},
32+
eslint.configs.recommended,
33+
...tseslint.configs.recommended,
34+
...eslintPluginSvelte.configs['flat/recommended'],
35+
...eslintPluginSvelte.configs['flat/prettier'],
36+
eslintConfigPrettier,
37+
{
38+
files: ['**/*.svelte'],
39+
languageOptions: {
40+
parser: svelteParser,
41+
globals: {
42+
...globals.browser,
43+
...globals.node
44+
},
45+
parserOptions: {
46+
parser: typescriptParser,
47+
svelteConfig,
48+
sourceType: 'module',
49+
ecmaVersion: 2025,
50+
project: './tsconfig.json',
51+
extraFileExtensions: ['.svelte']
52+
}
53+
}
54+
}
55+
];

package.json

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,31 @@
99
"preview": "vite preview",
1010
"check": "svelte-check --tsconfig ./tsconfig.json",
1111
"check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
12-
"lint": "prettier --check --plugin-search-dir=. . ; eslint .",
13-
"format": "prettier --write --plugin-search-dir=. ."
12+
"lint": "prettier --check . ; eslint .",
13+
"format": "prettier --write ."
1414
},
1515
"devDependencies": {
16-
"@sveltejs/adapter-static": "2.0.1",
17-
"@sveltejs/kit": "1.15.0",
18-
"@typescript-eslint/eslint-plugin": "5.57.1",
19-
"@typescript-eslint/parser": "5.57.1",
20-
"eslint": "8.37.0",
21-
"eslint-config-prettier": "8.8.0",
22-
"eslint-plugin-svelte3": "4.0.0",
23-
"prettier": "2.8.7",
24-
"prettier-plugin-svelte": "2.10.0 ",
25-
"svelte": "3.58.0",
26-
"svelte-check": "3.1.4",
27-
"svelte-preprocess": "5.0.3",
28-
"tslib": "2.5.0",
29-
"typescript": "5.0.3",
30-
"vite": "4.2.1"
31-
},
32-
"installConfig": {
33-
"pnp": true
16+
"@eslint/js": "^9.17.0",
17+
"@sveltejs/adapter-static": "^3.0.8",
18+
"@sveltejs/kit": "^2.15.1",
19+
"@sveltejs/vite-plugin-svelte": "^5.0.3",
20+
"@types/node": "^22.10.5",
21+
"@typescript-eslint/eslint-plugin": "8.19.0",
22+
"@typescript-eslint/parser": "8.19.0",
23+
"eslint": "9.17.0",
24+
"eslint-config-prettier": "9.1.0",
25+
"eslint-plugin-svelte": "^2.46.1",
26+
"globals": "^15.14.0",
27+
"prettier": "^3.4.2",
28+
"prettier-plugin-svelte": "^3.3.2",
29+
"svelte": "^5.16.2",
30+
"svelte-check": "^4.1.1",
31+
"svelte-eslint-parser": "^0.43.0",
32+
"svelte-preprocess": "^6.0.3",
33+
"tslib": "2.8.1",
34+
"typescript": "^5.7.2",
35+
"typescript-eslint": "^8.19.0",
36+
"vite": "^6.0.7"
3437
},
3538
"type": "module",
3639
"packageManager": "[email protected]"

src/app.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html lang="en">
33
<head>
44
<meta charset="utf-8" />

src/lib/Gallery.svelte

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
<script lang="ts">
2-
export let center = false;
2+
interface Props {
3+
center?: boolean;
4+
children?: import('svelte').Snippet;
5+
}
6+
7+
let { center = false, children }: Props = $props();
38
</script>
49

510
<div class={center ? 'center' : ''}>
6-
<slot />
11+
{@render children?.()}
712
</div>
813

914
<style>

src/lib/GalleryEntry.svelte

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
<script lang="ts">
22
import fallbackImage from '/src/lib/assets/no-image.jpg';
3-
export let src: string = fallbackImage;
4-
export let title = 'Unknown';
5-
export let deployedLink: string | undefined = undefined;
6-
export let repositoryLink: string | undefined = undefined;
3+
interface Props {
4+
src?: string;
5+
title?: string;
6+
deployedLink?: string | undefined;
7+
repositoryLink?: string | undefined;
8+
children?: import('svelte').Snippet;
9+
}
10+
11+
let {
12+
src = fallbackImage,
13+
title = 'Unknown',
14+
deployedLink = undefined,
15+
repositoryLink = undefined,
16+
children
17+
}: Props = $props();
718
8-
let touchmoved = false;
19+
let touchmoved = $state(false);
920
function handleTouch() {
1021
if (touchmoved === false) {
1122
toggle();
1223
}
1324
}
1425
15-
let isOpen = false;
26+
let isOpen = $state(false);
1627
function open() {
1728
isOpen = true;
1829
}
@@ -30,20 +41,20 @@
3041
</script>
3142

3243
<figure
33-
on:mouseenter={() => open()}
34-
on:mouseleave={() => close()}
35-
on:touchstart={() => {
44+
onmouseenter={() => open()}
45+
onmouseleave={() => close()}
46+
ontouchstart={() => {
3647
touchmoved = false;
3748
}}
38-
on:touchmove={() => {
49+
ontouchmove={() => {
3950
touchmoved = true;
4051
}}
41-
on:touchend={handleTouch}
52+
ontouchend={handleTouch}
4253
>
4354
<img {src} alt={title} />
4455
<figcaption class={isOpen ? 'opened' : 'closed'}>
4556
<h1>{title}</h1>
46-
<slot />
57+
{@render children?.()}
4758
<div>
4859
{#if deployedLink}
4960
<a href={deployedLink}>Visit Site</a>

src/lib/Sidebar.svelte

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1+
<script lang="ts">
2+
interface Props {
3+
children?: import('svelte').Snippet;
4+
}
5+
6+
let { children }: Props = $props();
7+
</script>
8+
19
<nav>
2-
<slot />
10+
{@render children?.()}
311
</nav>
412

513
<style>

src/lib/SidebarLink.svelte

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
<script lang="ts">
2-
export let to: HTMLElement;
3-
export let name: string;
2+
import { preventDefault } from 'svelte/legacy';
3+
4+
interface Props {
5+
to: HTMLElement;
6+
name: string;
7+
}
8+
9+
let { to, name }: Props = $props();
410
</script>
511

6-
<a href="/" on:click|preventDefault={() => to.scrollIntoView({ behavior: 'smooth' })}>{name}</a>
12+
<a href="/" onclick={preventDefault(() => to.scrollIntoView({ behavior: 'smooth' }))}>{name}</a>
713

814
<style>
915
a {

src/lib/SquareLink.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
import EmailLogo from '$lib/assets/email.svg';
66
import XingLogo from '$lib/assets/xing.svg';
77
8-
export let href: string;
8+
interface Props {
9+
href: string;
10+
}
11+
12+
let { href }: Props = $props();
913
1014
const siteName = getSiteName(href);
1115

src/routes/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import SidebarLink from '$lib/SidebarLink.svelte';
66
import SquareLink from '$lib/SquareLink.svelte';
77
8-
let sections: { [key: string]: HTMLElement } = {};
8+
let sections: { [key: string]: HTMLElement } = $state({});
99
</script>
1010

1111
<Sidebar>

vite.config.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
11
// vite.config.js
22
import { sveltekit } from '@sveltejs/kit/vite';
3-
import { searchForWorkspaceRoot } from 'vite';
43

54
/** @type {import('vite').UserConfig} */
65
const config = {
7-
plugins: [sveltekit()],
8-
server: {
9-
fs: {
10-
allow: [
11-
// Workaround for Yarn PNP
12-
searchForWorkspaceRoot(process.cwd())
13-
]
14-
}
15-
}
6+
plugins: [sveltekit()]
167
};
178

189
export default config;

0 commit comments

Comments
 (0)