Skip to content

Commit b133c04

Browse files
committed
change signature
1 parent 1775b2c commit b133c04

File tree

5 files changed

+38
-35
lines changed

5 files changed

+38
-35
lines changed

packages/svelte/src/internal/client/dom/blocks/snippet.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
/** @import { Snippet } from 'svelte' */
12
/** @import { Effect, TemplateNode } from '#client' */
23
/** @import { Getters } from '#shared' */
3-
import { run } from '../../../shared/utils.js';
44
import { add_snippet_symbol } from '../../../shared/validate.js';
55
import { EFFECT_TRANSPARENT } from '../../constants.js';
66
import { branch, block, destroy_effect } from '../../reactivity/effects.js';
@@ -68,29 +68,31 @@ export function wrap_snippet(component, fn) {
6868
/**
6969
* Create a snippet programmatically
7070
* @template {unknown[]} Params
71-
* @param {{
72-
* render: (...params: Params) => string
73-
* update?: (element: Element, ...params: Getters<Params>) => void,
74-
* }} options
75-
* @returns {import('svelte').Snippet<Params>}
71+
* @param {(...params: Getters<Params>) => {
72+
* render: () => string
73+
* setup?: (element: Element) => void
74+
* }} fn
75+
* @returns {Snippet<Params>}
7676
*/
77-
export function createRawSnippet({ render, update }) {
77+
export function createRawSnippet(fn) {
7878
return add_snippet_symbol(
7979
(/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {
80+
var snippet = fn(...params);
81+
8082
/** @type {Element} */
8183
var element;
8284

8385
if (hydrating) {
8486
element = /** @type {Element} */ (hydrate_node);
8587
hydrate_next();
8688
} else {
87-
var html = render(.../** @type {Params} */ (params.map(run)));
89+
var html = snippet.render().trim();
8890
var fragment = create_fragment_from_html(html);
8991
element = /** @type {Element} */ (fragment.firstChild);
9092
anchor.before(element);
9193
}
9294

93-
update?.(element, ...params);
95+
snippet.setup?.(element);
9496
assign_nodes(element, element);
9597
}
9698
);

packages/svelte/src/internal/server/blocks/snippet.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ import { add_snippet_symbol } from '../../shared/validate.js';
66
/**
77
* Create a snippet programmatically
88
* @template {unknown[]} Params
9-
* @param {{
10-
* render: (...params: Params) => string
11-
* update?: (element: Element, ...params: Getters<Params>) => void,
12-
* }} options
9+
* @param {(...params: Getters<Params>) => {
10+
* render: () => string
11+
* setup?: (element: Element) => void
12+
* }} fn
1313
* @returns {Snippet<Params>}
1414
*/
15-
export function createRawSnippet({ render }) {
16-
const snippet_fn = (/** @type {Payload} */ payload, /** @type {Params} */ ...args) => {
17-
payload.out += render(...args);
18-
};
19-
add_snippet_symbol(snippet_fn);
20-
return /** @type {Snippet} */ (snippet_fn);
15+
export function createRawSnippet(fn) {
16+
return add_snippet_symbol((/** @type {Payload} */ payload, /** @type {Params} */ ...args) => {
17+
var getters = /** @type {Getters<Params>} */ (args.map((value) => () => value));
18+
payload.out += fn(...getters)
19+
.render()
20+
.trim();
21+
});
2122
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<script>
22
import { createRawSnippet } from 'svelte';
33
4-
const snippet = createRawSnippet({
5-
render() {
6-
return `<p>rendered</p>`;
7-
},
8-
update(p) {
4+
const snippet = createRawSnippet(() => ({
5+
render: () => `
6+
<p>rendered</p>
7+
`,
8+
setup(p) {
99
p.textContent = 'hydrated';
1010
}
11-
});
11+
}));
1212
</script>
1313

1414
{@render snippet()}

packages/svelte/tests/runtime-runes/samples/snippet-raw/main.svelte

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
44
let count = $state(0);
55
6-
const hello = createRawSnippet({
7-
render(count) {
8-
return `<p>clicks: ${count}</p>`;
9-
},
10-
update(p, count) {
6+
const hello = createRawSnippet((count) => ({
7+
render: () => `
8+
<p>clicks: ${count()}</p>
9+
`,
10+
setup(p) {
1111
$effect(() => {
1212
p.textContent = `clicks: ${count()}`
1313
});
1414
}
15-
});
15+
}));
1616
</script>
1717

1818
<button onclick={() => count += 1}>click</button>

packages/svelte/types/index.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,10 @@ declare module 'svelte' {
368368
/**
369369
* Create a snippet programmatically
370370
* */
371-
export function createRawSnippet<Params extends unknown[]>({ render, update }: {
372-
render: (...params: Params) => string;
373-
update?: (element: Element, ...params: Getters<Params>) => void;
374-
}): import("svelte").Snippet<Params>;
371+
export function createRawSnippet<Params extends unknown[]>(fn: (...params: Getters<Params>) => {
372+
render: () => string;
373+
setup?: (element: Element) => void;
374+
}): Snippet<Params>;
375375
/**
376376
* Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.
377377
* Transitions will play during the initial render unless the `intro` option is set to `false`.

0 commit comments

Comments
 (0)