Skip to content

Commit ed72d15

Browse files
authored
quote slot name to avoid invalid syntax and number slot name (#491)
for example: <slot name="1" /> <slot name="ddd-d" /> #490
1 parent 4d81278 commit ed72d15

File tree

19 files changed

+32
-27
lines changed

19 files changed

+32
-27
lines changed

packages/svelte2tsx/src/htmlxtojsx/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import svgAttributes from './svgattributes';
66
import { getTypeForComponent } from './nodes/component-type';
77
import { handleAwait } from './nodes/await-block';
88
import { getSlotName } from '../utils/svelteAst';
9+
import { getSingleSlotDef } from '../nodes/slot';
910

1011
type ElementType = string;
1112
const oneWayBindingAttributes: Map<string, ElementType> = new Map(
@@ -318,7 +319,7 @@ export function convertHtmlxToJsx(
318319
str.appendLeft(afterTag, '{() => { let {');
319320
str.appendRight(
320321
afterTag,
321-
'} = __sveltets_instanceOf(' + componentName + ').$$slot_def.' + slotName + ';<>',
322+
`} = ${getSingleSlotDef(componentName, slotName)}`+ ';<>',
322323
);
323324

324325
const closeTagStart = htmlx.lastIndexOf('<', slotEl.end);

packages/svelte2tsx/src/nodes/slot.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,7 @@ export class SlotHandler {
116116
component: Node,
117117
slotName: string,
118118
) {
119-
const componentTypeStr = `__sveltets_instanceOf(${component.name})`;
120-
121-
return `${componentTypeStr}.$$slot_def.${slotName}.${letNode.name}`;
119+
return `${getSingleSlotDef(component.name, slotName)}.${letNode.name}`;
122120
}
123121

124122
resolveLet(letNode: BaseDirective, identifierDef: WithName, component: Node, slotName: string) {
@@ -259,3 +257,7 @@ export class SlotHandler {
259257
throw Error('Unknown attribute value type:' + attrVal.type);
260258
}
261259
}
260+
261+
export function getSingleSlotDef(componentName: string, slotName: string) {
262+
return `__sveltets_instanceOf(${componentName}).$$slot_def['${slotName}']`;
263+
}

packages/svelte2tsx/src/svelte2tsx.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ function createRenderFunction({
10061006
const attrsAsString = Array.from(attrs.entries())
10071007
.map(([exportName, expr]) => `${exportName}:${expr}`)
10081008
.join(', ');
1009-
return `${name}: {${attrsAsString}}`;
1009+
return `'${name}': {${attrsAsString}}`;
10101010
})
10111011
.join(', ') +
10121012
'}';
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<><Component >{() => { let {thing:{ a }} = __sveltets_instanceOf(Component).$$slot_def.default;<>
1+
<><Component >{() => { let {thing:{ a }} = __sveltets_instanceOf(Component).$$slot_def['default'];<>
22
<h1>Hello { a }</h1>
33
</>}}</Component></>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<><Component >{() => { let {name:n, thing} = __sveltets_instanceOf(Component).$$slot_def.default;<>
1+
<><Component >{() => { let {name:n, thing} = __sveltets_instanceOf(Component).$$slot_def['default'];<>
22
<h1>Hello {thing} {n}</h1>
3-
</>}}</Component></>
3+
</>}}</Component></>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
<><Component >{() => { let {var:new_var} = __sveltets_instanceOf(Component).$$slot_def.default;<>
1+
<><Component >{() => { let {var:new_var} = __sveltets_instanceOf(Component).$$slot_def['default'];<>
22
<h1>Hello</h1>
3-
<div >{() => { let {slotvar:newvar} = __sveltets_instanceOf(Component).$$slot_def.someslot;<>
3+
<div >{() => { let {slotvar:newvar} = __sveltets_instanceOf(Component).$$slot_def['someslot'];<>
44
<h2>Hi Slot</h2>
55
</>}}</div>
66
<p >
77
Test
88
</p>
9-
</>}}</Component></>
9+
</>}}</Component></>

packages/svelte2tsx/test/svelte2tsx/samples/component-default-slot/expected.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<div>
88
<slot a={b}>Hello</slot>
99
</div></>);
10-
return { props: {}, slots: {default: {a:b}}, getters: {}, events: {} }}
10+
return { props: {}, slots: {'default': {a:b}}, getters: {}, events: {} }}
1111

1212
export default class Input__SvelteComponent_ extends createSvelte2TsxComponent(__sveltets_partial(__sveltets_with_any_event(render))) {
1313
}

packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/expected.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
<div>
1010
<slot a={b}>Hello</slot>
1111
<slot name="test" c={d} e={e}></slot>
12+
<slot name="abc-cde.113"></slot>
1213
</div></>);
13-
return { props: {}, slots: {default: {a:b}, test: {c:d, e:e}}, getters: {}, events: {} }}
14+
return { props: {}, slots: {'default': {a:b}, 'test': {c:d, e:e}, 'abc-cde.113': {}}, getters: {}, events: {} }}
1415

1516
export default class Input__SvelteComponent_ extends createSvelte2TsxComponent(__sveltets_partial(__sveltets_with_any_event(render))) {
1617
}

packages/svelte2tsx/test/svelte2tsx/samples/component-multiple-slots/input.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66
<div>
77
<slot a={b}>Hello</slot>
88
<slot name="test" c={d} {e}></slot>
9+
<slot name="abc-cde.113"></slot>
910
</div>

packages/svelte2tsx/test/svelte2tsx/samples/component-slot-crazy-attributes/expected.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<div>
88
<slot a={b} b={b} c="b" d={`a${b}`} e={b} >Hello</slot>
99
</div></>);
10-
return { props: {}, slots: {default: {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, getters: {}, events: {} }}
10+
return { props: {}, slots: {'default': {a:b, b:b, c:"b", d:"__svelte_ts_string", e:b}}, getters: {}, events: {} }}
1111

1212
export default class Input__SvelteComponent_ extends createSvelte2TsxComponent(__sveltets_partial(__sveltets_with_any_event(render))) {
1313
}

0 commit comments

Comments
 (0)