fix: ensure $host rune correctly compiles in variable declarations (#13127)

Fixes #13121
pull/13129/head
Dominic Gannaway 1 year ago committed by GitHub
parent 71c1227513
commit 2d37826ee1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: ensure $host rune correctly compiles in variable declarations

@ -28,7 +28,8 @@ export function VariableDeclaration(node, context) {
rune === '$effect.tracking' ||
rune === '$effect.root' ||
rune === '$inspect' ||
rune === '$state.snapshot'
rune === '$state.snapshot' ||
rune === '$host'
) {
if (init != null && is_hoisted_function(init)) {
context.state.hoisted.push(

@ -16,11 +16,13 @@ export default test({
el.shadowRoot.querySelectorAll('button')[0].click();
el.shadowRoot.querySelectorAll('button')[1].click();
assert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome']);
el.shadowRoot.querySelectorAll('button')[2].click();
assert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome', 'greeting', 'bonjour']);
el.removeEventListener('greeting', handle_evt);
el.shadowRoot.querySelectorAll('button')[0].click();
el.shadowRoot.querySelectorAll('button')[1].click();
assert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome']);
el.shadowRoot.querySelectorAll('button')[2].click();
assert.deepEqual(events, ['greeting', 'hello', 'greeting', 'welcome', 'greeting', 'bonjour']);
}
});

@ -8,7 +8,12 @@
function welcome() {
$host().dispatchEvent(new CustomEvent('greeting', { detail: 'welcome' }))
}
function bonjour() {
const element = $host();
element.dispatchEvent(new CustomEvent('greeting', { detail: 'bonjour' }))
}
</script>
<button onclick={() => greet('hello')}>say hello</button>
<button onclick={welcome}>say welcome</button>
<button onclick={bonjour}>say bonjour</button>

Loading…
Cancel
Save