UNPKG

marko

Version:

Optimized runtime for Marko templates.

36 lines (35 loc) • 1.4 kB
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