@sveltejs/kit 2.61.0 → 2.62.0
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 +3 -3
- package/src/core/adapt/builder.js +6 -1
- package/src/core/config/index.js +93 -31
- package/src/core/postbuild/fallback.js +7 -8
- package/src/core/postbuild/prerender.js +4 -1
- package/src/exports/node/index.js +2 -10
- package/src/exports/public.d.ts +1 -1
- package/src/exports/vite/index.js +30 -4
- package/src/runtime/app/state/client.js +10 -6
- package/src/runtime/client/client.js +68 -51
- package/src/runtime/server/fetch.js +12 -14
- package/src/runtime/server/respond.js +7 -10
- package/src/utils/http.js +21 -0
- package/src/utils/routing.js +1 -1
- package/src/version.js +1 -1
- package/types/index.d.ts +6 -3
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltejs/kit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.62.0",
|
|
4
4
|
"description": "SvelteKit is the fastest way to build Svelte apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@opentelemetry/api": "^1.0.0",
|
|
36
|
-
"@playwright/test": "^1.
|
|
36
|
+
"@playwright/test": "^1.60.0",
|
|
37
37
|
"@sveltejs/vite-plugin-svelte": "^6.0.0-next.3",
|
|
38
38
|
"@types/connect": "^3.4.38",
|
|
39
|
-
"@types/node": "^18.19.
|
|
39
|
+
"@types/node": "^18.19.130",
|
|
40
40
|
"@types/set-cookie-parser": "^2.4.7",
|
|
41
41
|
"dts-buddy": "^0.8.0",
|
|
42
42
|
"jsdom": "^26.1.0",
|
|
@@ -168,7 +168,10 @@ export function create_builder({
|
|
|
168
168
|
|
|
169
169
|
const fallback = await generate_fallback({
|
|
170
170
|
manifest_path,
|
|
171
|
-
env: { ...env.private, ...env.public }
|
|
171
|
+
env: { ...env.private, ...env.public },
|
|
172
|
+
out_dir: config.kit.outDir,
|
|
173
|
+
origin: config.kit.prerender.origin,
|
|
174
|
+
assets: config.kit.files.assets
|
|
172
175
|
});
|
|
173
176
|
|
|
174
177
|
if (existsSync(dest)) {
|
|
@@ -185,6 +188,8 @@ export function create_builder({
|
|
|
185
188
|
},
|
|
186
189
|
|
|
187
190
|
generateEnvModule() {
|
|
191
|
+
if (!build_data.client?.uses_env_dynamic_public) return;
|
|
192
|
+
|
|
188
193
|
const dest = `${config.kit.outDir}/output/prerendered/dependencies/${config.kit.appDir}/env.js`;
|
|
189
194
|
const env = get_env(config.kit.env, vite_config.mode);
|
|
190
195
|
|
package/src/core/config/index.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
/** @import { Config } from '@sveltejs/kit' */
|
|
2
|
+
/** @import { ValidatedConfig } from 'types' */
|
|
3
|
+
/** @import { ResolvedConfig } from 'vite' */
|
|
1
4
|
import fs from 'node:fs';
|
|
2
5
|
import path from 'node:path';
|
|
3
6
|
import process from 'node:process';
|
|
4
7
|
import * as url from 'node:url';
|
|
5
8
|
import options from './options.js';
|
|
6
9
|
import { resolve_entry } from '../../utils/filesystem.js';
|
|
10
|
+
import { import_peer } from '../../utils/import.js';
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
* Loads the template (src/app.html by default) and validates that it has the
|
|
10
14
|
* required content.
|
|
11
15
|
* @param {string} cwd
|
|
12
|
-
* @param {
|
|
16
|
+
* @param {ValidatedConfig} config
|
|
13
17
|
*/
|
|
14
18
|
export function load_template(cwd, { kit }) {
|
|
15
19
|
const { env, files } = kit;
|
|
@@ -43,7 +47,7 @@ export function load_template(cwd, { kit }) {
|
|
|
43
47
|
/**
|
|
44
48
|
* Loads the error page (src/error.html by default) if it exists.
|
|
45
49
|
* Falls back to a generic error page content.
|
|
46
|
-
* @param {
|
|
50
|
+
* @param {ValidatedConfig} config
|
|
47
51
|
*/
|
|
48
52
|
export function load_error_page(config) {
|
|
49
53
|
let { errorTemplate } = config.kit.files;
|
|
@@ -58,11 +62,34 @@ export function load_error_page(config) {
|
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
/**
|
|
61
|
-
* Loads and validates Svelte config file
|
|
65
|
+
* Loads and validates Svelte config file. Tries Vite config first, falls back to svelte.config.js
|
|
62
66
|
* @param {{ cwd?: string }} options
|
|
63
|
-
* @returns {Promise<
|
|
67
|
+
* @returns {Promise<ValidatedConfig>}
|
|
64
68
|
*/
|
|
65
69
|
export async function load_config({ cwd = process.cwd() } = {}) {
|
|
70
|
+
try {
|
|
71
|
+
const vite_config = await load_config_from_vite({ cwd });
|
|
72
|
+
if (vite_config) {
|
|
73
|
+
return vite_config;
|
|
74
|
+
}
|
|
75
|
+
} catch (e) {
|
|
76
|
+
// TODO SvelteKit 3: fail completely instead
|
|
77
|
+
console.error(
|
|
78
|
+
'Loading Svelte config from Vite config failed:',
|
|
79
|
+
e,
|
|
80
|
+
'\n\nFalling back to loading svelte.config.js'
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return load_svelte_config(cwd);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Loads and validates Svelte config file
|
|
89
|
+
* @param {string} [cwd]
|
|
90
|
+
* @returns {Promise<ValidatedConfig>}
|
|
91
|
+
*/
|
|
92
|
+
export async function load_svelte_config(cwd = process.cwd()) {
|
|
66
93
|
const config_files = ['js', 'ts']
|
|
67
94
|
.map((ext) => path.join(cwd, `svelte.config.${ext}`))
|
|
68
95
|
.filter((f) => fs.existsSync(f));
|
|
@@ -73,52 +100,87 @@ export async function load_config({ cwd = process.cwd() } = {}) {
|
|
|
73
100
|
);
|
|
74
101
|
return process_config({}, { cwd });
|
|
75
102
|
}
|
|
103
|
+
|
|
76
104
|
const config_file = config_files[0];
|
|
77
105
|
if (config_files.length > 1) {
|
|
78
106
|
console.log(
|
|
79
107
|
`Found multiple Svelte config files in ${cwd}: ${config_files.map((f) => path.basename(f)).join(', ')}. Using ${path.basename(config_file)}`
|
|
80
108
|
);
|
|
81
109
|
}
|
|
110
|
+
|
|
82
111
|
const config = await import(`${url.pathToFileURL(config_file).href}?ts=${Date.now()}`);
|
|
112
|
+
return process_config(config.default, { cwd, source: path.relative(cwd, config_file) });
|
|
113
|
+
}
|
|
83
114
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Loads and validates Svelte config via Vite config resolution (if set that way).
|
|
117
|
+
* @param {{ cwd?: string; mode?: string }} options
|
|
118
|
+
* @returns {Promise<ValidatedConfig | undefined>}
|
|
119
|
+
*/
|
|
120
|
+
async function load_config_from_vite({ cwd = process.cwd(), mode } = {}) {
|
|
121
|
+
const { resolveConfig } = await import_peer('vite');
|
|
122
|
+
const current_cwd = process.cwd();
|
|
88
123
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
124
|
+
if (cwd !== current_cwd) {
|
|
125
|
+
process.chdir(cwd);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** @type {ResolvedConfig} */
|
|
129
|
+
let resolved;
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
resolved = await resolveConfig({}, 'build', mode ?? process.env.MODE ?? 'production');
|
|
133
|
+
} finally {
|
|
134
|
+
if (cwd !== current_cwd) {
|
|
135
|
+
process.chdir(current_cwd);
|
|
136
|
+
}
|
|
92
137
|
}
|
|
138
|
+
|
|
139
|
+
const plugin = resolved.plugins.find(
|
|
140
|
+
(plugin) => plugin.name === 'vite-plugin-sveltekit-setup' && plugin.api?.options
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
return plugin?.api.options;
|
|
93
144
|
}
|
|
94
145
|
|
|
95
146
|
/**
|
|
96
|
-
* @param {
|
|
97
|
-
* @returns {
|
|
147
|
+
* @param {Config} config
|
|
148
|
+
* @returns {ValidatedConfig}
|
|
98
149
|
*/
|
|
99
|
-
function process_config(config, { cwd = process.cwd() } = {}) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
150
|
+
export function process_config(config, { cwd = process.cwd(), source = 'svelte.config.js' } = {}) {
|
|
151
|
+
try {
|
|
152
|
+
const validated = validate_config(config, cwd);
|
|
153
|
+
|
|
154
|
+
validated.kit.outDir = path.resolve(cwd, validated.kit.outDir);
|
|
155
|
+
|
|
156
|
+
for (const key in validated.kit.files) {
|
|
157
|
+
if (key === 'hooks') {
|
|
158
|
+
validated.kit.files.hooks.client = path.resolve(cwd, validated.kit.files.hooks.client);
|
|
159
|
+
validated.kit.files.hooks.server = path.resolve(cwd, validated.kit.files.hooks.server);
|
|
160
|
+
validated.kit.files.hooks.universal = path.resolve(
|
|
161
|
+
cwd,
|
|
162
|
+
validated.kit.files.hooks.universal
|
|
163
|
+
);
|
|
164
|
+
} else {
|
|
165
|
+
// @ts-expect-error
|
|
166
|
+
validated.kit.files[key] = path.resolve(cwd, validated.kit.files[key]);
|
|
167
|
+
}
|
|
112
168
|
}
|
|
113
|
-
}
|
|
114
169
|
|
|
115
|
-
|
|
170
|
+
return validated;
|
|
171
|
+
} catch (e) {
|
|
172
|
+
const error = /** @type {Error} */ (e);
|
|
173
|
+
|
|
174
|
+
// redact the stack trace — it's not helpful to users
|
|
175
|
+
error.stack = `Error loading ${source}: ${error.message}\n`;
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
116
178
|
}
|
|
117
179
|
|
|
118
180
|
/**
|
|
119
|
-
* @param {
|
|
181
|
+
* @param {Config} config
|
|
120
182
|
* @param {string} [cwd]
|
|
121
|
-
* @returns {
|
|
183
|
+
* @returns {ValidatedConfig}
|
|
122
184
|
*/
|
|
123
185
|
export function validate_config(config, cwd = process.cwd()) {
|
|
124
186
|
if (typeof config !== 'object') {
|
|
@@ -127,7 +189,7 @@ export function validate_config(config, cwd = process.cwd()) {
|
|
|
127
189
|
);
|
|
128
190
|
}
|
|
129
191
|
|
|
130
|
-
/** @type {
|
|
192
|
+
/** @type {ValidatedConfig} */
|
|
131
193
|
const validated = options(config, 'config');
|
|
132
194
|
const files = validated.kit.files;
|
|
133
195
|
|
|
@@ -2,7 +2,6 @@ import { readFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { pathToFileURL } from 'node:url';
|
|
4
4
|
import { installPolyfills } from '../../exports/node/polyfills.js';
|
|
5
|
-
import { load_config } from '../config/index.js';
|
|
6
5
|
import { forked } from '../../utils/fork.js';
|
|
7
6
|
|
|
8
7
|
export default forked(import.meta.url, generate_fallback);
|
|
@@ -11,15 +10,15 @@ export default forked(import.meta.url, generate_fallback);
|
|
|
11
10
|
* @param {{
|
|
12
11
|
* manifest_path: string;
|
|
13
12
|
* env: Record<string, string>
|
|
13
|
+
* out_dir: string;
|
|
14
|
+
* origin: string;
|
|
15
|
+
* assets: string;
|
|
14
16
|
* }} opts
|
|
15
17
|
*/
|
|
16
|
-
async function generate_fallback({ manifest_path, env }) {
|
|
17
|
-
/** @type {import('types').ValidatedKitConfig} */
|
|
18
|
-
const config = (await load_config()).kit;
|
|
19
|
-
|
|
18
|
+
async function generate_fallback({ manifest_path, env, out_dir, origin, assets }) {
|
|
20
19
|
installPolyfills();
|
|
21
20
|
|
|
22
|
-
const server_root = join(
|
|
21
|
+
const server_root = join(out_dir, 'output');
|
|
23
22
|
|
|
24
23
|
/** @type {import('types').ServerInternalModule} */
|
|
25
24
|
const { set_building } = await import(pathToFileURL(`${server_root}/server/internal.js`).href);
|
|
@@ -35,7 +34,7 @@ async function generate_fallback({ manifest_path, env }) {
|
|
|
35
34
|
const server = new Server(manifest);
|
|
36
35
|
await server.init({ env });
|
|
37
36
|
|
|
38
|
-
const response = await server.respond(new Request(
|
|
37
|
+
const response = await server.respond(new Request(origin + '/[fallback]'), {
|
|
39
38
|
getClientAddress: () => {
|
|
40
39
|
throw new Error('Cannot read clientAddress during prerendering');
|
|
41
40
|
},
|
|
@@ -44,7 +43,7 @@ async function generate_fallback({ manifest_path, env }) {
|
|
|
44
43
|
dependencies: new Map(),
|
|
45
44
|
remote_responses: new Map()
|
|
46
45
|
},
|
|
47
|
-
read: (file) => readFileSync(join(
|
|
46
|
+
read: (file) => readFileSync(join(assets, file))
|
|
48
47
|
});
|
|
49
48
|
|
|
50
49
|
if (response.ok) {
|
|
@@ -106,7 +106,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) {
|
|
|
106
106
|
if (hash) {
|
|
107
107
|
const fallback = await generate_fallback({
|
|
108
108
|
manifest_path,
|
|
109
|
-
env
|
|
109
|
+
env,
|
|
110
|
+
out_dir: config.outDir,
|
|
111
|
+
origin: config.prerender.origin,
|
|
112
|
+
assets: config.files.assets
|
|
110
113
|
});
|
|
111
114
|
|
|
112
115
|
const file = output_filename('/', true);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createReadStream } from 'node:fs';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
|
-
import * as set_cookie_parser from 'set-cookie-parser';
|
|
4
3
|
import { SvelteKitError } from '../internal/index.js';
|
|
5
4
|
import { noop } from '../../utils/functions.js';
|
|
5
|
+
import { get_set_cookies } from '../../utils/http.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @param {import('http').IncomingMessage} req
|
|
@@ -169,15 +169,7 @@ export async function getRequest({ request, base, bodySizeLimit }) {
|
|
|
169
169
|
export async function setResponse(res, response) {
|
|
170
170
|
for (const [key, value] of response.headers) {
|
|
171
171
|
try {
|
|
172
|
-
res.setHeader(
|
|
173
|
-
key,
|
|
174
|
-
key === 'set-cookie'
|
|
175
|
-
? set_cookie_parser.splitCookiesString(
|
|
176
|
-
// This is absurd but necessary, TODO: investigate why
|
|
177
|
-
/** @type {string}*/ (response.headers.get(key))
|
|
178
|
-
)
|
|
179
|
-
: value
|
|
180
|
-
);
|
|
172
|
+
res.setHeader(key, key === 'set-cookie' ? get_set_cookies(response.headers) : value);
|
|
181
173
|
} catch (error) {
|
|
182
174
|
res.getHeaderNames().forEach((name) => res.removeHeader(name));
|
|
183
175
|
res.writeHead(500).end(String(error));
|
package/src/exports/public.d.ts
CHANGED
|
@@ -141,7 +141,7 @@ export interface Builder {
|
|
|
141
141
|
generateFallback: (dest: string) => Promise<void>;
|
|
142
142
|
|
|
143
143
|
/**
|
|
144
|
-
* Generate a module exposing build-time environment variables as `$env/dynamic/public
|
|
144
|
+
* Generate a module exposing build-time environment variables as `$env/dynamic/public` if the app uses it.
|
|
145
145
|
*/
|
|
146
146
|
generateEnvModule: () => void;
|
|
147
147
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/** @import { Options } from '@sveltejs/vite-plugin-svelte' */
|
|
1
|
+
/** @import { Options, SvelteConfig } from '@sveltejs/vite-plugin-svelte' */
|
|
2
2
|
/** @import { PreprocessorGroup } from 'svelte/compiler' */
|
|
3
|
+
/** @import { KitConfig } from '@sveltejs/kit' */
|
|
3
4
|
/** @import { ConfigEnv, Manifest, Plugin, ResolvedConfig, UserConfig, ViteDevServer } from 'vite' */
|
|
5
|
+
/** @import { ValidatedConfig } from 'types' */
|
|
4
6
|
import fs from 'node:fs';
|
|
5
7
|
import path from 'node:path';
|
|
6
8
|
import process from 'node:process';
|
|
@@ -12,7 +14,7 @@ import { create_static_module, create_dynamic_module } from '../../core/env.js';
|
|
|
12
14
|
import * as sync from '../../core/sync/sync.js';
|
|
13
15
|
import { create_assets } from '../../core/sync/create_manifest_data/index.js';
|
|
14
16
|
import { runtime_directory, logger } from '../../core/utils.js';
|
|
15
|
-
import {
|
|
17
|
+
import { load_svelte_config, process_config } from '../../core/config/index.js';
|
|
16
18
|
import { generate_manifest } from '../../core/generate_manifest/index.js';
|
|
17
19
|
import { build_server_nodes } from './build/build_server.js';
|
|
18
20
|
import { build_service_worker } from './build/build_service_worker.js';
|
|
@@ -133,10 +135,31 @@ const warning_preprocessor = {
|
|
|
133
135
|
|
|
134
136
|
/**
|
|
135
137
|
* Returns the SvelteKit Vite plugins.
|
|
138
|
+
* Since version 2.62.0 you can pass [configuration](configuration) directly, in which case `svelte.config.js` is ignored.
|
|
139
|
+
* @param {KitConfig & Omit<SvelteConfig, 'onwarn'>} [config]
|
|
136
140
|
* @returns {Promise<Plugin[]>}
|
|
137
141
|
*/
|
|
138
|
-
export async function sveltekit() {
|
|
139
|
-
|
|
142
|
+
export async function sveltekit(config) {
|
|
143
|
+
/** @type {ValidatedConfig} */
|
|
144
|
+
let svelte_config;
|
|
145
|
+
|
|
146
|
+
if (config !== undefined) {
|
|
147
|
+
const { extensions, compilerOptions, vitePlugin, preprocess, ...kit } = config;
|
|
148
|
+
svelte_config = process_config(
|
|
149
|
+
{ extensions, compilerOptions, vitePlugin, preprocess, kit },
|
|
150
|
+
{ cwd, source: 'SvelteKit options from Vite config' }
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
const config_file = ['svelte.config.js', 'svelte.config.ts'].find((file) =>
|
|
154
|
+
fs.existsSync(file)
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
if (config_file) {
|
|
158
|
+
console.warn(`${config_file} is ignored when options are passed via your Vite config`);
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
svelte_config = await load_svelte_config();
|
|
162
|
+
}
|
|
140
163
|
|
|
141
164
|
/** @type {Options['preprocess']} */
|
|
142
165
|
let preprocess = svelte_config.preprocess;
|
|
@@ -243,6 +266,9 @@ async function kit({ svelte_config }) {
|
|
|
243
266
|
/** @type {Plugin} */
|
|
244
267
|
const plugin_setup = {
|
|
245
268
|
name: 'vite-plugin-sveltekit-setup',
|
|
269
|
+
api: {
|
|
270
|
+
options: svelte_config
|
|
271
|
+
},
|
|
246
272
|
|
|
247
273
|
/**
|
|
248
274
|
* Build the SvelteKit-provided Vite config to be merged with the user's vite.config.js file.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEV } from 'esm-env';
|
|
1
2
|
import {
|
|
2
3
|
page as _page,
|
|
3
4
|
navigating as _navigating,
|
|
@@ -53,12 +54,15 @@ export const navigating = {
|
|
|
53
54
|
}
|
|
54
55
|
};
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
// TODO: remove in 3.0
|
|
58
|
+
if (DEV) {
|
|
59
|
+
Object.defineProperty(navigating, 'current', {
|
|
60
|
+
get() {
|
|
61
|
+
// between 2.12.0 and 2.12.1 `navigating.current` existed
|
|
62
|
+
throw new Error('Replace navigating.current.<prop> with navigating.<prop>');
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
62
66
|
|
|
63
67
|
export const updated = {
|
|
64
68
|
get current() {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @import { ServerNodesResponse, ServerRedirectNode } from 'types' */
|
|
1
2
|
/** @import { CacheEntry } from './remote-functions/cache.svelte.js' */
|
|
2
3
|
/** @import { Query } from './remote-functions/query/instance.svelte.js' */
|
|
3
4
|
/** @import { LiveQuery } from './remote-functions/query-live/instance.svelte.js' */
|
|
@@ -231,6 +232,7 @@ let load_cache = null;
|
|
|
231
232
|
function discard_load_cache() {
|
|
232
233
|
void load_cache?.fork?.then((f) => f?.discard());
|
|
233
234
|
load_cache = null;
|
|
235
|
+
current_a = { element: undefined, href: undefined };
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
/**
|
|
@@ -1842,8 +1844,10 @@ async function navigate({
|
|
|
1842
1844
|
if (load_cache?.fork && !load_cache_fork) {
|
|
1843
1845
|
// discard fork of different route
|
|
1844
1846
|
discard_load_cache();
|
|
1847
|
+
} else {
|
|
1848
|
+
load_cache = null;
|
|
1849
|
+
current_a = { element: undefined, href: undefined };
|
|
1845
1850
|
}
|
|
1846
|
-
load_cache = null;
|
|
1847
1851
|
|
|
1848
1852
|
navigation_result.props.page.state = state;
|
|
1849
1853
|
|
|
@@ -2029,11 +2033,16 @@ if (import.meta.hot) {
|
|
|
2029
2033
|
|
|
2030
2034
|
/** @typedef {(typeof PRELOAD_PRIORITIES)['hover'] | (typeof PRELOAD_PRIORITIES)['tap']} PreloadDataPriority */
|
|
2031
2035
|
|
|
2036
|
+
/**
|
|
2037
|
+
* The anchor element whose href is being preloaded. It is reset after navigation
|
|
2038
|
+
* or changes when a different anchor element is being preloaded.
|
|
2039
|
+
* @type {{ element: Element | SVGAElement | undefined; href: string | SVGAnimatedString | undefined }}
|
|
2040
|
+
*/
|
|
2041
|
+
let current_a = { element: undefined, href: undefined };
|
|
2042
|
+
|
|
2032
2043
|
function setup_preload() {
|
|
2033
2044
|
/** @type {NodeJS.Timeout} */
|
|
2034
2045
|
let mousemove_timeout;
|
|
2035
|
-
/** @type {{ element: Element | SVGAElement | undefined; href: string | SVGAnimatedString | undefined }} */
|
|
2036
|
-
let current_a = { element: undefined, href: undefined };
|
|
2037
2046
|
/** @type {PreloadDataPriority} */
|
|
2038
2047
|
let current_priority;
|
|
2039
2048
|
|
|
@@ -2626,7 +2635,7 @@ function _start_router() {
|
|
|
2626
2635
|
});
|
|
2627
2636
|
|
|
2628
2637
|
// @ts-expect-error this isn't supported everywhere yet
|
|
2629
|
-
if (!navigator.connection?.saveData
|
|
2638
|
+
if (!navigator.connection?.saveData) {
|
|
2630
2639
|
setup_preload();
|
|
2631
2640
|
}
|
|
2632
2641
|
|
|
@@ -3067,61 +3076,69 @@ async function load_data(url, invalid) {
|
|
|
3067
3076
|
throw new HttpError(res.status, message);
|
|
3068
3077
|
}
|
|
3069
3078
|
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
/**
|
|
3074
|
-
* Map of deferred promises that will be resolved by a subsequent chunk of data
|
|
3075
|
-
* @type {Map<string, import('types').Deferred>}
|
|
3076
|
-
*/
|
|
3077
|
-
const deferreds = new Map();
|
|
3078
|
-
const reader = /** @type {ReadableStream<Uint8Array>} */ (res.body).getReader();
|
|
3079
|
-
|
|
3080
|
-
/**
|
|
3081
|
-
* @param {any} data
|
|
3082
|
-
*/
|
|
3083
|
-
function deserialize(data) {
|
|
3084
|
-
return devalue.unflatten(data, {
|
|
3085
|
-
...app.decoders,
|
|
3086
|
-
Promise: (id) => {
|
|
3087
|
-
return new Promise((fulfil, reject) => {
|
|
3088
|
-
deferreds.set(id, { fulfil, reject });
|
|
3089
|
-
});
|
|
3090
|
-
}
|
|
3091
|
-
});
|
|
3092
|
-
}
|
|
3079
|
+
return new Promise((resolve, reject) => {
|
|
3080
|
+
process_stream(resolve, res).catch(reject);
|
|
3081
|
+
});
|
|
3093
3082
|
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
return resolve(node);
|
|
3097
|
-
}
|
|
3083
|
+
// TODO edge case handling necessary? stream() read fails?
|
|
3084
|
+
}
|
|
3098
3085
|
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3086
|
+
/**
|
|
3087
|
+
* @param {(value: ServerNodesResponse | ServerRedirectNode) => void} resolve
|
|
3088
|
+
* @param {Response} res
|
|
3089
|
+
* @returns {Promise<void>}
|
|
3090
|
+
*/
|
|
3091
|
+
async function process_stream(resolve, res) {
|
|
3092
|
+
const reader = /** @type {ReadableStream<Uint8Array>} */ (res.body).getReader();
|
|
3093
|
+
|
|
3094
|
+
/**
|
|
3095
|
+
* Map of deferred promises that will be resolved by a subsequent chunk of data
|
|
3096
|
+
* @type {Map<string, import('types').Deferred>}
|
|
3097
|
+
*/
|
|
3098
|
+
const deferreds = new Map();
|
|
3099
|
+
|
|
3100
|
+
/**
|
|
3101
|
+
* @param {any} data
|
|
3102
|
+
*/
|
|
3103
|
+
function deserialize(data) {
|
|
3104
|
+
return devalue.unflatten(data, {
|
|
3105
|
+
...app.decoders,
|
|
3106
|
+
Promise: (id) => {
|
|
3107
|
+
return new Promise((fulfil, reject) => {
|
|
3108
|
+
deferreds.set(id, { fulfil, reject });
|
|
3106
3109
|
});
|
|
3110
|
+
}
|
|
3111
|
+
});
|
|
3112
|
+
}
|
|
3107
3113
|
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
const deferred = /** @type {import('types').Deferred} */ (deferreds.get(id));
|
|
3113
|
-
deferreds.delete(id);
|
|
3114
|
+
for await (const node of read_ndjson(reader)) {
|
|
3115
|
+
if (node.type === 'redirect') {
|
|
3116
|
+
return resolve(node);
|
|
3117
|
+
}
|
|
3114
3118
|
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
+
if (node.type === 'data') {
|
|
3120
|
+
// This is the first (and possibly only, if no pending promises) chunk
|
|
3121
|
+
node.nodes?.forEach((/** @type {any} */ node) => {
|
|
3122
|
+
if (node?.type === 'data') {
|
|
3123
|
+
node.uses = deserialize_uses(node.uses);
|
|
3124
|
+
node.data = deserialize(node.data);
|
|
3119
3125
|
}
|
|
3126
|
+
});
|
|
3127
|
+
|
|
3128
|
+
resolve(node);
|
|
3129
|
+
} else if (node.type === 'chunk') {
|
|
3130
|
+
// This is a subsequent chunk containing deferred data
|
|
3131
|
+
const { id, data, error } = node;
|
|
3132
|
+
const deferred = /** @type {import('types').Deferred} */ (deferreds.get(id));
|
|
3133
|
+
deferreds.delete(id);
|
|
3134
|
+
|
|
3135
|
+
if (error) {
|
|
3136
|
+
deferred.reject(deserialize(error));
|
|
3137
|
+
} else {
|
|
3138
|
+
deferred.fulfil(deserialize(data));
|
|
3120
3139
|
}
|
|
3121
3140
|
}
|
|
3122
|
-
}
|
|
3123
|
-
|
|
3124
|
-
// TODO edge case handling necessary? stream() read fails?
|
|
3141
|
+
}
|
|
3125
3142
|
}
|
|
3126
3143
|
|
|
3127
3144
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as set_cookie_parser from 'set-cookie-parser';
|
|
2
2
|
import { noop } from '../../utils/functions.js';
|
|
3
|
+
import { get_set_cookies } from '../../utils/http.js';
|
|
3
4
|
import { respond } from './respond.js';
|
|
4
5
|
import * as paths from '$app/paths/internal/server';
|
|
5
6
|
import { read_implementation } from '__sveltekit/server';
|
|
@@ -152,22 +153,19 @@ export function create_fetch({ event, options, manifest, state, get_cookie_heade
|
|
|
152
153
|
|
|
153
154
|
const response = await internal_fetch(request, options, manifest, state);
|
|
154
155
|
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
decodeValues: false
|
|
160
|
-
});
|
|
156
|
+
for (const str of get_set_cookies(response.headers)) {
|
|
157
|
+
const { name, value, ...options } = set_cookie_parser.parseString(str, {
|
|
158
|
+
decodeValues: false
|
|
159
|
+
});
|
|
161
160
|
|
|
162
|
-
|
|
161
|
+
const path = options.path ?? (url.pathname.split('/').slice(0, -1).join('/') || '/');
|
|
163
162
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
163
|
+
// options.sameSite is string, something more specific is required - type cast is safe
|
|
164
|
+
set_internal(name, value, {
|
|
165
|
+
path,
|
|
166
|
+
encode: (value) => value,
|
|
167
|
+
.../** @type {import('cookie').CookieSerializeOptions} */ (options)
|
|
168
|
+
});
|
|
171
169
|
}
|
|
172
170
|
|
|
173
171
|
return response;
|
|
@@ -8,7 +8,7 @@ import { is_endpoint_request, render_endpoint } from './endpoint.js';
|
|
|
8
8
|
import { render_page } from './page/index.js';
|
|
9
9
|
import { render_response } from './page/render.js';
|
|
10
10
|
import { respond_with_error } from './page/respond_with_error.js';
|
|
11
|
-
import { is_form_content_type } from '../../utils/http.js';
|
|
11
|
+
import { get_set_cookies, is_form_content_type } from '../../utils/http.js';
|
|
12
12
|
import {
|
|
13
13
|
handle_fatal_error,
|
|
14
14
|
has_prerendered_path,
|
|
@@ -511,19 +511,16 @@ export async function internal_respond(request, options, manifest, state) {
|
|
|
511
511
|
if (if_none_match_value === etag) {
|
|
512
512
|
const headers = new Headers({ etag });
|
|
513
513
|
|
|
514
|
-
// https://datatracker.ietf.org/doc/html/rfc7232#section-4.1
|
|
515
|
-
for (const key of [
|
|
516
|
-
'cache-control',
|
|
517
|
-
'content-location',
|
|
518
|
-
'date',
|
|
519
|
-
'expires',
|
|
520
|
-
'vary',
|
|
521
|
-
'set-cookie'
|
|
522
|
-
]) {
|
|
514
|
+
// https://datatracker.ietf.org/doc/html/rfc7232#section-4.1
|
|
515
|
+
for (const key of ['cache-control', 'content-location', 'date', 'expires', 'vary']) {
|
|
523
516
|
const value = response.headers.get(key);
|
|
524
517
|
if (value) headers.set(key, value);
|
|
525
518
|
}
|
|
526
519
|
|
|
520
|
+
for (const cookie of get_set_cookies(response.headers)) {
|
|
521
|
+
headers.append('set-cookie', cookie);
|
|
522
|
+
}
|
|
523
|
+
|
|
527
524
|
return new Response(undefined, {
|
|
528
525
|
status: 304,
|
|
529
526
|
headers
|
package/src/utils/http.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as set_cookie_parser from 'set-cookie-parser';
|
|
1
2
|
import { BINARY_FORM_CONTENT_TYPE } from '../runtime/form-utils.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -56,6 +57,26 @@ export function negotiate(accept, types) {
|
|
|
56
57
|
return accepted;
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Reads all `Set-Cookie` headers as separate values. `Headers.get('set-cookie')`
|
|
62
|
+
* collapses them into a single comma-joined string that browsers cannot parse, so
|
|
63
|
+
* we use `Headers.getSetCookie()` where available and fall back to splitting the
|
|
64
|
+
* joined string otherwise.
|
|
65
|
+
*
|
|
66
|
+
* TODO 3.0 `getSetCookie` is available in Node 19.7+; once we drop support for
|
|
67
|
+
* older versions we can use it directly and remove the `splitCookiesString` fallback
|
|
68
|
+
* @param {Headers} headers
|
|
69
|
+
* @returns {string[]}
|
|
70
|
+
*/
|
|
71
|
+
export function get_set_cookies(headers) {
|
|
72
|
+
if (typeof headers.getSetCookie === 'function') {
|
|
73
|
+
return headers.getSetCookie();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const set_cookie = headers.get('set-cookie');
|
|
77
|
+
return set_cookie ? set_cookie_parser.splitCookiesString(set_cookie) : [];
|
|
78
|
+
}
|
|
79
|
+
|
|
59
80
|
/**
|
|
60
81
|
* Returns `true` if the request contains a `content-type` header with the given type
|
|
61
82
|
* @param {Request} request
|
package/src/utils/routing.js
CHANGED
|
@@ -3,7 +3,7 @@ import { decode_params } from './url.js';
|
|
|
3
3
|
|
|
4
4
|
const param_pattern = /^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;
|
|
5
5
|
|
|
6
|
-
const root_group_pattern = /^\/\((
|
|
6
|
+
const root_group_pattern = /^\/\((?:[^)]+)\)$/;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Creates the regex pattern, extracts parameter names, and generates types for a route
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -116,7 +116,7 @@ declare module '@sveltejs/kit' {
|
|
|
116
116
|
generateFallback: (dest: string) => Promise<void>;
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
-
* Generate a module exposing build-time environment variables as `$env/dynamic/public
|
|
119
|
+
* Generate a module exposing build-time environment variables as `$env/dynamic/public` if the app uses it.
|
|
120
120
|
*/
|
|
121
121
|
generateEnvModule: () => void;
|
|
122
122
|
|
|
@@ -2923,7 +2923,7 @@ declare module '@sveltejs/kit' {
|
|
|
2923
2923
|
class Redirect_1 {
|
|
2924
2924
|
|
|
2925
2925
|
constructor(status: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308, location: string);
|
|
2926
|
-
status: 301 | 302 | 303 |
|
|
2926
|
+
status: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308;
|
|
2927
2927
|
location: string;
|
|
2928
2928
|
}
|
|
2929
2929
|
|
|
@@ -3036,11 +3036,14 @@ declare module '@sveltejs/kit/node/polyfills' {
|
|
|
3036
3036
|
}
|
|
3037
3037
|
|
|
3038
3038
|
declare module '@sveltejs/kit/vite' {
|
|
3039
|
+
import type { KitConfig } from '@sveltejs/kit';
|
|
3040
|
+
import type { SvelteConfig } from '@sveltejs/vite-plugin-svelte';
|
|
3039
3041
|
import type { Plugin } from 'vite';
|
|
3040
3042
|
/**
|
|
3041
3043
|
* Returns the SvelteKit Vite plugins.
|
|
3044
|
+
* Since version 2.62.0 you can pass [configuration](configuration) directly, in which case `svelte.config.js` is ignored.
|
|
3042
3045
|
* */
|
|
3043
|
-
export function sveltekit(): Promise<Plugin[]>;
|
|
3046
|
+
export function sveltekit(config?: KitConfig & Omit<SvelteConfig, "onwarn">): Promise<Plugin[]>;
|
|
3044
3047
|
|
|
3045
3048
|
export {};
|
|
3046
3049
|
}
|
package/types/index.d.ts.map
CHANGED
|
@@ -238,6 +238,6 @@
|
|
|
238
238
|
null,
|
|
239
239
|
null
|
|
240
240
|
],
|
|
241
|
-
"mappings": "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
|
|
241
|
+
"mappings": "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",
|
|
242
242
|
"ignoreList": []
|
|
243
243
|
}
|