@sveltejs/kit 3.0.0-next.14 → 3.0.0-next.16

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.
Files changed (56) hide show
  1. package/package.json +6 -3
  2. package/src/cli.js +6 -3
  3. package/src/core/adapt/builder.js +12 -5
  4. package/src/core/config/index.js +4 -5
  5. package/src/core/env.js +3 -3
  6. package/src/core/postbuild/prerender.js +6 -10
  7. package/src/core/sync/sync.js +3 -2
  8. package/src/core/sync/utils.js +2 -2
  9. package/src/core/sync/write_tsconfig/index.js +71 -53
  10. package/src/core/sync/write_tsconfig/utils.js +0 -61
  11. package/src/core/sync/write_tsconfig/validate.js +128 -0
  12. package/src/core/sync/write_types/index.js +2 -2
  13. package/src/exports/public.d.ts +22 -16
  14. package/src/exports/vite/build/build_server.js +2 -3
  15. package/src/exports/vite/dev/index.js +44 -36
  16. package/src/exports/vite/index.js +46 -5
  17. package/src/exports/vite/utils.js +61 -8
  18. package/src/runner.js +4 -2
  19. package/src/runtime/app/forms.js +4 -7
  20. package/src/runtime/app/internal/transport.js +53 -0
  21. package/src/runtime/app/paths/client.js +2 -2
  22. package/src/runtime/app/paths/internal/client.js +2 -2
  23. package/src/runtime/app/server/remote/prerender.js +6 -10
  24. package/src/runtime/app/server/remote/query.js +3 -3
  25. package/src/runtime/app/server/remote/requested.js +2 -2
  26. package/src/runtime/app/server/remote/shared.js +1 -16
  27. package/src/runtime/client/client.js +29 -25
  28. package/src/runtime/client/parse.js +1 -1
  29. package/src/runtime/client/remote-functions/command.svelte.js +1 -2
  30. package/src/runtime/client/remote-functions/prerender.svelte.js +1 -1
  31. package/src/runtime/client/remote-functions/query/proxy.js +2 -2
  32. package/src/runtime/client/remote-functions/query-live/proxy.js +2 -2
  33. package/src/runtime/pathname.js +7 -1
  34. package/src/runtime/server/data/index.js +5 -8
  35. package/src/runtime/server/dev.js +22 -0
  36. package/src/runtime/server/endpoint.js +3 -4
  37. package/src/runtime/server/fetch.js +22 -24
  38. package/src/runtime/server/index.js +54 -22
  39. package/src/runtime/server/internal.js +12 -5
  40. package/src/runtime/server/page/actions.js +18 -43
  41. package/src/runtime/server/page/data_serializer.js +12 -13
  42. package/src/runtime/server/page/index.js +16 -32
  43. package/src/runtime/server/page/load_data.js +26 -15
  44. package/src/runtime/server/page/render.js +9 -11
  45. package/src/runtime/server/page/respond_with_error.js +8 -20
  46. package/src/runtime/server/remote-functions.js +11 -15
  47. package/src/runtime/server/respond.js +26 -31
  48. package/src/runtime/server/state.js +36 -19
  49. package/src/runtime/server/utils.js +0 -20
  50. package/src/runtime/shared.js +16 -38
  51. package/src/types/internal.d.ts +45 -52
  52. package/src/utils/filesystem.js +1 -23
  53. package/src/version.js +1 -1
  54. package/types/index.d.ts +24 -18
  55. package/types/index.d.ts.map +1 -1
  56. package/src/runtime/server/app.js +0 -9
@@ -18,13 +18,14 @@ import {
18
18
  } from '../../pathname.js';
19
19
  import { try_get_request_store, with_request_store } from '@sveltejs/kit/internal/server';
20
20
  import { text_encoder } from '../../utils.js';
21
- import { count_non_ssi_comments, create_replacer, get_global_name } from '../utils.js';
21
+ import { count_non_ssi_comments, get_global_name } from '../utils.js';
22
22
  import { handle_error_and_jsonify } from '../errors.js';
23
23
  import * as env from '__sveltekit/env';
24
24
  import { collect_remote_data } from '../remote-functions.js';
25
25
  import Root from '../../components/root.svelte';
26
26
  import { render } from 'svelte/server';
27
27
  import { Props, RenderNode } from '../../props.svelte.js';
28
+ import { has_custom_transporters, uneval } from '#app/internal/transport';
28
29
 
29
30
  // TODO rename this function/module
30
31
 
@@ -35,12 +36,11 @@ import { Props, RenderNode } from '../../props.svelte.js';
35
36
  * fetched: Array<import('./types.js').Fetched>;
36
37
  * options: import('types').SSROptions;
37
38
  * manifest: import('@sveltejs/kit').SSRManifest;
38
- * state: import('types').SSRState;
39
39
  * page_config: { ssr: boolean; csr: boolean };
40
40
  * status: number;
41
41
  * error: App.Error | null;
42
42
  * event: import('@sveltejs/kit').RequestEvent;
43
- * event_state: import('types').RequestState;
43
+ * state: import('types').RequestState;
44
44
  * resolve_opts: import('types').RequiredResolveOptions;
45
45
  * action_result?: import('@sveltejs/kit').ActionResult;
46
46
  * data_serializer: import('./types.js').ServerDataSerializer;
@@ -52,12 +52,11 @@ export async function render_response({
52
52
  fetched,
53
53
  options,
54
54
  manifest,
55
- state,
56
55
  page_config,
57
56
  status,
58
57
  error = null,
59
58
  event,
60
- event_state,
59
+ state,
61
60
  resolve_opts,
62
61
  action_result,
63
62
  data_serializer,
@@ -183,7 +182,7 @@ export async function render_response({
183
182
 
184
183
  props.page.data = data;
185
184
 
186
- const render_state = { ...event_state, is_in_render: true };
185
+ const render_state = { ...state, is_in_render: true };
187
186
 
188
187
  const render_opts = {
189
188
  context: new Map([
@@ -431,7 +430,7 @@ export async function render_response({
431
430
 
432
431
  let app_declaration = '';
433
432
 
434
- if (Object.keys(options.hooks.transport).length > 0) {
433
+ if (has_custom_transporters) {
435
434
  if (client.inline) {
436
435
  app_declaration = `const app = ${global}.app.app;`;
437
436
  } else if (client.app) {
@@ -482,8 +481,7 @@ export async function render_response({
482
481
  if (form_value) {
483
482
  serialized.form = uneval_action_response(
484
483
  form_value,
485
- /** @type {string} */ (event.route.id),
486
- options.hooks.transport
484
+ /** @type {string} */ (event.route.id)
487
485
  );
488
486
  }
489
487
 
@@ -518,11 +516,11 @@ export async function render_response({
518
516
  args.push(`{\n${indent}\t${hydrate.join(`,\n${indent}\t`)}\n${indent}}`);
519
517
  }
520
518
 
521
- const remote_data = await collect_remote_data({}, event, event_state, options);
519
+ const remote_data = await collect_remote_data({}, event, state, options);
522
520
 
523
521
  const serialized_data =
524
522
  Object.keys(remote_data).length > 0
525
- ? `${global}.data = ${devalue.uneval(remote_data, create_replacer(options.hooks.transport))};\n\n\t\t\t\t\t\t`
523
+ ? `${global}.data = ${uneval(remote_data)};\n\n\t\t\t\t\t\t`
526
524
  : '';
527
525
 
528
526
  // `client.app` is a proxy for `bundleStrategy === 'split'`
@@ -13,26 +13,17 @@ import { server_data_serializer } from './data_serializer.js';
13
13
  /**
14
14
  * @param {{
15
15
  * event: import('@sveltejs/kit').RequestEvent;
16
- * event_state: import('types').RequestState;
16
+ * state: import('types').RequestState;
17
17
  * options: import('types').SSROptions;
18
18
  * manifest: import('@sveltejs/kit').SSRManifest;
19
- * state: import('types').SSRState;
20
19
  * error: unknown;
21
20
  * resolve_opts: import('types').RequiredResolveOptions;
22
21
  * }} opts
23
22
  */
24
- export async function respond_with_error({
25
- event,
26
- event_state,
27
- options,
28
- manifest,
29
- state,
30
- error,
31
- resolve_opts
32
- }) {
23
+ export async function respond_with_error({ event, state, options, manifest, error, resolve_opts }) {
33
24
  // reroute to the fallback page to prevent an infinite chain of requests.
34
25
  if (event.request.headers.get('x-sveltekit-error')) {
35
- const transformed = await handle_error_and_jsonify(event, event_state, options, error);
26
+ const transformed = await handle_error_and_jsonify(event, state, options, error);
36
27
  return static_error_page(options, transformed.status, transformed.message);
37
28
  }
38
29
 
@@ -44,16 +35,15 @@ export async function respond_with_error({
44
35
  const nodes = new PageNodes([default_layout]);
45
36
  const ssr = nodes.ssr();
46
37
  const csr = nodes.csr();
47
- const data_serializer = server_data_serializer(event, event_state, options);
38
+ const data_serializer = server_data_serializer(event, state, options);
48
39
  // Do this here first in case the awaits below before rendering themselves error
49
- const transformed = await handle_error_and_jsonify(event, event_state, options, error);
40
+ const transformed = await handle_error_and_jsonify(event, state, options, error);
50
41
 
51
42
  if (ssr) {
52
43
  state.error = true;
53
44
 
54
45
  const server_data_promise = load_server_data({
55
46
  event,
56
- event_state,
57
47
  state,
58
48
  node: default_layout,
59
49
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -65,14 +55,13 @@ export async function respond_with_error({
65
55
 
66
56
  const data = await load_data({
67
57
  event,
68
- event_state,
58
+ state,
69
59
  fetched,
70
60
  node: default_layout,
71
61
  // eslint-disable-next-line @typescript-eslint/require-await
72
62
  parent: async () => ({}),
73
63
  resolve_opts,
74
64
  server_data_promise,
75
- state,
76
65
  csr
77
66
  });
78
67
 
@@ -93,7 +82,6 @@ export async function respond_with_error({
93
82
  return await render_response({
94
83
  options,
95
84
  manifest,
96
- state,
97
85
  page_config: {
98
86
  ssr,
99
87
  csr
@@ -104,7 +92,7 @@ export async function respond_with_error({
104
92
  error_components: [],
105
93
  fetched,
106
94
  event,
107
- event_state,
95
+ state,
108
96
  resolve_opts,
109
97
  data_serializer
110
98
  });
@@ -115,7 +103,7 @@ export async function respond_with_error({
115
103
  return redirect_response(e.status, e.location);
116
104
  }
117
105
 
118
- const transformed = await handle_error_and_jsonify(event, event_state, options, e);
106
+ const transformed = await handle_error_and_jsonify(event, state, options, e);
119
107
 
120
108
  return static_error_page(options, transformed.status, transformed.message);
121
109
  }
@@ -6,7 +6,8 @@ import { Redirect, SvelteKitError } from '@sveltejs/kit/internal';
6
6
  import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server';
7
7
  import { app_dir, base } from '$app/paths/internal/server';
8
8
  import { is_form_content_type } from '../../utils/http.js';
9
- import { create_remote_key, parse_remote_arg, split_remote_key, stringify } from '../shared.js';
9
+ import { create_remote_key, parse_remote_arg, split_remote_key } from '../shared.js';
10
+ import { stringify } from '#app/internal/transport';
10
11
  import { handle_error_and_jsonify } from './errors.js';
11
12
  import { normalize_error } from '../../utils/error.js';
12
13
  import { check_incorrect_fail_use } from './page/actions.js';
@@ -59,7 +60,6 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
59
60
 
60
61
  /** @type {RemoteInternals} */
61
62
  const internals = fn.__;
62
- const transport = options.hooks.transport;
63
63
 
64
64
  event.tracing.current.setAttributes({
65
65
  'sveltekit.remote.call.type': internals.type,
@@ -87,7 +87,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
87
87
  new URL(event.request.url).searchParams.get('payload')
88
88
  );
89
89
 
90
- const generator = internals.run(event, state, parse_remote_arg(payload, transport));
90
+ const generator = internals.run(event, state, parse_remote_arg(payload));
91
91
 
92
92
  const encoder = new TextEncoder();
93
93
 
@@ -156,7 +156,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
156
156
  }
157
157
 
158
158
  // only send changed data
159
- if (result !== (result = stringify(value, transport))) {
159
+ if (result !== (result = stringify(value))) {
160
160
  send(controller, {
161
161
  type: 'result',
162
162
  result
@@ -214,9 +214,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
214
214
  /** @type {{ payloads: string[] }} */
215
215
  const { payloads } = await event.request.json();
216
216
 
217
- const args = await Promise.all(
218
- payloads.map((payload) => parse_remote_arg(payload, transport))
219
- );
217
+ const args = await Promise.all(payloads.map((payload) => parse_remote_arg(payload)));
220
218
 
221
219
  data._ = await with_request_store({ event, state }, () => internals.run(args, options));
222
220
 
@@ -266,7 +264,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
266
264
  return json(
267
265
  /** @type {RemoteFunctionResponse} */ ({
268
266
  type: 'result',
269
- data: stringify(data, transport)
267
+ data: stringify(data)
270
268
  }),
271
269
  { headers }
272
270
  );
@@ -279,7 +277,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
279
277
  /** @type {{ payload: string, refreshes?: string[] }} */
280
278
  const { payload, refreshes } = await event.request.json();
281
279
  state.remote.requested = create_requested_map(refreshes);
282
- const arg = parse_remote_arg(payload, transport);
280
+ const arg = parse_remote_arg(payload);
283
281
 
284
282
  data._ = await with_request_store(
285
283
  { event, state: { ...state, is_in_remote_form_or_command: true } },
@@ -291,7 +289,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
291
289
 
292
290
  case 'prerender': {
293
291
  data._ = await with_request_store({ event, state }, () =>
294
- fn(parse_remote_arg(additional_args, transport))
292
+ fn(parse_remote_arg(additional_args))
295
293
  );
296
294
 
297
295
  break;
@@ -303,9 +301,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
303
301
  new URL(event.request.url).searchParams.get('payload')
304
302
  );
305
303
 
306
- data._ = await with_request_store({ event, state }, () =>
307
- fn(parse_remote_arg(payload, transport))
308
- );
304
+ data._ = await with_request_store({ event, state }, () => fn(parse_remote_arg(payload)));
309
305
 
310
306
  break;
311
307
  }
@@ -316,7 +312,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
316
312
  return json(
317
313
  /** @type {RemoteFunctionResponse} */ ({
318
314
  type: 'result',
319
- data: stringify(data, transport)
315
+ data: stringify(data)
320
316
  }),
321
317
  { headers }
322
318
  );
@@ -327,7 +323,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
327
323
  return json(
328
324
  /** @type {RemoteFunctionResponse} */ ({
329
325
  type: 'result',
330
- data: stringify(data, transport)
326
+ data: stringify(data)
331
327
  }),
332
328
  { headers }
333
329
  );
@@ -42,7 +42,6 @@ import { server_data_serializer } from './page/data_serializer.js';
42
42
  import { get_remote_id, handle_remote_call } from './remote-functions.js';
43
43
  import { record_span } from '../telemetry/record_span.js';
44
44
  import { otel } from '../telemetry/otel.js';
45
- import { create_request_state } from './state.js';
46
45
 
47
46
  /** @type {import('types').RequiredResolveOptions['transformPageChunk']} */
48
47
  const default_transform = ({ html }) => html;
@@ -85,7 +84,7 @@ export const respond = propagate_context(internal_respond);
85
84
  * @param {Request} request
86
85
  * @param {import('types').SSROptions} options
87
86
  * @param {import('@sveltejs/kit').SSRManifest} manifest
88
- * @param {import('types').SSRState} state
87
+ * @param {import('types').RequestState} state
89
88
  * @returns {Promise<Response>}
90
89
  */
91
90
  export async function internal_respond(request, options, manifest, state) {
@@ -181,8 +180,6 @@ export async function internal_respond(request, options, manifest, state) {
181
180
  url
182
181
  );
183
182
 
184
- const event_state = create_request_state(state, options.hooks);
185
-
186
183
  /** @type {import('@sveltejs/kit').RequestEvent} */
187
184
  const event = {
188
185
  cookies,
@@ -197,7 +194,12 @@ export async function internal_respond(request, options, manifest, state) {
197
194
  }),
198
195
  locals: {},
199
196
  params: {},
200
- platform: state.platform,
197
+ platform: state.emulator?.platform
198
+ ? await state.emulator.platform({
199
+ config: {},
200
+ prerender: !!state.prerendering?.fallback
201
+ })
202
+ : state.platform,
201
203
  request,
202
204
  route: { id: null },
203
205
  setHeaders: (new_headers) => {
@@ -235,6 +237,7 @@ export async function internal_respond(request, options, manifest, state) {
235
237
  isRemoteRequest: !!remote_id
236
238
  };
237
239
 
240
+ // @ts-expect-error this has to be assigned lazily
238
241
  event.fetch = create_fetch({
239
242
  event,
240
243
  options,
@@ -244,13 +247,6 @@ export async function internal_respond(request, options, manifest, state) {
244
247
  set_internal
245
248
  });
246
249
 
247
- if (state.emulator?.platform) {
248
- event.platform = await state.emulator.platform({
249
- config: {},
250
- prerender: !!state.prerendering?.fallback
251
- });
252
- }
253
-
254
250
  /** @type {string | null} */
255
251
  let resolved_path = url.pathname;
256
252
 
@@ -324,7 +320,7 @@ export async function internal_respond(request, options, manifest, state) {
324
320
  statusText: response.statusText
325
321
  });
326
322
  } catch (error) {
327
- return await handle_fatal_error(event, event_state, options, error);
323
+ return await handle_fatal_error(event, state, options, error);
328
324
  }
329
325
  }
330
326
 
@@ -368,11 +364,13 @@ export async function internal_respond(request, options, manifest, state) {
368
364
 
369
365
  if (result) {
370
366
  route = result.route;
367
+ // @ts-expect-error this has to be assigned lazily
371
368
  event.route = { id: route.id };
369
+ // @ts-expect-error this has to be assigned lazily
372
370
  event.params = result.params;
373
371
  }
374
372
  } catch (e) {
375
- return await handle_fatal_error(event, event_state, options, e);
373
+ return await handle_fatal_error(event, state, options, e);
376
374
  }
377
375
  }
378
376
 
@@ -432,6 +430,7 @@ export async function internal_respond(request, options, manifest, state) {
432
430
  }
433
431
 
434
432
  if (state.emulator?.platform) {
433
+ // @ts-expect-error this has to be assigned lazily
435
434
  event.platform = await state.emulator.platform({ config, prerender });
436
435
  }
437
436
 
@@ -454,10 +453,10 @@ export async function internal_respond(request, options, manifest, state) {
454
453
  add_cookies_to_headers(response.headers, new_cookies.values());
455
454
  return response;
456
455
  } catch (err) {
457
- return await handle_fatal_error(event, event_state, options, err);
456
+ return await handle_fatal_error(event, state, options, err);
458
457
  }
459
458
  }
460
- return await handle_fatal_error(event, event_state, options, e);
459
+ return await handle_fatal_error(event, state, options, e);
461
460
  }
462
461
 
463
462
  async function handle() {
@@ -486,7 +485,7 @@ export async function internal_respond(request, options, manifest, state) {
486
485
  }
487
486
  };
488
487
 
489
- return await with_request_store({ event: traced_event, state: event_state }, () =>
488
+ return await with_request_store({ event: traced_event, state }, () =>
490
489
  options.hooks.handle({
491
490
  event: traced_event,
492
491
  resolve: (event, opts) => {
@@ -593,10 +592,9 @@ export async function internal_respond(request, options, manifest, state) {
593
592
  if (resolved_path === null) {
594
593
  return await respond_with_error({
595
594
  event,
596
- event_state,
595
+ state,
597
596
  options,
598
597
  manifest,
599
- state,
600
598
  error: new SvelteKitError(
601
599
  400,
602
600
  'Malformed URI',
@@ -609,10 +607,9 @@ export async function internal_respond(request, options, manifest, state) {
609
607
  if (options.hash_routing || state.prerendering?.fallback) {
610
608
  return await render_response({
611
609
  event,
612
- event_state,
610
+ state,
613
611
  options,
614
612
  manifest,
615
- state,
616
613
  page_config: { ssr: false, csr: true },
617
614
  status: 200,
618
615
  error: null,
@@ -626,12 +623,12 @@ export async function internal_respond(request, options, manifest, state) {
626
623
  ],
627
624
  fetched: [],
628
625
  resolve_opts,
629
- data_serializer: server_data_serializer(event, event_state, options)
626
+ data_serializer: server_data_serializer(event, state, options)
630
627
  });
631
628
  }
632
629
 
633
630
  if (remote_id) {
634
- return await handle_remote_call(event, event_state, options, manifest, remote_id);
631
+ return await handle_remote_call(event, state, options, manifest, remote_id);
635
632
  }
636
633
 
637
634
  if (route) {
@@ -643,11 +640,10 @@ export async function internal_respond(request, options, manifest, state) {
643
640
  if (is_data_request) {
644
641
  response = await render_data(
645
642
  event,
646
- event_state,
643
+ state,
647
644
  route,
648
645
  options,
649
646
  manifest,
650
- state,
651
647
  invalidated_data_nodes,
652
648
  trailing_slash
653
649
  );
@@ -672,18 +668,17 @@ export async function internal_respond(request, options, manifest, state) {
672
668
  }
673
669
 
674
670
  if (endpoint) {
675
- response = await render_endpoint(event, event_state, endpoint, state);
671
+ response = await render_endpoint(event, state, endpoint);
676
672
  } else if (route.page) {
677
673
  if (!page_nodes) {
678
674
  throw new Error('page_nodes not found. This should never happen');
679
675
  } else if (page_methods.has(method)) {
680
676
  response = await render_page(
681
677
  event,
682
- event_state,
678
+ state,
683
679
  route.page,
684
680
  options,
685
681
  manifest,
686
- state,
687
682
  page_nodes,
688
683
  resolve_opts
689
684
  );
@@ -769,10 +764,9 @@ export async function internal_respond(request, options, manifest, state) {
769
764
 
770
765
  return await respond_with_error({
771
766
  event,
772
- event_state,
767
+ state,
773
768
  options,
774
769
  manifest,
775
- state,
776
770
  error: new SvelteKitError(404, 'Not Found', `Not found: ${event.url.pathname}`),
777
771
  resolve_opts
778
772
  });
@@ -793,12 +787,13 @@ export async function internal_respond(request, options, manifest, state) {
793
787
  // and I don't even know how to describe it. need to investigate at some point
794
788
 
795
789
  // HttpError from endpoint can end up here - TODO should it be handled there instead?
796
- return await handle_fatal_error(event, event_state, options, e);
790
+ return await handle_fatal_error(event, state, options, e);
797
791
  } finally {
798
792
  event.cookies.set = () => {
799
793
  throw new Error('Cannot use `cookies.set(...)` after the response has been generated');
800
794
  };
801
795
 
796
+ // @ts-expect-error this has to be assigned lazily
802
797
  event.setHeaders = () => {
803
798
  throw new Error('Cannot use `setHeaders(...)` after the response has been generated');
804
799
  };
@@ -1,20 +1,9 @@
1
- /** @import { RequestState, ServerHooks, SSRState } from 'types' */
1
+ /** @import { InternalRequestOptions, RequestState, ServerHooks } from 'types' */
2
2
  import { record_span } from '../telemetry/record_span.js';
3
3
 
4
- /**
5
- * @param {SSRState} state
6
- * @param {ServerHooks} hooks
7
- * @returns {RequestState}
8
- */
9
- export function create_request_state(state, hooks) {
10
- // Request state is rebuilt fresh, resetting remote caches and context flags.
4
+ /** Per-request caches and context flags — never carried into a fork. */
5
+ function transient_fields() {
11
6
  return {
12
- prerendering: state.prerendering,
13
- transport: hooks.transport,
14
- handleValidationError: hooks.handleValidationError,
15
- tracing: {
16
- record_span
17
- },
18
7
  remote: {
19
8
  data: null,
20
9
  explicit: null,
@@ -29,15 +18,43 @@ export function create_request_state(state, hooks) {
29
18
  is_in_remote_query: false,
30
19
  is_in_remote_prerender: false,
31
20
  is_in_render: false,
32
- is_in_universal_load: false
21
+ original_event: undefined
33
22
  };
34
23
  }
35
24
 
36
25
  /**
37
- * @param {SSRState} state
38
- * @returns {SSRState}
26
+ * @param {InternalRequestOptions} options
27
+ * @param {ServerHooks} hooks
28
+ * @returns {RequestState}
29
+ */
30
+ export function create_request_state(options, hooks) {
31
+ // every field is initialized up front so the object shape stays stable
32
+ return {
33
+ getClientAddress: options.getClientAddress,
34
+ platform: options.platform,
35
+ read: options.read,
36
+ before_handle: options.before_handle,
37
+ emulator: options.emulator,
38
+ prerendering: options.prerendering,
39
+ prerender_default: undefined,
40
+ error: false,
41
+ depth: 0,
42
+ handleValidationError: hooks.handleValidationError,
43
+ tracing: {
44
+ record_span
45
+ },
46
+ ...transient_fields()
47
+ };
48
+ }
49
+
50
+ /**
51
+ * @param {RequestState} state
52
+ * @returns {RequestState}
39
53
  */
40
54
  export function fork_state_for_subrequest(state) {
41
- // Sub-requests inherit all server state except for the incremented depth.
42
- return { ...state, depth: state.depth + 1 };
55
+ return {
56
+ ...state,
57
+ ...transient_fields(),
58
+ depth: state.depth + 1
59
+ };
43
60
  }
@@ -1,5 +1,3 @@
1
- /** @import { ServerHooks } from 'types' */
2
- import * as devalue from 'devalue';
3
1
  import { text } from '@sveltejs/kit';
4
2
  import { ENDPOINT_METHODS } from '../../constants.js';
5
3
 
@@ -139,21 +137,3 @@ export function get_node_type(node_id) {
139
137
  export function count_non_ssi_comments(str) {
140
138
  return (str.match(/<!--(?!#)/g) ?? []).length;
141
139
  }
142
-
143
- /**
144
- * Creates a serialiser for non-arbitrary POJOs using the app's transport hook
145
- * @param {ServerHooks['transport']} transport
146
- * @returns {(thing: unknown) => string | undefined}
147
- */
148
- export function create_replacer(transport) {
149
- /** @param {unknown} thing */
150
- const replacer = (thing) => {
151
- for (const key in transport) {
152
- const encoded = transport[key].encode(thing);
153
- if (encoded) {
154
- return `app.decode('${key}', ${devalue.uneval(encoded, replacer)})`;
155
- }
156
- }
157
- };
158
- return replacer;
159
- }