Skip to content

Commit af1d500

Browse files
authored
(fix) destructuring with default values (#269)
- use expandNode for each context - support array and object expressions in expandNode #265
1 parent 3ea98f0 commit af1d500

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

src/print/index.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -453,8 +453,8 @@ export function print(path: FastPath, options: ParserOptions, print: PrintFn): D
453453
const def: Doc[] = [
454454
'{#each ',
455455
printSvelteBlockJS(path, print, 'expression'),
456-
' as ',
457-
printSvelteBlockJS(path, print, 'context'),
456+
' as',
457+
expandNode(node.context),
458458
];
459459

460460
if (node.index) {
@@ -1044,7 +1044,7 @@ function printJS(
10441044
return path.call(print, name);
10451045
}
10461046

1047-
function expandNode(node: any): string {
1047+
function expandNode(node: any, parent?: any): string {
10481048
if (node === null) {
10491049
return '';
10501050
}
@@ -1055,6 +1055,7 @@ function expandNode(node: any): string {
10551055
}
10561056

10571057
switch (node.type) {
1058+
case 'ArrayExpression':
10581059
case 'ArrayPattern':
10591060
return ' [' + node.elements.map(expandNode).join(',').slice(1) + ']';
10601061
case 'AssignmentPattern':
@@ -1063,12 +1064,17 @@ function expandNode(node: any): string {
10631064
return ' ' + node.name;
10641065
case 'Literal':
10651066
return ' ' + node.raw;
1067+
case 'ObjectExpression':
1068+
return ' {' + node.properties.map((p: any) => expandNode(p, node)).join(',') + ' }';
10661069
case 'ObjectPattern':
10671070
return ' {' + node.properties.map(expandNode).join(',') + ' }';
10681071
case 'Property':
10691072
if (node.value.type === 'ObjectPattern' || node.value.type === 'ArrayPattern') {
10701073
return ' ' + node.key.name + ':' + expandNode(node.value);
1071-
} else if (node.value.type === 'Identifier' && node.key.name !== node.value.name) {
1074+
} else if (
1075+
(node.value.type === 'Identifier' && node.key.name !== node.value.name) ||
1076+
(parent && parent.type === 'ObjectExpression')
1077+
) {
10721078
return expandNode(node.key) + ':' + expandNode(node.value);
10731079
} else {
10741080
return expandNode(node.value);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{#each arr as { a,b =''}}
2+
{a}
3+
{b}
4+
{/each}
5+
6+
{#await promise then { a,b =''}}
7+
{a}
8+
{b}
9+
{/await}
10+
11+
{#await promise}
12+
Loading
13+
{:then { a,b =''}}
14+
{a}
15+
{b}
16+
{/await}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{#each arr as { a, b = '' }}
2+
{a}
3+
{b}
4+
{/each}
5+
6+
{#await promise then { a, b = '' }}
7+
{a}
8+
{b}
9+
{/await}
10+
11+
{#await promise}
12+
Loading
13+
{:then { a, b = '' }}
14+
{a}
15+
{b}
16+
{/await}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
{#each animals as {key, value = []}}
1+
{#each animals as { key, value = 1, arrayExpr = [{ a: true }], objectExpr = { a: true, b: [1] } }}
22
<p>{key}: {value}</p>
33
{/each}

0 commit comments

Comments
 (0)