From ab9be3749a4b542759ab37ff8f9259b08b6a726e Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Mon, 10 Aug 2020 16:03:38 +0800 Subject: [PATCH 1/2] fix reference for namespaced component --- .../wrappers/InlineComponent/index.ts | 3 ++- .../utils/string_to_member_expression.ts | 17 +++++++++++++++++ .../samples/component-namespace/Tooltip.svelte | 1 + .../samples/component-namespace/Widget.svelte | 5 +++++ .../samples/component-namespace/_config.js | 3 +++ .../samples/component-namespace/main.svelte | 8 ++++++++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/compiler/compile/utils/string_to_member_expression.ts create mode 100644 test/runtime/samples/component-namespace/Tooltip.svelte create mode 100644 test/runtime/samples/component-namespace/Widget.svelte create mode 100644 test/runtime/samples/component-namespace/_config.js create mode 100644 test/runtime/samples/component-namespace/main.svelte diff --git a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts index 814f365a848e..904cfa3329f3 100644 --- a/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts +++ b/src/compiler/compile/render_dom/wrappers/InlineComponent/index.ts @@ -17,6 +17,7 @@ import { Node, Identifier, ObjectExpression } from 'estree'; import EventHandler from '../Element/EventHandler'; import { extract_names } from 'periscopic'; import mark_each_block_bindings from '../shared/mark_each_block_bindings'; +import { string_to_member_expression } from '../../../utils/string_to_member_expression'; export default class InlineComponentWrapper extends Wrapper { var: Identifier; @@ -484,7 +485,7 @@ export default class InlineComponentWrapper extends Wrapper { } else { const expression = this.node.name === 'svelte:self' ? component.name - : this.renderer.reference(this.node.name); + : this.renderer.reference(string_to_member_expression(this.node.name)); block.chunks.init.push(b` ${(this.node.attributes.length > 0 || this.node.bindings.length > 0) && b` diff --git a/src/compiler/compile/utils/string_to_member_expression.ts b/src/compiler/compile/utils/string_to_member_expression.ts new file mode 100644 index 000000000000..553c1371bd37 --- /dev/null +++ b/src/compiler/compile/utils/string_to_member_expression.ts @@ -0,0 +1,17 @@ +import { MemberExpression, Identifier } from "estree"; + +export function string_to_member_expression(name: string) { + const parts = name.split("."); + let node: MemberExpression | Identifier = { + type: "Identifier", + name: parts[0], + }; + for (let i = 1; i < parts.length; i++) { + node = { + type: "MemberExpression", + object: node, + property: { type: "Identifier", name: parts[i] }, + } as MemberExpression; + } + return node; +} diff --git a/test/runtime/samples/component-namespace/Tooltip.svelte b/test/runtime/samples/component-namespace/Tooltip.svelte new file mode 100644 index 000000000000..9b44ef57a841 --- /dev/null +++ b/test/runtime/samples/component-namespace/Tooltip.svelte @@ -0,0 +1 @@ +

i am a widget

\ No newline at end of file diff --git a/test/runtime/samples/component-namespace/Widget.svelte b/test/runtime/samples/component-namespace/Widget.svelte new file mode 100644 index 000000000000..b6aa45c6a89b --- /dev/null +++ b/test/runtime/samples/component-namespace/Widget.svelte @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/test/runtime/samples/component-namespace/_config.js b/test/runtime/samples/component-namespace/_config.js new file mode 100644 index 000000000000..5b96ac8df009 --- /dev/null +++ b/test/runtime/samples/component-namespace/_config.js @@ -0,0 +1,3 @@ +export default { + html: '

i am a widget

' +}; diff --git a/test/runtime/samples/component-namespace/main.svelte b/test/runtime/samples/component-namespace/main.svelte new file mode 100644 index 000000000000..3f53b2b1c815 --- /dev/null +++ b/test/runtime/samples/component-namespace/main.svelte @@ -0,0 +1,8 @@ + + +{#each widgets as LazyWidget} + +{/each} \ No newline at end of file From 6cb3820740cbb2a826b689735216296c514ea0dd Mon Sep 17 00:00:00 2001 From: Conduitry Date: Wed, 12 Aug 2020 16:17:18 -0400 Subject: [PATCH 2/2] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd590c71aaf5..6eda8563c2b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * In SSR mode, do not automatically declare variables for reactive assignments to member expressions ([#5247](https://github.com/sveltejs/svelte/issues/5247)) +* Fix using ``s in child `{#await}`/`{#each}` contexts ([#5255](https://github.com/sveltejs/svelte/issues/5255)) ## 3.24.1