svelte 5.45.10 → 5.46.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
@@ -2,7 +2,7 @@
2
2
  "name": "svelte",
3
3
  "description": "Cybernetically enhanced web apps",
4
4
  "license": "MIT",
5
- "version": "5.45.10",
5
+ "version": "5.46.0",
6
6
  "type": "module",
7
7
  "types": "./types/index.d.ts",
8
8
  "engines": {
@@ -0,0 +1,41 @@
1
+ import { BROWSER } from 'esm-env';
2
+
3
+ let text_encoder;
4
+ // TODO - remove this and use global `crypto` when we drop Node 18
5
+ let crypto;
6
+
7
+ /** @param {string} data */
8
+ export async function sha256(data) {
9
+ text_encoder ??= new TextEncoder();
10
+
11
+ // @ts-expect-error
12
+ crypto ??= globalThis.crypto?.subtle?.digest
13
+ ? globalThis.crypto
14
+ : // @ts-ignore - we don't install node types in the prod build
15
+ (await import('node:crypto')).webcrypto;
16
+
17
+ const hash_buffer = await crypto.subtle.digest('SHA-256', text_encoder.encode(data));
18
+
19
+ return base64_encode(hash_buffer);
20
+ }
21
+
22
+ /**
23
+ * @param {Uint8Array} bytes
24
+ * @returns {string}
25
+ */
26
+ export function base64_encode(bytes) {
27
+ // Using `Buffer` is faster than iterating
28
+ // @ts-ignore
29
+ if (!BROWSER && globalThis.Buffer) {
30
+ // @ts-ignore
31
+ return globalThis.Buffer.from(bytes).toString('base64');
32
+ }
33
+
34
+ let binary = '';
35
+
36
+ for (let i = 0; i < bytes.length; i++) {
37
+ binary += String.fromCharCode(bytes[i]);
38
+ }
39
+
40
+ return btoa(binary);
41
+ }
@@ -80,6 +80,18 @@ ${stack}\nhttps://svelte.dev/e/hydratable_serialization_failed`);
80
80
  throw error;
81
81
  }
82
82
 
83
+ /**
84
+ * `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously.
85
+ * @returns {never}
86
+ */
87
+ export function invalid_csp() {
88
+ const error = new Error(`invalid_csp\n\`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously.\nhttps://svelte.dev/e/invalid_csp`);
89
+
90
+ error.name = 'Svelte error';
91
+
92
+ throw error;
93
+ }
94
+
83
95
  /**
84
96
  * `%name%(...)` is not available on the server
85
97
  * @param {string} name
@@ -1,7 +1,6 @@
1
1
  /** @import { ComponentType, SvelteComponent, Component } from 'svelte' */
2
- /** @import { RenderOutput } from '#server' */
2
+ /** @import { Csp, RenderOutput } from '#server' */
3
3
  /** @import { Store } from '#shared' */
4
- /** @import { AccumulatedContent } from './renderer.js' */
5
4
  export { FILENAME, HMR } from '../../constants.js';
6
5
  import { attr, clsx, to_class, to_style } from '../shared/attributes.js';
7
6
  import { is_promise, noop } from '../shared/utils.js';
@@ -18,6 +17,7 @@ import { EMPTY_COMMENT, BLOCK_CLOSE, BLOCK_OPEN, BLOCK_OPEN_ELSE } from './hydra
18
17
  import { validate_store } from '../shared/validate.js';
19
18
  import { is_boolean_attribute, is_raw_text_element, is_void } from '../../utils.js';
20
19
  import { Renderer } from './renderer.js';
20
+ import * as e from './errors.js';
21
21
 
22
22
  // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
23
23
  // https://infra.spec.whatwg.org/#noncharacter
@@ -56,10 +56,13 @@ export function element(renderer, tag, attributes_fn = noop, children_fn = noop)
56
56
  * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.
57
57
  * @template {Record<string, any>} Props
58
58
  * @param {Component<Props> | ComponentType<SvelteComponent<Props>>} component
59
- * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} [options]
59
+ * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} [options]
60
60
  * @returns {RenderOutput}
61
61
  */
62
62
  export function render(component, options = {}) {
63
+ if (options.csp?.hash && options.csp.nonce) {
64
+ e.invalid_csp();
65
+ }
63
66
  return Renderer.render(/** @type {Component<Props>} */ (component), options);
64
67
  }
65
68
 
@@ -1,5 +1,5 @@
1
1
  /** @import { Component } from 'svelte' */
2
- /** @import { HydratableContext, RenderOutput, SSRContext, SyncRenderOutput } from './types.js' */
2
+ /** @import { Csp, HydratableContext, RenderOutput, SSRContext, SyncRenderOutput, Sha256Source } from './types.js' */
3
3
  /** @import { MaybePromise } from '#shared' */
4
4
  import { async_mode_flag } from '../flags/index.js';
5
5
  import { abort } from './abort-signal.js';
@@ -9,7 +9,7 @@ import * as w from './warnings.js';
9
9
  import { BLOCK_CLOSE, BLOCK_OPEN } from './hydration.js';
10
10
  import { attributes } from './index.js';
11
11
  import { get_render_context, with_render_context, init_render_context } from './render-context.js';
12
- import { DEV } from 'esm-env';
12
+ import { sha256 } from './crypto.js';
13
13
 
14
14
  /** @typedef {'head' | 'body'} RendererType */
15
15
  /** @typedef {{ [key in RendererType]: string }} AccumulatedContent */
@@ -376,13 +376,13 @@ export class Renderer {
376
376
  * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.
377
377
  * @template {Record<string, any>} Props
378
378
  * @param {Component<Props>} component
379
- * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} [options]
379
+ * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} [options]
380
380
  * @returns {RenderOutput}
381
381
  */
382
382
  static render(component, options = {}) {
383
383
  /** @type {AccumulatedContent | undefined} */
384
384
  let sync;
385
- /** @type {Promise<AccumulatedContent> | undefined} */
385
+ /** @type {Promise<AccumulatedContent & { hashes: { script: Sha256Source[] } }> | undefined} */
386
386
  let async;
387
387
 
388
388
  const result = /** @type {RenderOutput} */ ({});
@@ -404,6 +404,11 @@ export class Renderer {
404
404
  return (sync ??= Renderer.#render(component, options)).body;
405
405
  }
406
406
  },
407
+ hashes: {
408
+ value: {
409
+ script: ''
410
+ }
411
+ },
407
412
  then: {
408
413
  value:
409
414
  /**
@@ -420,7 +425,8 @@ export class Renderer {
420
425
  const user_result = onfulfilled({
421
426
  head: result.head,
422
427
  body: result.body,
423
- html: result.body
428
+ html: result.body,
429
+ hashes: { script: [] }
424
430
  });
425
431
  return Promise.resolve(user_result);
426
432
  }
@@ -514,8 +520,8 @@ export class Renderer {
514
520
  *
515
521
  * @template {Record<string, any>} Props
516
522
  * @param {Component<Props>} component
517
- * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} options
518
- * @returns {Promise<AccumulatedContent>}
523
+ * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} options
524
+ * @returns {Promise<AccumulatedContent & { hashes: { script: Sha256Source[] } }>}
519
525
  */
520
526
  static async #render_async(component, options) {
521
527
  const previous_context = ssr_context;
@@ -585,19 +591,19 @@ export class Renderer {
585
591
  await comparison;
586
592
  }
587
593
 
588
- return await Renderer.#hydratable_block(ctx);
594
+ return await this.#hydratable_block(ctx);
589
595
  }
590
596
 
591
597
  /**
592
598
  * @template {Record<string, any>} Props
593
599
  * @param {'sync' | 'async'} mode
594
600
  * @param {import('svelte').Component<Props>} component
595
- * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} options
601
+ * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} options
596
602
  * @returns {Renderer}
597
603
  */
598
604
  static #open_render(mode, component, options) {
599
605
  const renderer = new Renderer(
600
- new SSRState(mode, options.idPrefix ? options.idPrefix + '-' : '')
606
+ new SSRState(mode, options.idPrefix ? options.idPrefix + '-' : '', options.csp)
601
607
  );
602
608
 
603
609
  renderer.push(BLOCK_OPEN);
@@ -623,6 +629,7 @@ export class Renderer {
623
629
  /**
624
630
  * @param {AccumulatedContent} content
625
631
  * @param {Renderer} renderer
632
+ * @returns {AccumulatedContent & { hashes: { script: Sha256Source[] } }}
626
633
  */
627
634
  static #close_render(content, renderer) {
628
635
  for (const cleanup of renderer.#collect_on_destroy()) {
@@ -638,14 +645,17 @@ export class Renderer {
638
645
 
639
646
  return {
640
647
  head,
641
- body
648
+ body,
649
+ hashes: {
650
+ script: renderer.global.csp.script_hashes
651
+ }
642
652
  };
643
653
  }
644
654
 
645
655
  /**
646
656
  * @param {HydratableContext} ctx
647
657
  */
648
- static async #hydratable_block(ctx) {
658
+ async #hydratable_block(ctx) {
649
659
  if (ctx.lookup.size === 0) {
650
660
  return null;
651
661
  }
@@ -669,9 +679,7 @@ export class Renderer {
669
679
  ${prelude}`;
670
680
  }
671
681
 
672
- // TODO csp -- have discussed but not implemented
673
- return `
674
- <script>
682
+ const body = `
675
683
  {
676
684
  ${prelude}
677
685
 
@@ -681,11 +689,27 @@ export class Renderer {
681
689
  h.set(k, v);
682
690
  }
683
691
  }
684
- </script>`;
692
+ `;
693
+
694
+ let csp_attr = '';
695
+ if (this.global.csp.nonce) {
696
+ csp_attr = ` nonce="${this.global.csp.nonce}"`;
697
+ } else if (this.global.csp.hash) {
698
+ // note to future selves: this doesn't need to be optimized with a Map<body, hash>
699
+ // because the it's impossible for identical data to occur multiple times in a single render
700
+ // (this would require the same hydratable key:value pair to be serialized multiple times)
701
+ const hash = await sha256(body);
702
+ this.global.csp.script_hashes.push(`sha256-${hash}`);
703
+ }
704
+
705
+ return `\n\t\t<script${csp_attr}>${body}</script>`;
685
706
  }
686
707
  }
687
708
 
688
709
  export class SSRState {
710
+ /** @readonly @type {Csp & { script_hashes: Sha256Source[] }} */
711
+ csp;
712
+
689
713
  /** @readonly @type {'sync' | 'async'} */
690
714
  mode;
691
715
 
@@ -700,10 +724,12 @@ export class SSRState {
700
724
 
701
725
  /**
702
726
  * @param {'sync' | 'async'} mode
703
- * @param {string} [id_prefix]
727
+ * @param {string} id_prefix
728
+ * @param {Csp} csp
704
729
  */
705
- constructor(mode, id_prefix = '') {
730
+ constructor(mode, id_prefix = '', csp = { hash: false }) {
706
731
  this.mode = mode;
732
+ this.csp = { ...csp, script_hashes: [] };
707
733
 
708
734
  let uid = 1;
709
735
  this.uid = () => `${id_prefix}s${uid++}`;
@@ -1,14 +1,14 @@
1
1
  /** @import { SvelteComponent } from '../index.js' */
2
+ /** @import { Csp } from '#server' */
2
3
  import { asClassComponent as as_class_component, createClassComponent } from './legacy-client.js';
3
4
  import { render } from '../internal/server/index.js';
4
5
  import { async_mode_flag } from '../internal/flags/index.js';
5
- import * as w from '../internal/server/warnings.js';
6
6
 
7
7
  // By having this as a separate entry point for server environments, we save the client bundle from having to include the server runtime
8
8
 
9
9
  export { createClassComponent };
10
10
 
11
- /** @typedef {{ head: string, html: string, css: { code: string, map: null }}} LegacyRenderResult */
11
+ /** @typedef {{ head: string, html: string, css: { code: string, map: null }; hashes?: { script: `sha256-${string}`[] } }} LegacyRenderResult */
12
12
 
13
13
  /**
14
14
  * Takes a Svelte 5 component and returns a Svelte 4 compatible component constructor.
@@ -25,10 +25,10 @@ export { createClassComponent };
25
25
  */
26
26
  export function asClassComponent(component) {
27
27
  const component_constructor = as_class_component(component);
28
- /** @type {(props?: {}, opts?: { $$slots?: {}; context?: Map<any, any>; }) => LegacyRenderResult & PromiseLike<LegacyRenderResult> } */
29
- const _render = (props, { context } = {}) => {
28
+ /** @type {(props?: {}, opts?: { $$slots?: {}; context?: Map<any, any>; csp?: Csp }) => LegacyRenderResult & PromiseLike<LegacyRenderResult> } */
29
+ const _render = (props, { context, csp } = {}) => {
30
30
  // @ts-expect-error the typings are off, but this will work if the component is compiled in SSR mode
31
- const result = render(component, { props, context });
31
+ const result = render(component, { props, context, csp });
32
32
 
33
33
  const munged = Object.defineProperties(
34
34
  /** @type {LegacyRenderResult & PromiseLike<LegacyRenderResult>} */ ({}),
@@ -65,7 +65,8 @@ export function asClassComponent(component) {
65
65
  return onfulfilled({
66
66
  css: munged.css,
67
67
  head: result.head,
68
- html: result.body
68
+ html: result.body,
69
+ hashes: result.hashes
69
70
  });
70
71
  }, onrejected);
71
72
  }
package/src/version.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * The current version, as set in package.json.
5
5
  * @type {string}
6
6
  */
7
- export const VERSION = '5.45.10';
7
+ export const VERSION = '5.46.0';
8
8
  export const PUBLIC_VERSION = '5';
package/types/index.d.ts CHANGED
@@ -2553,6 +2553,7 @@ declare module 'svelte/server' {
2553
2553
  props?: Omit<Props, '$$slots' | '$$events'>;
2554
2554
  context?: Map<any, any>;
2555
2555
  idPrefix?: string;
2556
+ csp?: Csp;
2556
2557
  }
2557
2558
  ]
2558
2559
  : [
@@ -2561,9 +2562,14 @@ declare module 'svelte/server' {
2561
2562
  props: Omit<Props, '$$slots' | '$$events'>;
2562
2563
  context?: Map<any, any>;
2563
2564
  idPrefix?: string;
2565
+ csp?: Csp;
2564
2566
  }
2565
2567
  ]
2566
2568
  ): RenderOutput;
2569
+ type Csp = { nonce?: string; hash?: boolean };
2570
+
2571
+ type Sha256Source = `sha256-${string}`;
2572
+
2567
2573
  interface SyncRenderOutput {
2568
2574
  /** HTML that goes into the `<head>` */
2569
2575
  head: string;
@@ -2571,6 +2577,9 @@ declare module 'svelte/server' {
2571
2577
  html: string;
2572
2578
  /** HTML that goes somewhere into the `<body>` */
2573
2579
  body: string;
2580
+ hashes: {
2581
+ script: Sha256Source[];
2582
+ };
2574
2583
  }
2575
2584
 
2576
2585
  type RenderOutput = SyncRenderOutput & PromiseLike<SyncRenderOutput>;
@@ -143,6 +143,8 @@
143
143
  "online",
144
144
  "devicePixelRatio",
145
145
  "render",
146
+ "Csp",
147
+ "Sha256Source",
146
148
  "SyncRenderOutput",
147
149
  "RenderOutput",
148
150
  "StartStopNotifier",
@@ -272,6 +274,6 @@
272
274
  null,
273
275
  null
274
276
  ],
275
- "mappings": "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",
277
+ "mappings": "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",
276
278
  "ignoreList": []
277
279
  }