@sveltejs/kit 2.4.2 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "2.4.2",
3
+ "version": "2.5.0",
4
4
  "description": "The fastest way to build Svelte apps",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,10 +33,10 @@
33
33
  "@types/set-cookie-parser": "^2.4.7",
34
34
  "dts-buddy": "^0.4.3",
35
35
  "rollup": "^4.9.5",
36
- "svelte": "^4.2.8",
36
+ "svelte": "^4.2.9",
37
37
  "svelte-preprocess": "^5.1.3",
38
38
  "typescript": "^5.3.3",
39
- "vite": "^5.0.11",
39
+ "vite": "^5.0.12",
40
40
  "vitest": "^1.2.0"
41
41
  },
42
42
  "peerDependencies": {
@@ -19,7 +19,8 @@ export async function adapt(
19
19
  log,
20
20
  vite_config
21
21
  ) {
22
- const { name, adapt } = config.kit.adapter;
22
+ // This is only called when adapter is truthy, so the cast is safe
23
+ const { name, adapt } = /** @type {import('@sveltejs/kit').Adapter} */ (config.kit.adapter);
23
24
 
24
25
  console.log(colors.bold().cyan(`\n> Using ${name}`));
25
26
 
@@ -92,6 +92,8 @@ async function prerender({ out, manifest_path, metadata, verbose, env }) {
92
92
  /** @type {import('types').ValidatedKitConfig} */
93
93
  const config = (await load_config()).kit;
94
94
 
95
+ const emulator = await config.adapter?.emulate?.();
96
+
95
97
  /** @type {import('types').Logger} */
96
98
  const log = logger({ verbose });
97
99
 
@@ -211,7 +213,8 @@ async function prerender({ out, manifest_path, metadata, verbose, env }) {
211
213
 
212
214
  // stuff in `static`
213
215
  return readFileSync(join(config.files.assets, file));
214
- }
216
+ },
217
+ emulator
215
218
  });
216
219
 
217
220
  const encoded_id = response.headers.get('x-sveltekit-routeid');
@@ -110,9 +110,9 @@ export async function getRequest({ request, base, bodySizeLimit }) {
110
110
  method: request.method,
111
111
  headers: /** @type {Record<string, string>} */ (request.headers),
112
112
  body:
113
- request.method === 'POST' || request.method === 'PUT' || request.method === 'PATCH'
114
- ? get_raw_body(request, bodySizeLimit)
115
- : undefined
113
+ request.method === 'GET' || request.method === 'HEAD'
114
+ ? undefined
115
+ : get_raw_body(request, bodySizeLimit)
116
116
  });
117
117
  }
118
118
 
@@ -45,6 +45,11 @@ export interface Adapter {
45
45
  */
46
46
  read?: (details: { config: any; route: { id: string } }) => boolean;
47
47
  };
48
+ /**
49
+ * Creates an `Emulator`, which allows the adapter to influence the environment
50
+ * during dev, build and prerendering
51
+ */
52
+ emulate?(): MaybePromise<Emulator>;
48
53
  }
49
54
 
50
55
  export type LoadProperties<input extends Record<string, any> | void> = input extends void
@@ -260,6 +265,17 @@ export interface Cookies {
260
265
  ): string;
261
266
  }
262
267
 
268
+ /**
269
+ * A collection of functions that influence the environment during dev, build and prerendering
270
+ */
271
+ export interface Emulator {
272
+ /**
273
+ * A function that is called with the current route `config` and `prerender` option
274
+ * and returns an `App.Platform` object
275
+ */
276
+ platform?(details: { config: any; prerender: PrerenderOption }): MaybePromise<App.Platform>;
277
+ }
278
+
263
279
  export interface KitConfig {
264
280
  /**
265
281
  * Your [adapter](https://kit.svelte.dev/docs/adapters) is run when executing `vite build`. It determines how the output is converted for different platforms.
@@ -8,7 +8,7 @@ import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite';
8
8
  import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js';
9
9
  import { installPolyfills } from '../../../exports/node/polyfills.js';
10
10
  import { coalesce_to_error } from '../../../utils/error.js';
11
- import { posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js';
11
+ import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js';
12
12
  import { load_error_page } from '../../../core/config/index.js';
13
13
  import { SVELTE_KIT_ASSETS } from '../../../constants.js';
14
14
  import * as sync from '../../../core/sync/sync.js';
@@ -87,7 +87,7 @@ export async function dev(vite, vite_config, svelte_config) {
87
87
 
88
88
  /** @param {string} id */
89
89
  async function resolve(id) {
90
- const url = id.startsWith('..') ? `/@fs${path.posix.resolve(id)}` : `/${id}`;
90
+ const url = id.startsWith('..') ? to_fs(path.posix.resolve(id)) : `/${id}`;
91
91
 
92
92
  const module = await loud_ssr_load_module(url);
93
93
 
@@ -137,8 +137,8 @@ export async function dev(vite, vite_config, svelte_config) {
137
137
  server_assets: new Proxy(
138
138
  {},
139
139
  {
140
- has: (_, /** @type {string} */ file) => fs.existsSync(file.replace(/^\/@fs/, '')),
141
- get: (_, /** @type {string} */ file) => fs.statSync(file.replace(/^\/@fs/, '')).size
140
+ has: (_, /** @type {string} */ file) => fs.existsSync(from_fs(file)),
141
+ get: (_, /** @type {string} */ file) => fs.statSync(from_fs(file)).size
142
142
  }
143
143
  ),
144
144
  nodes: manifest_data.nodes.map((node, index) => {
@@ -419,6 +419,7 @@ export async function dev(vite, vite_config, svelte_config) {
419
419
  });
420
420
 
421
421
  const env = loadEnv(vite_config.mode, svelte_config.kit.env.dir, '');
422
+ const emulator = await svelte_config.kit.adapter?.emulate?.();
422
423
 
423
424
  return () => {
424
425
  const serve_static_middleware = vite.middlewares.stack.find(
@@ -490,7 +491,7 @@ export async function dev(vite, vite_config, svelte_config) {
490
491
 
491
492
  await server.init({
492
493
  env,
493
- read: (file) => createReadableStream(file.replace(/^\/@fs/, ''))
494
+ read: (file) => createReadableStream(from_fs(file))
494
495
  });
495
496
 
496
497
  const request = await getRequest({
@@ -529,7 +530,8 @@ export async function dev(vite, vite_config, svelte_config) {
529
530
  read: (file) => fs.readFileSync(path.join(svelte_config.kit.files.assets, file)),
530
531
  before_handle: (event, config, prerender) => {
531
532
  async_local_storage.enterWith({ event, config, prerender });
532
- }
533
+ },
534
+ emulator
533
535
  });
534
536
 
535
537
  if (rendered.status === 404) {
@@ -164,7 +164,6 @@ export async function sveltekit() {
164
164
  preprocess,
165
165
  onwarn: svelte_config.onwarn,
166
166
  compilerOptions: {
167
- // @ts-expect-error SvelteKit requires hydratable true by default
168
167
  hydratable: isSvelte5Plus() ? undefined : true,
169
168
  ...svelte_config.compilerOptions
170
169
  },
@@ -51,6 +51,8 @@ export async function preview(vite, vite_config, svelte_config) {
51
51
  read: (file) => createReadableStream(`${dir}/${file}`)
52
52
  });
53
53
 
54
+ const emulator = await svelte_config.kit.adapter?.emulate?.();
55
+
54
56
  return () => {
55
57
  // Remove the base middleware. It screws with the URL.
56
58
  // It also only lets through requests beginning with the base path, so that requests beginning
@@ -191,7 +193,8 @@ export async function preview(vite, vite_config, svelte_config) {
191
193
  if (remoteAddress) return remoteAddress;
192
194
  throw new Error('Could not determine clientAddress');
193
195
  },
194
- read: (file) => fs.readFileSync(join(svelte_config.kit.files.assets, file))
196
+ read: (file) => fs.readFileSync(join(svelte_config.kit.files.assets, file)),
197
+ emulator
195
198
  })
196
199
  );
197
200
  });
@@ -271,7 +271,7 @@ export async function respond(request, options, manifest, state) {
271
271
  }
272
272
  }
273
273
 
274
- if (DEV && state.before_handle) {
274
+ if (state.before_handle || state.emulator?.platform) {
275
275
  let config = {};
276
276
 
277
277
  /** @type {import('types').PrerenderOption} */
@@ -283,11 +283,17 @@ export async function respond(request, options, manifest, state) {
283
283
  prerender = node.prerender ?? prerender;
284
284
  } else if (route.page) {
285
285
  const nodes = await load_page_nodes(route.page, manifest);
286
- config = get_page_config(nodes);
286
+ config = get_page_config(nodes) ?? config;
287
287
  prerender = get_option(nodes, 'prerender') ?? false;
288
288
  }
289
289
 
290
- state.before_handle(event, config, prerender);
290
+ if (state.before_handle) {
291
+ state.before_handle(event, config, prerender);
292
+ }
293
+
294
+ if (state.emulator?.platform) {
295
+ event.platform = await state.emulator.platform({ config, prerender });
296
+ }
291
297
  }
292
298
  }
293
299
 
@@ -15,7 +15,9 @@ import {
15
15
  HandleClientError,
16
16
  Reroute,
17
17
  RequestEvent,
18
- SSRManifest
18
+ SSRManifest,
19
+ Emulator,
20
+ Adapter
19
21
  } from '@sveltejs/kit';
20
22
  import {
21
23
  HttpMethod,
@@ -128,6 +130,7 @@ export class InternalServer extends Server {
128
130
  read: (file: string) => Buffer;
129
131
  /** A hook called before `handle` during dev, so that `AsyncLocalStorage` can be populated */
130
132
  before_handle?: (event: RequestEvent, config: any, prerender: PrerenderOption) => void;
133
+ emulator?: Emulator;
131
134
  }
132
135
  ): Promise<Response>;
133
136
  }
@@ -418,6 +421,7 @@ export interface SSRState {
418
421
  prerender_default?: PrerenderOption;
419
422
  read?: (file: string) => Buffer;
420
423
  before_handle?: (event: RequestEvent, config: any, prerender: PrerenderOption) => void;
424
+ emulator?: Emulator;
421
425
  }
422
426
 
423
427
  export type StrictBody = string | ArrayBufferView;
@@ -431,9 +435,14 @@ export interface Uses {
431
435
  search_params: Set<string>;
432
436
  }
433
437
 
434
- export type ValidatedConfig = RecursiveRequired<Config>;
438
+ export type ValidatedConfig = Config & {
439
+ kit: ValidatedKitConfig;
440
+ extensions: string[];
441
+ };
435
442
 
436
- export type ValidatedKitConfig = RecursiveRequired<KitConfig>;
443
+ export type ValidatedKitConfig = Omit<RecursiveRequired<KitConfig>, 'adapter'> & {
444
+ adapter?: Adapter;
445
+ };
437
446
 
438
447
  export * from '../exports/index.js';
439
448
  export * from './private.js';
@@ -148,6 +148,19 @@ export function to_fs(str) {
148
148
  }${str}`;
149
149
  }
150
150
 
151
+ /**
152
+ * Removes `/@fs` prefix from given path and posixifies it
153
+ * @param {string} str
154
+ */
155
+ export function from_fs(str) {
156
+ str = posixify(str);
157
+ if (!str.startsWith('/@fs')) return str;
158
+
159
+ str = str.slice(4);
160
+ // Windows/Linux separation - Windows starts with a drive letter, we need to strip the additional / here
161
+ return str[2] === ':' && /[A-Z]/.test(str[1]) ? str.slice(1) : str;
162
+ }
163
+
151
164
  /**
152
165
  * Given an entry point like [cwd]/src/hooks, returns a filename like [cwd]/src/hooks.js or [cwd]/src/hooks/index.js
153
166
  * @param {string} entry
@@ -16,5 +16,6 @@ export function get_page_config(nodes) {
16
16
  };
17
17
  }
18
18
 
19
+ // TODO 3.0 always return `current`? then we can get rid of `?? {}` in other places
19
20
  return Object.keys(current).length ? current : undefined;
20
21
  }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // generated during release, do not modify
2
2
 
3
3
  /** @type {string} */
4
- export const VERSION = '2.4.2';
4
+ export const VERSION = '2.5.0';
package/types/index.d.ts CHANGED
@@ -27,6 +27,11 @@ declare module '@sveltejs/kit' {
27
27
  */
28
28
  read?: (details: { config: any; route: { id: string } }) => boolean;
29
29
  };
30
+ /**
31
+ * Creates an `Emulator`, which allows the adapter to influence the environment
32
+ * during dev, build and prerendering
33
+ */
34
+ emulate?(): MaybePromise<Emulator>;
30
35
  }
31
36
 
32
37
  export type LoadProperties<input extends Record<string, any> | void> = input extends void
@@ -242,6 +247,17 @@ declare module '@sveltejs/kit' {
242
247
  ): string;
243
248
  }
244
249
 
250
+ /**
251
+ * A collection of functions that influence the environment during dev, build and prerendering
252
+ */
253
+ export interface Emulator {
254
+ /**
255
+ * A function that is called with the current route `config` and `prerender` option
256
+ * and returns an `App.Platform` object
257
+ */
258
+ platform?(details: { config: any; prerender: PrerenderOption }): MaybePromise<App.Platform>;
259
+ }
260
+
245
261
  export interface KitConfig {
246
262
  /**
247
263
  * Your [adapter](https://kit.svelte.dev/docs/adapters) is run when executing `vite build`. It determines how the output is converted for different platforms.
@@ -1732,7 +1748,14 @@ declare module '@sveltejs/kit' {
1732
1748
  endpoint_id?: string;
1733
1749
  }
1734
1750
 
1735
- type ValidatedConfig = RecursiveRequired<Config>;
1751
+ type ValidatedConfig = Config & {
1752
+ kit: ValidatedKitConfig;
1753
+ extensions: string[];
1754
+ };
1755
+
1756
+ type ValidatedKitConfig = Omit<RecursiveRequired<KitConfig>, 'adapter'> & {
1757
+ adapter?: Adapter;
1758
+ };
1736
1759
  /**
1737
1760
  * Throws an error with a HTTP status code and an optional message.
1738
1761
  * When called during request handling, this will cause SvelteKit to
@@ -9,6 +9,7 @@
9
9
  "Builder",
10
10
  "Config",
11
11
  "Cookies",
12
+ "Emulator",
12
13
  "KitConfig",
13
14
  "Handle",
14
15
  "HandleServerError",
@@ -75,6 +76,7 @@
75
76
  "SSREndpoint",
76
77
  "SSRRoute",
77
78
  "ValidatedConfig",
79
+ "ValidatedKitConfig",
78
80
  "isHttpError",
79
81
  "redirect",
80
82
  "isRedirect",
@@ -152,5 +154,5 @@
152
154
  null,
153
155
  null
154
156
  ],
155
- "mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;aAsBZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;kBAgBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkGPC,MAAMA;;;;;;;;;;;;;;;;;;;;;kBAqBNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyDPC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqZdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;;aAajBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;;aAUXC,OAAOA;;;;;;aAMPC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4GTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;;;;kBAOjBC,WAAWA;;;;;;;;;;;;;;;;;;;;;aAqBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqEpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBC3wCXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDmxCTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BTC,QAAQA;;;;WE/zCRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;;WAsBHC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmElBC,UAAUA;;WAELC,MAAMA;;;;;;;;;MASXC,YAAYA;;WAEPC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCXC,yBAAyBA;;;;;;;;;;WAUzBC,yBAAyBA;;;;WAIzBC,sCAAsCA;;;;MAI3CC,8BAA8BA;MAC9BC,8BAA8BA;MAC9BC,2CAA2CA;;;;;;aAM3CC,eAAeA;;WAIVC,cAAcA;;;;;WAKdC,YAAYA;;;;;;MAMjBC,aAAaA;WC9LRC,KAAKA;;;;;;WAcLC,SAASA;;;;;;;;;;;;;;;;;WA4ETC,YAAYA;;;;;;;;;;;;WAYZC,QAAQA;;;;;;;;;;;;;MAwBbC,iBAAiBA;;;;;;;;WAUZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAsGTC,YAAYA;;;;;;;;;;;;;MAajBC,kBAAkBA;;WAEbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;MA0CbC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCvWXC,WAAWA;;;;;;;;;;;iBAcXC,QAAQA;;;;;iBAaRC,UAAUA;;;;;;iBASVC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;;;;;;;aApI6CC,QAAQA;aAMVC,YAAYA;cCX9DC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCiEJC,QAAQA;;;;iBCqCFC,UAAUA;;;;;;iBAkBVC,WAAWA;;;;;iBAgFjBC,oBAAoBA;;;;;;;;;iBCzLpBC,gBAAgBA;;;;;;;iBCgIVC,SAASA;;;;;;;cC/IlBC,OAAOA;;;;;cAKPC,GAAGA;;;;;cAKHC,QAAQA;;;;;cAKRC,OAAOA;;;;;;;;;;;;;;;;;;;;;;iBCWJC,WAAWA;;;;;;;;;;;;;;;;;;;;;iBAyCXC,OAAOA;;;;;;;iBCwwDDC,WAAWA;;;;;;;;;iBA5RjBC,aAAaA;;;;;;;;;;;;iBAiBbC,cAAcA;;;;;;;;;;iBAedC,UAAUA;;;;;iBASVC,qBAAqBA;;;;;;;;iBA2BrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;iBAsCJC,UAAUA;;;;iBAmBVC,aAAaA;;;;;;;;;;;;iBAqBPC,WAAWA;;;;;;;;;;;;;;;;;;iBAoCjBC,WAAWA;;;;;iBA2BXC,SAASA;;;;;iBAuCTC,YAAYA;MV9oDhB3D,YAAYA;;;;;;;;;YWvJb4D,IAAIA;;;;;;;YAOJC,MAAMA;;;;;;;;;;;;;;;iBAeDC,YAAYA;;;;;;;;;;;;;;;;iBCRZC,IAAIA;;;;iBCXPC,SAASA;;;;;;;;;;;;;;cAwBTC,IAAIA;;;;;;;;cAeJC,UAAUA;;;;;;cAaVC,OAAOA"
157
+ "mappings": "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"
156
158
  }