diff --git a/src/compiler/compile/utils/get_slot_data.ts b/src/compiler/compile/utils/get_slot_data.ts index 9d2e561149..b0cdd30cde 100644 --- a/src/compiler/compile/utils/get_slot_data.ts +++ b/src/compiler/compile/utils/get_slot_data.ts @@ -1,49 +1,59 @@ -import Attribute from '../nodes/Attribute'; import { p, x } from 'code-red'; -import { string_literal } from './stringify'; -import Block from '../render_dom/Block'; +import { string_literal } from './stringify.js'; -export default function get_slot_data(values: Map, block: Block = null) { - return { - type: 'ObjectExpression', - properties: Array.from(values.values()) - .filter((attribute) => attribute.name !== 'name') - .map((attribute) => { - if (attribute.is_spread) { - const argument = get_spread_value(block, attribute); - return { - type: 'SpreadElement', - argument - }; - } +/** + * @param {Map} values + * @param {Block} block + */ +export default function get_slot_data(values, block = null) { + return { + type: 'ObjectExpression', + properties: Array.from(values.values()) + .filter((attribute) => attribute.name !== 'name') + .map((attribute) => { + if (attribute.is_spread) { + const argument = get_spread_value(block, attribute); + return { + type: 'SpreadElement', + argument + }; + } + const value = get_value(block, attribute); + return p `${attribute.name}: ${value}`; + }) + }; +} - const value = get_value(block, attribute); - return p`${attribute.name}: ${value}`; - }) - }; +/** + * @param {Block} block + * @param {Attribute} attribute + */ +function get_value(block, attribute) { + if (attribute.is_true) + return x `true`; + if (attribute.chunks.length === 0) + return x `""`; + let value = attribute.chunks + .map((chunk) => chunk.type === 'Text' + ? string_literal(chunk.data) + : block + ? chunk.manipulate(block) + : chunk.node) + .reduce((lhs, rhs) => x `${lhs} + ${rhs}`); + if (attribute.chunks.length > 1 && attribute.chunks[0].type !== 'Text') { + value = x `"" + ${value}`; + } + return value; } -function get_value(block: Block, attribute: Attribute) { - if (attribute.is_true) return x`true`; - if (attribute.chunks.length === 0) return x`""`; +/** + * @param {Block} block + * @param {Attribute} attribute + */ +function get_spread_value(block, attribute) { + return block ? attribute.expression.manipulate(block) : attribute.expression.node; +} - let value = attribute.chunks - .map((chunk) => - chunk.type === 'Text' - ? string_literal(chunk.data) - : block - ? chunk.manipulate(block) - : chunk.node - ) - .reduce((lhs, rhs) => x`${lhs} + ${rhs}`); - if (attribute.chunks.length > 1 && attribute.chunks[0].type !== 'Text') { - value = x`"" + ${value}`; - } - return value; -} -function get_spread_value(block: Block, attribute: Attribute) { - return block ? attribute.expression.manipulate(block) : attribute.expression.node; -}