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

pull/8569/head
Simon Holthausen 3 years ago
parent 960c7294c8
commit ff9f166f23

@ -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));
}
}
}

@ -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`'<!-- ${start_comment} -->' + ${expression} + '<!-- ${end_comment} -->'`;
}
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 `'<!-- ${start_comment} -->' + ${expression} + '<!-- ${end_comment} -->'`;
}
renderer.add_expression(x `$$result.head += ${expression}, ""`);
}

Loading…
Cancel
Save