diff --git a/packages/svelte2tsx/src/svelte2tsx/nodes/event-handler.ts b/packages/svelte2tsx/src/svelte2tsx/nodes/event-handler.ts index 05b04e17e..628c44aa3 100644 --- a/packages/svelte2tsx/src/svelte2tsx/nodes/event-handler.ts +++ b/packages/svelte2tsx/src/svelte2tsx/nodes/event-handler.ts @@ -10,13 +10,15 @@ export class EventHandler { // pass-through/ bubble if (!node.expression) { if (parent.type === 'InlineComponent') { - this.handleEventHandlerBubble(parent, eventName); - } else { - this.bubbledEvents.set( - eventName, - getEventDefExpressionForNonCompoent(eventName, parent) - ); + if (parent.name !== 'svelte:self') { + this.handleEventHandlerBubble(parent, eventName); + } + return; } + this.bubbledEvents.set( + eventName, + getEventDefExpressionForNonComponent(eventName, parent) + ); } } @@ -58,7 +60,7 @@ export class EventHandler { } } -function getEventDefExpressionForNonCompoent(eventName: string, ele: Node) { +function getEventDefExpressionForNonComponent(eventName: string, ele: Node) { switch (ele.type) { case 'Element': return `__sveltets_1_mapElementEvent('${eventName}')`; diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expected.tsx b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expected.tsx new file mode 100644 index 000000000..6fba1e411 --- /dev/null +++ b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expected.tsx @@ -0,0 +1,23 @@ +/// +<>; +import { createEventDispatcher } from "svelte"; +function render() { + + + + let a = ['']; + const dispatch = createEventDispatcher<{ + foo: string + }>(); +; +() => (<> + +{__sveltets_1_each(a, (item) => <> + +)}); +return { props: {}, slots: {}, getters: {}, events: {...__sveltets_1_toEventTypings<{ + foo: string + }>()} }} + +export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) { +} \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expectedv2.ts b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expectedv2.ts new file mode 100644 index 000000000..d96b559e3 --- /dev/null +++ b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/expectedv2.ts @@ -0,0 +1,23 @@ +/// +; +import { createEventDispatcher } from "svelte"; +function render() { + + + + let a = ['']; + const dispatch = createEventDispatcher<{ + foo: string + }>(); +; +async () => { + + for(let item of __sveltets_2_ensureArray(a)){ + { const $$_svelteself0 = __sveltets_2_createComponentAny({ });$$_svelteself0.$on("foo", () => {}); } +}}; +return { props: {}, slots: {}, getters: {}, events: {...__sveltets_1_toEventTypings<{ + foo: string + }>()} }} + +export default class Input__SvelteComponent_ extends __sveltets_1_createSvelte2TsxComponent(__sveltets_1_partial(__sveltets_1_with_any_event(render()))) { +} \ No newline at end of file diff --git a/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/input.svelte b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/input.svelte new file mode 100644 index 000000000..92600c6ac --- /dev/null +++ b/packages/svelte2tsx/test/svelte2tsx/samples/svelte-self-forward-event/input.svelte @@ -0,0 +1,12 @@ + + +{#each a as item} + +{/each} \ No newline at end of file