From ff9f166f23015082c560431fb020d29067a4544b Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 12:03:39 +0200 Subject: [PATCH] Convert src/compiler/compile/render_ssr/handlers/Head.ts to JavaScript --- .../compile/render_ssr/handlers/Element.js | 22 +++++++--- .../compile/render_ssr/handlers/Head.ts | 44 +++++++++++-------- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/compiler/compile/render_ssr/handlers/Element.js b/src/compiler/compile/render_ssr/handlers/Element.js index 3c4770b940..bbdf5a77c3 100644 --- a/src/compiler/compile/render_ssr/handlers/Element.js +++ b/src/compiler/compile/render_ssr/handlers/Element.js @@ -73,10 +73,16 @@ export default function (node, renderer, options) { ) { // a boolean attribute with one non-Text chunk args.push( - x`{ ${attr_name}: ${/** @type {Expression} */ (attribute.chunks[0]).node} || null }` + x`{ ${attr_name}: ${ + /** @type {import('../../nodes/shared/Expression.js').default} */ ( + attribute.chunks[0] + ).node + } || null }` ); } else if (attribute.chunks.length === 1 && attribute.chunks[0].type !== 'Text') { - const snippet = /** @type {Expression} */ (attribute.chunks[0]).node; + const snippet = /** @type {import('../../nodes/shared/Expression.js').default} */ ( + attribute.chunks[0] + ).node; args.push(x`{ ${attr_name}: @escape_attribute_value(${snippet}) }`); } else { args.push(x`{ ${attr_name}: ${get_attribute_value(attribute)} }`); @@ -107,7 +113,10 @@ export default function (node, renderer, options) { // a boolean attribute with one non-Text chunk renderer.add_string(' '); renderer.add_expression( - x`${/** @type {Expression} */ (attribute.chunks[0]).node} ? "${attr_name}" : ""` + x`${ + /** @type {import('../../nodes/shared/Expression.js').default} */ (attribute.chunks[0]) + .node + } ? "${attr_name}" : ""` ); } else if (name === 'class' && class_expression) { add_class_attribute = false; @@ -122,7 +131,9 @@ export default function (node, renderer, options) { x`@add_styles(@merge_ssr_styles(${get_attribute_value(attribute)}, ${style_expression}))` ); } else if (attribute.chunks.length === 1 && attribute.chunks[0].type !== 'Text') { - const snippet = /** @type {Expression} */ (attribute.chunks[0]).node; + const snippet = /** @type {import('../../nodes/shared/Expression.js').default} */ ( + attribute.chunks[0] + ).node; renderer.add_expression( x`@add_attribute("${attr_name}", ${snippet}, ${boolean_attributes.has(name) ? 1 : 0})` ); @@ -221,6 +232,7 @@ export default function (node, renderer, options) { add_close_tag(); } if (node.is_dynamic_element) { + /** @type {import('estree').Node} */ let content = renderer.pop(); if (options.dev && node.children.length > 0) content = x`(() => { @validate_void_dynamic_element(#tag); return ${content}; })()`; @@ -244,7 +256,7 @@ export default function (node, renderer, options) { if (node.tag_expr.node.type === 'Literal') { renderer.add_string(/** @type {string} */ (node.tag_expr.node.value)); } else { - renderer.add_expression(/** @type {ESExpression} */ (node.tag_expr.node)); + renderer.add_expression(/** @type {import('estree').Expression} */ (node.tag_expr.node)); } } } diff --git a/src/compiler/compile/render_ssr/handlers/Head.ts b/src/compiler/compile/render_ssr/handlers/Head.ts index 71b62eea3e..f3a6acc084 100644 --- a/src/compiler/compile/render_ssr/handlers/Head.ts +++ b/src/compiler/compile/render_ssr/handlers/Head.ts @@ -1,23 +1,29 @@ -import Renderer, { RenderOptions } from '../Renderer'; -import Head from '../../nodes/Head'; import { x } from 'code-red'; -import { Node } from 'estree'; -export default function (node: Head, renderer: Renderer, options: RenderOptions) { - const head_options = { - ...options, - head_id: node.id - }; +/** + * @param {import('../../nodes/Head.js').default} node + * @param {import('../Renderer.js').default} renderer + * @param {import('../Renderer.js').RenderOptions} options + */ +export default function (node, renderer, options) { + const head_options = { + ...options, + head_id: node.id + }; + renderer.push(); + renderer.render(node.children, head_options); + const result = renderer.pop(); - renderer.push(); - renderer.render(node.children, head_options); - const result = renderer.pop(); - let expression: Node = result; - if (options.hydratable) { - const start_comment = `HEAD_${node.id}_START`; - const end_comment = `HEAD_${node.id}_END`; - expression = x`'' + ${expression} + ''`; - } - - renderer.add_expression(x`$$result.head += ${expression}, ""`); + /** @type {import('estree').Node} */ + let expression = result; + if (options.hydratable) { + const start_comment = `HEAD_${node.id}_START`; + const end_comment = `HEAD_${node.id}_END`; + expression = x `'' + ${expression} + ''`; + } + renderer.add_expression(x `$$result.head += ${expression}, ""`); } + + + +