diff --git a/src/compiler/compile/render_ssr/handlers/EachBlock.ts b/src/compiler/compile/render_ssr/handlers/EachBlock.ts index 79e969ef7e..6117ba75a4 100644 --- a/src/compiler/compile/render_ssr/handlers/EachBlock.ts +++ b/src/compiler/compile/render_ssr/handlers/EachBlock.ts @@ -1,30 +1,32 @@ -import Renderer, { RenderOptions } from '../Renderer'; -import EachBlock from '../../nodes/EachBlock'; import { x } from 'code-red'; -import { get_const_tags } from './shared/get_const_tags'; -import { Node } from 'estree'; +import { get_const_tags } from './shared/get_const_tags.js'; -export default function (node: EachBlock, renderer: Renderer, options: RenderOptions) { - const args = [node.context_node]; - if (node.index) args.push({ type: 'Identifier', name: node.index }); +/** + * @param {import('../../nodes/EachBlock.js').default} node + * @param {import('../Renderer.js').default} renderer + * @param {import('../Renderer.js').RenderOptions} options + */ +export default function (node, renderer, options) { + const args = [node.context_node]; + if (node.index) + args.push({ type: 'Identifier', name: node.index }); + renderer.push(); + renderer.render(node.children, options); + const result = renderer.pop(); + const consequent = x `@each(${node.expression.node}, (${args}) => { ${get_const_tags(node.const_tags)}; return ${result} })`; + if (node.else) { + renderer.push(); + renderer.render(node.else.children, options); + let alternate = renderer.pop(); + if (node.else.const_tags.length > 0) + alternate = x `(() => { ${get_const_tags(node.else.const_tags)}; return ${alternate} })()`; + renderer.add_expression(x `${node.expression.node}.length ? ${consequent} : ${alternate}`); + } + else { + renderer.add_expression(consequent); + } +} - renderer.push(); - renderer.render(node.children, options); - const result = renderer.pop(); - const consequent = x`@each(${node.expression.node}, (${args}) => { ${get_const_tags( - node.const_tags - )}; return ${result} })`; - if (node.else) { - renderer.push(); - renderer.render(node.else.children, options); - let alternate: Node = renderer.pop(); - if (node.else.const_tags.length > 0) - alternate = x`(() => { ${get_const_tags(node.else.const_tags)}; return ${alternate} })()`; - renderer.add_expression(x`${node.expression.node}.length ? ${consequent} : ${alternate}`); - } else { - renderer.add_expression(consequent); - } -}