sv-router 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -10
- package/package.json +19 -17
- package/src/Router.svelte +8 -3
- package/src/helpers/utils.js +1 -1
- package/src/index.d.ts +1 -0
- package/src/search-params.svelte.js +3 -0
package/README.md
CHANGED
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
# sv-router
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/sv-router)
|
|
8
|
-
|
|
8
|
+

|
|
9
|
+

|
|
9
10
|
[](https://codecov.io/github/colinlienard/sv-router)
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Flexible, ergonomic, and complete Svelte 5 router.
|
|
12
13
|
|
|
13
14
|
[Documentation](https://sv-router.vercel.app/) • [Getting Started](https://sv-router.vercel.app/guide/getting-started) • [Reference](https://sv-router.vercel.app/reference)
|
|
14
15
|
|
|
@@ -18,16 +19,14 @@ A feature-rich yet intuitive routing library for Svelte single-page apps.
|
|
|
18
19
|
|
|
19
20
|
## Features
|
|
20
21
|
|
|
21
|
-
- 🔒 **
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- 🔒 **Type-safe navigation**: Catch broken links before you ship.
|
|
23
|
+
- 🗂️ **File-based routing (optional)**: DX of a meta-framework-like approach.
|
|
24
|
+
- 🪶 **Lightweight**: < 5kB gzipped.
|
|
25
|
+
- ⚡ **Performance**: Built-in code splitting and preloading.
|
|
24
26
|
- 🔍 **Reactive search params**: For simpler state management in the URL.
|
|
27
|
+
- 🌿 **Nested routes**: Share layouts across pages.
|
|
25
28
|
- 🛡️ **Hooks**: For navigation guards, data loading, or analytics tracking.
|
|
26
|
-
-
|
|
27
|
-
- 🧩 **Familiar API**: Follows established conventions from popular meta frameworks.
|
|
28
|
-
- 🪶 **Lightweight**: Minimal impact on your bundle size.
|
|
29
|
-
- 🚀 **Made for Svelte 5**: True Svelte 5 implementation with the latest features.
|
|
30
|
-
- #️⃣ **Hash-based routing**: Hash-based routing enables usage in local environments.
|
|
29
|
+
- #️⃣ **Hash-based routing**: Works inside Electron/Tauri.
|
|
31
30
|
|
|
32
31
|
## Getting Started
|
|
33
32
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sv-router",
|
|
3
|
-
"version": "0.16.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.16.1",
|
|
4
|
+
"description": "Type-safe routing for Svelte SPAs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"svelte",
|
|
7
7
|
"router",
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
"types": "./src/vite-plugin/index.d.ts"
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
-
"bin": "./src/cli/index.js",
|
|
32
31
|
"files": [
|
|
33
32
|
"src"
|
|
34
33
|
],
|
|
@@ -36,30 +35,30 @@
|
|
|
36
35
|
"esm-env": "^1.2.2"
|
|
37
36
|
},
|
|
38
37
|
"devDependencies": {
|
|
39
|
-
"@changesets/cli": "^2.
|
|
38
|
+
"@changesets/cli": "^2.31.0",
|
|
40
39
|
"@eslint/js": "^10.0.1",
|
|
41
|
-
"@sveltejs/vite-plugin-svelte": "^7.
|
|
40
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
42
41
|
"@testing-library/jest-dom": "^6.9.1",
|
|
43
42
|
"@testing-library/svelte": "^5.3.1",
|
|
44
43
|
"@testing-library/user-event": "^14.6.1",
|
|
45
|
-
"@types/node": "^24.12.
|
|
46
|
-
"@vitest/coverage-v8": "^4.1.
|
|
47
|
-
"eslint": "^10.0
|
|
44
|
+
"@types/node": "^24.12.3",
|
|
45
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
46
|
+
"eslint": "^10.3.0",
|
|
48
47
|
"eslint-config-prettier": "^10.1.8",
|
|
49
48
|
"eslint-plugin-simple-import-sort": "^13.0.0",
|
|
50
|
-
"eslint-plugin-svelte": "^3.
|
|
49
|
+
"eslint-plugin-svelte": "^3.17.1",
|
|
51
50
|
"eslint-plugin-unicorn": "^64.0.0",
|
|
52
|
-
"globals": "^17.
|
|
53
|
-
"happy-dom": "^20.
|
|
54
|
-
"prettier": "^3.8.
|
|
51
|
+
"globals": "^17.6.0",
|
|
52
|
+
"happy-dom": "^20.9.0",
|
|
53
|
+
"prettier": "^3.8.3",
|
|
55
54
|
"prettier-plugin-jsdoc": "^1.8.0",
|
|
56
55
|
"prettier-plugin-svelte": "^3.5.1",
|
|
57
|
-
"svelte-check": "^4.4.
|
|
56
|
+
"svelte-check": "^4.4.8",
|
|
58
57
|
"type-testing": "^0.2.0",
|
|
59
|
-
"typescript": "^6.0.
|
|
60
|
-
"typescript-eslint": "^8.
|
|
61
|
-
"vite": "^8.0.
|
|
62
|
-
"vitest": "^4.1.
|
|
58
|
+
"typescript": "^6.0.3",
|
|
59
|
+
"typescript-eslint": "^8.59.2",
|
|
60
|
+
"vite": "^8.0.11",
|
|
61
|
+
"vitest": "^4.1.5"
|
|
63
62
|
},
|
|
64
63
|
"peerDependencies": {
|
|
65
64
|
"svelte": "^5"
|
|
@@ -78,5 +77,8 @@
|
|
|
78
77
|
"format": "prettier . --check",
|
|
79
78
|
"format:fix": "prettier . --write",
|
|
80
79
|
"changeset": "changeset"
|
|
80
|
+
},
|
|
81
|
+
"bin": {
|
|
82
|
+
"sv-router": "./src/cli/index.js"
|
|
81
83
|
}
|
|
82
84
|
}
|
package/src/Router.svelte
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
+
import { untrack } from 'svelte';
|
|
2
3
|
import { on } from 'svelte/events';
|
|
3
4
|
import {
|
|
4
5
|
componentTree,
|
|
@@ -7,15 +8,19 @@
|
|
|
7
8
|
onGlobalClick,
|
|
8
9
|
onNavigate,
|
|
9
10
|
} from './create-router.svelte.js';
|
|
11
|
+
import { getUserState } from './helpers/utils.js';
|
|
10
12
|
import RecursiveComponentTree from './RecursiveComponentTree.svelte';
|
|
11
13
|
|
|
12
14
|
/** @type {{ base?: string }} */
|
|
13
15
|
let { base: basename } = $props();
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
init(basename);
|
|
17
|
+
init(untrack(() => basename));
|
|
17
18
|
|
|
18
|
-
onNavigate(
|
|
19
|
+
onNavigate(undefined, {
|
|
20
|
+
search: location.search,
|
|
21
|
+
hash: location.hash,
|
|
22
|
+
state: getUserState(history.state),
|
|
23
|
+
});
|
|
19
24
|
|
|
20
25
|
$effect(() => {
|
|
21
26
|
const cleanup = [
|
package/src/helpers/utils.js
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -316,6 +316,7 @@ export type SearchParams = Omit<
|
|
|
316
316
|
getAll(name: string): (string | number | boolean)[];
|
|
317
317
|
set(name: string, value: string | number | boolean, options?: { replace?: boolean }): void;
|
|
318
318
|
sort(options?: { replace?: boolean }): void;
|
|
319
|
+
toURLSearchParams(): URLSearchParams;
|
|
319
320
|
values(): (string | number | boolean)[];
|
|
320
321
|
};
|
|
321
322
|
|