From 8a38ba36364732d9a11f8048f3133a47b8c2e9f1 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Fri, 30 Mar 2018 09:11:57 -0400 Subject: [PATCH] basic attribute spreading on elements --- src/generators/nodes/Attribute.ts | 5 +- src/generators/nodes/Component.ts | 84 +------------------ src/generators/nodes/Element.ts | 55 ++++++++++++ src/generators/nodes/shared/mungeAttribute.ts | 78 +++++++++++++++++ src/shared/dom.js | 7 ++ src/shared/index.js | 1 + src/shared/spread.js | 37 ++++++++ src/utils/quoteIfNecessary.ts | 7 ++ .../runtime/samples/spread-element/_config.js | 4 +- 9 files changed, 191 insertions(+), 87 deletions(-) create mode 100644 src/generators/nodes/shared/mungeAttribute.ts create mode 100644 src/shared/spread.js create mode 100644 src/utils/quoteIfNecessary.ts diff --git a/src/generators/nodes/Attribute.ts b/src/generators/nodes/Attribute.ts index 90031d261e..904c971c1d 100644 --- a/src/generators/nodes/Attribute.ts +++ b/src/generators/nodes/Attribute.ts @@ -223,10 +223,9 @@ export default class Attribute { ); } } else { - const value = - this.value === true + const value = this.value === true ? 'true' - : this.value.length === 0 ? `''` : stringify(this.value[0].data); + : this.value.length === 0 ? `""` : stringify(this.value[0].data); const statement = ( isLegacyInputType diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index bababef766..83bf02614e 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -1,21 +1,14 @@ import deindent from '../../utils/deindent'; -import { stringify } from '../../utils/stringify'; import stringifyProps from '../../utils/stringifyProps'; import CodeBuilder from '../../utils/CodeBuilder'; import getTailSnippet from '../../utils/getTailSnippet'; import getObject from '../../utils/getObject'; -import getExpressionPrecedence from '../../utils/getExpressionPrecedence'; -import isValidIdentifier from '../../utils/isValidIdentifier'; -import reservedNames from '../../utils/reservedNames'; +import quoteIfNecessary from '../../utils/quoteIfNecessary'; +import mungeAttribute from './shared/mungeAttribute'; import Node from './shared/Node'; import Block from '../dom/Block'; import Attribute from './Attribute'; -function quoteIfNecessary(name, legacy) { - if (!isValidIdentifier || (legacy && reservedNames.has(name))) return `"${name}"`; - return name; -} - export default class Component extends Node { type: 'Component'; name: string; @@ -409,79 +402,6 @@ export default class Component extends Node { } } -function mungeAttribute(attribute: Node, block: Block): Attribute { - if (attribute.value === true) { - // attributes without values, e.g.