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

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