UNPKG

@kdujs/runtime-core-canary

Version:
1,831 lines (1,816 loc) 187 kB
/** * @kdujs/runtime-core-canary v3.20251208.0 * (c) 2021-present NKDuy * @license MIT **/ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var reactivity = require('@kdujs/reactivity'); var shared = require('@kdujs/shared'); function assertNumber(val, type) { return; } const ErrorCodes = { "SETUP_FUNCTION": 0, "0": "SETUP_FUNCTION", "RENDER_FUNCTION": 1, "1": "RENDER_FUNCTION", "WATCH_GETTER": 2, "2": "WATCH_GETTER", "WATCH_CALLBACK": 3, "3": "WATCH_CALLBACK", "WATCH_CLEANUP": 4, "4": "WATCH_CLEANUP", "NATIVE_EVENT_HANDLER": 5, "5": "NATIVE_EVENT_HANDLER", "COMPONENT_EVENT_HANDLER": 6, "6": "COMPONENT_EVENT_HANDLER", "KNODE_HOOK": 7, "7": "KNODE_HOOK", "DIRECTIVE_HOOK": 8, "8": "DIRECTIVE_HOOK", "TRANSITION_HOOK": 9, "9": "TRANSITION_HOOK", "APP_ERROR_HANDLER": 10, "10": "APP_ERROR_HANDLER", "APP_WARN_HANDLER": 11, "11": "APP_WARN_HANDLER", "FUNCTION_REF": 12, "12": "FUNCTION_REF", "ASYNC_COMPONENT_LOADER": 13, "13": "ASYNC_COMPONENT_LOADER", "SCHEDULER": 14, "14": "SCHEDULER" }; const ErrorTypeStrings$1 = { ["sp"]: "serverPrefetch hook", ["bc"]: "beforeCreate hook", ["c"]: "created hook", ["bm"]: "beforeMount hook", ["m"]: "mounted hook", ["bu"]: "beforeUpdate hook", ["u"]: "updated", ["bum"]: "beforeUnmount hook", ["um"]: "unmounted hook", ["a"]: "activated hook", ["da"]: "deactivated hook", ["ec"]: "errorCaptured hook", ["rtc"]: "renderTracked hook", ["rtg"]: "renderTriggered hook", [0]: "setup function", [1]: "render function", [2]: "watcher getter", [3]: "watcher callback", [4]: "watcher cleanup function", [5]: "native event handler", [6]: "component event handler", [7]: "knode hook", [8]: "directive hook", [9]: "transition hook", [10]: "app errorHandler", [11]: "app warnHandler", [12]: "ref function", [13]: "async component loader", [14]: "scheduler flush. This is likely a Kdu internals bug. Please open an issue at https://kdujs-new-issue.web.app/?repo=kdujs/core" }; function callWithErrorHandling(fn, instance, type, args) { try { return args ? fn(...args) : fn(); } catch (err) { handleError(err, instance, type); } } function callWithAsyncErrorHandling(fn, instance, type, args) { if (shared.isFunction(fn)) { const res = callWithErrorHandling(fn, instance, type, args); if (res && shared.isPromise(res)) { res.catch((err) => { handleError(err, instance, type); }); } return res; } if (shared.isArray(fn)) { const values = []; for (let i = 0; i < fn.length; i++) { values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); } return values; } } function handleError(err, instance, type, throwInDev = true) { const contextKNode = instance ? instance.knode : null; if (instance) { let cur = instance.parent; const exposedInstance = instance.proxy; const errorInfo = `https://kdu-js.web.app/error-reference/#runtime-${type}`; while (cur) { const errorCapturedHooks = cur.ec; if (errorCapturedHooks) { for (let i = 0; i < errorCapturedHooks.length; i++) { if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { return; } } } cur = cur.parent; } const appErrorHandler = instance.appContext.config.errorHandler; if (appErrorHandler) { reactivity.pauseTracking(); callWithErrorHandling( appErrorHandler, null, 10, [err, exposedInstance, errorInfo] ); reactivity.resetTracking(); return; } } logError(err, type, contextKNode, throwInDev); } function logError(err, type, contextKNode, throwInDev = true) { { console.error(err); } } let isFlushing = false; let isFlushPending = false; const queue = []; let flushIndex = 0; const pendingPostFlushCbs = []; let activePostFlushCbs = null; let postFlushIndex = 0; const resolvedPromise = /* @__PURE__ */ Promise.resolve(); let currentFlushPromise = null; function nextTick(fn) { const p = currentFlushPromise || resolvedPromise; return fn ? p.then(this ? fn.bind(this) : fn) : p; } function findInsertionIndex(id) { let start = flushIndex + 1; let end = queue.length; while (start < end) { const middle = start + end >>> 1; const middleJob = queue[middle]; const middleJobId = getId(middleJob); if (middleJobId < id || middleJobId === id && middleJob.pre) { start = middle + 1; } else { end = middle; } } return start; } function queueJob(job) { if (!queue.length || !queue.includes( job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex )) { if (job.id == null) { queue.push(job); } else { queue.splice(findInsertionIndex(job.id), 0, job); } queueFlush(); } } function queueFlush() { if (!isFlushing && !isFlushPending) { isFlushPending = true; currentFlushPromise = resolvedPromise.then(flushJobs); } } function invalidateJob(job) { const i = queue.indexOf(job); if (i > flushIndex) { queue.splice(i, 1); } } function queuePostFlushCb(cb) { if (!shared.isArray(cb)) { if (!activePostFlushCbs || !activePostFlushCbs.includes( cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex )) { pendingPostFlushCbs.push(cb); } } else { pendingPostFlushCbs.push(...cb); } queueFlush(); } function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) { for (; i < queue.length; i++) { const cb = queue[i]; if (cb && cb.pre) { if (instance && cb.id !== instance.uid) { continue; } queue.splice(i, 1); i--; cb(); } } } function flushPostFlushCbs(seen) { if (pendingPostFlushCbs.length) { const deduped = [...new Set(pendingPostFlushCbs)].sort( (a, b) => getId(a) - getId(b) ); pendingPostFlushCbs.length = 0; if (activePostFlushCbs) { activePostFlushCbs.push(...deduped); return; } activePostFlushCbs = deduped; for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { activePostFlushCbs[postFlushIndex](); } activePostFlushCbs = null; postFlushIndex = 0; } } const getId = (job) => job.id == null ? Infinity : job.id; const comparator = (a, b) => { const diff = getId(a) - getId(b); if (diff === 0) { if (a.pre && !b.pre) return -1; if (b.pre && !a.pre) return 1; } return diff; }; function flushJobs(seen) { isFlushPending = false; isFlushing = true; queue.sort(comparator); try { for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { const job = queue[flushIndex]; if (job && job.active !== false) { if (false) ; callWithErrorHandling(job, null, 14); } } } finally { flushIndex = 0; queue.length = 0; flushPostFlushCbs(); isFlushing = false; currentFlushPromise = null; if (queue.length || pendingPostFlushCbs.length) { flushJobs(); } } } function emit(instance, event, ...rawArgs) { if (instance.isUnmounted) return; const props = instance.knode.props || shared.EMPTY_OBJ; let args = rawArgs; const isModelListener = event.startsWith("update:"); const modelArg = isModelListener && event.slice(7); if (modelArg && modelArg in props) { const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; const { number, trim } = props[modifiersKey] || shared.EMPTY_OBJ; if (trim) { args = rawArgs.map((a) => shared.isString(a) ? a.trim() : a); } if (number) { args = rawArgs.map(shared.looseToNumber); } } let handlerName; let handler = props[handlerName = shared.toHandlerKey(event)] || // also try camelCase event handler (#2249) props[handlerName = shared.toHandlerKey(shared.camelize(event))]; if (!handler && isModelListener) { handler = props[handlerName = shared.toHandlerKey(shared.hyphenate(event))]; } if (handler) { callWithAsyncErrorHandling( handler, instance, 6, args ); } const onceHandler = props[handlerName + `Once`]; if (onceHandler) { if (!instance.emitted) { instance.emitted = {}; } else if (instance.emitted[handlerName]) { return; } instance.emitted[handlerName] = true; callWithAsyncErrorHandling( onceHandler, instance, 6, args ); } } function normalizeEmitsOptions(comp, appContext, asMixin = false) { const cache = appContext.emitsCache; const cached = cache.get(comp); if (cached !== void 0) { return cached; } const raw = comp.emits; let normalized = {}; let hasExtends = false; if (!shared.isFunction(comp)) { const extendEmits = (raw2) => { const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); if (normalizedFromExtend) { hasExtends = true; shared.extend(normalized, normalizedFromExtend); } }; if (!asMixin && appContext.mixins.length) { appContext.mixins.forEach(extendEmits); } if (comp.extends) { extendEmits(comp.extends); } if (comp.mixins) { comp.mixins.forEach(extendEmits); } } if (!raw && !hasExtends) { if (shared.isObject(comp)) { cache.set(comp, null); } return null; } if (shared.isArray(raw)) { raw.forEach((key) => normalized[key] = null); } else { shared.extend(normalized, raw); } if (shared.isObject(comp)) { cache.set(comp, normalized); } return normalized; } function isEmitListener(options, key) { if (!options || !shared.isOn(key)) { return false; } key = key.slice(2).replace(/Once$/, ""); return shared.hasOwn(options, key[0].toLowerCase() + key.slice(1)) || shared.hasOwn(options, shared.hyphenate(key)) || shared.hasOwn(options, key); } let currentRenderingInstance = null; let currentScopeId = null; function setCurrentRenderingInstance(instance) { const prev = currentRenderingInstance; currentRenderingInstance = instance; currentScopeId = instance && instance.type.__scopeId || null; return prev; } function pushScopeId(id) { currentScopeId = id; } function popScopeId() { currentScopeId = null; } const withScopeId = (_id) => withCtx; function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { if (!ctx) return fn; if (fn._n) { return fn; } const renderFnWithContext = (...args) => { if (renderFnWithContext._d) { setBlockTracking(-1); } const prevInstance = setCurrentRenderingInstance(ctx); let res; try { res = fn(...args); } finally { setCurrentRenderingInstance(prevInstance); if (renderFnWithContext._d) { setBlockTracking(1); } } return res; }; renderFnWithContext._n = true; renderFnWithContext._c = true; renderFnWithContext._d = true; return renderFnWithContext; } function markAttrsAccessed() { } function renderComponentRoot(instance) { const { type: Component, knode, proxy, withProxy, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, props, data, setupState, ctx, inheritAttrs } = instance; const prev = setCurrentRenderingInstance(instance); let result; let fallthroughAttrs; try { if (knode.shapeFlag & 4) { const proxyToUse = withProxy || proxy; const thisProxy = false ? new Proxy(proxyToUse, { get(target, key, receiver) { warn( `Property '${String( key )}' was accessed via 'this'. Avoid using 'this' in templates.` ); return Reflect.get(target, key, receiver); } }) : proxyToUse; result = normalizeKNode( render.call( thisProxy, proxyToUse, renderCache, false ? shallowReadonly(props) : props, setupState, data, ctx ) ); fallthroughAttrs = attrs; } else { const render2 = Component; if (false) ; result = normalizeKNode( render2.length > 1 ? render2( false ? shallowReadonly(props) : props, false ? { get attrs() { markAttrsAccessed(); return shallowReadonly(attrs); }, slots, emit } : { attrs, slots, emit } ) : render2( false ? shallowReadonly(props) : props, null ) ); fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); } } catch (err) { blockStack.length = 0; handleError(err, instance, 1); result = createKNode(Comment); } let root = result; if (fallthroughAttrs && inheritAttrs !== false) { const keys = Object.keys(fallthroughAttrs); const { shapeFlag } = root; if (keys.length) { if (shapeFlag & (1 | 6)) { if (propsOptions && keys.some(shared.isModelListener)) { fallthroughAttrs = filterModelListeners( fallthroughAttrs, propsOptions ); } root = cloneKNode(root, fallthroughAttrs, false, true); } } } if (knode.dirs) { root = cloneKNode(root, null, false, true); root.dirs = root.dirs ? root.dirs.concat(knode.dirs) : knode.dirs; } if (knode.transition) { root.transition = knode.transition; } { result = root; } setCurrentRenderingInstance(prev); return result; } function filterSingleRoot(children, recurse = true) { let singleRoot; for (let i = 0; i < children.length; i++) { const child = children[i]; if (isKNode(child)) { if (child.type !== Comment || child.children === "k-if") { if (singleRoot) { return; } else { singleRoot = child; } } } else { return; } } return singleRoot; } const getFunctionalFallthrough = (attrs) => { let res; for (const key in attrs) { if (key === "class" || key === "style" || shared.isOn(key)) { (res || (res = {}))[key] = attrs[key]; } } return res; }; const filterModelListeners = (attrs, props) => { const res = {}; for (const key in attrs) { if (!shared.isModelListener(key) || !(key.slice(9) in props)) { res[key] = attrs[key]; } } return res; }; function shouldUpdateComponent(prevKNode, nextKNode, optimized) { const { props: prevProps, children: prevChildren, component } = prevKNode; const { props: nextProps, children: nextChildren, patchFlag } = nextKNode; const emits = component.emitsOptions; if (nextKNode.dirs || nextKNode.transition) { return true; } if (optimized && patchFlag >= 0) { if (patchFlag & 1024) { return true; } if (patchFlag & 16) { if (!prevProps) { return !!nextProps; } return hasPropsChanged(prevProps, nextProps, emits); } else if (patchFlag & 8) { const dynamicProps = nextKNode.dynamicProps; for (let i = 0; i < dynamicProps.length; i++) { const key = dynamicProps[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { return true; } } } } else { if (prevChildren || nextChildren) { if (!nextChildren || !nextChildren.$stable) { return true; } } if (prevProps === nextProps) { return false; } if (!prevProps) { return !!nextProps; } if (!nextProps) { return true; } return hasPropsChanged(prevProps, nextProps, emits); } return false; } function hasPropsChanged(prevProps, nextProps, emitsOptions) { const nextKeys = Object.keys(nextProps); if (nextKeys.length !== Object.keys(prevProps).length) { return true; } for (let i = 0; i < nextKeys.length; i++) { const key = nextKeys[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { return true; } } return false; } function updateHOCHostEl({ knode, parent }, el) { while (parent) { const root = parent.subTree; if (root.suspense && root.suspense.activeBranch === knode) { root.el = knode.el; } if (root === knode) { (knode = parent.knode).el = el; parent = parent.parent; } else { break; } } } const COMPONENTS = "components"; const DIRECTIVES = "directives"; function resolveComponent(name, maybeSelfReference) { return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; } const NULL_DYNAMIC_COMPONENT = Symbol.for("k-ndc"); function resolveDynamicComponent(component) { if (shared.isString(component)) { return resolveAsset(COMPONENTS, component, false) || component; } else { return component || NULL_DYNAMIC_COMPONENT; } } function resolveDirective(name) { return resolveAsset(DIRECTIVES, name); } function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { const instance = currentRenderingInstance || currentInstance; if (instance) { const Component = instance.type; if (type === COMPONENTS) { const selfName = getComponentName( Component, false ); if (selfName && (selfName === name || selfName === shared.camelize(name) || selfName === shared.capitalize(shared.camelize(name)))) { return Component; } } const res = ( // local registration // check instance[type] first which is resolved for options API resolve(instance[type] || Component[type], name) || // global registration resolve(instance.appContext[type], name) ); if (!res && maybeSelfReference) { return Component; } return res; } } function resolve(registry, name) { return registry && (registry[name] || registry[shared.camelize(name)] || registry[shared.capitalize(shared.camelize(name))]); } const isSuspense = (type) => type.__isSuspense; let suspenseId = 0; const SuspenseImpl = { name: "Suspense", // In order to make Suspense tree-shakable, we need to avoid importing it // directly in the renderer. The renderer checks for the __isSuspense flag // on a knode's type and calls the `process` method, passing in renderer // internals. __isSuspense: true, process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { if (n1 == null) { mountSuspense( n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals ); } else { if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) { n2.suspense = n1.suspense; n2.suspense.knode = n2; n2.el = n1.el; return; } patchSuspense( n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, rendererInternals ); } }, hydrate: hydrateSuspense, create: createSuspenseBoundary, normalize: normalizeSuspenseChildren }; const Suspense = SuspenseImpl ; function triggerEvent(knode, name) { const eventListener = knode.props && knode.props[name]; if (shared.isFunction(eventListener)) { eventListener(); } } function mountSuspense(knode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { const { p: patch, o: { createElement } } = rendererInternals; const hiddenContainer = createElement("div"); const suspense = knode.suspense = createSuspenseBoundary( knode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals ); patch( null, suspense.pendingBranch = knode.ssContent, hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds ); if (suspense.deps > 0) { triggerEvent(knode, "onPending"); triggerEvent(knode, "onFallback"); patch( null, knode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds ); setActiveBranch(suspense, knode.ssFallback); } else { suspense.resolve(false, true); } } function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) { const suspense = n2.suspense = n1.suspense; suspense.knode = n2; n2.el = n1.el; const newBranch = n2.ssContent; const newFallback = n2.ssFallback; const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; if (pendingBranch) { suspense.pendingBranch = newBranch; if (isSameKNodeType(newBranch, pendingBranch)) { patch( pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized ); if (suspense.deps <= 0) { suspense.resolve(); } else if (isInFallback) { if (!isHydrating) { patch( activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds, optimized ); setActiveBranch(suspense, newFallback); } } } else { suspense.pendingId = suspenseId++; if (isHydrating) { suspense.isHydrating = false; suspense.activeBranch = pendingBranch; } else { unmount(pendingBranch, parentComponent, suspense); } suspense.deps = 0; suspense.effects.length = 0; suspense.hiddenContainer = createElement("div"); if (isInFallback) { patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized ); if (suspense.deps <= 0) { suspense.resolve(); } else { patch( activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds, optimized ); setActiveBranch(suspense, newFallback); } } else if (activeBranch && isSameKNodeType(newBranch, activeBranch)) { patch( activeBranch, newBranch, container, anchor, parentComponent, suspense, namespace, slotScopeIds, optimized ); suspense.resolve(true); } else { patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized ); if (suspense.deps <= 0) { suspense.resolve(); } } } } else { if (activeBranch && isSameKNodeType(newBranch, activeBranch)) { patch( activeBranch, newBranch, container, anchor, parentComponent, suspense, namespace, slotScopeIds, optimized ); setActiveBranch(suspense, newBranch); } else { triggerEvent(n2, "onPending"); suspense.pendingBranch = newBranch; if (newBranch.shapeFlag & 512) { suspense.pendingId = newBranch.component.suspenseId; } else { suspense.pendingId = suspenseId++; } patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized ); if (suspense.deps <= 0) { suspense.resolve(); } else { const { timeout, pendingId } = suspense; if (timeout > 0) { setTimeout(() => { if (suspense.pendingId === pendingId) { suspense.fallback(newFallback); } }, timeout); } else if (timeout === 0) { suspense.fallback(newFallback); } } } } } function createSuspenseBoundary(knode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) { const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals; let parentSuspenseId; const isSuspensible = isKNodeSuspensible(knode); if (isSuspensible) { if (parentSuspense && parentSuspense.pendingBranch) { parentSuspenseId = parentSuspense.pendingId; parentSuspense.deps++; } } const timeout = knode.props ? shared.toNumber(knode.props.timeout) : void 0; const initialAnchor = anchor; const suspense = { knode, parent: parentSuspense, parentComponent, namespace, container, hiddenContainer, deps: 0, pendingId: suspenseId++, timeout: typeof timeout === "number" ? timeout : -1, activeBranch: null, pendingBranch: null, isInFallback: !isHydrating, isHydrating, isUnmounted: false, effects: [], resolve(resume = false, sync = false) { const { knode: knode2, activeBranch, pendingBranch, pendingId, effects, parentComponent: parentComponent2, container: container2 } = suspense; let delayEnter = false; if (suspense.isHydrating) { suspense.isHydrating = false; } else if (!resume) { delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; if (delayEnter) { activeBranch.transition.afterLeave = () => { if (pendingId === suspense.pendingId) { move( pendingBranch, container2, anchor === initialAnchor ? next(activeBranch) : anchor, 0 ); queuePostFlushCb(effects); } }; } if (activeBranch) { if (parentNode(activeBranch.el) !== suspense.hiddenContainer) { anchor = next(activeBranch); } unmount(activeBranch, parentComponent2, suspense, true); } if (!delayEnter) { move(pendingBranch, container2, anchor, 0); } } setActiveBranch(suspense, pendingBranch); suspense.pendingBranch = null; suspense.isInFallback = false; let parent = suspense.parent; let hasUnresolvedAncestor = false; while (parent) { if (parent.pendingBranch) { parent.effects.push(...effects); hasUnresolvedAncestor = true; break; } parent = parent.parent; } if (!hasUnresolvedAncestor && !delayEnter) { queuePostFlushCb(effects); } suspense.effects = []; if (isSuspensible) { if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) { parentSuspense.deps--; if (parentSuspense.deps === 0 && !sync) { parentSuspense.resolve(); } } } triggerEvent(knode2, "onResolve"); }, fallback(fallbackKNode) { if (!suspense.pendingBranch) { return; } const { knode: knode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense; triggerEvent(knode2, "onFallback"); const anchor2 = next(activeBranch); const mountFallback = () => { if (!suspense.isInFallback) { return; } patch( null, fallbackKNode, container2, anchor2, parentComponent2, null, // fallback tree will not have suspense context namespace2, slotScopeIds, optimized ); setActiveBranch(suspense, fallbackKNode); }; const delayEnter = fallbackKNode.transition && fallbackKNode.transition.mode === "out-in"; if (delayEnter) { activeBranch.transition.afterLeave = mountFallback; } suspense.isInFallback = true; unmount( activeBranch, parentComponent2, null, // no suspense so unmount hooks fire now true // shouldRemove ); if (!delayEnter) { mountFallback(); } }, move(container2, anchor2, type) { suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type); suspense.container = container2; }, next() { return suspense.activeBranch && next(suspense.activeBranch); }, registerDep(instance, setupRenderEffect) { const isInPendingSuspense = !!suspense.pendingBranch; if (isInPendingSuspense) { suspense.deps++; } const hydratedEl = instance.knode.el; instance.asyncDep.catch((err) => { handleError(err, instance, 0); }).then((asyncSetupResult) => { if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) { return; } instance.asyncResolved = true; const { knode: knode2 } = instance; handleSetupResult(instance, asyncSetupResult, false); if (hydratedEl) { knode2.el = hydratedEl; } const placeholder = !hydratedEl && instance.subTree.el; setupRenderEffect( instance, knode2, // component may have been moved before resolve. // if this is not a hydration, instance.subTree will be the comment // placeholder. parentNode(hydratedEl || instance.subTree.el), // anchor will not be used if this is hydration, so only need to // consider the comment placeholder case. hydratedEl ? null : next(instance.subTree), suspense, namespace, optimized ); if (placeholder) { remove(placeholder); } updateHOCHostEl(instance, knode2.el); if (isInPendingSuspense && --suspense.deps === 0) { suspense.resolve(); } }); }, unmount(parentSuspense2, doRemove) { suspense.isUnmounted = true; if (suspense.activeBranch) { unmount( suspense.activeBranch, parentComponent, parentSuspense2, doRemove ); } if (suspense.pendingBranch) { unmount( suspense.pendingBranch, parentComponent, parentSuspense2, doRemove ); } } }; return suspense; } function hydrateSuspense(node, knode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) { const suspense = knode.suspense = createSuspenseBoundary( knode, parentSuspense, parentComponent, node.parentNode, // eslint-disable-next-line no-restricted-globals document.createElement("div"), null, namespace, slotScopeIds, optimized, rendererInternals, true ); const result = hydrateNode( node, suspense.pendingBranch = knode.ssContent, parentComponent, suspense, slotScopeIds, optimized ); if (suspense.deps === 0) { suspense.resolve(false, true); } return result; } function normalizeSuspenseChildren(knode) { const { shapeFlag, children } = knode; const isSlotChildren = shapeFlag & 32; knode.ssContent = normalizeSuspenseSlot( isSlotChildren ? children.default : children ); knode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createKNode(Comment); } function normalizeSuspenseSlot(s) { let block; if (shared.isFunction(s)) { const trackBlock = isBlockTreeEnabled && s._c; if (trackBlock) { s._d = false; openBlock(); } s = s(); if (trackBlock) { s._d = true; block = currentBlock; closeBlock(); } } if (shared.isArray(s)) { const singleChild = filterSingleRoot(s); s = singleChild; } s = normalizeKNode(s); if (block && !s.dynamicChildren) { s.dynamicChildren = block.filter((c) => c !== s); } return s; } function queueEffectWithSuspense(fn, suspense) { if (suspense && suspense.pendingBranch) { if (shared.isArray(fn)) { suspense.effects.push(...fn); } else { suspense.effects.push(fn); } } else { queuePostFlushCb(fn); } } function setActiveBranch(suspense, branch) { suspense.activeBranch = branch; const { knode, parentComponent } = suspense; let el = branch.el; while (!el && branch.component) { branch = branch.component.subTree; el = branch.el; } knode.el = el; if (parentComponent && parentComponent.subTree === knode) { parentComponent.knode.el = el; updateHOCHostEl(parentComponent, el); } } function isKNodeSuspensible(knode) { const suspensible = knode.props && knode.props.suspensible; return suspensible != null && suspensible !== false; } const ssrContextKey = Symbol.for("k-scx"); const useSSRContext = () => { { const ctx = inject(ssrContextKey); return ctx; } }; function watchEffect(effect, options) { return doWatch(effect, null, options); } function watchPostEffect(effect, options) { return doWatch( effect, null, { flush: "post" } ); } function watchSyncEffect(effect, options) { return doWatch( effect, null, { flush: "sync" } ); } const INITIAL_WATCHER_VALUE = {}; function watch(source, cb, options) { return doWatch(source, cb, options); } function doWatch(source, cb, { immediate, deep, flush, once, onTrack, onTrigger } = shared.EMPTY_OBJ) { if (cb && once) { const _cb = cb; cb = (...args) => { _cb(...args); unwatch(); }; } const instance = currentInstance; const reactiveGetter = (source2) => deep === true ? source2 : ( // for deep: false, only traverse root-level properties traverse(source2, deep === false ? 1 : void 0) ); let getter; let forceTrigger = false; let isMultiSource = false; if (reactivity.isRef(source)) { getter = () => source.value; forceTrigger = reactivity.isShallow(source); } else if (reactivity.isReactive(source)) { getter = () => reactiveGetter(source); forceTrigger = true; } else if (shared.isArray(source)) { isMultiSource = true; forceTrigger = source.some((s) => reactivity.isReactive(s) || reactivity.isShallow(s)); getter = () => source.map((s) => { if (reactivity.isRef(s)) { return s.value; } else if (reactivity.isReactive(s)) { return reactiveGetter(s); } else if (shared.isFunction(s)) { return callWithErrorHandling(s, instance, 2); } else ; }); } else if (shared.isFunction(source)) { if (cb) { getter = () => callWithErrorHandling(source, instance, 2); } else { getter = () => { if (cleanup) { cleanup(); } return callWithAsyncErrorHandling( source, instance, 3, [onCleanup] ); }; } } else { getter = shared.NOOP; } if (cb && deep) { const baseGetter = getter; getter = () => traverse(baseGetter()); } let cleanup; let onCleanup = (fn) => { cleanup = effect.onStop = () => { callWithErrorHandling(fn, instance, 4); cleanup = effect.onStop = void 0; }; }; let ssrCleanup; if (isInSSRComponentSetup) { onCleanup = shared.NOOP; if (!cb) { getter(); } else if (immediate) { callWithAsyncErrorHandling(cb, instance, 3, [ getter(), isMultiSource ? [] : void 0, onCleanup ]); } if (flush === "sync") { const ctx = useSSRContext(); ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); } else { return shared.NOOP; } } let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; const job = () => { if (!effect.active || !effect.dirty) { return; } if (cb) { const newValue = effect.run(); if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => shared.hasChanged(v, oldValue[i])) : shared.hasChanged(newValue, oldValue)) || false) { if (cleanup) { cleanup(); } callWithAsyncErrorHandling(cb, instance, 3, [ newValue, // pass undefined as the old value when it's changed for the first time oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, onCleanup ]); oldValue = newValue; } } else { effect.run(); } }; job.allowRecurse = !!cb; let scheduler; if (flush === "sync") { scheduler = job; } else if (flush === "post") { scheduler = () => queuePostRenderEffect(job, instance && instance.suspense); } else { job.pre = true; if (instance) job.id = instance.uid; scheduler = () => queueJob(job); } const effect = new reactivity.ReactiveEffect(getter, shared.NOOP, scheduler); const scope = reactivity.getCurrentScope(); const unwatch = () => { effect.stop(); if (scope) { shared.remove(scope.effects, effect); } }; if (cb) { if (immediate) { job(); } else { oldValue = effect.run(); } } else if (flush === "post") { queuePostRenderEffect( effect.run.bind(effect), instance && instance.suspense ); } else { effect.run(); } if (ssrCleanup) ssrCleanup.push(unwatch); return unwatch; } function instanceWatch(source, value, options) { const publicThis = this.proxy; const getter = shared.isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); let cb; if (shared.isFunction(value)) { cb = value; } else { cb = value.handler; options = value; } const reset = setCurrentInstance(this); const res = doWatch(getter, cb.bind(publicThis), options); reset(); return res; } function createPathGetter(ctx, path) { const segments = path.split("."); return () => { let cur = ctx; for (let i = 0; i < segments.length && cur; i++) { cur = cur[segments[i]]; } return cur; }; } function traverse(value, depth = Infinity, seen) { if (depth <= 0 || !shared.isObject(value) || value["__k_skip"]) { return value; } seen = seen || /* @__PURE__ */ new Set(); if (seen.has(value)) { return value; } seen.add(value); depth--; if (reactivity.isRef(value)) { traverse(value.value, depth, seen); } else if (shared.isArray(value)) { for (let i = 0; i < value.length; i++) { traverse(value[i], depth, seen); } } else if (shared.isSet(value) || shared.isMap(value)) { value.forEach((v) => { traverse(v, depth, seen); }); } else if (shared.isPlainObject(value)) { for (const key in value) { traverse(value[key], depth, seen); } } return value; } function withDirectives(knode, directives) { if (currentRenderingInstance === null) { return knode; } const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy; const bindings = knode.dirs || (knode.dirs = []); for (let i = 0; i < directives.length; i++) { let [dir, value, arg, modifiers = shared.EMPTY_OBJ] = directives[i]; if (dir) { if (shared.isFunction(dir)) { dir = { mounted: dir, updated: dir }; } if (dir.deep) { traverse(value); } bindings.push({ dir, instance, value, oldValue: void 0, arg, modifiers }); } } return knode; } function invokeDirectiveHook(knode, prevKNode, instance, name) { const bindings = knode.dirs; const oldBindings = prevKNode && prevKNode.dirs; for (let i = 0; i < bindings.length; i++) { const binding = bindings[i]; if (oldBindings) { binding.oldValue = oldBindings[i].value; } let hook = binding.dir[name]; if (hook) { reactivity.pauseTracking(); callWithAsyncErrorHandling(hook, instance, 8, [ knode.el, binding, knode, prevKNode ]); reactivity.resetTracking(); } } } const leaveCbKey = Symbol("_leaveCb"); const enterCbKey = Symbol("_enterCb"); function useTransitionState() { const state = { isMounted: false, isLeaving: false, isUnmounting: false, leavingKNodes: /* @__PURE__ */ new Map() }; onMounted(() => { state.isMounted = true; }); onBeforeUnmount(() => { state.isUnmounting = true; }); return state; } const TransitionHookValidator = [Function, Array]; const BaseTransitionPropsValidators = { mode: String, appear: Boolean, persisted: Boolean, // enter onBeforeEnter: TransitionHookValidator, onEnter: TransitionHookValidator, onAfterEnter: TransitionHookValidator, onEnterCancelled: TransitionHookValidator, // leave onBeforeLeave: TransitionHookValidator, onLeave: TransitionHookValidator, onAfterLeave: TransitionHookValidator, onLeaveCancelled: TransitionHookValidator, // appear onBeforeAppear: TransitionHookValidator, onAppear: TransitionHookValidator, onAfterAppear: TransitionHookValidator, onAppearCancelled: TransitionHookValidator }; const BaseTransitionImpl = { name: `BaseTransition`, props: BaseTransitionPropsValidators, setup(props, { slots }) { const instance = getCurrentInstance(); const state = useTransitionState(); return () => { const children = slots.default && getTransitionRawChildren(slots.default(), true); if (!children || !children.length) { return; } let child = children[0]; if (children.length > 1) { for (const c of children) { if (c.type !== Comment) { child = c; break; } } } const rawProps = reactivity.toRaw(props); const { mode } = rawProps; if (state.isLeaving) { return emptyPlaceholder(child); } const innerChild = getKeepAliveChild(child); if (!innerChild) { return emptyPlaceholder(child); } const enterHooks = resolveTransitionHooks( innerChild, rawProps, state, instance ); setTransitionHooks(innerChild, enterHooks); const oldChild = instance.subTree; const oldInnerChild = oldChild && getKeepAliveChild(oldChild); if (oldInnerChild && oldInnerChild.type !== Comment && !isSameKNodeType(innerChild, oldInnerChild)) { const leavingHooks = resolveTransitionHooks( oldInnerChild, rawProps, state, instance ); setTransitionHooks(oldInnerChild, leavingHooks); if (mode === "out-in" && innerChild.type !== Comment) { state.isLeaving = true; leavingHooks.afterLeave = () => { state.isLeaving = false; if (instance.update.active !== false) { instance.effect.dirty = true; instance.update(); } }; return emptyPlaceholder(child); } else if (mode === "in-out" && innerChild.type !== Comment) { leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { const leavingKNodesCache = getLeavingNodesForType( state, oldInnerChild ); leavingKNodesCache[String(oldInnerChild.key)] = oldInnerChild; el[leaveCbKey] = () => { earlyRemove(); el[leaveCbKey] = void 0; delete enterHooks.delayedLeave; }; enterHooks.delayedLeave = delayedLeave; }; } } return child; }; } }; const BaseTransition = BaseTransitionImpl; function getLeavingNodesForType(state, knode) { const { leavingKNodes } = state; let leavingKNodesCache = leavingKNodes.get(knode.type); if (!leavingKNodesCache) { leavingKNodesCache = /* @__PURE__ */ Object.create(null); leavingKNodes.set(knode.type, leavingKNodesCache); } return leavingKNodesCache; } function resolveTransitionHooks(knode, props, state, instance) { const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props; const key = String(knode.key); const leavingKNodesCache = getLeavingNodesForType(state, knode); const callHook = (hook, args) => { hook && callWithAsyncErrorHandling( hook, instance, 9, args ); }; const callAsyncHook = (hook, args) => { const done = args[1]; callHook(hook, args); if (shared.isArray(hook)) { if (hook.every((hook2) => hook2.length <= 1)) done(); } else if (hook.length <= 1) { done(); } }; const hooks = { mode, persisted, beforeEnter(el) { let hook = onBeforeEnter; if (!state.isMounted) { if (appear) { hook = onBeforeAppear || onBeforeEnter; } else { return; } } if (el[leaveCbKey]) { el[leaveCbKey]( true /* cancelled */ ); } const leavingKNode = leavingKNodesCache[key]; if (leavingKNode && isSameKNodeType(knode, leavingKNode) && leavingKNode.el[leaveCbKey]) { leavingKNode.el[leaveCbKey](); } callHook(hook, [el]); }, enter(el) { let hook = onEnter; let afterHook = onAfterEnter; let cancelHook = onEnterCancelled; if (!state.isMounted) { if (appear) { hook = onAppear || onEnter; afterHook = onAfterAppear || onAfterEnter; cancelHook = onAppearCancelled || onEnterCancelled; } else { return; } } let called = false; const done = el[enterCbKey] = (cancelled) => { if (called) return; called = true; if (cancelled) { callHook(cancelHook, [el]); } else { callHook(afterHook, [el]); } if (hooks.delayedLeave) { hooks.delayedLeave(); } el[enterCbKey] = void 0; }; if (hook) { callAsyncHook(hook, [el, done]); } else { done(); } }, leave(el, remove) { const key2 = String(knode.key); if (el[enterCbKey]) { el[enterCbKey]( true /* cancelled */ ); } if (state.isUnmounting) { return remove(); } callHook(onBeforeLeave, [el]); let called = false; const done = el[leaveCbKey] = (cancelled) => { if (called) return; called = true; remove(); if (cancelled) { callHook(onLeaveCancelled, [el]); } else { callHook(onAfterLeave, [el]); } el[leaveCbKey] = void 0; if (leavingKNodesCache[key2] === knode) { delete leavingKNodesCache[key2]; } }; leavingKNodesCache[key2] = knode; if (onLeave) { callAsyncHook(onLeave, [el, done]); } else { done(); } }, clone(knode2) { return resolveTransitionHooks(knode2, props, state, instance); } }; return hooks; } function emptyPlaceholder(knode) { if (isKeepAlive(knode)) { knode = cloneKNode(knode); knode.children = null; return knode; } } function getKeepAliveChild(knode) { if (!isKeepAlive(knode)) { return knode; } const { shapeFlag, children } = knode; if (children) { if (shapeFlag & 16) { return children[0]; } if (shapeFlag & 32 && shared.isFunction(children.default)) { return children.default(); } } } function setTransitionHooks(knode, hooks) { if (knode.shapeFlag & 6 && knode.component) { setTransitionHooks(knode.component.subTree, hooks); } else if (knode.shapeFlag & 128) { knode.ssContent.transition = hooks.clone(knode.ssContent); knode.ssFallback.transition = hooks.clone(knode.ssFallback); } else { knode.transition = hooks; } } function getTransitionRawChildren(children, keepComment = false, parentKey) { let ret = []; let keyedFragmentCount = 0; for (let i = 0; i < children.length; i++) { let child = children[i]; const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); if (child.type === Fragment) { if (child.patchFlag & 128) keyedFragmentCount++; ret = ret.concat( getTransitionRawChildren(child.children, keepComment, key) ); } else if (keepComment || child.type !== Comment) { ret.push(key != null ? cloneKNode(child, { key }) : child); } } if (keyedFragmentCount > 1) { for (let i = 0; i < ret.length; i++) { ret[i].patchFlag = -2; } } return ret; } /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function defineComponent(options, extraOptions) { return shared.isFunction(options) ? ( // #8326: extend call and options.name access are considered side-effects // by Rollup, so we have to wrap it in