@sveltejs/kit 3.0.0-next.24 → 3.0.0-next.25
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 +12 -4
- package/src/constants.js +6 -0
- package/src/core/adapt/builder.js +1 -2
- package/src/core/env.js +3 -6
- package/src/core/postbuild/prerender.js +2 -2
- package/src/core/sync/write_server.js +3 -17
- package/src/core/utils.js +10 -0
- package/src/exports/adapter.js +22 -0
- package/src/exports/public.d.ts +1 -1
- package/src/exports/vite/build/service-worker.js +98 -0
- package/src/exports/vite/dev/index.js +17 -3
- package/src/exports/vite/index.js +41 -411
- package/src/exports/vite/plugins/env-vars.js +42 -0
- package/src/exports/vite/plugins/guard.js +205 -0
- package/src/exports/vite/utils.js +97 -0
- package/src/runtime/app/server/remote/query.js +2 -2
- package/src/runtime/client/client.js +4 -4
- package/src/runtime/form-utils.js +11 -19
- package/src/runtime/server/data/index.js +11 -26
- package/src/runtime/server/errors.js +7 -10
- package/src/runtime/server/fetch.js +14 -16
- package/src/runtime/server/index.js +28 -25
- package/src/runtime/server/internal.js +34 -4
- package/src/runtime/server/page/actions.js +6 -8
- package/src/runtime/server/page/data_serializer.js +6 -10
- package/src/runtime/server/page/index.js +9 -14
- package/src/runtime/server/page/render.js +16 -29
- package/src/runtime/server/page/respond_with_error.js +7 -9
- package/src/runtime/server/remote-functions.js +125 -125
- package/src/runtime/server/respond.js +53 -28
- package/src/runtime/server/state.js +1 -0
- package/src/runtime/server/utils.js +0 -7
- package/src/runtime/utils.js +41 -0
- package/src/types/global-private.d.ts +8 -0
- package/src/types/internal.d.ts +7 -11
- package/src/utils/filesystem.js +1 -1
- package/src/utils/streaming.js +5 -15
- package/src/version.js +1 -1
- package/types/index.d.ts +20 -1
- package/types/index.d.ts.map +4 -1
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { noop } from '../../utils/functions.js';
|
|
2
|
-
import {
|
|
2
|
+
import { stream_from_iterable } from '../utils.js';
|
|
3
|
+
import { IN_WEBCONTAINER, REROUTED_URL_HEADER } from '../../constants.js';
|
|
3
4
|
import { respond } from './respond.js';
|
|
4
5
|
import { create_request_state } from './state.js';
|
|
5
6
|
import { options, get_hooks } from '<sveltekit:generated>/server.js';
|
|
6
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
set_read_implementation,
|
|
9
|
+
set_manifest,
|
|
10
|
+
set_options,
|
|
11
|
+
set_hooks,
|
|
12
|
+
fix_stack_trace
|
|
13
|
+
} from './internal.js';
|
|
7
14
|
import { set_env } from '<sveltekit:generated>/env/config.js';
|
|
8
15
|
import { init_tracing } from '@sveltejs/kit/internal/server';
|
|
9
16
|
import { DEV } from 'esm-env';
|
|
10
17
|
import { init_transport } from '#app/internal/transport';
|
|
11
18
|
|
|
19
|
+
// set at module scope because prerendering evaluates user modules before constructing a `Server`
|
|
20
|
+
set_options(options);
|
|
21
|
+
|
|
12
22
|
/** @type {Promise<any>} */
|
|
13
23
|
let init_promise;
|
|
14
24
|
|
|
@@ -48,16 +58,11 @@ if (DEV) {
|
|
|
48
58
|
}
|
|
49
59
|
|
|
50
60
|
export class Server {
|
|
51
|
-
/** @type {import('types').SSROptions} */
|
|
52
|
-
#options;
|
|
53
|
-
|
|
54
61
|
/** @type {import('@sveltejs/kit').SSRManifest} */
|
|
55
62
|
#manifest;
|
|
56
63
|
|
|
57
64
|
/** @param {import('@sveltejs/kit').SSRManifest} manifest */
|
|
58
65
|
constructor(manifest) {
|
|
59
|
-
/** @type {import('types').SSROptions} */
|
|
60
|
-
this.#options = options;
|
|
61
66
|
this.#manifest = manifest;
|
|
62
67
|
|
|
63
68
|
// Since AsyncLocalStorage is not working in webcontainers, we don't reset `sync_store`
|
|
@@ -105,14 +110,11 @@ export class Server {
|
|
|
105
110
|
return result;
|
|
106
111
|
}
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
(
|
|
112
|
-
|
|
113
|
-
if (stream) yield* stream;
|
|
114
|
-
})()
|
|
115
|
-
)
|
|
113
|
+
return stream_from_iterable(
|
|
114
|
+
(async function* () {
|
|
115
|
+
const stream = await result;
|
|
116
|
+
if (stream) yield* stream;
|
|
117
|
+
})()
|
|
116
118
|
);
|
|
117
119
|
};
|
|
118
120
|
|
|
@@ -125,7 +127,7 @@ export class Server {
|
|
|
125
127
|
try {
|
|
126
128
|
const module = await get_hooks();
|
|
127
129
|
|
|
128
|
-
|
|
130
|
+
set_hooks({
|
|
129
131
|
handle: module.handle || (({ event, resolve }) => resolve(event)),
|
|
130
132
|
handleError:
|
|
131
133
|
module.handleError ||
|
|
@@ -154,7 +156,7 @@ export class Server {
|
|
|
154
156
|
}),
|
|
155
157
|
handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request)),
|
|
156
158
|
reroute: module.reroute || noop
|
|
157
|
-
};
|
|
159
|
+
});
|
|
158
160
|
|
|
159
161
|
init_transport(module.transport ?? {});
|
|
160
162
|
|
|
@@ -163,14 +165,14 @@ export class Server {
|
|
|
163
165
|
}
|
|
164
166
|
} catch (e) {
|
|
165
167
|
if (__SVELTEKIT_DEV__) {
|
|
166
|
-
|
|
168
|
+
set_hooks({
|
|
167
169
|
handle: () => {
|
|
168
170
|
throw e;
|
|
169
171
|
},
|
|
170
172
|
handleError: ({ error }) => console.error(error),
|
|
171
173
|
handleFetch: ({ request, fetch }) => fetch(request),
|
|
172
174
|
reroute: noop
|
|
173
|
-
};
|
|
175
|
+
});
|
|
174
176
|
} else {
|
|
175
177
|
throw e;
|
|
176
178
|
}
|
|
@@ -183,18 +185,19 @@ export class Server {
|
|
|
183
185
|
* @param {import('types').InternalRequestOptions} options
|
|
184
186
|
*/
|
|
185
187
|
async respond(request, options) {
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
this.#manifest,
|
|
190
|
-
create_request_state(options)
|
|
191
|
-
);
|
|
188
|
+
const request_state = create_request_state(options);
|
|
189
|
+
|
|
190
|
+
const response = await respond(request, this.#manifest, request_state);
|
|
192
191
|
|
|
193
192
|
if (DEV) {
|
|
194
193
|
const error = decoded_responses.get(response);
|
|
195
194
|
if (error) console.error(fix_stack_trace(error));
|
|
196
195
|
}
|
|
197
196
|
|
|
197
|
+
if (request_state.rerouted_url) {
|
|
198
|
+
response.headers.set(REROUTED_URL_HEADER, request_state.rerouted_url);
|
|
199
|
+
}
|
|
200
|
+
|
|
198
201
|
return response;
|
|
199
202
|
}
|
|
200
203
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @import { SSRManifest } from '@sveltejs/kit'; */
|
|
2
|
+
/** @import { ServerHooks, SSROptions } from 'types'; */
|
|
2
3
|
import { restore, save } from './dev.js';
|
|
3
4
|
import {
|
|
4
5
|
has_data_suffix,
|
|
@@ -16,6 +17,8 @@ const styleText =
|
|
|
16
17
|
|
|
17
18
|
const read_implementation_key = Symbol.for('sveltekit.read_implementation');
|
|
18
19
|
const manifest_key = Symbol.for('sveltekit.manifest');
|
|
20
|
+
const options_key = Symbol.for('sveltekit.options');
|
|
21
|
+
const hooks_key = Symbol.for('sveltekit.hooks');
|
|
19
22
|
|
|
20
23
|
export let read_implementation = /** @type {((path: string) => ReadableStream<any>) | null} */ (
|
|
21
24
|
(__SVELTEKIT_DEV__ && restore(read_implementation_key)) ?? null
|
|
@@ -25,6 +28,12 @@ export let manifest = /** @type {SSRManifest} */ (
|
|
|
25
28
|
(__SVELTEKIT_DEV__ && restore(manifest_key)) ?? null
|
|
26
29
|
);
|
|
27
30
|
|
|
31
|
+
export let options = /** @type {SSROptions} */ (
|
|
32
|
+
(__SVELTEKIT_DEV__ && restore(options_key)) ?? null
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
export let hooks = /** @type {ServerHooks} */ ((__SVELTEKIT_DEV__ && restore(hooks_key)) ?? null);
|
|
36
|
+
|
|
28
37
|
/**
|
|
29
38
|
* @param {(path: string) => ReadableStream<any>} fn
|
|
30
39
|
*/
|
|
@@ -42,11 +51,28 @@ export function set_manifest(value) {
|
|
|
42
51
|
if (__SVELTEKIT_DEV__) save(manifest_key, value);
|
|
43
52
|
}
|
|
44
53
|
|
|
54
|
+
/**
|
|
55
|
+
* @param {SSROptions} value
|
|
56
|
+
*/
|
|
57
|
+
export function set_options(value) {
|
|
58
|
+
options = value;
|
|
59
|
+
if (__SVELTEKIT_DEV__) save(options_key, value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {ServerHooks} value
|
|
64
|
+
*/
|
|
65
|
+
export function set_hooks(value) {
|
|
66
|
+
hooks = value;
|
|
67
|
+
if (__SVELTEKIT_DEV__) save(hooks_key, value);
|
|
68
|
+
}
|
|
69
|
+
|
|
45
70
|
/**
|
|
46
71
|
* @param {number} status
|
|
47
72
|
* @param {Request} request
|
|
73
|
+
* @returns {string}
|
|
48
74
|
*/
|
|
49
|
-
export function
|
|
75
|
+
export function format_response(status, request) {
|
|
50
76
|
const url = new URL(request.url);
|
|
51
77
|
const requested = url.href.replace(url.origin, '');
|
|
52
78
|
|
|
@@ -59,13 +85,17 @@ export function log_response(status, request) {
|
|
|
59
85
|
const pathname = strip_resolution_suffix(url.pathname) || '/';
|
|
60
86
|
log += pathname + styleText('dim', requested.slice(pathname.length));
|
|
61
87
|
} else if (has_remote_prefix(url)) {
|
|
62
|
-
const id = /** @type {string} */ (strip_remote_prefix(url)
|
|
63
|
-
|
|
88
|
+
const id = /** @type {string} */ (strip_remote_prefix(url));
|
|
89
|
+
const [file_hash, name, arg_hash] = id.split('/');
|
|
90
|
+
|
|
91
|
+
log += styleText('dim', `${url.pathname.slice(0, -id.length)}${file_hash}/`) + name;
|
|
92
|
+
if (arg_hash) log += styleText('dim', `/${arg_hash}`);
|
|
93
|
+
if (url.search) log += styleText('dim', url.search);
|
|
64
94
|
} else {
|
|
65
95
|
log += requested;
|
|
66
96
|
}
|
|
67
97
|
|
|
68
|
-
|
|
98
|
+
return log;
|
|
69
99
|
}
|
|
70
100
|
|
|
71
101
|
export { fix_stack_trace, set_fix_stack_trace } from './sourcemaps.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @import { RequestEvent, Actions } from '@sveltejs/kit' */
|
|
2
2
|
/** @import { ActionResult } from '$app/forms' */
|
|
3
|
-
/** @import {
|
|
3
|
+
/** @import { SSRNode, ServerNode, ServerActionResult } from 'types' */
|
|
4
4
|
import { DEV } from 'esm-env';
|
|
5
5
|
import { HttpError, Redirect, ActionFailure, SvelteKitError } from '@sveltejs/kit/internal';
|
|
6
6
|
import { with_request_store, merge_tracing, record_span } from '@sveltejs/kit/internal/server';
|
|
@@ -23,28 +23,26 @@ export function is_action_json_request(event) {
|
|
|
23
23
|
/**
|
|
24
24
|
* @param {RequestEvent} event
|
|
25
25
|
* @param {import('types').RequestState} state
|
|
26
|
-
* @param {SSROptions} options
|
|
27
26
|
* @param {SSRNode['server'] | undefined} server
|
|
28
27
|
*/
|
|
29
|
-
export async function handle_action_json_request(event, state,
|
|
28
|
+
export async function handle_action_json_request(event, state, server) {
|
|
30
29
|
const result = await handle_action_request(event, state, server);
|
|
31
|
-
return action_result_json(event, state,
|
|
30
|
+
return action_result_json(event, state, result);
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
/**
|
|
35
34
|
* @param {RequestEvent} event
|
|
36
35
|
* @param {import('types').RequestState} state
|
|
37
|
-
* @param {SSROptions} options
|
|
38
36
|
* @param {ServerActionResult} result
|
|
39
37
|
* @returns {Promise<Response>}
|
|
40
38
|
*/
|
|
41
|
-
async function action_result_json(event, state,
|
|
39
|
+
async function action_result_json(event, state, result) {
|
|
42
40
|
if (result.type === 'redirect') {
|
|
43
41
|
return action_json(result);
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
if (result.type === 'error') {
|
|
47
|
-
const error = await handle_error_and_jsonify(event, state,
|
|
45
|
+
const error = await handle_error_and_jsonify(event, state, result.error);
|
|
48
46
|
return action_json({ ...result, error }, { status: error.status });
|
|
49
47
|
}
|
|
50
48
|
|
|
@@ -64,7 +62,7 @@ async function action_result_json(event, state, options, result) {
|
|
|
64
62
|
{ status: result.status }
|
|
65
63
|
);
|
|
66
64
|
} catch (e) {
|
|
67
|
-
return action_result_json(event, state,
|
|
65
|
+
return action_result_json(event, state, action_error_result(e, result.location));
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as devalue from 'devalue';
|
|
2
2
|
import { compact } from '../../../utils/array.js';
|
|
3
3
|
import { create_async_iterator } from '../../../utils/streaming.js';
|
|
4
|
-
import { clarify_devalue_error,
|
|
4
|
+
import { clarify_devalue_error, serialize_uses } from '../utils.js';
|
|
5
5
|
import { handle_error_and_jsonify } from '../errors.js';
|
|
6
6
|
import { encoders } from '#app/internal/transport';
|
|
7
7
|
|
|
@@ -10,15 +10,14 @@ import { encoders } from '#app/internal/transport';
|
|
|
10
10
|
* async iterable containing their resolutions
|
|
11
11
|
* @param {import('@sveltejs/kit').RequestEvent} event
|
|
12
12
|
* @param {import('types').RequestState} state
|
|
13
|
-
* @param {import('types').SSROptions} options
|
|
14
13
|
* @returns {import('./types.js').ServerDataSerializer}
|
|
15
14
|
*/
|
|
16
|
-
export function server_data_serializer(event, state
|
|
15
|
+
export function server_data_serializer(event, state) {
|
|
17
16
|
let promise_id = 1;
|
|
18
17
|
let max_nodes = -1;
|
|
19
18
|
|
|
20
19
|
const iterator = create_async_iterator();
|
|
21
|
-
const global =
|
|
20
|
+
const global = __SVELTEKIT_GLOBAL_NAME__;
|
|
22
21
|
|
|
23
22
|
/** @param {number} index */
|
|
24
23
|
function get_replacer(index) {
|
|
@@ -31,7 +30,7 @@ export function server_data_serializer(event, state, options) {
|
|
|
31
30
|
.then(/** @param {any} data */ (data) => ({ data }))
|
|
32
31
|
.catch(
|
|
33
32
|
/** @param {any} error */ async (error) => ({
|
|
34
|
-
error: await handle_error_and_jsonify(event, state,
|
|
33
|
+
error: await handle_error_and_jsonify(event, state, error)
|
|
35
34
|
})
|
|
36
35
|
)
|
|
37
36
|
.then(
|
|
@@ -46,7 +45,6 @@ export function server_data_serializer(event, state, options) {
|
|
|
46
45
|
error = await handle_error_and_jsonify(
|
|
47
46
|
event,
|
|
48
47
|
state,
|
|
49
|
-
options,
|
|
50
48
|
new Error(`Failed to serialize promise while rendering ${event.route.id}`, {
|
|
51
49
|
cause: e
|
|
52
50
|
})
|
|
@@ -127,10 +125,9 @@ export function server_data_serializer(event, state, options) {
|
|
|
127
125
|
* async iterable containing their resolutions
|
|
128
126
|
* @param {import('@sveltejs/kit').RequestEvent} event
|
|
129
127
|
* @param {import('types').RequestState} state
|
|
130
|
-
* @param {import('types').SSROptions} options
|
|
131
128
|
* @returns {import('./types.js').ServerDataSerializerJson}
|
|
132
129
|
*/
|
|
133
|
-
export function server_data_serializer_json(event, state
|
|
130
|
+
export function server_data_serializer_json(event, state) {
|
|
134
131
|
let promise_id = 1;
|
|
135
132
|
|
|
136
133
|
const iterator = create_async_iterator();
|
|
@@ -152,7 +149,7 @@ export function server_data_serializer_json(event, state, options) {
|
|
|
152
149
|
.catch(
|
|
153
150
|
/** @param {any} e */ async (e) => {
|
|
154
151
|
key = 'error';
|
|
155
|
-
return handle_error_and_jsonify(event, state,
|
|
152
|
+
return handle_error_and_jsonify(event, state, /** @type {any} */ (e));
|
|
156
153
|
}
|
|
157
154
|
)
|
|
158
155
|
.then(
|
|
@@ -165,7 +162,6 @@ export function server_data_serializer_json(event, state, options) {
|
|
|
165
162
|
const error = await handle_error_and_jsonify(
|
|
166
163
|
event,
|
|
167
164
|
state,
|
|
168
|
-
options,
|
|
169
165
|
new Error(`Failed to serialize promise while rendering ${event.route.id}`, {
|
|
170
166
|
cause: e
|
|
171
167
|
})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @import { RequestEvent, SSRManifest } from '@sveltejs/kit' */
|
|
2
|
-
/** @import { PageNodeIndexes, RequestState, RequiredResolveOptions, ServerDataNode, SSRNode
|
|
2
|
+
/** @import { PageNodeIndexes, RequestState, RequiredResolveOptions, ServerDataNode, SSRNode } from 'types' */
|
|
3
3
|
import { text } from '@sveltejs/kit';
|
|
4
4
|
import { Redirect } from '@sveltejs/kit/internal';
|
|
5
5
|
import { compact } from '../../../utils/array.js';
|
|
@@ -32,13 +32,12 @@ const MAX_DEPTH = 10;
|
|
|
32
32
|
* @param {RequestEvent} event
|
|
33
33
|
* @param {RequestState} state
|
|
34
34
|
* @param {PageNodeIndexes} page
|
|
35
|
-
* @param {SSROptions} options
|
|
36
35
|
* @param {SSRManifest} manifest
|
|
37
36
|
* @param {import('../../../utils/page_nodes.js').PageNodes} nodes
|
|
38
37
|
* @param {RequiredResolveOptions} resolve_opts
|
|
39
38
|
* @returns {Promise<Response>}
|
|
40
39
|
*/
|
|
41
|
-
export async function render_page(event, state, page,
|
|
40
|
+
export async function render_page(event, state, page, manifest, nodes, resolve_opts) {
|
|
42
41
|
if (state.depth > MAX_DEPTH) {
|
|
43
42
|
// infinite request cycle detected
|
|
44
43
|
return text(`Not found: ${event.url.pathname}`, {
|
|
@@ -48,7 +47,7 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
48
47
|
|
|
49
48
|
if (is_action_json_request(event)) {
|
|
50
49
|
const node = await manifest._.nodes[page.leaf]();
|
|
51
|
-
return handle_action_json_request(event, state,
|
|
50
|
+
return handle_action_json_request(event, state, node?.server);
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
try {
|
|
@@ -150,10 +149,9 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
150
149
|
error: null,
|
|
151
150
|
event,
|
|
152
151
|
state,
|
|
153
|
-
options,
|
|
154
152
|
manifest,
|
|
155
153
|
resolve_opts,
|
|
156
|
-
data_serializer: server_data_serializer(event, state
|
|
154
|
+
data_serializer: server_data_serializer(event, state)
|
|
157
155
|
});
|
|
158
156
|
}
|
|
159
157
|
|
|
@@ -163,10 +161,10 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
163
161
|
/** @type {Error | null} */
|
|
164
162
|
let load_error = null;
|
|
165
163
|
|
|
166
|
-
const data_serializer = server_data_serializer(event, state
|
|
164
|
+
const data_serializer = server_data_serializer(event, state);
|
|
167
165
|
const data_serializer_json =
|
|
168
166
|
(state.prerendering || state.prerender_default === true) && should_prerender_data
|
|
169
|
-
? server_data_serializer_json(event, state
|
|
167
|
+
? server_data_serializer_json(event, state)
|
|
170
168
|
: null;
|
|
171
169
|
|
|
172
170
|
/** @type {Array<Promise<ServerDataNode | null>>} */
|
|
@@ -274,7 +272,7 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
274
272
|
return redirect_response(err.status, err.location);
|
|
275
273
|
}
|
|
276
274
|
|
|
277
|
-
const error = await handle_error_and_jsonify(event, state,
|
|
275
|
+
const error = await handle_error_and_jsonify(event, state, err);
|
|
278
276
|
const status = error.status;
|
|
279
277
|
|
|
280
278
|
for (const { error: index, idx } of nearest_error_pages(i, branch, page.errors)) {
|
|
@@ -293,7 +291,6 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
293
291
|
return await render_response({
|
|
294
292
|
event,
|
|
295
293
|
state,
|
|
296
|
-
options,
|
|
297
294
|
manifest,
|
|
298
295
|
resolve_opts,
|
|
299
296
|
page_config: {
|
|
@@ -311,7 +308,7 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
311
308
|
|
|
312
309
|
// if we're still here, it means the error happened in the root layout,
|
|
313
310
|
// which means we have to fall back to error.html
|
|
314
|
-
return static_error_page(
|
|
311
|
+
return static_error_page(status, error.message);
|
|
315
312
|
}
|
|
316
313
|
} else {
|
|
317
314
|
// push an empty slot so we can rewind past gaps to the
|
|
@@ -339,7 +336,6 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
339
336
|
return await render_response({
|
|
340
337
|
event,
|
|
341
338
|
state,
|
|
342
|
-
options,
|
|
343
339
|
manifest,
|
|
344
340
|
resolve_opts,
|
|
345
341
|
page_config: {
|
|
@@ -351,7 +347,7 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
351
347
|
branch: compact(branch),
|
|
352
348
|
action_result,
|
|
353
349
|
fetched,
|
|
354
|
-
data_serializer: !ssr ? server_data_serializer(event, state
|
|
350
|
+
data_serializer: !ssr ? server_data_serializer(event, state) : data_serializer,
|
|
355
351
|
error_components: await load_error_components(ssr, branch, page, manifest)
|
|
356
352
|
});
|
|
357
353
|
} catch (e) {
|
|
@@ -365,7 +361,6 @@ export async function render_page(event, state, page, options, manifest, nodes,
|
|
|
365
361
|
return await respond_with_error({
|
|
366
362
|
event,
|
|
367
363
|
state,
|
|
368
|
-
options,
|
|
369
364
|
manifest,
|
|
370
365
|
error: e,
|
|
371
366
|
resolve_opts
|
|
@@ -18,8 +18,8 @@ import {
|
|
|
18
18
|
route_id_resolution_pathname
|
|
19
19
|
} from '../../pathname.js';
|
|
20
20
|
import { try_get_request_store, with_request_store } from '@sveltejs/kit/internal/server';
|
|
21
|
-
import {
|
|
22
|
-
import { count_non_ssi_comments
|
|
21
|
+
import { stream_text } from '../../utils.js';
|
|
22
|
+
import { count_non_ssi_comments } from '../utils.js';
|
|
23
23
|
import { handle_error_and_jsonify } from '../errors.js';
|
|
24
24
|
import * as env from '<sveltekit:generated>/env/config.js';
|
|
25
25
|
import { collect_remote_data } from '../remote-functions.js';
|
|
@@ -27,6 +27,7 @@ import Root from '../../components/root.svelte';
|
|
|
27
27
|
import { render } from 'svelte/server';
|
|
28
28
|
import { Props, RenderNode } from '../../props.svelte.js';
|
|
29
29
|
import { has_custom_transporters, uneval } from '#app/internal/transport';
|
|
30
|
+
import { options } from '../internal.js';
|
|
30
31
|
|
|
31
32
|
// TODO rename this function/module
|
|
32
33
|
|
|
@@ -35,7 +36,6 @@ import { has_custom_transporters, uneval } from '#app/internal/transport';
|
|
|
35
36
|
* @param {{
|
|
36
37
|
* branch: Array<import('./types.js').Loaded>;
|
|
37
38
|
* fetched: Array<import('./types.js').Fetched>;
|
|
38
|
-
* options: import('types').SSROptions;
|
|
39
39
|
* manifest: import('@sveltejs/kit').SSRManifest;
|
|
40
40
|
* page_config: { ssr: boolean; csr: boolean };
|
|
41
41
|
* status: number;
|
|
@@ -51,7 +51,6 @@ import { has_custom_transporters, uneval } from '#app/internal/transport';
|
|
|
51
51
|
export async function render_response({
|
|
52
52
|
branch,
|
|
53
53
|
fetched,
|
|
54
|
-
options,
|
|
55
54
|
manifest,
|
|
56
55
|
page_config,
|
|
57
56
|
status,
|
|
@@ -134,7 +133,7 @@ export async function render_response({
|
|
|
134
133
|
if (!paths.assets || (paths.assets[0] === '/' && paths.assets !== SVELTE_KIT_ASSETS)) {
|
|
135
134
|
assets = base;
|
|
136
135
|
}
|
|
137
|
-
} else if (
|
|
136
|
+
} else if (__SVELTEKIT_HASH_ROUTING__) {
|
|
138
137
|
// we have to assume that we're in the right place
|
|
139
138
|
base_expression = "new URL('.', location).pathname.slice(0, -1)";
|
|
140
139
|
}
|
|
@@ -203,7 +202,7 @@ export async function render_response({
|
|
|
203
202
|
throw e;
|
|
204
203
|
}
|
|
205
204
|
|
|
206
|
-
const handled = handle_error_and_jsonify(event, render_state,
|
|
205
|
+
const handled = handle_error_and_jsonify(event, render_state, e);
|
|
207
206
|
|
|
208
207
|
// TODO 4.0 make this an async function and await `handled`
|
|
209
208
|
if (handled instanceof Promise) {
|
|
@@ -312,7 +311,10 @@ export async function render_response({
|
|
|
312
311
|
* @param {string[]} attributes
|
|
313
312
|
*/
|
|
314
313
|
const add_preload = (path, attributes) => {
|
|
315
|
-
if (
|
|
314
|
+
if (
|
|
315
|
+
__SVELTEKIT_LINK_HEADER_PRELOAD__ &&
|
|
316
|
+
!(state.prerendering || state.prerender_default === true)
|
|
317
|
+
) {
|
|
316
318
|
link_headers.add(`<${encodeURI(path)}>; ${attributes.join('; ')}; nopush`);
|
|
317
319
|
} else {
|
|
318
320
|
head.add_link_tag(path, attributes);
|
|
@@ -329,7 +331,7 @@ export async function render_response({
|
|
|
329
331
|
// include them in disabled state so that Vite can detect them and doesn't try to add them
|
|
330
332
|
attributes.push('disabled', 'media="(max-width: 0)"');
|
|
331
333
|
} else {
|
|
332
|
-
if (
|
|
334
|
+
if (__SVELTEKIT_LINK_HEADER_PRELOAD__ && resolve_opts.preload({ type: 'css', path })) {
|
|
333
335
|
link_headers.add(`<${encodeURI(path)}>; rel="preload"; as="style"; nopush`);
|
|
334
336
|
}
|
|
335
337
|
}
|
|
@@ -347,7 +349,7 @@ export async function render_response({
|
|
|
347
349
|
}
|
|
348
350
|
}
|
|
349
351
|
|
|
350
|
-
const global =
|
|
352
|
+
const global = __SVELTEKIT_GLOBAL_NAME__;
|
|
351
353
|
const { data, chunks } = data_serializer.get_data(csp);
|
|
352
354
|
|
|
353
355
|
if (page_config.ssr && page_config.csr) {
|
|
@@ -509,7 +511,7 @@ export async function render_response({
|
|
|
509
511
|
); // make output after it's put together with the rest more readable
|
|
510
512
|
hydrate.push(`params: ${devalue.uneval(event.params)}`, `server_route: ${stringified}`);
|
|
511
513
|
}
|
|
512
|
-
} else if (
|
|
514
|
+
} else if (__SVELTEKIT_EMBEDDED__) {
|
|
513
515
|
hydrate.push(`params: ${devalue.uneval(event.params)}`, `route: ${s(event.route)}`);
|
|
514
516
|
}
|
|
515
517
|
|
|
@@ -517,7 +519,7 @@ export async function render_response({
|
|
|
517
519
|
args.push(`{\n${indent}\t${hydrate.join(`,\n${indent}\t`)}\n${indent}}`);
|
|
518
520
|
}
|
|
519
521
|
|
|
520
|
-
const remote_data = await collect_remote_data({}, event, state
|
|
522
|
+
const remote_data = await collect_remote_data({}, event, state);
|
|
521
523
|
|
|
522
524
|
const serialized_data =
|
|
523
525
|
Object.keys(remote_data).length > 0
|
|
@@ -549,7 +551,7 @@ export async function render_response({
|
|
|
549
551
|
blocks.push(boot);
|
|
550
552
|
}
|
|
551
553
|
|
|
552
|
-
if (
|
|
554
|
+
if (__SVELTEKIT_SERVICE_WORKER__) {
|
|
553
555
|
let opts = ", { type: 'module' }";
|
|
554
556
|
if (options.service_worker_options != null) {
|
|
555
557
|
const service_worker_options = { ...options.service_worker_options, type: 'module' };
|
|
@@ -610,7 +612,7 @@ export async function render_response({
|
|
|
610
612
|
headers.set('content-security-policy-report-only', report_only_header);
|
|
611
613
|
}
|
|
612
614
|
|
|
613
|
-
if (
|
|
615
|
+
if (__SVELTEKIT_LINK_HEADER_PRELOAD__ && link_headers.size) {
|
|
614
616
|
headers.set('link', Array.from(link_headers).join(', '));
|
|
615
617
|
}
|
|
616
618
|
}
|
|
@@ -657,22 +659,7 @@ export async function render_response({
|
|
|
657
659
|
status,
|
|
658
660
|
headers
|
|
659
661
|
})
|
|
660
|
-
: new Response(
|
|
661
|
-
new ReadableStream({
|
|
662
|
-
async start(controller) {
|
|
663
|
-
controller.enqueue(text_encoder.encode(transformed + '\n'));
|
|
664
|
-
for await (const chunk of chunks) {
|
|
665
|
-
if (chunk.length) controller.enqueue(text_encoder.encode(chunk));
|
|
666
|
-
}
|
|
667
|
-
controller.close();
|
|
668
|
-
},
|
|
669
|
-
|
|
670
|
-
type: 'bytes'
|
|
671
|
-
}),
|
|
672
|
-
{
|
|
673
|
-
headers
|
|
674
|
-
}
|
|
675
|
-
);
|
|
662
|
+
: new Response(stream_text(transformed + '\n', chunks), { headers });
|
|
676
663
|
}
|
|
677
664
|
|
|
678
665
|
class Head {
|
|
@@ -14,17 +14,16 @@ import { server_data_serializer } from './data_serializer.js';
|
|
|
14
14
|
* @param {{
|
|
15
15
|
* event: import('@sveltejs/kit').RequestEvent;
|
|
16
16
|
* state: import('types').RequestState;
|
|
17
|
-
* options: import('types').SSROptions;
|
|
18
17
|
* manifest: import('@sveltejs/kit').SSRManifest;
|
|
19
18
|
* error: unknown;
|
|
20
19
|
* resolve_opts: import('types').RequiredResolveOptions;
|
|
21
20
|
* }} opts
|
|
22
21
|
*/
|
|
23
|
-
export async function respond_with_error({ event, state,
|
|
22
|
+
export async function respond_with_error({ event, state, manifest, error, resolve_opts }) {
|
|
24
23
|
// reroute to the fallback page to prevent an infinite chain of requests.
|
|
25
24
|
if (event.request.headers.get('x-sveltekit-error')) {
|
|
26
|
-
const transformed = await handle_error_and_jsonify(event, state,
|
|
27
|
-
return static_error_page(
|
|
25
|
+
const transformed = await handle_error_and_jsonify(event, state, error);
|
|
26
|
+
return static_error_page(transformed.status, transformed.message);
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
/** @type {import('./types.js').Fetched[]} */
|
|
@@ -35,9 +34,9 @@ export async function respond_with_error({ event, state, options, manifest, erro
|
|
|
35
34
|
const nodes = new PageNodes([default_layout]);
|
|
36
35
|
const ssr = nodes.ssr();
|
|
37
36
|
const csr = nodes.csr();
|
|
38
|
-
const data_serializer = server_data_serializer(event, state
|
|
37
|
+
const data_serializer = server_data_serializer(event, state);
|
|
39
38
|
// Do this here first in case the awaits below before rendering themselves error
|
|
40
|
-
const transformed = await handle_error_and_jsonify(event, state,
|
|
39
|
+
const transformed = await handle_error_and_jsonify(event, state, error);
|
|
41
40
|
|
|
42
41
|
if (ssr) {
|
|
43
42
|
state.error = true;
|
|
@@ -80,7 +79,6 @@ export async function respond_with_error({ event, state, options, manifest, erro
|
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
return await render_response({
|
|
83
|
-
options,
|
|
84
82
|
manifest,
|
|
85
83
|
page_config: {
|
|
86
84
|
ssr,
|
|
@@ -103,8 +101,8 @@ export async function respond_with_error({ event, state, options, manifest, erro
|
|
|
103
101
|
return redirect_response(e.status, e.location);
|
|
104
102
|
}
|
|
105
103
|
|
|
106
|
-
const transformed = await handle_error_and_jsonify(event, state,
|
|
104
|
+
const transformed = await handle_error_and_jsonify(event, state, e);
|
|
107
105
|
|
|
108
|
-
return static_error_page(
|
|
106
|
+
return static_error_page(transformed.status, transformed.message);
|
|
109
107
|
}
|
|
110
108
|
}
|