@sveltejs/kit 3.0.0-next.2 → 3.0.0-next.21

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 (195) hide show
  1. package/package.json +62 -36
  2. package/src/cli.js +15 -12
  3. package/src/constants.js +6 -1
  4. package/src/core/adapt/builder.js +66 -72
  5. package/src/core/adapt/index.js +17 -6
  6. package/src/core/config/index.js +134 -80
  7. package/src/core/config/options.js +295 -273
  8. package/src/core/config/types.d.ts +1 -1
  9. package/src/core/env.js +146 -16
  10. package/src/core/generate_manifest/index.js +18 -15
  11. package/src/core/postbuild/analyse.js +8 -20
  12. package/src/core/postbuild/crawl.js +22 -6
  13. package/src/core/postbuild/entities.js +8 -2
  14. package/src/core/postbuild/fallback.js +4 -2
  15. package/src/core/postbuild/prerender.js +222 -70
  16. package/src/core/postbuild/queue.js +2 -1
  17. package/src/core/sync/create_manifest_data/conflict.js +1 -1
  18. package/src/core/sync/create_manifest_data/index.js +82 -62
  19. package/src/core/sync/sync.js +40 -31
  20. package/src/core/sync/ts.js +1 -1
  21. package/src/core/sync/utils.js +22 -2
  22. package/src/core/sync/{write_non_ambient.js → write_app_types.js} +107 -58
  23. package/src/core/sync/write_client_manifest.js +14 -29
  24. package/src/core/sync/write_env.js +7 -5
  25. package/src/core/sync/write_server.js +37 -45
  26. package/src/core/sync/write_tsconfig/index.js +274 -0
  27. package/src/core/sync/write_tsconfig/test-app/package.json +7 -0
  28. package/src/core/sync/write_tsconfig/utils.js +77 -0
  29. package/src/core/sync/write_tsconfig/validate.js +128 -0
  30. package/src/core/sync/write_types/index.js +127 -123
  31. package/src/core/utils.js +30 -5
  32. package/src/exports/env/index.js +77 -0
  33. package/src/exports/env/public.d.ts +55 -0
  34. package/src/exports/hooks/index.js +3 -9
  35. package/src/exports/hooks/public.d.ts +195 -0
  36. package/src/exports/hooks/sequence.js +9 -6
  37. package/src/exports/index.js +52 -29
  38. package/src/exports/internal/client.js +5 -0
  39. package/src/exports/internal/env.js +8 -5
  40. package/src/exports/internal/index.js +1 -90
  41. package/src/exports/internal/{event.js → server/event.js} +2 -3
  42. package/src/exports/internal/server/index.js +37 -0
  43. package/src/exports/internal/server/telemetry.js +95 -0
  44. package/src/exports/internal/shared.js +90 -0
  45. package/src/exports/node/index.js +64 -22
  46. package/src/exports/params/index.js +70 -0
  47. package/src/exports/params/public.d.ts +63 -0
  48. package/src/exports/public.d.ts +50 -1733
  49. package/src/exports/remote/index.js +11 -0
  50. package/src/exports/remote/public.d.ts +519 -0
  51. package/src/exports/url.js +86 -0
  52. package/src/exports/vite/build/build_server.js +54 -65
  53. package/src/exports/vite/build/remote.js +24 -19
  54. package/src/exports/vite/build/utils.js +0 -8
  55. package/src/exports/vite/dev/index.js +218 -146
  56. package/src/exports/vite/index.js +1590 -858
  57. package/src/exports/vite/module_ids.js +2 -2
  58. package/src/exports/vite/preview/index.js +40 -32
  59. package/src/exports/vite/public.d.ts +588 -0
  60. package/src/exports/vite/utils.js +84 -46
  61. package/src/pathname.js +55 -0
  62. package/src/runner.js +15 -0
  63. package/src/runtime/app/env/internal.js +4 -4
  64. package/src/runtime/app/env/types.d.ts +1 -1
  65. package/src/runtime/app/environment/index.js +3 -3
  66. package/src/runtime/app/{forms.js → forms/index.js} +73 -42
  67. package/src/runtime/app/forms/public.d.ts +2 -0
  68. package/src/runtime/app/forms/types.d.ts +56 -0
  69. package/src/runtime/app/internal/transport.js +53 -0
  70. package/src/runtime/app/manifest/index.js +1 -0
  71. package/src/runtime/app/{navigation.js → navigation/index.js} +2 -1
  72. package/src/runtime/app/navigation/public.d.ts +237 -0
  73. package/src/runtime/app/paths/client.js +37 -37
  74. package/src/runtime/app/paths/index.js +1 -1
  75. package/src/runtime/app/paths/internal/client.js +34 -2
  76. package/src/runtime/app/paths/internal/server.js +6 -23
  77. package/src/runtime/app/paths/internal.d.ts +3 -0
  78. package/src/runtime/app/paths/public.d.ts +1 -29
  79. package/src/runtime/app/paths/server.js +36 -17
  80. package/src/runtime/app/paths/types.d.ts +11 -19
  81. package/src/runtime/app/server/index.js +2 -2
  82. package/src/runtime/app/server/public.d.ts +201 -0
  83. package/src/runtime/app/server/remote/command.js +13 -11
  84. package/src/runtime/app/server/remote/form.js +61 -39
  85. package/src/runtime/app/server/remote/prerender.js +45 -45
  86. package/src/runtime/app/server/remote/query.js +106 -108
  87. package/src/runtime/app/server/remote/requested.js +27 -19
  88. package/src/runtime/app/server/remote/shared.js +76 -76
  89. package/src/runtime/app/service-worker/index.js +24 -0
  90. package/src/runtime/app/state/client.js +4 -2
  91. package/src/runtime/app/state/index.js +7 -5
  92. package/src/runtime/app/state/public.d.ts +72 -0
  93. package/src/runtime/app/state/server.js +3 -0
  94. package/src/runtime/app/stores.js +15 -78
  95. package/src/runtime/client/bundle.js +1 -1
  96. package/src/runtime/client/client-entry.js +3 -0
  97. package/src/runtime/client/client.js +1336 -648
  98. package/src/runtime/client/constants.js +3 -6
  99. package/src/runtime/client/entry.js +24 -3
  100. package/src/runtime/client/fetcher.js +25 -25
  101. package/src/runtime/client/ndjson.js +1 -1
  102. package/src/runtime/client/parse.js +1 -1
  103. package/src/runtime/client/payload.js +17 -0
  104. package/src/runtime/client/remote-functions/cache.svelte.js +3 -1
  105. package/src/runtime/client/remote-functions/command.svelte.js +37 -61
  106. package/src/runtime/client/remote-functions/form.svelte.js +267 -178
  107. package/src/runtime/client/remote-functions/prerender.svelte.js +32 -11
  108. package/src/runtime/client/remote-functions/query/index.js +10 -17
  109. package/src/runtime/client/remote-functions/query/instance.svelte.js +64 -18
  110. package/src/runtime/client/remote-functions/query/proxy.js +5 -5
  111. package/src/runtime/client/remote-functions/query-batch.svelte.js +61 -70
  112. package/src/runtime/client/remote-functions/query-live/index.js +1 -1
  113. package/src/runtime/client/remote-functions/query-live/instance.svelte.js +63 -21
  114. package/src/runtime/client/remote-functions/query-live/iterator.js +15 -12
  115. package/src/runtime/client/remote-functions/query-live/proxy.js +2 -12
  116. package/src/runtime/client/remote-functions/shared.svelte.js +90 -65
  117. package/src/runtime/client/snapshots.js +147 -0
  118. package/src/runtime/client/state.svelte.js +94 -55
  119. package/src/runtime/client/stream.js +3 -2
  120. package/src/runtime/client/types.d.ts +13 -9
  121. package/src/runtime/client/utils.js +22 -110
  122. package/src/runtime/components/root.svelte +56 -0
  123. package/src/runtime/env/dynamic/private.js +7 -0
  124. package/src/runtime/env/dynamic/public.js +7 -0
  125. package/src/runtime/env/static/private.js +6 -0
  126. package/src/runtime/env/static/public.js +6 -0
  127. package/src/runtime/form-utils.js +172 -61
  128. package/src/runtime/pathname.js +20 -32
  129. package/src/runtime/props.svelte.js +72 -0
  130. package/src/runtime/server/constants.js +0 -3
  131. package/src/runtime/server/cookie.js +72 -55
  132. package/src/runtime/server/csrf.js +65 -0
  133. package/src/runtime/server/data/index.js +49 -53
  134. package/src/runtime/server/dev.js +22 -0
  135. package/src/runtime/server/endpoint.js +6 -7
  136. package/src/runtime/server/env_module.js +0 -5
  137. package/src/runtime/server/errors.js +160 -0
  138. package/src/runtime/server/fetch.js +32 -39
  139. package/src/runtime/server/index.js +90 -64
  140. package/src/runtime/server/internal.js +71 -0
  141. package/src/runtime/server/page/actions.js +85 -64
  142. package/src/runtime/server/page/crypto.js +2 -2
  143. package/src/runtime/server/page/csp.js +88 -104
  144. package/src/runtime/server/page/data_serializer.js +24 -25
  145. package/src/runtime/server/page/index.js +36 -53
  146. package/src/runtime/server/page/load_data.js +50 -57
  147. package/src/runtime/server/page/render.js +173 -239
  148. package/src/runtime/server/page/respond_with_error.js +17 -31
  149. package/src/runtime/server/page/serialize_data.js +2 -13
  150. package/src/runtime/server/page/server_routing.js +85 -26
  151. package/src/runtime/server/remote-functions.js +640 -0
  152. package/src/runtime/server/respond.js +190 -131
  153. package/src/runtime/server/sourcemaps.js +183 -0
  154. package/src/runtime/server/state.js +53 -0
  155. package/src/runtime/server/utils.js +13 -155
  156. package/src/runtime/shared.js +20 -40
  157. package/src/runtime/utils.js +3 -0
  158. package/src/types/ambient-private.d.ts +11 -1
  159. package/src/types/ambient.d.ts +87 -36
  160. package/src/types/global-private.d.ts +25 -25
  161. package/src/types/internal.d.ts +163 -157
  162. package/src/types/private.d.ts +41 -1
  163. package/src/utils/error.js +28 -4
  164. package/src/utils/escape.js +9 -25
  165. package/src/utils/features.js +1 -1
  166. package/src/utils/filesystem.js +1 -23
  167. package/src/utils/fork.js +7 -2
  168. package/src/utils/hash.js +21 -0
  169. package/src/utils/http.js +8 -7
  170. package/src/utils/import.js +9 -2
  171. package/src/utils/imports.js +83 -0
  172. package/src/utils/mime.js +9 -0
  173. package/src/utils/page_nodes.js +6 -7
  174. package/src/utils/params.js +67 -0
  175. package/src/utils/regex.js +9 -0
  176. package/src/utils/routing.js +145 -73
  177. package/src/utils/shared-iterator.js +5 -0
  178. package/src/utils/streaming.js +14 -4
  179. package/src/utils/url.js +33 -2
  180. package/src/version.js +1 -1
  181. package/types/index.d.ts +2616 -2433
  182. package/types/index.d.ts.map +120 -106
  183. package/src/core/sync/write_ambient.js +0 -18
  184. package/src/core/sync/write_root.js +0 -148
  185. package/src/core/sync/write_tsconfig.js +0 -250
  186. package/src/exports/internal/server.js +0 -22
  187. package/src/exports/node/polyfills.js +0 -30
  188. package/src/runtime/server/app.js +0 -9
  189. package/src/runtime/server/remote.js +0 -457
  190. package/src/runtime/shared-server.js +0 -7
  191. package/src/runtime/telemetry/otel.js +0 -21
  192. package/src/runtime/telemetry/record_span.js +0 -65
  193. package/src/types/synthetic/$lib.md +0 -5
  194. /package/src/exports/internal/{remote-functions.js → server/remote-functions.js} +0 -0
  195. /package/src/{runtime/telemetry/noop.js → telemetry.js} +0 -0
@@ -1,31 +1,28 @@
1
- import { SvelteComponent } from 'svelte';
1
+ import { Component } from 'svelte';
2
2
  import {
3
- Config,
4
3
  ServerLoad,
5
- Handle,
6
- HandleServerError,
7
- KitConfig,
8
4
  Load,
9
5
  RequestHandler,
10
- ResolveOptions,
11
6
  Server,
12
7
  ServerInitOptions,
13
- HandleFetch,
14
8
  Actions,
9
+ SSRManifest,
10
+ Emulator
11
+ } from '@sveltejs/kit';
12
+ import { RemoteFormIssue, RemoteQuery, RemoteLiveQuery } from '@sveltejs/kit/remote';
13
+ import { Config } from '@sveltejs/kit/vite';
14
+ import { RequestEvent } from '$app/server';
15
+ import {
16
+ ClientInit,
17
+ Handle,
15
18
  HandleClientError,
19
+ HandleFetch,
20
+ HandleServerError,
16
21
  Reroute,
17
- RequestEvent,
18
- SSRManifest,
19
- Emulator,
20
- Adapter,
22
+ ResolveOptions,
21
23
  ServerInit,
22
- ClientInit,
23
- Transport,
24
- HandleValidationError,
25
- RemoteFormIssue,
26
- RemoteQuery,
27
- RemoteLiveQuery
28
- } from '@sveltejs/kit';
24
+ Transport
25
+ } from '@sveltejs/kit/hooks';
29
26
  import {
30
27
  HttpMethod,
31
28
  MaybePromise,
@@ -44,13 +41,13 @@ export interface ServerModule {
44
41
  export interface ServerInternalModule {
45
42
  set_assets(path: string): void;
46
43
  set_building(): void;
47
- set_env(environment: Record<string, string>): void;
48
44
  set_manifest(manifest: SSRManifest): void;
49
45
  set_prerendering(): void;
50
46
  set_read_implementation(implementation: (path: string) => ReadableStream): void;
51
47
  set_version(version: string): void;
52
- set_fix_stack_trace(fix_stack_trace: (error: unknown) => string): void;
48
+ set_fix_stack_trace(fix_stack_trace: (error: Error) => void): void;
53
49
  get_hooks: () => Promise<Record<string, any>>;
50
+ log_response: (status: number, request: Request) => void;
54
51
  }
55
52
 
56
53
  export interface Asset {
@@ -101,6 +98,9 @@ export interface BuildData {
101
98
  routes?: SSRClientRoute[];
102
99
  stylesheets: string[];
103
100
  fonts: string[];
101
+ /**
102
+ * Whether the client uses public dynamic env vars — `$env/dynamic/public` or `$app/env/public`.
103
+ */
104
104
  uses_env_dynamic_public: boolean;
105
105
  /** Only set in case of `bundleStrategy === 'inline'`. */
106
106
  inline?: {
@@ -112,7 +112,7 @@ export interface BuildData {
112
112
  }
113
113
 
114
114
  export interface CSRPageNode {
115
- component: typeof SvelteComponent;
115
+ component: Component;
116
116
  universal: {
117
117
  load?: Load;
118
118
  trailingSlash?: TrailingSlash;
@@ -155,9 +155,8 @@ export interface ServerHooks {
155
155
  handleFetch: HandleFetch;
156
156
  handle: Handle;
157
157
  handleError: HandleServerError;
158
- handleValidationError: HandleValidationError;
159
158
  reroute: Reroute;
160
- transport: Transport;
159
+ transport?: Transport;
161
160
  init?: ServerInit;
162
161
  }
163
162
 
@@ -173,28 +172,27 @@ export interface Env {
173
172
  public: Record<string, string>;
174
173
  }
175
174
 
175
+ export interface InternalRequestOptions extends RequestOptions {
176
+ prerendering?: PrerenderOptions;
177
+ /** @internal for saving dependencies during prerendering and generating fallback pages */
178
+ read: (file: string) => Buffer<ArrayBuffer>;
179
+ /** @internal used during development to check feature availability depending on the current route */
180
+ before_handle?: (
181
+ event: RequestEvent,
182
+ config: any,
183
+ prerender: PrerenderOption,
184
+ handle: () => Promise<Response>
185
+ ) => Promise<Response>;
186
+ emulator?: Emulator;
187
+ }
188
+
176
189
  export class InternalServer extends Server {
177
190
  init(options: ServerInitOptions): Promise<void>;
178
- respond(
179
- request: Request,
180
- options: RequestOptions & {
181
- prerendering?: PrerenderOptions;
182
- /** @internal for saving dependencies during prerendering and generating fallback pages */
183
- read: (file: string) => Buffer<ArrayBuffer>;
184
- /** @internal used during development to check feature availability depending on the current route */
185
- before_handle?: (
186
- event: RequestEvent,
187
- config: any,
188
- prerender: PrerenderOption,
189
- handle: () => Promise<Response>
190
- ) => Promise<Response>;
191
- emulator?: Emulator;
192
- }
193
- ): Promise<Response>;
191
+ respond(request: Request, options: InternalRequestOptions): Promise<Response>;
194
192
  }
195
193
 
196
194
  export interface ManifestData {
197
- /** Static files from `kit.config.files.assets`. */
195
+ /** Static files from `config.files.assets`. */
198
196
  assets: Asset[];
199
197
  hooks: {
200
198
  client: string | null;
@@ -203,7 +201,7 @@ export interface ManifestData {
203
201
  };
204
202
  nodes: PageNode[];
205
203
  routes: RouteData[];
206
- matchers: Record<string, string>;
204
+ params: string | null;
207
205
  }
208
206
 
209
207
  export interface RemoteChunk {
@@ -232,15 +230,15 @@ export interface PrerenderDependency {
232
230
  body: null | string | Uint8Array;
233
231
  }
234
232
 
233
+ /** Internal context for the prerendering process */
235
234
  export interface PrerenderOptions {
236
235
  cache?: string; // including this here is a bit of a hack, but it makes it easy to add <meta http-equiv>
237
236
  fallback?: boolean;
238
237
  dependencies: Map<string, PrerenderDependency>;
239
- /**
240
- * For each key the (possibly still pending) result of a prerendered remote function.
241
- * Used to deduplicate requests to the same remote function with the same arguments.
242
- */
238
+ /** Results of remote `prerender` functions, shared across the whole prerender run so that each only executes once */
243
239
  remote_responses: Map<string, Promise<any>>;
240
+ /** Route IDs whose resolution module has been emitted, shared across the whole prerender run so that each only generates once */
241
+ resolved_route_ids: Set<string>;
244
242
  /** True for the duration of a call to the `reroute` hook */
245
243
  inside_reroute?: boolean;
246
244
  }
@@ -249,7 +247,7 @@ export type RecursiveRequired<T> = {
249
247
  // Recursive implementation of TypeScript's Required utility type.
250
248
  // Will recursively continue until it reaches a primitive or Function
251
249
  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
252
- [K in keyof T]-?: Extract<T[K], Function> extends never // If it does not have a Function type
250
+ [K in keyof T]-?: Extract<T[K], Function | (`${string}:` & {})> extends never // If it does not have a Function type
253
251
  ? RecursiveRequired<T[K]> // recursively continue through.
254
252
  : T[K]; // Use the exact type for everything else
255
253
  };
@@ -296,6 +294,7 @@ export interface RouteData {
296
294
 
297
295
  export type ServerRedirectNode = {
298
296
  type: 'redirect';
297
+ status: number;
299
298
  location: string;
300
299
  };
301
300
 
@@ -307,38 +306,42 @@ export type ServerNodesResponse = {
307
306
  nodes: Array<ServerDataNode | ServerDataSkippedNode | ServerErrorNode | null>;
308
307
  };
309
308
 
309
+ export type RemoteFunctionDataNode = {
310
+ /** value */
311
+ v?: any;
312
+ /** error */
313
+ e?: App.Error;
314
+ };
315
+
316
+ export type RemoteFunctionData = {
317
+ /** The result of a command/form invocation */
318
+ _?: any;
319
+ /** `prerender` data that was accessed during the request */
320
+ p?: Record<string, RemoteFunctionDataNode>;
321
+ /** `query` or `query.batch` data that was accessed during the request */
322
+ q?: Record<string, RemoteFunctionDataNode>;
323
+ /** `query.live` data that was accessed during the request */
324
+ l?: Record<string, RemoteFunctionDataNode>;
325
+ /** `form` outputs (result/issues/input) from a non-enhanced submission, keyed by the client-side action id */
326
+ f?: Record<string, RemoteFunctionDataNode>;
327
+ /** Whether there were any refreshes/reconnects during the request */
328
+ r?: true;
329
+ /** The redirect location, if any */
330
+ redirect?: string;
331
+ };
332
+
310
333
  export type RemoteFunctionResponse =
311
334
  | (ServerRedirectNode & {
312
- /** devalue'd Record<string, any> */
313
- refreshes?: string;
314
- /** devalue'd Record<string, any> */
315
- reconnects?: string;
335
+ /** stringified RemoteFunctionData */
336
+ data: string;
316
337
  })
317
338
  | ServerErrorNode
318
339
  | {
319
340
  type: 'result';
320
- result: string;
321
- /** devalue'd Record<string, any> */
322
- refreshes: string | undefined;
323
- /** devalue'd Record<string, any> */
324
- reconnects: string | undefined;
341
+ /** stringified RemoteFunctionData */
342
+ data: string;
325
343
  };
326
344
 
327
- export type RemoteSingleflightResult = {
328
- type: 'result';
329
- data: any;
330
- };
331
-
332
- export type RemoteSingleflightError = {
333
- type: 'error';
334
- status?: number;
335
- error: App.Error;
336
- };
337
-
338
- export type RemoteSingleflightEntry = RemoteSingleflightResult | RemoteSingleflightError;
339
-
340
- export type RemoteSingleflightMap = Record<string, RemoteSingleflightEntry>;
341
-
342
345
  export type RemoteLiveQueryUserFunctionReturnType<Output> = MaybePromise<
343
346
  | AsyncGenerator<Output>
344
347
  | AsyncIterator<Output>
@@ -388,14 +391,10 @@ export interface ServerDataSkippedNode {
388
391
  export interface ServerErrorNode {
389
392
  type: 'error';
390
393
  error: App.Error;
391
- /**
392
- * Only set for HttpErrors.
393
- */
394
- status?: number;
395
394
  }
396
395
 
397
396
  export interface ServerMetadataRoute {
398
- config: any;
397
+ config: Record<string, any>;
399
398
  api: {
400
399
  methods: Array<HttpMethod | '*'>;
401
400
  };
@@ -418,27 +417,7 @@ export interface ServerMetadata {
418
417
  remotes: Map<string, Map<string, { type: RemoteInternals['type']; dynamic: boolean }>>;
419
418
  }
420
419
 
421
- export interface SSRComponent {
422
- default: {
423
- render(
424
- props: Record<string, any>,
425
- opts: { context: Map<any, any>; csp?: { nonce?: string; hash?: boolean } }
426
- ): {
427
- html: string;
428
- head: string;
429
- css: {
430
- code: string;
431
- map: any; // TODO
432
- };
433
- /** Until we require all Svelte versions that support hashes, this might not be defined */
434
- hashes?: {
435
- script: Array<`sha256-${string}`>;
436
- };
437
- };
438
- };
439
- }
440
-
441
- export type SSRComponentLoader = () => Promise<SSRComponent>;
420
+ export type SSRComponentLoader = () => Promise<Component>;
442
421
 
443
422
  export interface UniversalNode {
444
423
  /** Is `null` in case static analysis succeeds but the node is ssr=false */
@@ -447,7 +426,7 @@ export interface UniversalNode {
447
426
  ssr?: boolean;
448
427
  csr?: boolean;
449
428
  trailingSlash?: TrailingSlash;
450
- config?: any;
429
+ config?: Record<string, any>;
451
430
  entries?: PrerenderEntryGenerator;
452
431
  }
453
432
 
@@ -458,7 +437,7 @@ export interface ServerNode {
458
437
  csr?: boolean;
459
438
  trailingSlash?: TrailingSlash;
460
439
  actions?: Actions;
461
- config?: any;
440
+ config?: Record<string, any>;
462
441
  entries?: PrerenderEntryGenerator;
463
442
  }
464
443
 
@@ -477,7 +456,10 @@ export interface SSRNode {
477
456
 
478
457
  /**
479
458
  * During development, all styles are inlined for the page to avoid FOUC.
480
- * But in production, this stores styles that are below the inline threshold
459
+ * But in production, this stores styles that are below the inline threshold.
460
+ * It returns a Promise during development because Vite needs to load the
461
+ * modules on demand. But in production, the contents have been precomputed
462
+ * during the build, so it can return synchronously.
481
463
  */
482
464
  inline_styles?(): MaybePromise<
483
465
  Record<string, string | ((assets: string, base: string) => string)>
@@ -494,18 +476,16 @@ export type SSRNodeLoader = () => Promise<SSRNode>;
494
476
 
495
477
  export interface SSROptions {
496
478
  app_template_contains_nonce: boolean;
497
- async: boolean;
498
- csp: ValidatedConfig['kit']['csp'];
479
+ csp: ValidatedConfig['csp'];
499
480
  csrf_check_origin: boolean;
500
481
  csrf_trusted_origins: string[];
501
482
  embedded: boolean;
502
483
  hash_routing: boolean;
503
484
  hooks: ServerHooks;
504
- link_header_preload: ValidatedConfig['kit']['output']['linkHeaderPreload'];
505
- root: SSRComponent['default'];
485
+ link_header_preload: ValidatedConfig['output']['linkHeaderPreload'];
486
+ paths_origin: string | undefined;
506
487
  service_worker: boolean;
507
488
  service_worker_options: RegistrationOptions;
508
- server_error_boundaries: boolean;
509
489
  templates: {
510
490
  app(values: {
511
491
  head: string;
@@ -516,6 +496,7 @@ export interface SSROptions {
516
496
  }): string;
517
497
  error(values: { message: string; status: number }): string;
518
498
  };
499
+ version: string;
519
500
  version_hash: string;
520
501
  }
521
502
 
@@ -531,7 +512,7 @@ export type RemotePrerenderInputsGenerator<Input = any> = () => MaybePromise<Inp
531
512
  export type SSREndpoint = Partial<Record<HttpMethod, RequestHandler>> & {
532
513
  prerender?: PrerenderOption;
533
514
  trailingSlash?: TrailingSlash;
534
- config?: any;
515
+ config?: Record<string, any>;
535
516
  entries?: PrerenderEntryGenerator;
536
517
  fallback?: RequestHandler;
537
518
  };
@@ -554,39 +535,6 @@ export interface SSRClientRoute {
554
535
  leaf: [has_server_load: boolean, node_id: number];
555
536
  }
556
537
 
557
- export interface SSRState {
558
- fallback?: string;
559
- getClientAddress(): string;
560
- /**
561
- * True if we're currently attempting to render an error page.
562
- */
563
- error: boolean;
564
- /**
565
- * Allows us to prevent `event.fetch` from making infinitely looping internal requests.
566
- */
567
- depth: number;
568
- platform?: any;
569
- prerendering?: PrerenderOptions;
570
- /**
571
- * When fetching data from a +server.js endpoint in `load`, the page's
572
- * prerender option is inherited by the endpoint, unless overridden.
573
- */
574
- prerender_default?: PrerenderOption;
575
- /** @internal reads from the filesystem when user code tries to fetch a static asset */
576
- read?: (file: string) => Buffer<ArrayBuffer>;
577
- /**
578
- * Used to set up `__SVELTEKIT_TRACK__` which checks if a used feature is supported.
579
- * E.g. if `read` from `$app/server` is used, it checks whether the route's config is compatible.
580
- */
581
- before_handle?: (
582
- event: RequestEvent,
583
- config: any,
584
- prerender: PrerenderOption,
585
- handle: () => Promise<Response>
586
- ) => Promise<Response>;
587
- emulator?: Emulator;
588
- }
589
-
590
538
  export type StrictBody = string | ArrayBufferView;
591
539
 
592
540
  export interface Uses {
@@ -598,14 +546,10 @@ export interface Uses {
598
546
  search_params: Set<string>;
599
547
  }
600
548
 
601
- export type ValidatedConfig = Config & {
602
- kit: ValidatedKitConfig;
603
- extensions: string[];
549
+ export type ValidatedConfig = RecursiveRequired<Omit<Config, 'preprocess'>> & {
550
+ preprocess: Config['preprocess'];
604
551
  };
605
552
 
606
- // TODO: remove the omit in 4.0
607
- export type ValidatedKitConfig = Omit<RecursiveRequired<KitConfig>, 'adapter'>;
608
-
609
553
  export type BinaryFormMeta = {
610
554
  remote_refreshes?: string[];
611
555
  validate_only?: boolean;
@@ -663,6 +607,11 @@ export interface RemoteCommandInternals extends BaseRemoteInternals {
663
607
 
664
608
  export interface RemoteFormInternals extends BaseRemoteInternals {
665
609
  type: 'form';
610
+ /**
611
+ * For keyed (`form.for(key)`) instances: the id as the client computes it
612
+ * (the key is JSON-stringified but not URI-encoded, unlike `id`)
613
+ */
614
+ key?: string;
666
615
  fn(body: Record<string, any>, meta: BinaryFormMeta, form_data: FormData | null): Promise<any>;
667
616
  }
668
617
 
@@ -701,22 +650,59 @@ export type RecordSpan = <T>(options: {
701
650
  * used for tracking things like remote function calls
702
651
  */
703
652
  export interface RequestState {
704
- readonly prerendering: PrerenderOptions | undefined;
705
- readonly transport: ServerHooks['transport'];
706
- readonly handleValidationError: ServerHooks['handleValidationError'];
707
- readonly tracing: {
708
- record_span: RecordSpan;
709
- };
653
+ readonly getClientAddress: () => string;
654
+ readonly platform?: any;
655
+ /** @internal reads from the filesystem when user code tries to fetch a static asset */
656
+ readonly read?: (file: string) => Buffer<ArrayBuffer>;
657
+ /**
658
+ * Used to set up `__SVELTEKIT_TRACK__` which checks if a used feature is supported.
659
+ * E.g. if `read` from `$app/server` is used, it checks whether the route's config is compatible.
660
+ */
661
+ readonly before_handle?: (
662
+ event: RequestEvent,
663
+ config: Record<string, any>,
664
+ prerender: PrerenderOption,
665
+ handle: () => Promise<Response>
666
+ ) => Promise<Response>;
667
+ readonly emulator?: Emulator;
668
+ readonly prerendering?: PrerenderOptions;
669
+ /**
670
+ * When fetching data from a +server.js endpoint in `load`, the page's
671
+ * prerender option is inherited by the endpoint, unless overridden.
672
+ */
673
+ prerender_default?: PrerenderOption;
674
+ /**
675
+ * True if we're currently attempting to render an error page.
676
+ */
677
+ error: boolean;
678
+ /**
679
+ * Allows us to prevent `event.fetch` from making infinitely looping internal requests.
680
+ */
681
+ readonly depth: number;
710
682
  readonly remote: {
711
- data: null | Map<
712
- RemoteInternals,
713
- Record<string, { serialize: boolean; data: MaybePromise<any> }>
683
+ /** Resolved query/prerender data, populated by `await myQuery()` or `myQuery.set(...)` */
684
+ data: null | Map<RemoteInternals, Record<string, MaybePromise<any>>>;
685
+ /**
686
+ * Data that is implicitly included because it was awaited during render.
687
+ * This is serialized during SSR if the promise already resolved
688
+ */
689
+ implicit: null | Map<RemoteInternals, Record<string, () => MaybePromise<any>>>;
690
+ /**
691
+ * Data that is explicitly included because of a `set(...)`, `refresh()` or
692
+ * `reconnect()`. The stored function is invoked lazily at the end of the
693
+ * request by `collect_remote_data`; if the query was already read (and thus
694
+ * cached) earlier in the request, invoking it does no additional work. This
695
+ * is always awaited and serialized.
696
+ */
697
+ explicit: null | Map<
698
+ string,
699
+ {
700
+ internals: RemoteInternals;
701
+ fn: () => Promise<any>;
702
+ }
714
703
  >;
715
704
  /** Instances created via `myForm.for(...)` */
716
705
  forms: null | Map<string, any>;
717
- /** A map of remote function key to corresponding single-flight-mutation promise */
718
- refreshes: null | Map<string, Promise<any>>;
719
- reconnects: null | Map<string, Promise<void>>;
720
706
  /** A map of remote function ID to payloads requested for refreshing by the client */
721
707
  requested: null | Map<string, string[]>;
722
708
  /** A map of query.batch ID to payloads requested for that batch within the same macrotask */
@@ -739,8 +725,10 @@ export interface RequestState {
739
725
  live_iterators: null | Map<string, SharedIterator<any>>;
740
726
  };
741
727
  readonly is_in_remote_function: boolean;
728
+ readonly is_in_remote_form_or_command: boolean;
729
+ readonly is_in_remote_query: boolean;
730
+ readonly is_in_remote_prerender: boolean;
742
731
  readonly is_in_render: boolean;
743
- readonly is_in_universal_load: boolean;
744
732
  }
745
733
 
746
734
  export interface RequestStore {
@@ -748,5 +736,23 @@ export interface RequestStore {
748
736
  state: RequestState;
749
737
  }
750
738
 
739
+ /** Type of the `__sveltekit_abc123` object in the init `<script>` */
740
+ export interface SvelteKitPayload {
741
+ /** The application version */
742
+ version: string;
743
+ /** The basepath, usually relative to the current page */
744
+ base: string;
745
+ /** Path to externally-hosted assets */
746
+ assets?: string;
747
+ /** Public environment variables */
748
+ env?: Record<string, string>;
749
+ /** Serialized data from query/form/command functions */
750
+ data?: RemoteFunctionData;
751
+ /** Create a placeholder promise */
752
+ defer?: (id: number) => Promise<any>;
753
+ /** Resolve a placeholder promise */
754
+ resolve?: (data: { id: number; data: any; error: any }) => void;
755
+ }
756
+
751
757
  export * from '../exports/index.js';
752
758
  export * from './private.js';
@@ -61,7 +61,10 @@ export namespace Csp {
61
61
  | 'unsafe-eval'
62
62
  | 'unsafe-hashes'
63
63
  | 'unsafe-inline'
64
+ | 'unsafe-allow-redirects'
65
+ | 'unsafe-webtransport-hashes'
64
66
  | 'wasm-unsafe-eval'
67
+ | 'trusted-types-eval'
65
68
  | 'none';
66
69
  type CryptoSource = `${'nonce' | 'sha256' | 'sha384' | 'sha512'}-${string}`;
67
70
  type FrameSource = HostSource | SchemeSource | 'self' | 'none';
@@ -70,7 +73,16 @@ export namespace Csp {
70
73
  type HostProtocolSchemes = `${string}://` | '';
71
74
  type HttpDelineator = '/' | '?' | '#' | '\\';
72
75
  type PortScheme = `:${number}` | '' | ':*';
73
- type SchemeSource = 'http:' | 'https:' | 'data:' | 'mediastream:' | 'blob:' | 'filesystem:';
76
+ type SchemeSource =
77
+ | 'http:'
78
+ | 'https:'
79
+ | 'ws:'
80
+ | 'wss:'
81
+ | 'data:'
82
+ | 'mediastream:'
83
+ | 'blob:'
84
+ | 'filesystem:'
85
+ | (`${string}:` & {});
74
86
  type Source = HostSource | SchemeSource | CryptoSource | BaseSource;
75
87
  type Sources = Source[];
76
88
  }
@@ -147,10 +159,18 @@ export type HttpMethod = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' |
147
159
  export interface Logger {
148
160
  (msg: string): void;
149
161
  success(msg: string): void;
162
+ /** Print a bold red message to stderr */
150
163
  error(msg: string): void;
164
+ /** Print a bold yellow message to stderr */
151
165
  warn(msg: string): void;
166
+ /** Print faded text to stdout if `verbose === true` */
152
167
  minor(msg: string): void;
168
+ /** Print to stdout if `verbose === true` */
153
169
  info(msg: string): void;
170
+ /** Print to stderr without formatting */
171
+ err(msg: string): void;
172
+ /** Print a bold red message, followed by a stack trace for each error (following `.cause` chains) */
173
+ prettyError(error: unknown, caller?: string): void;
154
174
  }
155
175
 
156
176
  export type MaybePromise<T> = T | Promise<T>;
@@ -212,6 +232,10 @@ export interface PrerenderUnseenRoutesHandler {
212
232
  (details: { routes: string[]; message: string }): void;
213
233
  }
214
234
 
235
+ export interface PrerenderInvalidUrlHandler {
236
+ (details: { href: string; referrer: string | null; message: string }): void;
237
+ }
238
+
215
239
  export type PrerenderHttpErrorHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderHttpErrorHandler;
216
240
  export type PrerenderMissingIdHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderMissingIdHandler;
217
241
  export type PrerenderUnseenRoutesHandlerValue =
@@ -224,6 +248,11 @@ export type PrerenderEntryGeneratorMismatchHandlerValue =
224
248
  | 'warn'
225
249
  | 'ignore'
226
250
  | PrerenderEntryGeneratorMismatchHandler;
251
+ export type PrerenderInvalidUrlHandlerValue =
252
+ | 'fail'
253
+ | 'warn'
254
+ | 'ignore'
255
+ | PrerenderInvalidUrlHandler;
227
256
 
228
257
  export type PrerenderOption = boolean | 'auto';
229
258
 
@@ -252,3 +281,14 @@ export type DeepPartial<T> = T extends Record<PropertyKey, unknown> | unknown[]
252
281
  : T | undefined;
253
282
 
254
283
  export type IsAny<T> = 0 extends 1 & T ? true : false;
284
+
285
+ export type HasNonOptionalBoolean<T> =
286
+ IsAny<T> extends true
287
+ ? never
288
+ : [T] extends [boolean]
289
+ ? true
290
+ : T extends Array<infer U>
291
+ ? HasNonOptionalBoolean<U>
292
+ : T extends Record<string, any>
293
+ ? { [K in keyof T]: HasNonOptionalBoolean<T[K]> }[keyof T]
294
+ : never;
@@ -30,7 +30,7 @@ export function coalesce_to_error(err) {
30
30
  * @param {unknown} error
31
31
  */
32
32
  export function normalize_error(error) {
33
- return /** @type {import('../exports/internal/index.js').Redirect | HttpError | SvelteKitError | Error} */ (
33
+ return /** @type {import('../exports/internal/shared.js').Redirect | HttpError | SvelteKitError | Error} */ (
34
34
  error
35
35
  );
36
36
  }
@@ -43,8 +43,32 @@ export function get_status(error) {
43
43
  }
44
44
 
45
45
  /**
46
- * @param {unknown} error
46
+ * Adds development-only compatibility accessors for the former top-level `status` and `message`
47
+ * properties of the `handleError` hook input.
48
+ * @template {object} T
49
+ * @param {T} input
50
+ * @param {{ status: number; message: string }} fallback
51
+ * @returns {T}
47
52
  */
48
- export function get_message(error) {
49
- return error instanceof SvelteKitError ? error.text : 'Internal Error';
53
+ export function add_deprecated_handle_error_properties(input, fallback) {
54
+ Object.defineProperties(input, {
55
+ status: {
56
+ get() {
57
+ console.warn(
58
+ 'The `status` property of `handleError` is deprecated. Use `error.status` for expected and framework errors, or `500` for unexpected errors.'
59
+ );
60
+ return fallback.status;
61
+ }
62
+ },
63
+ message: {
64
+ get() {
65
+ console.warn(
66
+ "The `message` property of `handleError` is deprecated. Use `error.message` for expected and framework errors, or 'Internal Error' for unexpected errors."
67
+ );
68
+ return fallback.message;
69
+ }
70
+ }
71
+ });
72
+
73
+ return input;
50
74
  }