svelte 5.45.10 → 5.46.1
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/compiler/phases/3-transform/client/transform-client.js +2 -8
- package/src/compiler/phases/3-transform/client/visitors/RegularElement.js +3 -1
- package/src/compiler/phases/3-transform/client/visitors/shared/utils.js +1 -1
- package/src/internal/client/dev/hmr.js +25 -14
- 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 +13 -4
- package/types/index.d.ts.map +3 -1
package/package.json
CHANGED
|
@@ -519,14 +519,9 @@ export function client_component(analysis, options) {
|
|
|
519
519
|
|
|
520
520
|
if (options.hmr) {
|
|
521
521
|
const id = b.id(analysis.name);
|
|
522
|
-
const HMR = b.id('$.HMR');
|
|
523
|
-
|
|
524
|
-
const existing = b.member(id, HMR, true);
|
|
525
|
-
const incoming = b.member(b.id('module.default'), HMR, true);
|
|
526
522
|
|
|
527
523
|
const accept_fn_body = [
|
|
528
|
-
b.stmt(b.
|
|
529
|
-
b.stmt(b.call('$.set', b.member(existing, 'source'), b.member(incoming, 'original')))
|
|
524
|
+
b.stmt(b.call(b.member(b.member(id, b.id('$.HMR'), true), 'update'), b.id('module.default')))
|
|
530
525
|
];
|
|
531
526
|
|
|
532
527
|
if (analysis.css.hash) {
|
|
@@ -535,8 +530,7 @@ export function client_component(analysis, options) {
|
|
|
535
530
|
}
|
|
536
531
|
|
|
537
532
|
const hmr = b.block([
|
|
538
|
-
b.stmt(b.assignment('=', id, b.call('$.hmr', id
|
|
539
|
-
|
|
533
|
+
b.stmt(b.assignment('=', id, b.call('$.hmr', id))),
|
|
540
534
|
b.stmt(b.call('import.meta.hot.accept', b.arrow([b.id('module')], b.block(accept_fn_body))))
|
|
541
535
|
]);
|
|
542
536
|
|
|
@@ -336,7 +336,9 @@ export function RegularElement(node, context) {
|
|
|
336
336
|
trimmed.every(
|
|
337
337
|
(node) =>
|
|
338
338
|
node.type === 'Text' ||
|
|
339
|
-
(!node.metadata.expression.has_state &&
|
|
339
|
+
(!node.metadata.expression.has_state &&
|
|
340
|
+
!node.metadata.expression.has_await &&
|
|
341
|
+
!node.metadata.expression.has_blockers())
|
|
340
342
|
) &&
|
|
341
343
|
trimmed.some((node) => node.type === 'ExpressionTag');
|
|
342
344
|
|
|
@@ -134,7 +134,7 @@ export function build_template_chunk(
|
|
|
134
134
|
|
|
135
135
|
const evaluated = state.scope.evaluate(value);
|
|
136
136
|
|
|
137
|
-
has_await ||= node.metadata.expression.has_await;
|
|
137
|
+
has_await ||= node.metadata.expression.has_await || node.metadata.expression.has_blockers();
|
|
138
138
|
has_state ||= has_await || (node.metadata.expression.has_state && !evaluated.is_known);
|
|
139
139
|
|
|
140
140
|
if (values.length === 1) {
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
/** @import {
|
|
1
|
+
/** @import { Effect, TemplateNode } from '#client' */
|
|
2
2
|
import { FILENAME, HMR } from '../../../constants.js';
|
|
3
3
|
import { EFFECT_TRANSPARENT } from '#client/constants';
|
|
4
4
|
import { hydrate_node, hydrating } from '../dom/hydration.js';
|
|
5
5
|
import { block, branch, destroy_effect } from '../reactivity/effects.js';
|
|
6
|
-
import { source } from '../reactivity/sources.js';
|
|
6
|
+
import { set, source } from '../reactivity/sources.js';
|
|
7
7
|
import { set_should_intro } from '../render.js';
|
|
8
8
|
import { get } from '../runtime.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* @template {(anchor: Comment, props: any) => any} Component
|
|
12
|
-
* @param {Component}
|
|
13
|
-
* @param {() => Source<Component>} get_source
|
|
12
|
+
* @param {Component} fn
|
|
14
13
|
*/
|
|
15
|
-
export function hmr(
|
|
14
|
+
export function hmr(fn) {
|
|
15
|
+
const current = source(fn);
|
|
16
|
+
|
|
16
17
|
/**
|
|
17
18
|
* @param {TemplateNode} anchor
|
|
18
19
|
* @param {any} props
|
|
19
20
|
*/
|
|
20
21
|
function wrapper(anchor, props) {
|
|
22
|
+
let component = {};
|
|
21
23
|
let instance = {};
|
|
22
24
|
|
|
23
25
|
/** @type {Effect} */
|
|
@@ -26,8 +28,9 @@ export function hmr(original, get_source) {
|
|
|
26
28
|
let ran = false;
|
|
27
29
|
|
|
28
30
|
block(() => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
if (component === (component = get(current))) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
31
34
|
|
|
32
35
|
if (effect) {
|
|
33
36
|
// @ts-ignore
|
|
@@ -62,16 +65,24 @@ export function hmr(original, get_source) {
|
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
// @ts-expect-error
|
|
65
|
-
wrapper[FILENAME] =
|
|
68
|
+
wrapper[FILENAME] = fn[FILENAME];
|
|
66
69
|
|
|
67
70
|
// @ts-ignore
|
|
68
71
|
wrapper[HMR] = {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
fn,
|
|
73
|
+
current,
|
|
74
|
+
update: (/** @type {any} */ incoming) => {
|
|
75
|
+
// This logic ensures that the first version of the component is the one
|
|
76
|
+
// whose update function and therefore block effect is preserved across updates.
|
|
77
|
+
// If we don't do this dance and instead just use `incoming` as the new component
|
|
78
|
+
// and then update, we'll create an ever-growing stack of block effects.
|
|
79
|
+
|
|
80
|
+
// Trigger the original block effect
|
|
81
|
+
set(wrapper[HMR].current, incoming[HMR].fn);
|
|
82
|
+
|
|
83
|
+
// Replace the incoming source with the original one
|
|
84
|
+
incoming[HMR].current = wrapper[HMR].current;
|
|
85
|
+
}
|
|
75
86
|
};
|
|
76
87
|
|
|
77
88
|
return wrapper;
|
|
@@ -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>;
|
|
@@ -2801,7 +2810,7 @@ declare module 'svelte/events' {
|
|
|
2801
2810
|
export function on<Type extends keyof WindowEventMap>(
|
|
2802
2811
|
window: Window,
|
|
2803
2812
|
type: Type,
|
|
2804
|
-
handler: (this: Window, event: WindowEventMap[Type]) => any,
|
|
2813
|
+
handler: (this: Window, event: WindowEventMap[Type] & { currentTarget: Window }) => any,
|
|
2805
2814
|
options?: AddEventListenerOptions | undefined
|
|
2806
2815
|
): () => void;
|
|
2807
2816
|
/**
|
|
@@ -2812,7 +2821,7 @@ declare module 'svelte/events' {
|
|
|
2812
2821
|
export function on<Type extends keyof DocumentEventMap>(
|
|
2813
2822
|
document: Document,
|
|
2814
2823
|
type: Type,
|
|
2815
|
-
handler: (this: Document, event: DocumentEventMap[Type]) => any,
|
|
2824
|
+
handler: (this: Document, event: DocumentEventMap[Type] & { currentTarget: Document }) => any,
|
|
2816
2825
|
options?: AddEventListenerOptions | undefined
|
|
2817
2826
|
): () => void;
|
|
2818
2827
|
/**
|
|
@@ -2823,7 +2832,7 @@ declare module 'svelte/events' {
|
|
|
2823
2832
|
export function on<Element extends HTMLElement, Type extends keyof HTMLElementEventMap>(
|
|
2824
2833
|
element: Element,
|
|
2825
2834
|
type: Type,
|
|
2826
|
-
handler: (this: Element, event: HTMLElementEventMap[Type]) => any,
|
|
2835
|
+
handler: (this: Element, event: HTMLElementEventMap[Type] & { currentTarget: Element }) => any,
|
|
2827
2836
|
options?: AddEventListenerOptions | undefined
|
|
2828
2837
|
): () => void;
|
|
2829
2838
|
/**
|
|
@@ -2834,7 +2843,7 @@ declare module 'svelte/events' {
|
|
|
2834
2843
|
export function on<Element extends MediaQueryList, Type extends keyof MediaQueryListEventMap>(
|
|
2835
2844
|
element: Element,
|
|
2836
2845
|
type: Type,
|
|
2837
|
-
handler: (this: Element, event: MediaQueryListEventMap[Type]) => any,
|
|
2846
|
+
handler: (this: Element, event: MediaQueryListEventMap[Type] & { currentTarget: Element }) => any,
|
|
2838
2847
|
options?: AddEventListenerOptions | undefined
|
|
2839
2848
|
): () => void;
|
|
2840
2849
|
/**
|
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": ";;;;;;;;;kBAUiBA,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkC/BC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAwEhBC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;kBAwBbC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoCbC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiCfC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA6BdC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;kBAuBRC,OAAOA;;;;;;;;;;;;;;;;kBAgBPC,eAAeA;;;;;;;;;;;;;;;;aAgBpBC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0CPC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCnSLC,cAAcA;;;;;;;;;;;;iBAsBdC,OAAOA;;;;;;;;iBAwBPC,SAASA;;;;;;;;;;;;;;;;;;;;;;iBA0CTC,qBAAqBA;;;;;;;;;;iBA2CrBC,YAAYA;;;;;;;;;;iBAuBZC,WAAWA;iBClNXC,UAAUA;;;;iBC4DVC,gBAAgBA;;;;;MCvEpBC,WAAWA;;;;;iBCijBPC,SAASA;;;;;;;;;;;;;;;;;;iBA6XTC,IAAIA;;;;;;;;iBC/1BJC,aAAaA;;;;;;;;iBAyBbC,UAAUA;;;;;;;;;;;iBAoBVC,UAAUA;;;;;;iBA2BVC,UAAUA;;;;;;;iBAaVC,cAAcA;;;;;;iBCnGdC,KAAKA;;;;;iBA2BLC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgNPC,OAAOA;;;;;;iBCsKDC,IAAIA;;;;;;iBAwBVC,OAAOA;;;;;;;;;;;;;;iBA2NPC,OAAOA;MCjsBXC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBCqBFC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BZC,MAAMA;;;;;;;;;;;;;;;;;;;;kBCtDNC,eAAeA;;;;;;;;kBAQfC,UAAUA;;;;;;;;;;iBCGXC,IAAIA;;;;;;;;;;;;;;;;kBCLHC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;iBCsBXC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WJHlBN,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA6BZC,MAAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBKlCPM,OAAOA;;;;;;iBA2CPC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsGbC,IAAIA;;;;kBCnKHC,SAASA;;;;;;;;;;;;;;;;;;;;;;;aAuBdC,kBAAkBA;;;;;;;;;;;;;;aAclBC,YAAYA;;;;;;;;;;;;;;;;;;;;;;kBAsBPC,iBAAiBA;;;;;;;;kBCjDjBC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsCbC,OAAOA;;kBAEPC,YAAYA;;MAEjBC,aAAaA;;;;;;;kBAWRC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmIdC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MC1KzBC,SAASA;;kBAEJC,GAAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoTUC,UAAUA;;;;;;;;;;;iBC9TxBC,KAAKA;;;;;;;cCbRC,OAAOA;;;;;;iBCqHJC,OAAOA;;;;;;;;;;;;;;;;WCzHNC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCCTC,OAAOA;;;;;;;;;iBCMHC,MAAMA;;iBAQNC,SAASA;;iBAUTC,MAAMA;;iBASNC,OAAOA;;iBASPC,SAASA;;iBAqBTC,WAAWA;;iBAQXC,QAAQA;;iBAQRC,SAASA;;iBASTC,MAAMA;;iBAQNC,OAAOA;;iBAQPC,UAAUA;;iBAQVC,OAAOA;;iBAQPC,QAAQA;;iBASRC,YAAYA;;iBAaZC,SAASA;;iBAQTC,UAAUA;;iBAQVC,SAASA;;iBAYTC,MAAMA;;iBAQNC,OAAOA;;iBAQPC,SAASA;;iBAWTC,MAAMA;;iBAQNC,OAAOA;;iBAQPC,UAAUA;;iBAQVC,OAAOA;;iBAQPC,QAAQA;;iBAQRC,UAAUA;;iBASVC,OAAOA;;iBAQPC,QAAQA;;iBAQRC,SAASA;;iBAQTC,MAAMA;;iBAUNC,OAAOA;;;;;;;;;;;;;iBC7PPC,oBAAoBA;;;;;;;;;iBAkBpBC,gBAAgBA;;;;;;iBA2IhBC,GAAGA;;;;;iBAuBHC,QAAQA;;;;;iBAqCRC,aAAaA;;;;aAxLkKC,mBAAmBA;;;;;;;;iBCrDlMC,OAAOA;;;;;iBAgBPC,IAAIA;;;;;iBAiBJC,eAAeA;;;;;iBAefC,IAAIA;;;;;iBAkBJC,wBAAwBA;;;;;iBAexBC,cAAcA;;;;;iBAedC,OAAOA;;;;;iBAcPC,UAAUA;;;;;;;;;;;kBClFbC,MAAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAANA,MAAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4CFC,OAAOA;;;;;MCjFZC,UAAUA;;;MAGVC,YAAYA;;;WAoBPC,QAAQA;;;;;;;;WCbRC,UAAUA;;;;;;WAMVC,gBAAgBA;;;;;;;;;;;;;;;;;;;MAmBrBC,OAAOA;;WAEFC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCTlBC,oBAAoBA;;;;;;iBCsCjBC,MAAMA;;;;;;iBCsBNC,OAAOA;;;;;;;;;;;;;;;;;cAyFVC,KAAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCzILC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCKVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCMTC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCXTC,SAASA;;;;OCnCTC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4BPC,qBAAqBA;;;;;;;;;;;;;;;;;;;;;;;cCErBC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCiBPC,gBAAgBA;OChDnBC,aAAaA;;;;;;;;;;;;;;;cCMbC,OAAOA;;;;;cASPC,OAAOA;;;;;cASPC,UAAUA;;;;;cASVC,WAAWA;;;;;cASXC,UAAUA;;;;;cASVC,WAAWA;;;;;cASXC,UAAUA;;;;;cAuBVC,SAASA;;;;;cAuBTC,MAAMA;;;;;;;cAmBNC,gBAAgBA;;;OD7HhBV,aAAaA;;;;;;;;;;;;;;;;iBEEVW,MAAMA
|
|
277
|
+
"mappings": "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",
|
|
276
278
|
"ignoreList": []
|
|
277
279
|
}
|