Skip to content

Commit dec37ea

Browse files
axel7083dummdidumm
andauthored
fix(svelte2tsx): support for runes={false} in svelte:options (#2847)
Description The <svelte:options runes/> were not checking for the value, so it was always true. When using <svelte:options runes={false}/> the props exported were Record<string, never> which is incorrect. Related issues Fixes #2843 --------- Signed-off-by: axel7083 <42176370+axel7083@users.noreply.github.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
1 parent f799839 commit dec37ea

File tree

5 files changed

+84
-1
lines changed

5 files changed

+84
-1
lines changed

.changeset/green-news-find.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'svelte2tsx': patch
3+
'svelte-check': patch
4+
---
5+
6+
fix: properly handle `runes={false}` in `<svelte:options>`

packages/svelte2tsx/src/htmlxtojsx_v2/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,13 @@ export function convertHtmlxToJsx(
123123
}
124124
break;
125125
case 'runes':
126-
isRunes = true;
126+
if (Array.isArray(optionValue)) {
127+
if (optionValue[0].type === 'MustacheTag') {
128+
isRunes = optionValue[0].expression.value;
129+
}
130+
} else {
131+
isRunes = true;
132+
}
127133
break;
128134
}
129135
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
///<reference types="svelte" />
2+
;function $$render() {
3+
4+
let name1: string = "world"/*Ωignore_startΩ*/;name1 = __sveltets_2_any(name1);/*Ωignore_endΩ*/
5+
let name2: string/*Ωignore_startΩ*/;name2 = __sveltets_2_any(name2);/*Ωignore_endΩ*/;
6+
let name3: string = ''/*Ωignore_startΩ*/;name3 = __sveltets_2_any(name3);/*Ωignore_endΩ*/;let name4: string/*Ωignore_startΩ*/;name4 = __sveltets_2_any(name4);/*Ωignore_endΩ*/;
7+
8+
let rename1: string = ''/*Ωignore_startΩ*/;rename1 = __sveltets_2_any(rename1);/*Ωignore_endΩ*/;
9+
let rename2: string/*Ωignore_startΩ*/;rename2 = __sveltets_2_any(rename2);/*Ωignore_endΩ*/;
10+
11+
class Foo {}
12+
function bar() {}
13+
const baz: string = '';
14+
15+
class RenameFoo {}
16+
function renamebar() {}
17+
const renamebaz: string = '';
18+
19+
20+
;
21+
async () => { { svelteHTML.createElement("svelte:options", { "runes":false,});}
22+
};
23+
return { props: {name1: name1 , name2: name2 , name3: name3 , name4: name4 , renamed1: rename1 , renamed2: rename2 , Foo: Foo , bar: bar , baz: baz , RenamedFoo: RenameFoo , renamedbar: renamebar , renamedbaz: renamebaz} as {name1?: string, name2: string, name3?: string, name4: string, renamed1?: string, renamed2: string, Foo?: typeof Foo, bar?: typeof bar, baz?: string, RenamedFoo?: typeof RenameFoo, renamedbar?: typeof renamebar, renamedbaz?: string}, exports: {} as any as { Foo: typeof Foo,bar: typeof bar,baz: string,RenamedFoo: typeof RenameFoo,renamedbar: typeof renamebar,renamedbaz: string }, bindings: "", slots: {}, events: {} }}
24+
const Input__SvelteComponent_ = __sveltets_2_isomorphic_component(__sveltets_2_with_any_event($$render()));
25+
/*Ωignore_startΩ*/type Input__SvelteComponent_ = InstanceType<typeof Input__SvelteComponent_>;
26+
/*Ωignore_endΩ*/export default Input__SvelteComponent_;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
///<reference types="svelte" />
2+
;function $$render() {
3+
4+
let name1: string = "world"/*Ωignore_startΩ*/;name1 = __sveltets_2_any(name1);/*Ωignore_endΩ*/
5+
let name2: string/*Ωignore_startΩ*/;name2 = __sveltets_2_any(name2);/*Ωignore_endΩ*/;
6+
let name3: string = ''/*Ωignore_startΩ*/;name3 = __sveltets_2_any(name3);/*Ωignore_endΩ*/;let name4: string/*Ωignore_startΩ*/;name4 = __sveltets_2_any(name4);/*Ωignore_endΩ*/;
7+
8+
let rename1: string = ''/*Ωignore_startΩ*/;rename1 = __sveltets_2_any(rename1);/*Ωignore_endΩ*/;
9+
let rename2: string/*Ωignore_startΩ*/;rename2 = __sveltets_2_any(rename2);/*Ωignore_endΩ*/;
10+
11+
class Foo {}
12+
function bar() {}
13+
const baz: string = '';
14+
15+
class RenameFoo {}
16+
function renamebar() {}
17+
const renamebaz: string = '';
18+
19+
20+
;
21+
async () => { { svelteHTML.createElement("svelte:options", { "runes":false,});}
22+
};
23+
return { props: {name1: name1 , name2: name2 , name3: name3 , name4: name4 , renamed1: rename1 , renamed2: rename2 , Foo: Foo , bar: bar , baz: baz , RenamedFoo: RenameFoo , renamedbar: renamebar , renamedbaz: renamebaz} as {name1?: string, name2: string, name3?: string, name4: string, renamed1?: string, renamed2: string, Foo?: typeof Foo, bar?: typeof bar, baz?: string, RenamedFoo?: typeof RenameFoo, renamedbar?: typeof renamebar, renamedbaz?: string}, slots: {}, events: {} }}
24+
25+
export default class Input__SvelteComponent_ extends __sveltets_2_createSvelte2TsxComponent(__sveltets_2_with_any_event($$render())) {
26+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<svelte:options runes={false} />
2+
<script>
3+
let name1: string = "world"
4+
let name2: string;
5+
let name3: string = '', name4: string;
6+
7+
let rename1: string = '';
8+
let rename2: string;
9+
10+
class Foo {}
11+
function bar() {}
12+
const baz: string = '';
13+
14+
class RenameFoo {}
15+
function renamebar() {}
16+
const renamebaz: string = '';
17+
18+
export { name1, name2, name3, name4, rename1 as renamed1, rename2 as renamed2, Foo, bar, baz, RenameFoo as RenamedFoo, renamebar as renamedbar, renamebaz as renamedbaz };
19+
</script>

0 commit comments

Comments
 (0)