Skip to content

Commit 221ee2e

Browse files
committed
fix: handle runes looking like stores
1 parent 64d7b77 commit 221ee2e

File tree

5 files changed

+59
-2
lines changed

5 files changed

+59
-2
lines changed

packages/svelte2tsx/src/svelte2tsx/processInstanceScriptContent.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,9 @@ export function processInstanceScriptContent(
119119
}
120120
}
121121
} else {
122+
const text = ident.text;
122123
//track potential store usage to be resolved
123-
if (ident.text.startsWith('$')) {
124+
if (text.startsWith('$')) {
124125
if (
125126
(!ts.isPropertyAccessExpression(parent) || parent.expression == ident) &&
126127
(!ts.isPropertyAssignment(parent) || parent.initializer == ident) &&
@@ -130,7 +131,15 @@ export function processInstanceScriptContent(
130131
!ts.isTypeAliasDeclaration(parent) &&
131132
!ts.isInterfaceDeclaration(parent)
132133
) {
133-
pendingStoreResolutions.push({ node: ident, parent, scope });
134+
// Handle the const { ...props } = $props() case
135+
const is_rune =
136+
(text === '$props' || text === '$derived' || text === '$state') &&
137+
ts.isCallExpression(parent) &&
138+
ts.isVariableDeclaration(parent.parent) &&
139+
parent.parent.name.getText().includes(text.slice(1));
140+
if (!is_rune) {
141+
pendingStoreResolutions.push({ node: ident, parent, scope });
142+
}
134143
}
135144
}
136145
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
///<reference types="svelte" />
2+
;function render() {
3+
4+
let { props } = $props();
5+
let state = $state(0);
6+
let derived = $derived(state * 2);
7+
;
8+
async () => {
9+
10+
state; derived;};
11+
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}
12+
13+
export default class Input__SvelteComponent_ extends __sveltets_2_createSvelte2TsxComponent(__sveltets_2_partial(__sveltets_2_with_any_event(render()))) {
14+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
let { props } = $props();
3+
let state = $state(0);
4+
let derived = $derived(state * 2);
5+
</script>
6+
7+
{state} {derived}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
///<reference types="svelte" />
2+
;function render() {
3+
4+
const props = null/*Ωignore_startΩ*/;let $props = __sveltets_2_store_get(props);/*Ωignore_endΩ*/;
5+
$props;
6+
const state = null/*Ωignore_startΩ*/;let $state = __sveltets_2_store_get(state);/*Ωignore_endΩ*/;
7+
$state;
8+
const derived = null/*Ωignore_startΩ*/;let $derived = __sveltets_2_store_get(derived);/*Ωignore_endΩ*/;
9+
$derived;
10+
;
11+
async () => {
12+
13+
state; derived;};
14+
return { props: /** @type {Record<string, never>} */ ({}), slots: {}, events: {} }}
15+
16+
export default class Input__SvelteComponent_ extends __sveltets_2_createSvelte2TsxComponent(__sveltets_2_partial(__sveltets_2_with_any_event(render()))) {
17+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
const props = null;
3+
$props;
4+
const state = null;
5+
$state;
6+
const derived = null;
7+
$derived;
8+
</script>
9+
10+
{state} {derived}

0 commit comments

Comments
 (0)