UNPKG

marko

Version:

Optimized runtime for Marko templates.

207 lines (206 loc) • 14.8 kB
"use strict"; let require_control_flow = require("./dom-60R4bRWD.js"), empty = [], rest = Symbol(), classIdToBranch = /* @__PURE__ */ new Map(), classEventResolver, scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => { require_control_flow.Et($global.runtimeId); let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render); return render && !scopes && scopesByRender.set(render, scopes = {}), scopes; }, compat = { patchDynamicTag: require_control_flow._, queueEffect: require_control_flow.un, init(warp10Noop) { require_control_flow.Ct.$C_s = (scope) => { if (getRenderScopes(scope.$)[scope.L] = scope, scope.m5c && classIdToBranch.set(scope.m5c, scope), classEventResolver) for (let key in scope) { let resolved = classEventResolver(scope[key], scope); resolved !== scope[key] && (scope[key] = resolved); } }, require_control_flow.Ct.$C_b = warp10Noop; }, setClassEventResolver(fn) { classEventResolver = fn; }, resumeClassFunction(id, build) { require_control_flow.Ct[id] = build; }, getScope($global, scopeId) { return getRenderScopes($global)?.[scopeId]; }, setRendererId(renderer, id) { renderer.a = id; }, isRenderer(renderer) { return renderer.b; }, getStartNode(branch) { return branch.S; }, getEndNode(branch) { return branch.K; }, setScopeNodes(branch, startNode, endNode) { branch.S = startNode, branch.K = endNode; }, runComponentEffects() { this.effects && require_control_flow.mn(this.effects); }, runComponentDestroy() { this.scope && require_control_flow.Qt(this.scope); }, resolveRegistered(value, $global) { return Array.isArray(value) && typeof value[0] == "string" ? require_control_flow.Tt(value[0], getRenderScopes($global)?.[value[1]]) : value; }, createRenderer(params, clone) { let renderer = require_control_flow.mt("", 0, 0, 0, params)(); return renderer.b = (branch) => { let cloned = clone(); branch.S = cloned.startNode, branch.K = cloned.endNode; }, renderer; }, render(out, component, renderer, args) { require_control_flow.Et(out.global.runtimeId); let branch = component.scope, created = 0; if (!branch && (branch = classIdToBranch.get(component.id)) && (component.scope = branch, classIdToBranch.delete(component.id)), args[0] && typeof args[0] == "object" && "renderBody" in args[0]) { let input = args[0], normalizedInput = args[0] = {}; for (let key in input) normalizedInput[key === "renderBody" ? "content" : key] = input[key]; } let renderBranch = () => { branch ||= (created = 1, component.scope = require_control_flow.vt(out.global, renderer, renderer.e, document.body)), renderer.d?.(branch, renderer._ ? args[0] : args); }; if (component.effects = require_control_flow.fn ? renderBranch() : require_control_flow.cn(renderBranch), created) return require_control_flow.pt(branch.S, branch.K); } }, _template = (id, template, walks, setup, inputSignal) => { let renderer = require_control_flow.mt(id, template, walks, setup, inputSignal)(); return renderer.mount = mount, renderer._ = renderer, require_control_flow.Ct[id] = renderer; }, noop = (_) => 0; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); //#region src/common/attr-tag.ts function attrTag(attrs) { return attrs[Symbol.iterator] = attrTagIterator, attrs[rest] = empty, attrs; } function attrTags(first, attrs) { return first ? (first[rest] === empty ? first[rest] = [attrs] : first[rest].push(attrs), first) : attrTag(attrs); } function* attrTagIterator() { yield this, yield* this[rest]; } //#endregion //#region src/common/compat-meta.ts //#endregion //#region src/dom/compat.ts //#endregion //#region src/dom/template.ts function mount(input = {}, reference, position) { let branch, parentNode = reference, nextSibling = null, { $global } = input; switch ($global ? ({$global, ...input} = input, $global = { runtimeId: "M", renderId: "_", ...$global }) : $global = { runtimeId: "M", renderId: "_" }, position) { case "beforebegin": parentNode = reference.parentNode, nextSibling = reference; break; case "afterbegin": nextSibling = reference.firstChild; break; case "afterend": parentNode = reference.parentNode, nextSibling = reference.nextSibling; } let curValue, args = this.d, effects = require_control_flow.cn(() => { branch = require_control_flow.yt($global, this, void 0, parentNode), branch.T = (newValue) => { curValue = newValue; }, this.c?.(branch), args?.(branch, input); }); return require_control_flow.ft(parentNode, nextSibling, branch.S, branch.K), require_control_flow.mn(effects), { get value() { return curValue; }, set value(newValue) { require_control_flow.Xt(branch, newValue); }, update(newInput = {}) { args && (newInput.$global && ({$global, ...newInput} = newInput), require_control_flow.mn(require_control_flow.cn(() => { args(branch, newInput); }))); }, destroy() { require_control_flow.en(branch); } }; } //#endregion //#region src/dom/load.ts function _load_template(id, load) { let pending, lazyTemplate = _template(id, 0, 0, (branch) => { let awaitCounter = require_control_flow.b(branch); branch.X ||= /* @__PURE__ */ new Map(), (pending ||= load()).then((renderer) => { Object.assign(lazyTemplate, renderer), require_control_flow.ln(branch, (branch) => insertLoaded(renderer, branch, branch.S, awaitCounter)); }, loadFailed(branch, awaitCounter)); }, _load_signal(() => (pending ||= load()).then((r) => ({ _: r.d || noop })))); return lazyTemplate; } function _load_setup(load) { let pending, renderer, insertCached = (child, marker) => insertLoaded(renderer, child, marker); return (owner, child, marker) => { if (renderer) require_control_flow.dn(child, insertCached, -1, marker); else { let awaitCounter = require_control_flow.b(owner); child.X ||= /* @__PURE__ */ new Map(), (pending ||= load()).then((mod) => { renderer ||= require_control_flow.mt("", ...mod._)(), require_control_flow.ln(child, (child) => insertLoaded(renderer, child, marker, awaitCounter)); }, loadFailed(child, awaitCounter)); } }; } function insertLoaded(renderer, branch, marker, awaitCounter) { let parent = () => marker.parentNode, values = branch.X, clone = () => { require_control_flow.tn(branch), renderer.b(branch, parent().namespaceURI), branch.X = 0; }, insert = () => { require_control_flow.$t(branch, parent(), marker), marker.remove(), awaitCounter?.c(); }, remaining; if (remaining = values?.size) { awaitCounter ||= require_control_flow.b(branch); let fail = loadFailed(branch, awaitCounter); values.forEach(([, apply], promise) => promise.then((mod) => (apply._ = mod._) && !--remaining && require_control_flow.ln(branch, (branch) => { clone(), renderer.c?.(branch), values.forEach(([value, apply]) => apply(branch, value)), insert(); }), (error) => remaining > 0 && (remaining = 0, fail(error)))); } else clone(), require_control_flow.bt(renderer, branch), insert(); } function loadFailed(scope, awaitCounter) { return (error) => { awaitCounter && (awaitCounter.m ? awaitCounter.i = 0 : awaitCounter.i && awaitCounter.c()), require_control_flow.ln(scope, require_control_flow.v, error); }; } function _load_signal(load) { let pending, apply = (scope, value) => { pending ||= load(), scope.X || !("X" in scope) && scope.H === require_control_flow.hn ? (scope.X ||= /* @__PURE__ */ new Map()).set(pending, [value, apply]) : apply._ ? apply._(scope, value) : pending.then((mod) => require_control_flow.ln(scope, apply._ = mod._, value), noop); }; return apply; } function _load_visible_trigger(selector, options) { let pending, el; return (load) => () => (pending ||= new Promise((resolve) => (el = getSelectorOrResolve(selector, resolve)) && new IntersectionObserver((entries, io) => entries.some((entry) => entry.isIntersecting) && resolve(io.disconnect()), options).observe(el))).then(load); } function _load_idle_trigger(options) { let pending; return (load) => () => (pending ||= new Promise((resolve) => (self.requestIdleCallback || resolve)(resolve, options))).then(load); } function _load_event_trigger(event, selector) { let pending; return (load) => () => (pending ||= new Promise((resolve) => getSelectorOrResolve(selector, resolve)?.addEventListener(event, resolve, { once: !0 }))).then(load); } function _load_media_trigger(query) { let pending, mql; return (load) => () => (pending ||= new Promise((resolve) => (mql = matchMedia(query)).matches ? resolve() : mql.addEventListener("change", resolve, { once: !0 }))).then(load); } function _load_race_trigger(...triggers) { let pending; return (load) => () => (pending ||= Promise.race(triggers.map((t) => t(noop)()))).then(load); } function getSelectorOrResolve(selector, resolve) { return document.querySelector(selector) || resolve(); } exports.$signal = require_control_flow.rn, exports.$signalReset = require_control_flow.in, exports._assert_class_toggles = require_control_flow.bn, exports._assert_hoist = require_control_flow.xn, exports._assert_init = require_control_flow.Zt, exports._attr = require_control_flow.W, exports._attr_class = require_control_flow.G, exports._attr_class_item = require_control_flow.K, exports._attr_class_items = require_control_flow.q, exports._attr_class_names = require_control_flow.J, exports._attr_content = require_control_flow.Y, exports._attr_details_open = require_control_flow.x, exports._attr_dialog_open = require_control_flow.x, exports._attr_details_open_default = require_control_flow.S, exports._attr_dialog_open_default = require_control_flow.S, exports._attr_details_open_script = require_control_flow.C, exports._attr_dialog_open_script = require_control_flow.C, exports._attr_input_checked = require_control_flow.w, exports._attr_input_checkedValue = require_control_flow.T, exports._attr_input_checkedValue_default = require_control_flow.E, exports._attr_input_checkedValue_script = require_control_flow.D, exports._attr_input_checked_default = require_control_flow.O, exports._attr_input_checked_script = require_control_flow.k, exports._attr_input_value = require_control_flow.A, exports._attr_textarea_value = require_control_flow.A, exports._attr_input_value_attribute_default = require_control_flow.j, exports._attr_input_value_default = require_control_flow.M, exports._attr_textarea_value_default = require_control_flow.M, exports._attr_input_value_dynamic_default = require_control_flow.N, exports._attr_input_value_script = require_control_flow.P, exports._attr_textarea_value_script = require_control_flow.P, exports._attr_nonce = require_control_flow.X, exports._attr_select_value = require_control_flow.F, exports._attr_select_value_default = require_control_flow.I, exports._attr_select_value_script = require_control_flow.L, exports._attr_style = require_control_flow.Z, exports._attr_style_item = require_control_flow.Q, exports._attr_style_items = require_control_flow.$, exports._attrs = require_control_flow.et, exports._attrs_content = require_control_flow.tt, exports._attrs_partial = require_control_flow.nt, exports._attrs_partial_content = require_control_flow.rt, exports._attrs_script = require_control_flow.it, exports._await_content = require_control_flow.t, exports._await_promise = require_control_flow.n, exports._call = require_control_flow.Cn, exports._child_setup = require_control_flow.jt, exports._closure = require_control_flow.Mt, exports._closure_get = require_control_flow.Nt, exports._const = require_control_flow.Pt, exports._content = require_control_flow.mt, exports._content_closures = require_control_flow.ht, exports._content_resume = require_control_flow.gt, exports._controllable_input = require_control_flow.R, exports._controllable_open = require_control_flow.z, exports._controllable_select = require_control_flow.B, exports._controllable_textarea = require_control_flow.V, Object.defineProperty(exports, "_dynamic_tag", { enumerable: !0, get: function() { return require_control_flow.r; } }), exports._dynamic_tag_content = require_control_flow.i, exports._dynamic_tag_var_resume = require_control_flow.xt, exports._el = require_control_flow.St, exports._el_read = require_control_flow.Ft, exports._for_closure = require_control_flow.It, exports._for_in = require_control_flow.a, exports._for_of = require_control_flow.o, exports._for_of_unkeyed = require_control_flow.s, exports._for_selector = require_control_flow.Lt, exports._for_to = require_control_flow.c, exports._for_to_unkeyed = require_control_flow.l, exports._for_until = require_control_flow.u, exports._for_until_unkeyed = require_control_flow.d, exports._global_read = require_control_flow.Rt, exports._hoist = require_control_flow.zt, exports._hoist_read_error = require_control_flow.Sn, exports._hoist_resume = require_control_flow.Bt, exports._html = require_control_flow.at, exports._id = require_control_flow.Vt, exports._if = require_control_flow.f, exports._if_closure = require_control_flow.Ht, exports._let = require_control_flow.Ut, exports._let_change = require_control_flow.Wt, exports._lifecycle = require_control_flow.ot, exports._load_event_trigger = _load_event_trigger, exports._load_idle_trigger = _load_idle_trigger, exports._load_media_trigger = _load_media_trigger, exports._load_race_trigger = _load_race_trigger, exports._load_setup = _load_setup, exports._load_signal = _load_signal, exports._load_template = _load_template, exports._load_visible_trigger = _load_visible_trigger, exports._on = require_control_flow.nn, exports._or = require_control_flow.Gt, exports._resumed = require_control_flow.Ct, exports._return = require_control_flow.Kt, exports._return_change = require_control_flow.qt, exports._return_setup = require_control_flow._t, exports._script = require_control_flow.Jt, exports._show = require_control_flow.p, exports._style_rule_item = require_control_flow.st, exports._style_shell = require_control_flow.ct, exports._template = _template, exports._text = require_control_flow.lt, exports._text_content = require_control_flow.ut, exports._to_text = require_control_flow.dt, exports._try = require_control_flow.m, exports._var = require_control_flow.Yt, exports._var_change = require_control_flow.Xt, exports._var_resume = require_control_flow.wt, exports.attrTag = attrTag, exports.attrTags = attrTags, exports.compat = compat, exports.forIn = require_control_flow.gn, exports.forOf = require_control_flow._n, exports.forTo = require_control_flow.vn, exports.forUntil = require_control_flow.yn, exports.init = require_control_flow.Et, exports.initEmbedded = require_control_flow.Dt, exports.ready = require_control_flow.Ot, exports.readyFailed = require_control_flow.kt, exports.run = require_control_flow.pn;