Convert src/compiler/compile/render_ssr/handlers/IfBlock.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent 3415b133c7
commit 6cb4fbd608

@ -5,6 +5,6 @@
*/
export default function (node, renderer, options) {
if (options.hydratable) renderer.add_string('<!-- HTML_TAG_START -->');
renderer.add_expression(/** @type {Expression} */ (node.expression.node));
renderer.add_expression(/** @type {import('estree').Expression} */ (node.expression.node));
if (options.hydratable) renderer.add_string('<!-- HTML_TAG_END -->');
}

@ -1,23 +1,31 @@
import IfBlock from '../../nodes/IfBlock';
import Renderer, { RenderOptions } from '../Renderer';
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: IfBlock, renderer: Renderer, options: RenderOptions) {
const condition = node.expression.node;
/**
* @param {import('../../nodes/IfBlock.js').default} node
* @param {import('../Renderer.js').default} renderer
* @param {import('../Renderer.js').RenderOptions} options
*/
export default function (node, renderer, options) {
const condition = node.expression.node;
renderer.push();
renderer.render(node.children, options);
renderer.push();
renderer.render(node.children, options);
let consequent: Node = renderer.pop();
if (node.const_tags.length > 0)
consequent = x`(() => { ${get_const_tags(node.const_tags)}; return ${consequent} })()`;
/** @type {import('estree').Node} */
let consequent = renderer.pop();
if (node.const_tags.length > 0)
consequent = x `(() => { ${get_const_tags(node.const_tags)}; return ${consequent} })()`;
renderer.push();
if (node.else)
renderer.render(node.else.children, options);
renderer.push();
if (node.else) renderer.render(node.else.children, options);
let alternate: Node = renderer.pop();
if (node.else && node.else.const_tags.length > 0)
alternate = x`(() => { ${get_const_tags(node.else.const_tags)}; return ${alternate} })()`;
renderer.add_expression(x`${condition} ? ${consequent} : ${alternate}`);
/** @type {import('estree').Node} */
let alternate = renderer.pop();
if (node.else && node.else.const_tags.length > 0)
alternate = x `(() => { ${get_const_tags(node.else.const_tags)}; return ${alternate} })()`;
renderer.add_expression(x `${condition} ? ${consequent} : ${alternate}`);
}

Loading…
Cancel
Save