Skip to content

Commit 07ffe29

Browse files
committed
feat: ensure render tag is passed a snippet function
1 parent 3f691b6 commit 07ffe29

File tree

5 files changed

+14
-6
lines changed

5 files changed

+14
-6
lines changed

packages/svelte2tsx/src/htmlxtojsx_v2/nodes/RenderTag.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,20 @@ import { BaseNode } from '../../interfaces';
66
* `{@render foo(x)}` --> `;foo(x);`
77
*/
88
export function handleRenderTag(str: MagicString, renderTag: BaseNode): void {
9-
str.overwrite(renderTag.start, renderTag.expression.start, ';', { contentOnly: true });
9+
str.overwrite(renderTag.start, renderTag.expression.start, ';__sveltets_2_ensureSnippet(', {
10+
contentOnly: true
11+
});
1012
if (renderTag.argument) {
1113
str.overwrite(
1214
withTrailingPropertyAccess(str.original, renderTag.argument.end),
1315
renderTag.end,
14-
');'
16+
'));'
1517
);
1618
} else {
1719
str.overwrite(
1820
withTrailingPropertyAccess(str.original, renderTag.expression.end),
1921
renderTag.end,
20-
'();'
22+
'());'
2123
);
2224
}
2325
}

packages/svelte2tsx/svelte-shims-v4.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ declare function __sveltets_2_nonNullable<T>(type: T): NonNullable<T>;
145145

146146
declare function __sveltets_2_cssProp(prop: Record<string, any>): {};
147147

148+
// @ts-ignore Svelte v3/v4 don't have this
149+
declare function __sveltets_2_ensureSnippet(val: ReturnType<import('svelte').Snippet>): any;
150+
148151
/** @internal PRIVATE API, DO NOT USE */
149152
type __sveltets_2_SvelteAnimationReturnType = {
150153
delay?: number,

packages/svelte2tsx/svelte-shims.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ declare function __sveltets_2_nonNullable<T>(type: T): NonNullable<T>;
224224

225225
declare function __sveltets_2_cssProp(prop: Record<string, any>): {};
226226

227+
// @ts-ignore Svelte v3/v4 don't have this
228+
declare function __sveltets_2_ensureSnippet(val: ReturnType<import('svelte').Snippet>): any;
229+
227230
/** @internal PRIVATE API, DO NOT USE */
228231
type __sveltets_2_SvelteAnimationReturnType = {
229232
delay?: number,

packages/svelte2tsx/test/htmlx2jsx/samples/snippet.skip/expectedv2.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
{ svelteHTML.createElement("div", {}); x; }
33
return __sveltets_2_any(0)}
44

5-
;foo(1);
6-
;foo();
5+
;__sveltets_2_ensureSnippet(foo(1));
6+
;__sveltets_2_ensureSnippet(foo());
77

88
{ const $$_tnenopmoC0C = __sveltets_2_ensureComponent(Component); new $$_tnenopmoC0C({ target: __sveltets_2_any(), props: {bar:(x) => {
99
{ svelteHTML.createElement("div", {}); x; }

packages/svelte2tsx/test/htmlx2jsx/samples/ts-in-template.skip/expectedv2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ item as string;
1818

1919
var foo/*Ωignore_startΩ*/: import('svelte').Snippet<string>/*Ωignore_endΩ*/ = (bar: string) => { return __sveltets_2_any(0)}
2020

21-
;foo(bar as string);
21+
;__sveltets_2_ensureSnippet(foo(bar as string));
2222

2323
{ svelteHTML.createElement("button", { "onclick":(e: Event) => {e as any},}); }
2424
{ const $$_tnenopmoC0C = __sveltets_2_ensureComponent(Component); new $$_tnenopmoC0C({ target: __sveltets_2_any(), props: { "attr":attr as boolean,}});}

0 commit comments

Comments
 (0)