|
|
|
@ -11,35 +11,22 @@ import { build_expression } from './shared/utils.js';
|
|
|
|
|
export function KeyBlock(node, context) {
|
|
|
|
|
context.state.template.push_comment();
|
|
|
|
|
|
|
|
|
|
const key = build_expression(context, node.expression, node.metadata.expression);
|
|
|
|
|
const { has_await } = node.metadata.expression;
|
|
|
|
|
|
|
|
|
|
const expression = build_expression(context, node.expression, node.metadata.expression);
|
|
|
|
|
const key = b.thunk(has_await ? b.call('$.get', b.id('$$key')) : expression);
|
|
|
|
|
const body = /** @type {Expression} */ (context.visit(node.fragment));
|
|
|
|
|
|
|
|
|
|
if (node.metadata.expression.has_await) {
|
|
|
|
|
context.state.init.push(
|
|
|
|
|
b.stmt(
|
|
|
|
|
b.call(
|
|
|
|
|
'$.async',
|
|
|
|
|
context.state.node,
|
|
|
|
|
b.array([b.thunk(key, true)]),
|
|
|
|
|
b.arrow(
|
|
|
|
|
[context.state.node, b.id('$$key')],
|
|
|
|
|
b.block([
|
|
|
|
|
b.stmt(
|
|
|
|
|
b.call(
|
|
|
|
|
'$.key',
|
|
|
|
|
context.state.node,
|
|
|
|
|
b.thunk(b.call('$.get', b.id('$$key'))),
|
|
|
|
|
b.arrow([b.id('$$anchor')], body)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
])
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
context.state.init.push(
|
|
|
|
|
b.stmt(b.call('$.key', context.state.node, b.thunk(key), b.arrow([b.id('$$anchor')], body)))
|
|
|
|
|
let call = b.call('$.key', context.state.node, key, b.arrow([b.id('$$anchor')], body));
|
|
|
|
|
|
|
|
|
|
if (has_await) {
|
|
|
|
|
call = b.call(
|
|
|
|
|
'$.async',
|
|
|
|
|
context.state.node,
|
|
|
|
|
b.array([b.thunk(expression, true)]),
|
|
|
|
|
b.arrow([context.state.node, b.id('$$key')], b.block([b.stmt(call)]))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
context.state.init.push(b.stmt(call));
|
|
|
|
|
}
|
|
|
|
|