marko
Version:
Optimized runtime for Marko templates.
36 lines (35 loc) • 1.4 kB
JavaScript
import { Gn as PendingRenders, Hn as ParentBranch, Ln as ClosestBranch, Nn as Pending, Pn as Scope, Un as PendingEffectScopes, Wn as PendingEffects, dn as queueAsyncRender, fn as queueEffect, ln as installCatch, v as renderCatch, y as runPendingEffects } from "../dom-o9jQjchF.mjs";
//#region src/dom/catch.feat.ts
const deferToPendingTry = (fn, scope, branch) => {
while (branch) {
if (branch["#AwaitCounter"]?.i) return (scope[PendingEffects] ||= ((branch[PendingEffectScopes] ||= (branch["#AwaitCounter"].m && ((complete) => branch["#AwaitCounter"].c = () => complete() || queueAsyncRender(branch, queueEffect, runPendingEffects))(branch["#AwaitCounter"].c), [])).push(scope), /* @__PURE__ */ new Set())).add(fn);
branch = branch[ParentBranch];
}
};
installCatch((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 && !deferToPendingTry(fn, scope, branch)) fn(scope);
}
}, (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