marko
Version:
Optimized runtime for Marko templates.
38 lines (37 loc) • 1.26 kB
JavaScript
import { Cn as PendingRenders, Jt as caughtError, Sn as PendingEffects, Xt as placeholderShown, Yt as installCatch, gn as ClosestBranch, h as renderCatch, mn as Scope, pn as Pending, xn as ParentBranch } from "../dom-BJ93mcSe.mjs";
//#region src/dom/catch.feat.ts
const handlePendingTry = (fn, scope, branch) => {
while (branch) {
if (branch["#AwaitCounter"]?.i) return (branch[PendingEffects] ||= []).push(fn, scope);
branch = branch[ParentBranch];
}
};
installCatch((runEffects) => (effects, checkPending = placeholderShown.has(effects)) => {
if (checkPending || caughtError.has(effects)) {
let i = 0;
let fn;
let scope;
let branch;
for (; i < effects.length;) {
fn = effects[i++];
scope = effects[i++];
if ((branch = scope["#ClosestBranch"])?.["#Gen"] !== 0 && !(checkPending && handlePendingTry(fn, scope, branch))) fn(scope);
}
} else runEffects(effects);
}, (runRender) => (render) => {
try {
let branch = render[Scope][ClosestBranch];
while (branch) {
if (branch["#PendingRenders"]) {
render[Pending] = 1;
return branch[PendingRenders].push(render);
}
branch = branch[ParentBranch];
}
render[Pending] = 0;
runRender(render);
} catch (error) {
renderCatch(render[Scope], error);
}
});
//#endregion