de-waterfall awaits in separate elements

pull/16757/head
Rich Harris 1 week ago
parent 63e1571113
commit 8fb412f586

@ -1,4 +1,5 @@
/** @import { AST } from '#compiler' */
/** @import { Statement } from 'estree' */
/** @import { ComponentContext, ComponentServerTransformState } from '../types.js' */
import { clean_nodes, infer_namespace } from '../../utils.js';
import * as b from '#compiler/builders';
@ -47,12 +48,20 @@ export function Fragment(node, context) {
process_children(trimmed, { ...context, state });
if (node.metadata.hoisted_promises.promises.length > 0) {
return b.block([
b.const(node.metadata.hoisted_promises.id, b.array(node.metadata.hoisted_promises.promises)),
...state.init,
call_child_payload(b.block(build_template(state.template)), true)
]);
if (node.metadata.is_async) {
/** @type {Statement[]} */
const statements = [];
if (node.metadata.hoisted_promises.promises.length > 0) {
statements.push(
b.const(node.metadata.hoisted_promises.id, b.array(node.metadata.hoisted_promises.promises))
);
}
statements.push(...state.init);
statements.push(...build_template(state.template));
return b.block([call_child_payload(b.block(statements), true)]);
}
return b.block([...state.init, ...build_template(state.template)]);

@ -192,16 +192,11 @@ export function RegularElement(node, context) {
)
);
} else {
if (node.fragment.metadata.hoisted_promises.promises.length > 0) {
state.template.push(
b.const(
node.fragment.metadata.hoisted_promises.id,
b.array(node.fragment.metadata.hoisted_promises.promises)
)
);
if (node.fragment.metadata.is_async) {
state.template.push(/** @type {Statement} */ (context.visit(node.fragment)));
} else {
process_children(trimmed, { ...context, state });
}
process_children(trimmed, { ...context, state });
}
if (select_with_value) {

Loading…
Cancel
Save