@sveltejs/kit 2.30.0 → 2.30.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 +1 -1
- package/src/core/sync/sync.js +3 -2
- package/src/core/sync/write_non_ambient.js +78 -2
- package/src/core/sync/write_types/index.js +0 -72
- package/src/exports/public.d.ts +0 -1
- package/src/runtime/app/paths/index.js +3 -1
- package/src/runtime/app/paths/types.d.ts +0 -1
- package/src/types/ambient.d.ts +54 -0
- package/src/version.js +1 -1
- package/types/index.d.ts +54 -0
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
package/src/core/sync/sync.js
CHANGED
|
@@ -9,14 +9,13 @@ import { write_non_ambient } from './write_non_ambient.js';
|
|
|
9
9
|
import { write_server } from './write_server.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Initialize SvelteKit's generated files.
|
|
12
|
+
* Initialize SvelteKit's generated files that only depend on the config and mode.
|
|
13
13
|
* @param {import('types').ValidatedConfig} config
|
|
14
14
|
* @param {string} mode
|
|
15
15
|
*/
|
|
16
16
|
export function init(config, mode) {
|
|
17
17
|
write_tsconfig(config.kit);
|
|
18
18
|
write_ambient(config.kit, mode);
|
|
19
|
-
write_non_ambient(config.kit);
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
/**
|
|
@@ -32,6 +31,7 @@ export function create(config) {
|
|
|
32
31
|
write_server(config, output);
|
|
33
32
|
write_root(manifest_data, output);
|
|
34
33
|
write_all_types(config, manifest_data);
|
|
34
|
+
write_non_ambient(config.kit, manifest_data);
|
|
35
35
|
|
|
36
36
|
return { manifest_data };
|
|
37
37
|
}
|
|
@@ -67,6 +67,7 @@ export function all_types(config, mode) {
|
|
|
67
67
|
init(config, mode);
|
|
68
68
|
const manifest_data = create_manifest_data({ config });
|
|
69
69
|
write_all_types(config, manifest_data);
|
|
70
|
+
write_non_ambient(config.kit, manifest_data);
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
/**
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { GENERATED_COMMENT } from '../../constants.js';
|
|
3
3
|
import { write_if_changed } from './utils.js';
|
|
4
|
+
import { s } from '../../utils/misc.js';
|
|
5
|
+
import { get_route_segments } from '../../utils/routing.js';
|
|
6
|
+
|
|
7
|
+
const replace_optional_params = (/** @type {string} */ id) =>
|
|
8
|
+
id.replace(/\/\[\[[^\]]+\]\]/g, '${string}');
|
|
9
|
+
const replace_required_params = (/** @type {string} */ id) =>
|
|
10
|
+
id.replace(/\/\[[^\]]+\]/g, '/${string}');
|
|
11
|
+
/** Convert route ID to pathname by removing layout groups */
|
|
12
|
+
const remove_group_segments = (/** @type {string} */ id) => {
|
|
13
|
+
return '/' + get_route_segments(id).join('/');
|
|
14
|
+
};
|
|
4
15
|
|
|
5
16
|
// `declare module "svelte/elements"` needs to happen in a non-ambient module, and dts-buddy generates one big ambient module,
|
|
6
17
|
// so we can't add it there - therefore generate the typings ourselves here.
|
|
@@ -33,10 +44,75 @@ declare module "svelte/elements" {
|
|
|
33
44
|
export {};
|
|
34
45
|
`;
|
|
35
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Generate app types interface extension
|
|
49
|
+
* @param {import('types').ManifestData} manifest_data
|
|
50
|
+
*/
|
|
51
|
+
function generate_app_types(manifest_data) {
|
|
52
|
+
/** @type {Set<string>} */
|
|
53
|
+
const pathnames = new Set();
|
|
54
|
+
|
|
55
|
+
/** @type {string[]} */
|
|
56
|
+
const dynamic_routes = [];
|
|
57
|
+
|
|
58
|
+
/** @type {string[]} */
|
|
59
|
+
const layouts = [];
|
|
60
|
+
|
|
61
|
+
for (const route of manifest_data.routes) {
|
|
62
|
+
if (route.params.length > 0) {
|
|
63
|
+
const params = route.params.map((p) => `${p.name}${p.optional ? '?:' : ':'} string`);
|
|
64
|
+
const route_type = `${s(route.id)}: { ${params.join('; ')} }`;
|
|
65
|
+
|
|
66
|
+
dynamic_routes.push(route_type);
|
|
67
|
+
|
|
68
|
+
const pathname = remove_group_segments(route.id);
|
|
69
|
+
pathnames.add(`\`${replace_required_params(replace_optional_params(pathname))}\` & {}`);
|
|
70
|
+
} else {
|
|
71
|
+
const pathname = remove_group_segments(route.id);
|
|
72
|
+
pathnames.add(s(pathname));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** @type {Map<string, boolean>} */
|
|
76
|
+
const child_params = new Map(route.params.map((p) => [p.name, p.optional]));
|
|
77
|
+
|
|
78
|
+
for (const child of manifest_data.routes.filter((r) => r.id.startsWith(route.id))) {
|
|
79
|
+
for (const p of child.params) {
|
|
80
|
+
if (!child_params.has(p.name)) {
|
|
81
|
+
child_params.set(p.name, true); // always optional
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const layout_params = Array.from(child_params)
|
|
87
|
+
.map(([name, optional]) => `${name}${optional ? '?:' : ':'} string`)
|
|
88
|
+
.join('; ');
|
|
89
|
+
|
|
90
|
+
const layout_type = `${s(route.id)}: ${layout_params.length > 0 ? `{ ${layout_params} }` : 'Record<string, never>'}`;
|
|
91
|
+
layouts.push(layout_type);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return [
|
|
95
|
+
'declare module "$app/types" {',
|
|
96
|
+
'\texport interface AppTypes {',
|
|
97
|
+
`\t\tRouteId(): ${manifest_data.routes.map((r) => s(r.id)).join(' | ')};`,
|
|
98
|
+
`\t\tRouteParams(): {\n\t\t\t${dynamic_routes.join(';\n\t\t\t')}\n\t\t};`,
|
|
99
|
+
`\t\tLayoutParams(): {\n\t\t\t${layouts.join(';\n\t\t\t')}\n\t\t};`,
|
|
100
|
+
`\t\tPathname(): ${Array.from(pathnames).join(' | ')};`,
|
|
101
|
+
'\t\tResolvedPathname(): `${"" | `/${string}`}${ReturnType<AppTypes[\'Pathname\']>}`;',
|
|
102
|
+
`\t\tAsset(): ${manifest_data.assets.map((asset) => s('/' + asset.file)).join(' | ') || 'never'};`,
|
|
103
|
+
'\t}',
|
|
104
|
+
'}'
|
|
105
|
+
].join('\n');
|
|
106
|
+
}
|
|
107
|
+
|
|
36
108
|
/**
|
|
37
109
|
* Writes non-ambient declarations to the output directory
|
|
38
110
|
* @param {import('types').ValidatedKitConfig} config
|
|
111
|
+
* @param {import('types').ManifestData} manifest_data
|
|
39
112
|
*/
|
|
40
|
-
export function write_non_ambient(config) {
|
|
41
|
-
|
|
113
|
+
export function write_non_ambient(config, manifest_data) {
|
|
114
|
+
const app_types = generate_app_types(manifest_data);
|
|
115
|
+
const content = [template, app_types].join('\n\n');
|
|
116
|
+
|
|
117
|
+
write_if_changed(path.join(config.outDir, 'non-ambient.d.ts'), content);
|
|
42
118
|
}
|
|
@@ -5,19 +5,8 @@ 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
8
|
const remove_relative_parent_traversals = (/** @type {string} */ path) =>
|
|
12
9
|
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
10
|
const is_whitespace = (/** @type {string} */ char) => /\s/.test(char);
|
|
22
11
|
|
|
23
12
|
/**
|
|
@@ -65,67 +54,6 @@ export function write_all_types(config, manifest_data) {
|
|
|
65
54
|
}
|
|
66
55
|
}
|
|
67
56
|
|
|
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
|
-
|
|
129
57
|
// Read/write meta data on each invocation, not once per node process,
|
|
130
58
|
// it could be invoked by another process in the meantime.
|
|
131
59
|
const meta_data_file = `${types_dir}/route_meta_data.json`;
|
package/src/exports/public.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ export function asset(file) {
|
|
|
8
8
|
|
|
9
9
|
/** @type {import('./types.d.ts').resolve} */
|
|
10
10
|
export function resolve(id, params) {
|
|
11
|
-
|
|
11
|
+
// The type error is correct here, and if someone doesn't pass params when they should there's a runtime error,
|
|
12
|
+
// but we don't want to adjust the internal resolve_route function to accept `undefined`, hence the type cast.
|
|
13
|
+
return base + resolve_route(id, /** @type {Record<string, string>} */ (params));
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
export { base, assets, resolve as resolveRoute };
|
package/src/types/ambient.d.ts
CHANGED
|
@@ -79,3 +79,57 @@ declare module '$service-worker' {
|
|
|
79
79
|
*/
|
|
80
80
|
export const version: string;
|
|
81
81
|
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* This module contains generated types for the routes in your app.
|
|
85
|
+
*/
|
|
86
|
+
declare module '$app/types' {
|
|
87
|
+
/**
|
|
88
|
+
* Interface for all generated app types. This gets extended via declaration merging. DO NOT USE THIS INTERFACE DIRECTLY.
|
|
89
|
+
*/
|
|
90
|
+
export interface AppTypes {
|
|
91
|
+
// These are all functions so that we can leverage function overloads to get the correct type.
|
|
92
|
+
// Using the return types directly would error with a "not the same type" error.
|
|
93
|
+
// https://www.typescriptlang.org/docs/handbook/declaration-merging.html#merging-interfaces
|
|
94
|
+
RouteId(): string;
|
|
95
|
+
RouteParams(): Record<string, Record<string, string>>;
|
|
96
|
+
LayoutParams(): Record<string, Record<string, string>>;
|
|
97
|
+
Pathname(): string;
|
|
98
|
+
ResolvedPathname(): string;
|
|
99
|
+
Asset(): string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* A union of all the route IDs in your app. Used for `page.route.id` and `event.route.id`.
|
|
104
|
+
*/
|
|
105
|
+
export type RouteId = ReturnType<AppTypes['RouteId']>;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* A utility for getting the parameters associated with a given route.
|
|
109
|
+
*/
|
|
110
|
+
export type RouteParams<T extends RouteId> = T extends keyof ReturnType<AppTypes['RouteParams']>
|
|
111
|
+
? ReturnType<AppTypes['RouteParams']>[T]
|
|
112
|
+
: Record<string, never>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* A utility for getting the parameters associated with a given layout, which is similar to `RouteParams` but also includes optional parameters for any child route.
|
|
116
|
+
*/
|
|
117
|
+
export type LayoutParams<T extends RouteId> = T extends keyof ReturnType<AppTypes['LayoutParams']>
|
|
118
|
+
? ReturnType<AppTypes['LayoutParams']>[T]
|
|
119
|
+
: Record<string, never>;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* A union of all valid pathnames in your app.
|
|
123
|
+
*/
|
|
124
|
+
export type Pathname = ReturnType<AppTypes['Pathname']>;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* `Pathname`, but possibly prefixed with a base path. Used for `page.url.pathname`.
|
|
128
|
+
*/
|
|
129
|
+
export type ResolvedPathname = ReturnType<AppTypes['ResolvedPathname']>;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* A union of all the filenames of assets contained in your `static` directory.
|
|
133
|
+
*/
|
|
134
|
+
export type Asset = ReturnType<AppTypes['Asset']>;
|
|
135
|
+
}
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -2950,4 +2950,58 @@ declare module '$service-worker' {
|
|
|
2950
2950
|
export const version: string;
|
|
2951
2951
|
}
|
|
2952
2952
|
|
|
2953
|
+
/**
|
|
2954
|
+
* This module contains generated types for the routes in your app.
|
|
2955
|
+
*/
|
|
2956
|
+
declare module '$app/types' {
|
|
2957
|
+
/**
|
|
2958
|
+
* Interface for all generated app types. This gets extended via declaration merging. DO NOT USE THIS INTERFACE DIRECTLY.
|
|
2959
|
+
*/
|
|
2960
|
+
export interface AppTypes {
|
|
2961
|
+
// These are all functions so that we can leverage function overloads to get the correct type.
|
|
2962
|
+
// Using the return types directly would error with a "not the same type" error.
|
|
2963
|
+
// https://www.typescriptlang.org/docs/handbook/declaration-merging.html#merging-interfaces
|
|
2964
|
+
RouteId(): string;
|
|
2965
|
+
RouteParams(): Record<string, Record<string, string>>;
|
|
2966
|
+
LayoutParams(): Record<string, Record<string, string>>;
|
|
2967
|
+
Pathname(): string;
|
|
2968
|
+
ResolvedPathname(): string;
|
|
2969
|
+
Asset(): string;
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
/**
|
|
2973
|
+
* A union of all the route IDs in your app. Used for `page.route.id` and `event.route.id`.
|
|
2974
|
+
*/
|
|
2975
|
+
export type RouteId = ReturnType<AppTypes['RouteId']>;
|
|
2976
|
+
|
|
2977
|
+
/**
|
|
2978
|
+
* A utility for getting the parameters associated with a given route.
|
|
2979
|
+
*/
|
|
2980
|
+
export type RouteParams<T extends RouteId> = T extends keyof ReturnType<AppTypes['RouteParams']>
|
|
2981
|
+
? ReturnType<AppTypes['RouteParams']>[T]
|
|
2982
|
+
: Record<string, never>;
|
|
2983
|
+
|
|
2984
|
+
/**
|
|
2985
|
+
* A utility for getting the parameters associated with a given layout, which is similar to `RouteParams` but also includes optional parameters for any child route.
|
|
2986
|
+
*/
|
|
2987
|
+
export type LayoutParams<T extends RouteId> = T extends keyof ReturnType<AppTypes['LayoutParams']>
|
|
2988
|
+
? ReturnType<AppTypes['LayoutParams']>[T]
|
|
2989
|
+
: Record<string, never>;
|
|
2990
|
+
|
|
2991
|
+
/**
|
|
2992
|
+
* A union of all valid pathnames in your app.
|
|
2993
|
+
*/
|
|
2994
|
+
export type Pathname = ReturnType<AppTypes['Pathname']>;
|
|
2995
|
+
|
|
2996
|
+
/**
|
|
2997
|
+
* `Pathname`, but possibly prefixed with a base path. Used for `page.url.pathname`.
|
|
2998
|
+
*/
|
|
2999
|
+
export type ResolvedPathname = ReturnType<AppTypes['ResolvedPathname']>;
|
|
3000
|
+
|
|
3001
|
+
/**
|
|
3002
|
+
* A union of all the filenames of assets contained in your `static` directory.
|
|
3003
|
+
*/
|
|
3004
|
+
export type Asset = ReturnType<AppTypes['Asset']>;
|
|
3005
|
+
}
|
|
3006
|
+
|
|
2953
3007
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -185,6 +185,6 @@
|
|
|
185
185
|
null,
|
|
186
186
|
null
|
|
187
187
|
],
|
|
188
|
-
"mappings": ";;;;;;;;;;
|
|
188
|
+
"mappings": "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",
|
|
189
189
|
"ignoreList": []
|
|
190
190
|
}
|