From 4d09a27334f77ac09ff2bc48e852f108c3cb4060 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 24 Apr 2018 21:25:11 -0400 Subject: [PATCH] SSR component bindings --- src/generators/server-side-rendering/Block.ts | 2 +- .../visitors/Component.ts | 26 +++++-------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/generators/server-side-rendering/Block.ts b/src/generators/server-side-rendering/Block.ts index 086eef45bf..88fdf257e0 100644 --- a/src/generators/server-side-rendering/Block.ts +++ b/src/generators/server-side-rendering/Block.ts @@ -25,7 +25,7 @@ export default class Block { this.conditions.map(c => `(${c})`) ); - const { name: prop } = getObject(binding.value); + const { name: prop } = getObject(binding.value.node); this.generator.bindings.push(deindent` if (${conditions.join('&&')}) { diff --git a/src/generators/server-side-rendering/visitors/Component.ts b/src/generators/server-side-rendering/visitors/Component.ts index 7ff2584a15..7daa6997ca 100644 --- a/src/generators/server-side-rendering/visitors/Component.ts +++ b/src/generators/server-side-rendering/visitors/Component.ts @@ -23,21 +23,7 @@ export default function visitComponent( } } - const attributes: Node[] = []; - const bindings: Node[] = []; - - let usesSpread; - - node.attributes.forEach((attribute: Node) => { - if (attribute.type === 'Attribute' || attribute.type === 'Spread') { - if (attribute.type === 'Spread') usesSpread = true; - attributes.push(attribute); - } else if (attribute.type === 'Binding') { - bindings.push(attribute); - } - }); - - const bindingProps = bindings.map(binding => { + const bindingProps = node.bindings.map(binding => { const { name } = getObject(binding.value); const tail = binding.value.type === 'MemberExpression' ? getTailSnippet(binding.value) @@ -65,11 +51,13 @@ export default function visitComponent( return '`' + attribute.chunks.map(stringifyAttribute).join('') + '`'; } + const usesSpread = node.attributes.find(attr => attr.isSpread); + const props = usesSpread ? `Object.assign(${ - attributes + node.attributes .map(attribute => { - if (attribute.type === 'Spread') { + if (attribute.isSpread) { return attribute.expression.snippet; } else { return `{ ${attribute.name}: ${getAttributeValue(attribute)} }`; @@ -78,7 +66,7 @@ export default function visitComponent( .concat(bindingProps.map(p => `{ ${p} }`)) .join(', ') })` - : `{ ${attributes + : `{ ${node.attributes .map(attribute => `${attribute.name}: ${getAttributeValue(attribute)}`) .concat(bindingProps) .join(', ')} }`; @@ -91,7 +79,7 @@ export default function visitComponent( `%components-${node.name}` ); - bindings.forEach(binding => { + node.bindings.forEach(binding => { block.addBinding(binding, expression); });