pull/17038/head
Rich Harris 6 days ago
parent f91ccc6b0a
commit 33d37924cc

@ -2,6 +2,7 @@
/** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */
import * as b from '#compiler/builders';
import { create_push } from './shared/utils.js';
/**
* @param {AST.HtmlTag} node
@ -10,9 +11,6 @@ import * as b from '#compiler/builders';
export function HtmlTag(node, context) {
const expression = /** @type {Expression} */ (context.visit(node.expression));
const call = b.call('$.html', expression);
context.state.template.push(
node.metadata.expression.has_await
? b.stmt(b.call('$$renderer.push', b.thunk(call, true)))
: call
);
context.state.template.push(create_push(call, node.metadata.expression));
}

@ -284,6 +284,27 @@ export function create_async_block(body, blockers = b.array([]), has_await = tru
);
}
/**
* @param {Expression} expression
* @param {ExpressionMetadata} metadata
* @returns {Expression | Statement}
*/
export function create_push(expression, metadata) {
if (metadata.is_async()) {
let statement = b.stmt(b.call('$$renderer.push', b.thunk(expression, metadata.has_await)));
const blockers = metadata.blockers();
if (blockers.elements.length > 0) {
statement = create_async_block(b.block([statement]), blockers, false);
}
return statement;
}
return expression;
}
/**
* @param {BlockStatement | Expression} body
* @param {Identifier | false} component_fn_id

Loading…
Cancel
Save