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/compiler/index.js +1 -1
- package/package.json +1 -1
- package/src/internal/server/crypto.js +41 -0
- package/src/internal/server/errors.js +12 -0
- package/src/internal/server/index.js +6 -3
- package/src/internal/server/renderer.js +44 -18
- package/src/legacy/legacy-server.js +7 -6
- package/src/version.js +1 -1
- package/types/index.d.ts +9 -0
- package/types/index.d.ts.map +3 -1
package/package.json
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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}
|
|
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
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>;
|
package/types/index.d.ts.map
CHANGED
|
@@ -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
|
}
|