@sveltejs/kit 2.25.2 → 2.26.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "2.25.2",
3
+ "version": "2.26.1",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -98,7 +98,10 @@ export function get_tsconfig(kit) {
98
98
  const config = {
99
99
  compilerOptions: {
100
100
  // generated options
101
- paths: get_tsconfig_paths(kit),
101
+ paths: {
102
+ ...get_tsconfig_paths(kit),
103
+ '$app/types': ['./types/index.d.ts']
104
+ },
102
105
  rootDirs: [config_relative('.'), './types'],
103
106
 
104
107
  // essential options
@@ -5,6 +5,20 @@ import MagicString from 'magic-string';
5
5
  import { posixify, rimraf, walk } from '../../../utils/filesystem.js';
6
6
  import { compact } from '../../../utils/array.js';
7
7
  import { ts } from '../ts.js';
8
+ import { s } from '../../../utils/misc.js';
9
+ import { get_route_segments } from '../../../utils/routing.js';
10
+
11
+ const remove_relative_parent_traversals = (/** @type {string} */ path) =>
12
+ path.replace(/\.\.\//g, '');
13
+ const replace_optional_params = (/** @type {string} */ id) =>
14
+ id.replace(/\/\[\[[^\]]+\]\]/g, '${string}');
15
+ const replace_required_params = (/** @type {string} */ id) =>
16
+ id.replace(/\/\[[^\]]+\]/g, '/${string}');
17
+ /** Convert route ID to pathname by removing layout groups */
18
+ const remove_group_segments = (/** @type {string} */ id) => {
19
+ return '/' + get_route_segments(id).join('/');
20
+ };
21
+ const is_whitespace = (/** @type {string} */ char) => /\s/.test(char);
8
22
 
9
23
  /**
10
24
  * @typedef {{
@@ -35,7 +49,9 @@ export function write_all_types(config, manifest_data) {
35
49
  const types_dir = `${config.kit.outDir}/types`;
36
50
 
37
51
  // empty out files that no longer need to exist
38
- const routes_dir = posixify(path.relative('.', config.kit.files.routes)).replace(/\.\.\//g, '');
52
+ const routes_dir = remove_relative_parent_traversals(
53
+ posixify(path.relative('.', config.kit.files.routes))
54
+ );
39
55
  const expected_directories = new Set(
40
56
  manifest_data.routes.map((route) => path.join(routes_dir, route.id))
41
57
  );
@@ -49,6 +65,67 @@ export function write_all_types(config, manifest_data) {
49
65
  }
50
66
  }
51
67
 
68
+ /** @type {Set<string>} */
69
+ const pathnames = new Set();
70
+
71
+ /** @type {string[]} */
72
+ const dynamic_routes = [];
73
+
74
+ /** @type {string[]} */
75
+ const layouts = [];
76
+
77
+ for (const route of manifest_data.routes) {
78
+ if (route.params.length > 0) {
79
+ const params = route.params.map((p) => `${p.name}${p.optional ? '?:' : ':'} string`);
80
+ const route_type = `${s(route.id)}: { ${params.join('; ')} }`;
81
+
82
+ dynamic_routes.push(route_type);
83
+
84
+ const pathname = remove_group_segments(route.id);
85
+ pathnames.add(`\`${replace_required_params(replace_optional_params(pathname))}\` & {}`);
86
+ } else {
87
+ const pathname = remove_group_segments(route.id);
88
+ pathnames.add(s(pathname));
89
+ }
90
+
91
+ /** @type {Map<string, boolean>} */
92
+ const child_params = new Map(route.params.map((p) => [p.name, p.optional]));
93
+
94
+ for (const child of manifest_data.routes.filter((r) => r.id.startsWith(route.id))) {
95
+ for (const p of child.params) {
96
+ if (!child_params.has(p.name)) {
97
+ child_params.set(p.name, true); // always optional
98
+ }
99
+ }
100
+ }
101
+
102
+ const layout_params = Array.from(child_params)
103
+ .map(([name, optional]) => `${name}${optional ? '?:' : ':'} string`)
104
+ .join('; ');
105
+
106
+ const layout_type = `${s(route.id)}: ${layout_params.length > 0 ? `{ ${layout_params} }` : 'undefined'}`;
107
+ layouts.push(layout_type);
108
+ }
109
+
110
+ try {
111
+ fs.mkdirSync(types_dir, { recursive: true });
112
+ } catch {}
113
+
114
+ fs.writeFileSync(
115
+ `${types_dir}/index.d.ts`,
116
+ [
117
+ `type DynamicRoutes = {\n\t${dynamic_routes.join(';\n\t')}\n};`,
118
+ `type Layouts = {\n\t${layouts.join(';\n\t')}\n};`,
119
+ // we enumerate these rather than doing `keyof Routes` so that the list is visible on hover
120
+ `export type RouteId = ${manifest_data.routes.map((r) => s(r.id)).join(' | ')};`,
121
+ 'export type RouteParams<T extends RouteId> = T extends keyof DynamicRoutes ? DynamicRoutes[T] : Record<string, never>;',
122
+ 'export type LayoutParams<T extends RouteId> = Layouts[T] | Record<string, never>;',
123
+ `export type Pathname = ${Array.from(pathnames).join(' | ')};`,
124
+ 'export type ResolvedPathname = `${"" | `/${string}`}${Pathname}`;',
125
+ `export type Asset = ${manifest_data.assets.map((asset) => s('/' + asset.file)).join(' | ') || 'never'};`
126
+ ].join('\n\n')
127
+ );
128
+
52
129
  // Read/write meta data on each invocation, not once per node process,
53
130
  // it could be invoked by another process in the meantime.
54
131
  const meta_data_file = `${types_dir}/route_meta_data.json`;
@@ -174,7 +251,9 @@ function create_routes_map(manifest_data) {
174
251
  * @param {Set<string>} [to_delete]
175
252
  */
176
253
  function update_types(config, routes, route, to_delete = new Set()) {
177
- const routes_dir = posixify(path.relative('.', config.kit.files.routes)).replace(/\.\.\//g, '');
254
+ const routes_dir = remove_relative_parent_traversals(
255
+ posixify(path.relative('.', config.kit.files.routes))
256
+ );
178
257
  const outdir = path.join(config.kit.outDir, 'types', routes_dir, route.id);
179
258
 
180
259
  // now generate new types
@@ -733,7 +812,7 @@ export function tweak_types(content, is_server) {
733
812
  if (declaration.type) {
734
813
  let a = declaration.type.pos;
735
814
  const b = declaration.type.end;
736
- while (/\s/.test(content[a])) a += 1;
815
+ while (is_whitespace(content[a])) a += 1;
737
816
 
738
817
  const type = content.slice(a, b);
739
818
  code.remove(declaration.name.end, declaration.type.end);
@@ -805,7 +884,7 @@ export function tweak_types(content, is_server) {
805
884
  if (declaration.type) {
806
885
  let a = declaration.type.pos;
807
886
  const b = declaration.type.end;
808
- while (/\s/.test(content[a])) a += 1;
887
+ while (is_whitespace(content[a])) a += 1;
809
888
 
810
889
  const type = content.slice(a, b);
811
890
  code.remove(declaration.name.end, declaration.type.end);
@@ -17,7 +17,13 @@ import {
17
17
  RouteSegment
18
18
  } from '../types/private.js';
19
19
  import { BuildData, SSRNodeLoader, SSRRoute, ValidatedConfig } from 'types';
20
- import type { SvelteConfig } from '@sveltejs/vite-plugin-svelte';
20
+ import type { SvelteConfig, PluginOptions } from '@sveltejs/vite-plugin-svelte';
21
+ import {
22
+ RouteId as AppRouteId,
23
+ LayoutParams as AppLayoutParams,
24
+ ResolvedPathname
25
+ // @ts-ignore
26
+ } from '$app/types';
21
27
 
22
28
  export { PrerenderOption } from '../types/private.js';
23
29
 
@@ -850,11 +856,11 @@ export interface Transporter<
850
856
  * rather than using `Load` directly.
851
857
  */
852
858
  export type Load<
853
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
859
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
854
860
  InputData extends Record<string, unknown> | null = Record<string, any> | null,
855
861
  ParentData extends Record<string, unknown> = Record<string, any>,
856
862
  OutputData extends Record<string, unknown> | void = Record<string, any> | void,
857
- RouteId extends string | null = string | null
863
+ RouteId extends AppRouteId | null = AppRouteId | null
858
864
  > = (event: LoadEvent<Params, InputData, ParentData, RouteId>) => MaybePromise<OutputData>;
859
865
 
860
866
  /**
@@ -862,10 +868,10 @@ export type Load<
862
868
  * rather than using `LoadEvent` directly.
863
869
  */
864
870
  export interface LoadEvent<
865
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
871
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
866
872
  Data extends Record<string, unknown> | null = Record<string, any> | null,
867
873
  ParentData extends Record<string, unknown> = Record<string, any>,
868
- RouteId extends string | null = string | null
874
+ RouteId extends AppRouteId | null = AppRouteId | null
869
875
  > extends NavigationEvent<Params, RouteId> {
870
876
  /**
871
877
  * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features:
@@ -970,8 +976,8 @@ export interface LoadEvent<
970
976
  }
971
977
 
972
978
  export interface NavigationEvent<
973
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
974
- RouteId extends string | null = string | null
979
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
980
+ RouteId extends AppRouteId | null = AppRouteId | null
975
981
  > {
976
982
  /**
977
983
  * The parameters of the current page - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object
@@ -1110,13 +1116,13 @@ export interface AfterNavigate extends Omit<Navigation, 'type'> {
1110
1116
  * The shape of the [`page`](https://svelte.dev/docs/kit/$app-state#page) reactive object and the [`$page`](https://svelte.dev/docs/kit/$app-stores) store.
1111
1117
  */
1112
1118
  export interface Page<
1113
- Params extends Record<string, string> = Record<string, string>,
1114
- RouteId extends string | null = string | null
1119
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1120
+ RouteId extends AppRouteId | null = AppRouteId | null
1115
1121
  > {
1116
1122
  /**
1117
1123
  * The URL of the current page.
1118
1124
  */
1119
- url: URL;
1125
+ url: URL & { pathname: ResolvedPathname };
1120
1126
  /**
1121
1127
  * The parameters of the current page - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object.
1122
1128
  */
@@ -1158,8 +1164,8 @@ export interface Page<
1158
1164
  export type ParamMatcher = (param: string) => boolean;
1159
1165
 
1160
1166
  export interface RequestEvent<
1161
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1162
- RouteId extends string | null = string | null
1167
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1168
+ RouteId extends AppRouteId | null = AppRouteId | null
1163
1169
  > {
1164
1170
  /**
1165
1171
  * Get or set cookies related to the current request
@@ -1250,8 +1256,8 @@ export interface RequestEvent<
1250
1256
  * It receives `Params` as the first generic argument, which you can skip by using [generated types](https://svelte.dev/docs/kit/types#Generated-types) instead.
1251
1257
  */
1252
1258
  export type RequestHandler<
1253
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1254
- RouteId extends string | null = string | null
1259
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1260
+ RouteId extends AppRouteId | null = AppRouteId | null
1255
1261
  > = (event: RequestEvent<Params, RouteId>) => MaybePromise<Response>;
1256
1262
 
1257
1263
  export interface ResolveOptions {
@@ -1329,16 +1335,16 @@ export interface SSRManifest {
1329
1335
  * rather than using `ServerLoad` directly.
1330
1336
  */
1331
1337
  export type ServerLoad<
1332
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1338
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1333
1339
  ParentData extends Record<string, any> = Record<string, any>,
1334
1340
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1335
- RouteId extends string | null = string | null
1341
+ RouteId extends AppRouteId | null = AppRouteId | null
1336
1342
  > = (event: ServerLoadEvent<Params, ParentData, RouteId>) => MaybePromise<OutputData>;
1337
1343
 
1338
1344
  export interface ServerLoadEvent<
1339
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1345
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1340
1346
  ParentData extends Record<string, any> = Record<string, any>,
1341
- RouteId extends string | null = string | null
1347
+ RouteId extends AppRouteId | null = AppRouteId | null
1342
1348
  > extends RequestEvent<Params, RouteId> {
1343
1349
  /**
1344
1350
  * `await parent()` returns data from parent `+layout.server.js` `load` functions.
@@ -1405,9 +1411,9 @@ export interface ServerLoadEvent<
1405
1411
  * See [form actions](https://svelte.dev/docs/kit/form-actions) for more information.
1406
1412
  */
1407
1413
  export type Action<
1408
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1414
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1409
1415
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1410
- RouteId extends string | null = string | null
1416
+ RouteId extends AppRouteId | null = AppRouteId | null
1411
1417
  > = (event: RequestEvent<Params, RouteId>) => MaybePromise<OutputData>;
1412
1418
 
1413
1419
  /**
@@ -1415,9 +1421,9 @@ export type Action<
1415
1421
  * See [form actions](https://svelte.dev/docs/kit/form-actions) for more information.
1416
1422
  */
1417
1423
  export type Actions<
1418
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1424
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1419
1425
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1420
- RouteId extends string | null = string | null
1426
+ RouteId extends AppRouteId | null = AppRouteId | null
1421
1427
  > = Record<string, Action<Params, OutputData, RouteId>>;
1422
1428
 
1423
1429
  /**
@@ -1,4 +1,5 @@
1
1
  import { fileURLToPath } from 'node:url';
2
+ import { posixify } from '../../utils/filesystem.js';
2
3
 
3
4
  export const env_static_private = '\0virtual:env/static/private';
4
5
  export const env_static_public = '\0virtual:env/static/public';
@@ -11,6 +12,6 @@ export const sveltekit_environment = '\0virtual:__sveltekit/environment';
11
12
  export const sveltekit_paths = '\0virtual:__sveltekit/paths';
12
13
  export const sveltekit_server = '\0virtual:__sveltekit/server';
13
14
 
14
- export const app_server = fileURLToPath(
15
- new URL('../../runtime/app/server/index.js', import.meta.url)
15
+ export const app_server = posixify(
16
+ fileURLToPath(new URL('../../runtime/app/server/index.js', import.meta.url))
16
17
  );
@@ -1,8 +1,14 @@
1
- export { base, assets } from '__sveltekit/paths';
2
- import { base } from '__sveltekit/paths';
1
+ import { base, assets } from '__sveltekit/paths';
3
2
  import { resolve_route } from '../../../utils/routing.js';
4
3
 
5
- /** @type {import('./types.d.ts').resolveRoute} */
6
- export function resolveRoute(id, params) {
4
+ /** @type {import('./types.d.ts').asset} */
5
+ export function asset(file) {
6
+ return (assets || base) + file;
7
+ }
8
+
9
+ /** @type {import('./types.d.ts').resolve} */
10
+ export function resolve(id, params) {
7
11
  return base + resolve_route(id, params);
8
12
  }
13
+
14
+ export { base, assets, resolve as resolveRoute };
@@ -1,7 +1,12 @@
1
+ // @ts-ignore
2
+ import { Asset, RouteId, RouteParams, Pathname, ResolvedPathname } from '$app/types';
3
+
1
4
  /**
2
5
  * A string that matches [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths).
3
6
  *
4
7
  * Example usage: `<a href="{base}/your-page">Link</a>`
8
+ *
9
+ * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead
5
10
  */
6
11
  export let base: '' | `/${string}`;
7
12
 
@@ -9,22 +14,58 @@ export let base: '' | `/${string}`;
9
14
  * An absolute path that matches [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths).
10
15
  *
11
16
  * > [!NOTE] If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL.
17
+ *
18
+ * @deprecated Use [`asset(...)`](https://svelte.dev/docs/kit/$app-paths#asset) instead
12
19
  */
13
20
  export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets';
14
21
 
22
+ type ResolveArgs<T extends RouteId | Pathname> = T extends RouteId
23
+ ? RouteParams<T> extends Record<string, never>
24
+ ? [route: T]
25
+ : [route: T, params: RouteParams<T>]
26
+ : [route: T];
27
+
15
28
  /**
16
- * Populate a route ID with params to resolve a pathname.
29
+ * Resolve a pathname by prefixing it with the base path, if any, or resolve a route ID by populating dynamic segments with parameters.
30
+ *
31
+ * During server rendering, the base path is relative and depends on the page currently being rendered.
32
+ *
17
33
  * @example
18
34
  * ```js
19
- * import { resolveRoute } from '$app/paths';
20
- *
21
- * resolveRoute(
22
- * `/blog/[slug]/[...somethingElse]`,
23
- * {
24
- * slug: 'hello-world',
25
- * somethingElse: 'something/else'
26
- * }
27
- * ); // `/blog/hello-world/something/else`
35
+ * import { resolve } from '$app/paths';
36
+ *
37
+ * // using a pathname
38
+ * const resolved = resolve(`/blog/hello-world`);
39
+ *
40
+ * // using a route ID plus parameters
41
+ * const resolved = resolve('/blog/[slug]', {
42
+ * slug: 'hello-world'
43
+ * });
28
44
  * ```
45
+ * @since 2.26
46
+ */
47
+ export function resolve<T extends RouteId | Pathname>(...args: ResolveArgs<T>): ResolvedPathname;
48
+
49
+ /**
50
+ * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path.
51
+ *
52
+ * During server rendering, the base path is relative and depends on the page currently being rendered.
53
+ *
54
+ * @example
55
+ * ```svelte
56
+ * <script>
57
+ * import { asset } from '$app/paths';
58
+ * </script>
59
+ *
60
+ * <img alt="a potato" src={asset('potato.jpg')} />
61
+ * ```
62
+ * @since 2.26
63
+ */
64
+ export function asset(file: Asset): string;
65
+
66
+ /**
67
+ * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead
29
68
  */
30
- export function resolveRoute(id: string, params: Record<string, string | undefined>): string;
69
+ export function resolveRoute<T extends RouteId | Pathname>(
70
+ ...args: ResolveArgs<T>
71
+ ): ResolvedPathname;
@@ -117,7 +117,7 @@ export function remove_optional_params(id) {
117
117
  * @param {string} segment
118
118
  */
119
119
  function affects_path(segment) {
120
- return !/^\([^)]+\)$/.test(segment);
120
+ return segment !== '' && !/^\([^)]+\)$/.test(segment);
121
121
  }
122
122
 
123
123
  /**
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // generated during release, do not modify
2
2
 
3
3
  /** @type {string} */
4
- export const VERSION = '2.25.2';
4
+ export const VERSION = '2.26.1';
package/types/index.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  declare module '@sveltejs/kit' {
5
5
  import type { SvelteConfig } from '@sveltejs/vite-plugin-svelte';
6
+ import type { RouteId as AppRouteId, LayoutParams as AppLayoutParams, ResolvedPathname } from '$app/types';
6
7
  /**
7
8
  * [Adapters](https://svelte.dev/docs/kit/adapters) are responsible for taking the production build and turning it into something that can be deployed to a platform of your choosing.
8
9
  */
@@ -832,11 +833,11 @@ declare module '@sveltejs/kit' {
832
833
  * rather than using `Load` directly.
833
834
  */
834
835
  export type Load<
835
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
836
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
836
837
  InputData extends Record<string, unknown> | null = Record<string, any> | null,
837
838
  ParentData extends Record<string, unknown> = Record<string, any>,
838
839
  OutputData extends Record<string, unknown> | void = Record<string, any> | void,
839
- RouteId extends string | null = string | null
840
+ RouteId extends AppRouteId | null = AppRouteId | null
840
841
  > = (event: LoadEvent<Params, InputData, ParentData, RouteId>) => MaybePromise<OutputData>;
841
842
 
842
843
  /**
@@ -844,10 +845,10 @@ declare module '@sveltejs/kit' {
844
845
  * rather than using `LoadEvent` directly.
845
846
  */
846
847
  export interface LoadEvent<
847
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
848
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
848
849
  Data extends Record<string, unknown> | null = Record<string, any> | null,
849
850
  ParentData extends Record<string, unknown> = Record<string, any>,
850
- RouteId extends string | null = string | null
851
+ RouteId extends AppRouteId | null = AppRouteId | null
851
852
  > extends NavigationEvent<Params, RouteId> {
852
853
  /**
853
854
  * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features:
@@ -952,8 +953,8 @@ declare module '@sveltejs/kit' {
952
953
  }
953
954
 
954
955
  export interface NavigationEvent<
955
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
956
- RouteId extends string | null = string | null
956
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
957
+ RouteId extends AppRouteId | null = AppRouteId | null
957
958
  > {
958
959
  /**
959
960
  * The parameters of the current page - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object
@@ -1092,13 +1093,13 @@ declare module '@sveltejs/kit' {
1092
1093
  * The shape of the [`page`](https://svelte.dev/docs/kit/$app-state#page) reactive object and the [`$page`](https://svelte.dev/docs/kit/$app-stores) store.
1093
1094
  */
1094
1095
  export interface Page<
1095
- Params extends Record<string, string> = Record<string, string>,
1096
- RouteId extends string | null = string | null
1096
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1097
+ RouteId extends AppRouteId | null = AppRouteId | null
1097
1098
  > {
1098
1099
  /**
1099
1100
  * The URL of the current page.
1100
1101
  */
1101
- url: URL;
1102
+ url: URL & { pathname: ResolvedPathname };
1102
1103
  /**
1103
1104
  * The parameters of the current page - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object.
1104
1105
  */
@@ -1140,8 +1141,8 @@ declare module '@sveltejs/kit' {
1140
1141
  export type ParamMatcher = (param: string) => boolean;
1141
1142
 
1142
1143
  export interface RequestEvent<
1143
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1144
- RouteId extends string | null = string | null
1144
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1145
+ RouteId extends AppRouteId | null = AppRouteId | null
1145
1146
  > {
1146
1147
  /**
1147
1148
  * Get or set cookies related to the current request
@@ -1232,8 +1233,8 @@ declare module '@sveltejs/kit' {
1232
1233
  * It receives `Params` as the first generic argument, which you can skip by using [generated types](https://svelte.dev/docs/kit/types#Generated-types) instead.
1233
1234
  */
1234
1235
  export type RequestHandler<
1235
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1236
- RouteId extends string | null = string | null
1236
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1237
+ RouteId extends AppRouteId | null = AppRouteId | null
1237
1238
  > = (event: RequestEvent<Params, RouteId>) => MaybePromise<Response>;
1238
1239
 
1239
1240
  export interface ResolveOptions {
@@ -1311,16 +1312,16 @@ declare module '@sveltejs/kit' {
1311
1312
  * rather than using `ServerLoad` directly.
1312
1313
  */
1313
1314
  export type ServerLoad<
1314
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1315
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1315
1316
  ParentData extends Record<string, any> = Record<string, any>,
1316
1317
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1317
- RouteId extends string | null = string | null
1318
+ RouteId extends AppRouteId | null = AppRouteId | null
1318
1319
  > = (event: ServerLoadEvent<Params, ParentData, RouteId>) => MaybePromise<OutputData>;
1319
1320
 
1320
1321
  export interface ServerLoadEvent<
1321
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1322
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1322
1323
  ParentData extends Record<string, any> = Record<string, any>,
1323
- RouteId extends string | null = string | null
1324
+ RouteId extends AppRouteId | null = AppRouteId | null
1324
1325
  > extends RequestEvent<Params, RouteId> {
1325
1326
  /**
1326
1327
  * `await parent()` returns data from parent `+layout.server.js` `load` functions.
@@ -1387,9 +1388,9 @@ declare module '@sveltejs/kit' {
1387
1388
  * See [form actions](https://svelte.dev/docs/kit/form-actions) for more information.
1388
1389
  */
1389
1390
  export type Action<
1390
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1391
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1391
1392
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1392
- RouteId extends string | null = string | null
1393
+ RouteId extends AppRouteId | null = AppRouteId | null
1393
1394
  > = (event: RequestEvent<Params, RouteId>) => MaybePromise<OutputData>;
1394
1395
 
1395
1396
  /**
@@ -1397,9 +1398,9 @@ declare module '@sveltejs/kit' {
1397
1398
  * See [form actions](https://svelte.dev/docs/kit/form-actions) for more information.
1398
1399
  */
1399
1400
  export type Actions<
1400
- Params extends Partial<Record<string, string>> = Partial<Record<string, string>>,
1401
+ Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>,
1401
1402
  OutputData extends Record<string, any> | void = Record<string, any> | void,
1402
- RouteId extends string | null = string | null
1403
+ RouteId extends AppRouteId | null = AppRouteId | null
1403
1404
  > = Record<string, Action<Params, OutputData, RouteId>>;
1404
1405
 
1405
1406
  /**
@@ -2359,10 +2360,13 @@ declare module '$app/navigation' {
2359
2360
  }
2360
2361
 
2361
2362
  declare module '$app/paths' {
2363
+ import type { Asset, RouteId, RouteParams, Pathname, ResolvedPathname } from '$app/types';
2362
2364
  /**
2363
2365
  * A string that matches [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths).
2364
2366
  *
2365
2367
  * Example usage: `<a href="{base}/your-page">Link</a>`
2368
+ *
2369
+ * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead
2366
2370
  */
2367
2371
  export let base: '' | `/${string}`;
2368
2372
 
@@ -2370,30 +2374,68 @@ declare module '$app/paths' {
2370
2374
  * An absolute path that matches [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths).
2371
2375
  *
2372
2376
  * > [!NOTE] If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL.
2377
+ *
2378
+ * @deprecated Use [`asset(...)`](https://svelte.dev/docs/kit/$app-paths#asset) instead
2373
2379
  */
2374
2380
  export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets';
2375
2381
 
2382
+ type ResolveArgs<T extends RouteId | Pathname> = T extends RouteId
2383
+ ? RouteParams<T> extends Record<string, never>
2384
+ ? [route: T]
2385
+ : [route: T, params: RouteParams<T>]
2386
+ : [route: T];
2387
+
2376
2388
  /**
2377
- * Populate a route ID with params to resolve a pathname.
2389
+ * Resolve a pathname by prefixing it with the base path, if any, or resolve a route ID by populating dynamic segments with parameters.
2390
+ *
2391
+ * During server rendering, the base path is relative and depends on the page currently being rendered.
2392
+ *
2378
2393
  * @example
2379
2394
  * ```js
2380
- * import { resolveRoute } from '$app/paths';
2381
- *
2382
- * resolveRoute(
2383
- * `/blog/[slug]/[...somethingElse]`,
2384
- * {
2385
- * slug: 'hello-world',
2386
- * somethingElse: 'something/else'
2387
- * }
2388
- * ); // `/blog/hello-world/something/else`
2395
+ * import { resolve } from '$app/paths';
2396
+ *
2397
+ * // using a pathname
2398
+ * const resolved = resolve(`/blog/hello-world`);
2399
+ *
2400
+ * // using a route ID plus parameters
2401
+ * const resolved = resolve('/blog/[slug]', {
2402
+ * slug: 'hello-world'
2403
+ * });
2404
+ * ```
2405
+ * @since 2.26
2406
+ */
2407
+ export function resolve<T extends RouteId | Pathname>(...args: ResolveArgs<T>): ResolvedPathname;
2408
+
2409
+ /**
2410
+ * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path.
2411
+ *
2412
+ * During server rendering, the base path is relative and depends on the page currently being rendered.
2413
+ *
2414
+ * @example
2415
+ * ```svelte
2416
+ * <script>
2417
+ * import { asset } from '$app/paths';
2418
+ * </script>
2419
+ *
2420
+ * <img alt="a potato" src={asset('potato.jpg')} />
2389
2421
  * ```
2422
+ * @since 2.26
2423
+ */
2424
+ export function asset(file: Asset): string;
2425
+
2426
+ /**
2427
+ * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead
2390
2428
  */
2391
- export function resolveRoute(id: string, params: Record<string, string | undefined>): string;
2429
+ export function resolveRoute<T extends RouteId | Pathname>(
2430
+ ...args: ResolveArgs<T>
2431
+ ): ResolvedPathname;
2392
2432
 
2393
2433
  export {};
2394
2434
  }
2395
2435
 
2396
2436
  declare module '$app/server' {
2437
+ // @ts-ignore
2438
+ import { LayoutParams as AppLayoutParams, RouteId as AppRouteId } from '$app/types'
2397
2439
  import type { RequestEvent } from '@sveltejs/kit';
2398
2440
  /**
2399
2441
  * Read the contents of an imported asset from the filesystem
@@ -2414,7 +2456,7 @@ declare module '$app/server' {
2414
2456
  * In environments without [`AsyncLocalStorage`](https://nodejs.org/api/async_context.html#class-asynclocalstorage), this must be called synchronously (i.e. not after an `await`).
2415
2457
  * @since 2.20.0
2416
2458
  */
2417
- export function getRequestEvent(): RequestEvent<Partial<Record<string, string>>, string | null>;
2459
+ export function getRequestEvent(): RequestEvent<AppLayoutParams<"/">, any>;
2418
2460
 
2419
2461
  export {};
2420
2462
  }
@@ -121,6 +121,9 @@
121
121
  "replaceState",
122
122
  "base",
123
123
  "assets",
124
+ "ResolveArgs",
125
+ "resolve",
126
+ "asset",
124
127
  "resolveRoute",
125
128
  "read",
126
129
  "getRequestEvent",
@@ -169,6 +172,6 @@
169
172
  null,
170
173
  null
171
174
  ],
172
- "mappings": "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",
175
+ "mappings": ";;;;;;;;;kBAgCiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;aA2BZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;MAQrBC,aAAaA;;;;;OAKJC,YAAYA;;kBAETC,aAAaA;;;;;;MAMzBC,qBAAqBA;;;;;;;;;;;kBAWTC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqGPC,MAAMA;;;;;;;;;;;kBAWNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DPC,QAAQA;;;;;;;;kBAQRC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiedC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;;aAajBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;;aAUXC,UAAUA;;;;;;aAMVC,UAAUA;;;;;;aAMVC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;aA0BPC,SAASA;;;;;kBAKJC,WAAWA;;;;;;;;;;;;aAYhBC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4GTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA6BrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;;;;kBAOjBC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;aAuBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqEpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBC95CXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDs6CTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BTC,QAAQA;;;;WEl9CRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;WAqBHC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmElBC,UAAUA;;WAELC,MAAMA;;;;;;;;;MASXC,YAAYA;;WAEPC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCXC,yBAAyBA;;;;;;;;;;WAUzBC,yBAAyBA;;;;WAIzBC,sCAAsCA;;;;MAI3CC,8BAA8BA;MAC9BC,8BAA8BA;MAC9BC,2CAA2CA;;;;;;aAM3CC,eAAeA;;WAIVC,cAAcA;;;;;WAKdC,YAAYA;;;;;;MAMjBC,aAAaA;WCxLRC,KAAKA;;;;;;WAeLC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAsHTC,YAAYA;;;;;;;;;;;;;WAaZC,QAAQA;;;;;;;;;;;;;;MA2BbC,iBAAiBA;;;;;;;;;WAWZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAyGTC,YAAYA;;;;;;;;;;;;;;;;MAgBjBC,kBAAkBA;;WAEbC,aAAaA;;;;;;;;;;WAUbC,UAAUA;;;;;;;;;;;WAWVC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;MAuBZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;WASRC,cAAcA;;;;;;;;;MA+CnBC,eAAeA;;;;;MAKfC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBC/adC,WAAWA;;;;;;;;;;;;;;;;;;;iBAsBXC,QAAQA;;;;;iBAiBRC,UAAUA;;;;;;iBASVC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;;;;;;;;;;;iBAkDJC,eAAeA;;;;;;;;;;;;;;iBAmBfC,YAAYA;;;;;;;cCtOfC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoEJC,QAAQA;;;;;;iBCoCFC,UAAUA;;;;;;iBAkCVC,WAAWA;;;;;iBAgFjBC,oBAAoBA;;;;;;;;;;;iBC3MpBC,gBAAgBA;;;;;;;;;iBCgHVC,SAASA;;;;;;;;;cC/HlBC,OAAOA;;;;;cAKPC,GAAGA;;;;;cAKHC,QAAQA;;;;;cAKRC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;iBCYJC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;iBAgDXC,OAAOA;;;;;;;iBC4iEDC,WAAWA;;;;;;;;;;;iBA/TjBC,aAAaA;;;;;;;;;;;;iBAiBbC,cAAcA;;;;;;;;;;iBAedC,UAAUA;;;;;iBASVC,qBAAqBA;;;;;;;;;;iBA8BrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;iBAsCJC,UAAUA;;;;iBA0BVC,aAAaA;;;;;;;;;;;;iBAqBPC,WAAWA;;;;;;;;;;;;;;;;;;iBAoCXC,WAAWA;;;;;iBAsCjBC,SAASA;;;;;iBA+CTC,YAAYA;MVr7DhB/D,YAAYA;;;;;;;;;;;;;;YWjJbgE,IAAIA;;;;;;;;;YASJC,MAAMA;;MAEZC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBAC,OAAOA;;;;;;;;;;;;;;;;;iBAiBPC,KAAKA;;;;;iBAKLC,YAAYA;;;;;;;;;;;;;;;;;;;;;iBCjDZC,IAAIA;;;;;;;iBCGJC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC2BlBC,IAAIA;;;;;cAQJC,UAAUA;;;;;;;;;;;cAMVC,OAAOA;;;;;;;;;iBCrDPC,SAASA;;;;;;;;;;;;;;;cAyBTH,IAAIA;;;;;;;;;;cAiBJC,UAAUA;;;;;;;;cAeVC,OAAOA",
173
176
  "ignoreList": []
174
177
  }