@sveltejs/kit 2.19.0 → 2.19.2

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.19.0",
3
+ "version": "2.19.2",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -990,7 +990,7 @@ export interface NavigationEvent<
990
990
  */
991
991
  route: {
992
992
  /**
993
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`
993
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
994
994
  */
995
995
  id: RouteId;
996
996
  };
@@ -1012,7 +1012,12 @@ export interface NavigationTarget {
1012
1012
  /**
1013
1013
  * Info about the target route
1014
1014
  */
1015
- route: { id: string | null };
1015
+ route: {
1016
+ /**
1017
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1018
+ */
1019
+ id: string | null;
1020
+ };
1016
1021
  /**
1017
1022
  * The URL that is navigated to
1018
1023
  */
@@ -1129,7 +1134,7 @@ export interface Page<
1129
1134
  */
1130
1135
  route: {
1131
1136
  /**
1132
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`.
1137
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1133
1138
  */
1134
1139
  id: RouteId;
1135
1140
  };
@@ -1205,7 +1210,7 @@ export interface RequestEvent<
1205
1210
  */
1206
1211
  route: {
1207
1212
  /**
1208
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`.
1213
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1209
1214
  */
1210
1215
  id: RouteId;
1211
1216
  };
@@ -1,6 +1,6 @@
1
1
  import fs from 'node:fs';
2
2
  import { mkdirp } from '../../../utils/filesystem.js';
3
- import { find_deps, resolve_symlinks } from './utils.js';
3
+ import { filter_fonts, find_deps, resolve_symlinks } from './utils.js';
4
4
  import { s } from '../../../utils/misc.js';
5
5
  import { normalizePath } from 'vite';
6
6
  import { basename } from 'node:path';
@@ -83,13 +83,13 @@ export function build_server_nodes(out, kit, manifest_data, server_manifest, cli
83
83
  const exports = [`export const index = ${i};`];
84
84
 
85
85
  /** @type {string[]} */
86
- const imported = [];
86
+ let imported = [];
87
87
 
88
88
  /** @type {string[]} */
89
- const stylesheets = [];
89
+ let stylesheets = [];
90
90
 
91
91
  /** @type {string[]} */
92
- const fonts = [];
92
+ let fonts = [];
93
93
 
94
94
  if (node.component && client_manifest) {
95
95
  exports.push(
@@ -119,15 +119,45 @@ export function build_server_nodes(out, kit, manifest_data, server_manifest, cli
119
119
  }
120
120
 
121
121
  if (client_manifest && (node.universal || node.component) && output_config.bundleStrategy === 'split') {
122
- const entry = find_deps(
123
- client_manifest,
124
- `${normalizePath(kit.outDir)}/generated/client-optimized/nodes/${i}.js`,
125
- true
126
- );
122
+ const entry_path = `${normalizePath(kit.outDir)}/generated/client-optimized/nodes/${i}.js`;
123
+ const entry = find_deps(client_manifest, entry_path, true);
124
+
125
+ // eagerly load stylesheets and fonts imported by the SSR-ed page to avoid FOUC.
126
+ // If it is not used during SSR, it can be lazily loaded in the browser.
127
+
128
+ /** @type {import('types').AssetDependencies | undefined} */
129
+ let component;
130
+ if (node.component) {
131
+ component = find_deps(server_manifest, node.component, true);
132
+ }
133
+
134
+ /** @type {import('types').AssetDependencies | undefined} */
135
+ let universal;
136
+ if (node.universal) {
137
+ universal = find_deps(server_manifest, node.universal, true);
138
+ }
139
+
140
+ /** @type {Set<string>} */
141
+ const css_used_by_server = new Set();
142
+ /** @type {Set<string>} */
143
+ const assets_used_by_server = new Set();
144
+
145
+ entry.stylesheet_map.forEach((value, key) => {
146
+ // pages and layouts are named as node indexes in the client manifest
147
+ // so we need to use the original filename when checking against the server manifest
148
+ if (key === entry_path) {
149
+ key = node.component ?? key;
150
+ }
151
+
152
+ if (component?.stylesheet_map.has(key) || universal?.stylesheet_map.has(key)) {
153
+ value.css.forEach(file => css_used_by_server.add(file));
154
+ value.assets.forEach(file => assets_used_by_server.add(file));
155
+ }
156
+ });
127
157
 
128
- imported.push(...entry.imports);
129
- stylesheets.push(...entry.stylesheets);
130
- fonts.push(...entry.fonts);
158
+ imported = entry.imports;
159
+ stylesheets = Array.from(css_used_by_server);
160
+ fonts = filter_fonts(Array.from(assets_used_by_server));
131
161
  }
132
162
 
133
163
  exports.push(
@@ -22,11 +22,16 @@ export function find_deps(manifest, entry, add_dynamic_css) {
22
22
  /** @type {Set<string>} */
23
23
  const imported_assets = new Set();
24
24
 
25
+ /** @type {Map<string, { css: Set<string>; assets: Set<string> }>} */
26
+ const stylesheet_map = new Map();
27
+
25
28
  /**
26
29
  * @param {string} current
27
30
  * @param {boolean} add_js
31
+ * @param {string} initial_importer
32
+ * @param {number} dynamic_import_depth
28
33
  */
29
- function traverse(current, add_js) {
34
+ function traverse(current, add_js, initial_importer, dynamic_import_depth) {
30
35
  if (seen.has(current)) return;
31
36
  seen.add(current);
32
37
 
@@ -35,9 +40,7 @@ export function find_deps(manifest, entry, add_dynamic_css) {
35
40
  if (add_js) imports.add(chunk.file);
36
41
 
37
42
  if (chunk.assets) {
38
- for (const asset of chunk.assets) {
39
- imported_assets.add(asset);
40
- }
43
+ chunk.assets.forEach(asset => imported_assets.add(asset));
41
44
  }
42
45
 
43
46
  if (chunk.css) {
@@ -45,17 +48,38 @@ export function find_deps(manifest, entry, add_dynamic_css) {
45
48
  }
46
49
 
47
50
  if (chunk.imports) {
48
- chunk.imports.forEach((file) => traverse(file, add_js));
51
+ chunk.imports.forEach((file) => traverse(file, add_js, initial_importer, dynamic_import_depth));
52
+ }
53
+
54
+ if (!add_dynamic_css) return;
55
+
56
+ if ((chunk.css || chunk.assets) && dynamic_import_depth <= 1) {
57
+ // group files based on the initial importer because if a file is only ever
58
+ // a transitive dependency, it doesn't have a suitable name we can map back to
59
+ // the server manifest
60
+ if (stylesheet_map.has(initial_importer)) {
61
+ const { css, assets } = /** @type {{ css: Set<string>; assets: Set<string> }} */ (stylesheet_map.get(initial_importer));
62
+ if (chunk.css) chunk.css.forEach((file) => css.add(file));
63
+ if (chunk.assets) chunk.assets.forEach((file) => assets.add(file));
64
+ } else {
65
+ stylesheet_map.set(initial_importer, {
66
+ css: new Set(chunk.css),
67
+ assets: new Set(chunk.assets)
68
+ });
69
+ }
49
70
  }
50
71
 
51
- if (add_dynamic_css && chunk.dynamicImports) {
52
- chunk.dynamicImports.forEach((file) => traverse(file, false));
72
+ if (chunk.dynamicImports) {
73
+ dynamic_import_depth++;
74
+ chunk.dynamicImports.forEach((file) => {
75
+ traverse(file, false, file, dynamic_import_depth);
76
+ });
53
77
  }
54
78
  }
55
79
 
56
80
  const { chunk, file } = resolve_symlinks(manifest, entry);
57
81
 
58
- traverse(file, true);
82
+ traverse(file, true, entry, 0);
59
83
 
60
84
  const assets = Array.from(imported_assets);
61
85
 
@@ -65,7 +89,8 @@ export function find_deps(manifest, entry, add_dynamic_css) {
65
89
  imports: Array.from(imports),
66
90
  stylesheets: Array.from(stylesheets),
67
91
  // TODO do we need this separately?
68
- fonts: assets.filter((asset) => /\.(woff2?|ttf|otf)$/.test(asset))
92
+ fonts: filter_fonts(assets),
93
+ stylesheet_map
69
94
  };
70
95
  }
71
96
 
@@ -85,7 +110,15 @@ export function resolve_symlinks(manifest, file) {
85
110
  return { chunk, file };
86
111
  }
87
112
 
88
- const method_names = new Set(['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'OPTIONS']);
113
+ /**
114
+ * @param {string[]} assets
115
+ * @returns {string[]}
116
+ */
117
+ export function filter_fonts(assets) {
118
+ return assets.filter((asset) => /\.(woff2?|ttf|otf)$/.test(asset));
119
+ }
120
+
121
+ const method_names = new Set((['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'OPTIONS']));
89
122
 
90
123
  // If we'd written this in TypeScript, it could be easy...
91
124
  /**
@@ -2,6 +2,7 @@ import * as set_cookie_parser from 'set-cookie-parser';
2
2
  import { respond } from './respond.js';
3
3
  import * as paths from '__sveltekit/paths';
4
4
  import { read_implementation } from '__sveltekit/server';
5
+ import { has_prerendered_path } from './utils.js';
5
6
 
6
7
  /**
7
8
  * @param {{
@@ -112,10 +113,7 @@ export function create_fetch({ event, options, manifest, state, get_cookie_heade
112
113
  return await fetch(request);
113
114
  }
114
115
 
115
- if (
116
- manifest._.prerendered_routes.has(decoded) ||
117
- (decoded.at(-1) === '/' && manifest._.prerendered_routes.has(decoded.slice(0, -1)))
118
- ) {
116
+ if (has_prerendered_path(manifest, paths.base + decoded)) {
119
117
  // The path of something prerendered could match a different route
120
118
  // that is still in the manifest, leading to the wrong route being loaded.
121
119
  // We therefore bail early here. The prerendered logic is different for
@@ -5,7 +5,12 @@ import { render_page } from './page/index.js';
5
5
  import { render_response } from './page/render.js';
6
6
  import { respond_with_error } from './page/respond_with_error.js';
7
7
  import { is_form_content_type } from '../../utils/http.js';
8
- import { handle_fatal_error, method_not_allowed, redirect_response } from './utils.js';
8
+ import {
9
+ handle_fatal_error,
10
+ has_prerendered_path,
11
+ method_not_allowed,
12
+ redirect_response
13
+ } from './utils.js';
9
14
  import { decode_pathname, decode_params, disable_search, normalize_path } from '../../utils/url.js';
10
15
  import { exec } from '../../utils/routing.js';
11
16
  import { redirect_json_response, render_data } from './data/index.js';
@@ -21,6 +26,8 @@ import { get_public_env } from './env_module.js';
21
26
  import { resolve_route } from './page/server_routing.js';
22
27
  import { validateHeaders } from './validate-headers.js';
23
28
  import {
29
+ add_data_suffix,
30
+ add_resolution_suffix,
24
31
  has_data_suffix,
25
32
  has_resolution_suffix,
26
33
  strip_data_suffix,
@@ -191,6 +198,34 @@ export async function respond(request, options, manifest, state) {
191
198
  return text('Malformed URI', { status: 400 });
192
199
  }
193
200
 
201
+ if (
202
+ resolved_path !== url.pathname &&
203
+ !state.prerendering?.fallback &&
204
+ has_prerendered_path(manifest, resolved_path)
205
+ ) {
206
+ const url = new URL(request.url);
207
+ url.pathname = is_data_request
208
+ ? add_data_suffix(resolved_path)
209
+ : is_route_resolution_request
210
+ ? add_resolution_suffix(resolved_path)
211
+ : resolved_path;
212
+
213
+ // `fetch` automatically decodes the body, so we need to delete the related headers to not break the response
214
+ // Also see https://github.com/sveltejs/kit/issues/12197 for more info (we should fix this more generally at some point)
215
+ const response = await fetch(url, request);
216
+ const headers = new Headers(response.headers);
217
+ if (headers.has('content-encoding')) {
218
+ headers.delete('content-encoding');
219
+ headers.delete('content-length');
220
+ }
221
+
222
+ return new Response(response.body, {
223
+ headers,
224
+ status: response.status,
225
+ statusText: response.statusText
226
+ });
227
+ }
228
+
194
229
  /** @type {import('types').SSRRoute | null} */
195
230
  let route = null;
196
231
 
@@ -163,3 +163,15 @@ export function stringify_uses(node) {
163
163
 
164
164
  return `"uses":{${uses.join(',')}}`;
165
165
  }
166
+
167
+ /**
168
+ * Returns `true` if the given path was prerendered
169
+ * @param {import('@sveltejs/kit').SSRManifest} manifest
170
+ * @param {string} pathname Should include the base and be decoded
171
+ */
172
+ export function has_prerendered_path(manifest, pathname) {
173
+ return (
174
+ manifest._.prerendered_routes.has(pathname) ||
175
+ (pathname.at(-1) === '/' && manifest._.prerendered_routes.has(pathname.slice(0, -1)))
176
+ );
177
+ }
@@ -59,6 +59,7 @@ export interface AssetDependencies {
59
59
  imports: string[];
60
60
  stylesheets: string[];
61
61
  fonts: string[];
62
+ stylesheet_map: Map<string, { css: Set<string>; assets: Set<string> }>;
62
63
  }
63
64
 
64
65
  export interface BuildData {
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.19.0';
4
+ export const VERSION = '2.19.2';
package/types/index.d.ts CHANGED
@@ -972,7 +972,7 @@ declare module '@sveltejs/kit' {
972
972
  */
973
973
  route: {
974
974
  /**
975
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`
975
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
976
976
  */
977
977
  id: RouteId;
978
978
  };
@@ -994,7 +994,12 @@ declare module '@sveltejs/kit' {
994
994
  /**
995
995
  * Info about the target route
996
996
  */
997
- route: { id: string | null };
997
+ route: {
998
+ /**
999
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1000
+ */
1001
+ id: string | null;
1002
+ };
998
1003
  /**
999
1004
  * The URL that is navigated to
1000
1005
  */
@@ -1111,7 +1116,7 @@ declare module '@sveltejs/kit' {
1111
1116
  */
1112
1117
  route: {
1113
1118
  /**
1114
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`.
1119
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1115
1120
  */
1116
1121
  id: RouteId;
1117
1122
  };
@@ -1187,7 +1192,7 @@ declare module '@sveltejs/kit' {
1187
1192
  */
1188
1193
  route: {
1189
1194
  /**
1190
- * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`.
1195
+ * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched.
1191
1196
  */
1192
1197
  id: RouteId;
1193
1198
  };
@@ -163,6 +163,6 @@
163
163
  null,
164
164
  null
165
165
  ],
166
- "mappings": "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",
166
+ "mappings": "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",
167
167
  "ignoreList": []
168
168
  }