export default function vueFactory(exports) { /** * Make a map and return a function for checking if a key * is in that map. * IMPORTANT: all calls of this function must be prefixed with * \/\*#\_\_PURE\_\_\*\/ * So that rollup can tree-shake them if necessary. */ var extend$1 = Object.assign; var cacheStringFunction$1 = fn => { var cache = Object.create(null); return str => { var hit = cache[str]; return hit || (cache[str] = fn(str)); }; }; var camelizeRE$1 = /-(\w)/g; /** * @private */ var camelize$1 = cacheStringFunction$1(str => { return str.replace(camelizeRE$1, (_, c) => c ? c.toUpperCase() : ''); }); var hyphenateRE$1 = /\B([A-Z])/g; /** * @private */ var hyphenate$1 = cacheStringFunction$1(str => str.replace(hyphenateRE$1, '-$1').toLowerCase()); /** * @private */ var capitalize$1 = cacheStringFunction$1(str => str.charAt(0).toUpperCase() + str.slice(1)); var JSON_PROTOCOL = 'json://'; // lifecycle // App and Page var ON_SHOW = 'onShow'; var ON_HIDE = 'onHide'; //Page var ON_LOAD = 'onLoad'; var ON_UNLOAD = 'onUnload'; var ON_BACK_PRESS = 'onBackPress'; var ON_PAGE_SCROLL = 'onPageScroll'; var ON_TAB_ITEM_TAP = 'onTabItemTap'; var ON_REACH_BOTTOM = 'onReachBottom'; var ON_PULL_DOWN_REFRESH = 'onPullDownRefresh'; var ON_SHARE_TIMELINE = 'onShareTimeline'; var ON_ADD_TO_FAVORITES = 'onAddToFavorites'; var ON_SHARE_APP_MESSAGE = 'onShareAppMessage'; // navigationBar var ON_NAVIGATION_BAR_BUTTON_TAP = 'onNavigationBarButtonTap'; var ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = 'onNavigationBarSearchInputClicked'; var ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = 'onNavigationBarSearchInputChanged'; var ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = 'onNavigationBarSearchInputConfirmed'; var ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = 'onNavigationBarSearchInputFocusChanged'; function isElement(el) { // Element return el.nodeType === 1; } function resolveOwnerEl(instance) { var { vnode } = instance; if (isElement(vnode.el)) { return vnode.el; } var { subTree } = instance; // ShapeFlags.ARRAY_CHILDREN = 1<<4 if (subTree.shapeFlag & 16) { var elemVNode = subTree.children.find(vnode => isElement(vnode.el)); if (elemVNode) { return elemVNode.el; } } return vnode.el; } class DOMException extends Error { constructor(message) { super(message); this.name = 'DOMException'; } } function normalizeEventType(type, options) { if (options) { if (options.capture) { type += 'Capture'; } if (options.once) { type += 'Once'; } if (options.passive) { type += 'Passive'; } } return "on".concat(capitalize$1(camelize$1(type))); } class UniEvent { constructor(type, opts) { this.defaultPrevented = false; this.timeStamp = Date.now(); this._stop = false; this._end = false; this.type = type; this.bubbles = !!opts.bubbles; this.cancelable = !!opts.cancelable; } preventDefault() { this.defaultPrevented = true; } stopImmediatePropagation() { this._end = this._stop = true; } stopPropagation() { this._stop = true; } } function createUniEvent(evt) { if (evt instanceof UniEvent) { return evt; } var [type] = parseEventName(evt.type); var uniEvent = new UniEvent(type, { bubbles: false, cancelable: false }); extend$1(uniEvent, evt); return uniEvent; } class UniEventTarget { constructor() { this.listeners = Object.create(null); } dispatchEvent(evt) { var listeners = this.listeners[evt.type]; if (!listeners) { return false; } // 格式化事件类型 var event = createUniEvent(evt); var len = listeners.length; for (var i = 0; i < len; i++) { listeners[i].call(this, event); if (event._end) { break; } } return event.cancelable && event.defaultPrevented; } addEventListener(type, listener, options) { type = normalizeEventType(type, options); (this.listeners[type] || (this.listeners[type] = [])).push(listener); } removeEventListener(type, callback, options) { type = normalizeEventType(type, options); var listeners = this.listeners[type]; if (!listeners) { return; } var index = listeners.indexOf(callback); if (index > -1) { listeners.splice(index, 1); } } } var optionsModifierRE$1 = /(?:Once|Passive|Capture)$/; function parseEventName(name) { var options; if (optionsModifierRE$1.test(name)) { options = {}; var m; while (m = name.match(optionsModifierRE$1)) { name = name.slice(0, name.length - m[0].length); options[m[0].toLowerCase()] = true; } } return [hyphenate$1(name.slice(2)), options]; } var EventModifierFlags = { stop: 1, prevent: 1 << 1, self: 1 << 2 }; function encodeModifier(modifiers) { var flag = 0; if (modifiers.includes('stop')) { flag |= EventModifierFlags.stop; } if (modifiers.includes('prevent')) { flag |= EventModifierFlags.prevent; } if (modifiers.includes('self')) { flag |= EventModifierFlags.self; } return flag; } var NODE_TYPE_ELEMENT = 1; var NODE_TYPE_TEXT = 3; var NODE_TYPE_COMMENT = 8; function sibling(node, type) { var { parentNode } = node; if (!parentNode) { return null; } var { childNodes } = parentNode; return childNodes[childNodes.indexOf(node) + (type === 'n' ? 1 : -1)] || null; } function removeNode(node) { var { parentNode } = node; if (parentNode) { parentNode.removeChild(node); } } function checkNodeId(node) { if (!node.nodeId && node.pageNode) { node.nodeId = node.pageNode.genId(); } } // 为优化性能,各平台不使用proxy来实现node的操作拦截,而是直接通过pageNode定制 class UniNode extends UniEventTarget { constructor(nodeType, nodeName, container) { super(); this.pageNode = null; this.parentNode = null; this._text = null; if (container) { var { pageNode } = container; if (pageNode) { this.pageNode = pageNode; this.nodeId = pageNode.genId(); !pageNode.isUnmounted && pageNode.onCreate(this, nodeName); } } this.nodeType = nodeType; this.nodeName = nodeName; this.childNodes = []; } get firstChild() { return this.childNodes[0] || null; } get lastChild() { var { childNodes } = this; var length = childNodes.length; return length ? childNodes[length - 1] : null; } get nextSibling() { return sibling(this, 'n'); } get nodeValue() { return null; } set nodeValue(_val) {} get textContent() { return this._text || ''; } set textContent(text) { this._text = text; if (this.pageNode && !this.pageNode.isUnmounted) { this.pageNode.onTextContent(this, text); } } get parentElement() { var { parentNode } = this; if (parentNode && parentNode.nodeType === NODE_TYPE_ELEMENT) { return parentNode; } return null; } get previousSibling() { return sibling(this, 'p'); } appendChild(newChild) { return this.insertBefore(newChild, null); } cloneNode(deep) { var cloned = extend$1(Object.create(Object.getPrototypeOf(this)), this); var { attributes } = cloned; if (attributes) { cloned.attributes = extend$1({}, attributes); } if (deep) { cloned.childNodes = cloned.childNodes.map(childNode => childNode.cloneNode(true)); } return cloned; } insertBefore(newChild, refChild) { removeNode(newChild); newChild.pageNode = this.pageNode; newChild.parentNode = this; checkNodeId(newChild); var { childNodes } = this; if (refChild) { var index = childNodes.indexOf(refChild); if (index === -1) { throw new DOMException("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node."); } childNodes.splice(index, 0, newChild); } else { childNodes.push(newChild); } return this.pageNode && !this.pageNode.isUnmounted ? this.pageNode.onInsertBefore(this, newChild, refChild) : newChild; } removeChild(oldChild) { var { childNodes } = this; var index = childNodes.indexOf(oldChild); if (index === -1) { throw new DOMException("Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node."); } oldChild.parentNode = null; childNodes.splice(index, 1); return this.pageNode && !this.pageNode.isUnmounted ? this.pageNode.onRemoveChild(oldChild) : oldChild; } } var ATTR_CLASS = 'class'; var ATTR_STYLE = 'style'; var ATTR_V_OWNER_ID = '.vOwnerId'; var ATTR_V_RENDERJS = '.vRenderjs'; class UniBaseNode extends UniNode { constructor(nodeType, nodeName, container) { super(nodeType, nodeName, container); this.attributes = Object.create(null); this.style = null; this.vShow = null; this._html = null; } get className() { return this.attributes[ATTR_CLASS] || ''; } set className(val) { this.setAttribute(ATTR_CLASS, val); } get innerHTML() { return ''; } set innerHTML(html) { this._html = html; } addEventListener(type, listener, options) { super.addEventListener(type, listener, options); if (this.pageNode && !this.pageNode.isUnmounted) { if (listener.wxsEvent) { this.pageNode.onAddWxsEvent(this, normalizeEventType(type, options), listener.wxsEvent, encodeModifier(listener.modifiers || [])); } else { this.pageNode.onAddEvent(this, normalizeEventType(type, options), encodeModifier(listener.modifiers || [])); } } } removeEventListener(type, callback, options) { super.removeEventListener(type, callback, options); if (this.pageNode && !this.pageNode.isUnmounted) { this.pageNode.onRemoveEvent(this, normalizeEventType(type, options)); } } getAttribute(qualifiedName) { if (qualifiedName === ATTR_STYLE) { return this.style; } return this.attributes[qualifiedName]; } removeAttribute(qualifiedName) { if (qualifiedName == ATTR_STYLE) { this.style = null; } else { delete this.attributes[qualifiedName]; } if (this.pageNode && !this.pageNode.isUnmounted) { this.pageNode.onRemoveAttribute(this, qualifiedName); } } setAttribute(qualifiedName, value) { if (qualifiedName === ATTR_STYLE) { this.style = value; } else { this.attributes[qualifiedName] = value; } if (this.pageNode && !this.pageNode.isUnmounted) { this.pageNode.onSetAttribute(this, qualifiedName, value); } } toJSON() { var { attr, normalize } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var { attributes, style, listeners, _text } = this; var res = {}; if (Object.keys(attributes).length) { res.a = normalize ? normalize(attributes) : attributes; } var events = Object.keys(listeners); if (events.length) { var w = undefined; var e = {}; events.forEach(name => { var handlers = listeners[name]; if (handlers.length) { // 可能存在多个 handler 且不同 modifiers 吗? var { wxsEvent, modifiers } = handlers[0]; var modifier = encodeModifier(modifiers || []); if (!wxsEvent) { e[name] = modifier; } else { if (!w) { w = {}; } w[name] = [normalize ? normalize(wxsEvent) : wxsEvent, modifier]; } } }); res.e = normalize ? normalize(e, false) : e; if (w) { res.w = normalize ? normalize(w, false) : w; } } if (style !== null) { res.s = normalize ? normalize(style) : style; } if (!attr) { res.i = this.nodeId; res.n = this.nodeName; } if (_text !== null) { res.t = normalize ? normalize(_text) : _text; } return res; } } class UniCommentNode extends UniNode { constructor(text, container) { super(NODE_TYPE_COMMENT, '#comment', container); this._text = ''; } toJSON() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // 暂时不传递 text 到 view 层,没啥意义,节省点数据量 return opts.attr ? {} : { i: this.nodeId }; // return opts.attr // ? { t: this._text as string } // : { // i: this.nodeId!, // t: this._text as string, // } } } class UniElement extends UniBaseNode { constructor(nodeName, container) { super(NODE_TYPE_ELEMENT, nodeName.toUpperCase(), container); this.tagName = this.nodeName; } } class UniInputElement extends UniElement { get value() { return this.getAttribute('value'); } set value(val) { this.setAttribute('value', val); } } class UniTextAreaElement extends UniInputElement {} class UniTextNode extends UniBaseNode { constructor(text, container) { super(NODE_TYPE_TEXT, '#text', container); this._text = text; } get nodeValue() { return this._text || ''; } set nodeValue(text) { this._text = text; if (this.pageNode && !this.pageNode.isUnmounted) { this.pageNode.onNodeValue(this, text); } } } var forcePatchProps = { AD: ['data'], 'AD-DRAW': ['data'], 'LIVE-PLAYER': ['picture-in-picture-mode'], MAP: ['markers', 'polyline', 'circles', 'controls', 'include-points', 'polygons'], PICKER: ['range', 'value'], 'PICKER-VIEW': ['value'], 'RICH-TEXT': ['nodes'], VIDEO: ['danmu-list', 'header'], 'WEB-VIEW': ['webview-styles'] }; var forcePatchPropKeys = ['animation']; var forcePatchProp = (el, key) => { if (forcePatchPropKeys.indexOf(key) > -1) { return true; } var keys = forcePatchProps[el.nodeName]; if (keys && keys.indexOf(key) > -1) { return true; } return false; }; var PAGE_HOOKS = [ON_LOAD, ON_SHOW, ON_HIDE, ON_UNLOAD, ON_BACK_PRESS, ON_PAGE_SCROLL, ON_TAB_ITEM_TAP, ON_REACH_BOTTOM, ON_PULL_DOWN_REFRESH, ON_SHARE_TIMELINE, ON_SHARE_APP_MESSAGE, ON_ADD_TO_FAVORITES, ON_NAVIGATION_BAR_BUTTON_TAP, ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED, ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED, ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED, ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED]; function isRootHook(name) { return PAGE_HOOKS.indexOf(name) > -1; } /** * Make a map and return a function for checking if a key * is in that map. * IMPORTANT: all calls of this function must be prefixed with * \/\*#\_\_PURE\_\_\*\/ * So that rollup can tree-shake them if necessary. */ function makeMap(str, expectsLowerCase) { var map = Object.create(null); var list = str.split(','); for (var i = 0; i < list.length; i++) { map[list[i]] = true; } return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val]; } var GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' + 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' + 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt'; var isGloballyWhitelisted = /*#__PURE__*/makeMap(GLOBALS_WHITE_LISTED); function normalizeStyle(value) { if (isArray(value)) { var res = {}; for (var i = 0; i < value.length; i++) { var item = value[i]; var normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); if (normalized) { for (var key in normalized) { res[key] = normalized[key]; } } } return res; } else if (isString(value)) { return value; } else if (isObject(value)) { return value; } } var listDelimiterRE = /;(?![^(]*\))/g; var propertyDelimiterRE = /:(.+)/; function parseStringStyle(cssText) { var ret = {}; cssText.split(listDelimiterRE).forEach(item => { if (item) { var tmp = item.split(propertyDelimiterRE); tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); } }); return ret; } function normalizeClass(value) { var res = ''; if (isString(value)) { res = value; } else if (isArray(value)) { for (var i = 0; i < value.length; i++) { var normalized = normalizeClass(value[i]); if (normalized) { res += normalized + ' '; } } } else if (isObject(value)) { for (var name in value) { if (value[name]) { res += name + ' '; } } } return res.trim(); } function normalizeProps(props) { if (!props) return null; var { class: klass, style } = props; if (klass && !isString(klass)) { props.class = normalizeClass(klass); } if (style) { props.style = normalizeStyle(style); } return props; } /** * For converting {{ interpolation }} values to displayed strings. * @private */ var toDisplayString = val => { return val == null ? '' : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val); }; var replacer = (_key, val) => { // can't use isRef here since @vue/shared has no deps if (val && val.__v_isRef) { return replacer(_key, val.value); } else if (isMap(val)) { return { ["Map(".concat(val.size, ")")]: [...val.entries()].reduce((entries, _ref) => { var [key, val] = _ref; entries["".concat(key, " =>")] = val; return entries; }, {}) }; } else if (isSet(val)) { return { ["Set(".concat(val.size, ")")]: [...val.values()] }; } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { return String(val); } return val; }; var EMPTY_OBJ = {}; var EMPTY_ARR = []; var NOOP = () => {}; /** * Always return false. */ var NO = () => false; var onRE = /^on[^a-z]/; var isOn = key => onRE.test(key); var isModelListener = key => key.startsWith('onUpdate:'); var extend = Object.assign; var remove = (arr, el) => { var i = arr.indexOf(el); if (i > -1) { arr.splice(i, 1); } }; var hasOwnProperty = Object.prototype.hasOwnProperty; var hasOwn = (val, key) => hasOwnProperty.call(val, key); var isArray = Array.isArray; var isMap = val => toTypeString(val) === '[object Map]'; var isSet = val => toTypeString(val) === '[object Set]'; var isFunction = val => typeof val === 'function'; var isString = val => typeof val === 'string'; var isSymbol = val => typeof val === 'symbol'; var isObject = val => val !== null && typeof val === 'object'; var isPromise = val => { return isObject(val) && isFunction(val.then) && isFunction(val.catch); }; var objectToString = Object.prototype.toString; var toTypeString = value => objectToString.call(value); var toRawType = value => { // extract "RawType" from strings like "[object RawType]" return toTypeString(value).slice(8, -1); }; var isPlainObject = val => toTypeString(val) === '[object Object]'; var isIntegerKey = key => isString(key) && key !== 'NaN' && key[0] !== '-' && '' + parseInt(key, 10) === key; var isReservedProp = /*#__PURE__*/makeMap( // the leading comma is intentional so empty string "" is also included ',key,ref,' + 'onVnodeBeforeMount,onVnodeMounted,' + 'onVnodeBeforeUpdate,onVnodeUpdated,' + 'onVnodeBeforeUnmount,onVnodeUnmounted'); var cacheStringFunction = fn => { var cache = Object.create(null); return str => { var hit = cache[str]; return hit || (cache[str] = fn(str)); }; }; var camelizeRE = /-(\w)/g; /** * @private */ var camelize = cacheStringFunction(str => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ''); }); var hyphenateRE = /\B([A-Z])/g; /** * @private */ var hyphenate = cacheStringFunction(str => str.replace(hyphenateRE, '-$1').toLowerCase()); /** * @private */ var capitalize = cacheStringFunction(str => str.charAt(0).toUpperCase() + str.slice(1)); /** * @private */ var toHandlerKey = cacheStringFunction(str => str ? "on".concat(capitalize(str)) : ""); // compare whether a value has changed, accounting for NaN. var hasChanged = (value, oldValue) => !Object.is(value, oldValue); var invokeArrayFns = (fns, arg) => { for (var i = 0; i < fns.length; i++) { fns[i](arg); } }; var def = (obj, key, value) => { Object.defineProperty(obj, key, { configurable: true, enumerable: false, value }); }; var toNumber = val => { var n = parseFloat(val); return isNaN(n) ? val : n; }; var _globalThis; var getGlobalThis = () => { return _globalThis || (_globalThis = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}); }; var activeEffectScope; var effectScopeStack = []; class EffectScope { constructor() { var detached = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.active = true; this.effects = []; this.cleanups = []; if (!detached && activeEffectScope) { this.parent = activeEffectScope; this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; } } run(fn) { if (this.active) { try { this.on(); return fn(); } finally { this.off(); } } } on() { if (this.active) { effectScopeStack.push(this); activeEffectScope = this; } } off() { if (this.active) { effectScopeStack.pop(); activeEffectScope = effectScopeStack[effectScopeStack.length - 1]; } } stop(fromParent) { if (this.active) { this.effects.forEach(e => e.stop()); this.cleanups.forEach(cleanup => cleanup()); if (this.scopes) { this.scopes.forEach(e => e.stop(true)); } // nested scope, dereference from parent to avoid memory leaks if (this.parent && !fromParent) { // optimized O(1) removal var last = this.parent.scopes.pop(); if (last && last !== this) { this.parent.scopes[this.index] = last; last.index = this.index; } } this.active = false; } } } function effectScope(detached) { return new EffectScope(detached); } function recordEffectScope(effect, scope) { scope = scope || activeEffectScope; if (scope && scope.active) { scope.effects.push(effect); } } function getCurrentScope() { return activeEffectScope; } function onScopeDispose(fn) { if (activeEffectScope) { activeEffectScope.cleanups.push(fn); } } var createDep = effects => { var dep = new Set(effects); dep.w = 0; dep.n = 0; return dep; }; var wasTracked = dep => (dep.w & trackOpBit) > 0; var newTracked = dep => (dep.n & trackOpBit) > 0; var initDepMarkers = _ref2 => { var { deps } = _ref2; if (deps.length) { for (var i = 0; i < deps.length; i++) { deps[i].w |= trackOpBit; // set was tracked } } }; var finalizeDepMarkers = effect => { var { deps } = effect; if (deps.length) { var ptr = 0; for (var i = 0; i < deps.length; i++) { var dep = deps[i]; if (wasTracked(dep) && !newTracked(dep)) { dep.delete(effect); } else { deps[ptr++] = dep; } // clear bits dep.w &= ~trackOpBit; dep.n &= ~trackOpBit; } deps.length = ptr; } }; var targetMap = new WeakMap(); // The number of effects currently being tracked recursively. var effectTrackDepth = 0; var trackOpBit = 1; /** * The bitwise track markers support at most 30 levels of recursion. * This value is chosen to enable modern JS engines to use a SMI on all platforms. * When recursion depth is greater, fall back to using a full cleanup. */ var maxMarkerBits = 30; var effectStack = []; var activeEffect; var ITERATE_KEY = Symbol(''); var MAP_KEY_ITERATE_KEY = Symbol(''); class ReactiveEffect { constructor(fn) { var scheduler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var scope = arguments.length > 2 ? arguments[2] : undefined; this.fn = fn; this.scheduler = scheduler; this.active = true; this.deps = []; recordEffectScope(this, scope); } run() { if (!this.active) { return this.fn(); } if (!effectStack.includes(this)) { try { effectStack.push(activeEffect = this); enableTracking(); trackOpBit = 1 << ++effectTrackDepth; if (effectTrackDepth <= maxMarkerBits) { initDepMarkers(this); } else { cleanupEffect(this); } return this.fn(); } finally { if (effectTrackDepth <= maxMarkerBits) { finalizeDepMarkers(this); } trackOpBit = 1 << --effectTrackDepth; resetTracking(); effectStack.pop(); var n = effectStack.length; activeEffect = n > 0 ? effectStack[n - 1] : undefined; } } } stop() { if (this.active) { cleanupEffect(this); if (this.onStop) { this.onStop(); } this.active = false; } } } function cleanupEffect(effect) { var { deps } = effect; if (deps.length) { for (var i = 0; i < deps.length; i++) { deps[i].delete(effect); } deps.length = 0; } } function effect(fn, options) { if (fn.effect) { fn = fn.effect.fn; } var _effect = new ReactiveEffect(fn); if (options) { extend(_effect, options); if (options.scope) recordEffectScope(_effect, options.scope); } if (!options || !options.lazy) { _effect.run(); } var runner = _effect.run.bind(_effect); runner.effect = _effect; return runner; } function stop(runner) { runner.effect.stop(); } var shouldTrack = true; var trackStack = []; function pauseTracking() { trackStack.push(shouldTrack); shouldTrack = false; } function enableTracking() { trackStack.push(shouldTrack); shouldTrack = true; } function resetTracking() { var last = trackStack.pop(); shouldTrack = last === undefined ? true : last; } function track(target, type, key) { if (!isTracking()) { return; } var depsMap = targetMap.get(target); if (!depsMap) { targetMap.set(target, depsMap = new Map()); } var dep = depsMap.get(key); if (!dep) { depsMap.set(key, dep = createDep()); } trackEffects(dep); } function isTracking() { return shouldTrack && activeEffect !== undefined; } function trackEffects(dep, debuggerEventExtraInfo) { var shouldTrack = false; if (effectTrackDepth <= maxMarkerBits) { if (!newTracked(dep)) { dep.n |= trackOpBit; // set newly tracked shouldTrack = !wasTracked(dep); } } else { // Full cleanup mode. shouldTrack = !dep.has(activeEffect); } if (shouldTrack) { dep.add(activeEffect); activeEffect.deps.push(dep); } } function trigger(target, type, key, newValue, oldValue, oldTarget) { var depsMap = targetMap.get(target); if (!depsMap) { // never been tracked return; } var deps = []; if (type === "clear" /* CLEAR */ ) { // collection being cleared // trigger all effects for target deps = [...depsMap.values()]; } else if (key === 'length' && isArray(target)) { depsMap.forEach((dep, key) => { if (key === 'length' || key >= newValue) { deps.push(dep); } }); } else { // schedule runs for SET | ADD | DELETE if (key !== void 0) { deps.push(depsMap.get(key)); } // also run for iteration key on ADD | DELETE | Map.SET switch (type) { case "add" /* ADD */ : if (!isArray(target)) { deps.push(depsMap.get(ITERATE_KEY)); if (isMap(target)) { deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); } } else if (isIntegerKey(key)) { // new index added to array -> length changes deps.push(depsMap.get('length')); } break; case "delete" /* DELETE */ : if (!isArray(target)) { deps.push(depsMap.get(ITERATE_KEY)); if (isMap(target)) { deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); } } break; case "set" /* SET */ : if (isMap(target)) { deps.push(depsMap.get(ITERATE_KEY)); } break; } } if (deps.length === 1) { if (deps[0]) { { triggerEffects(deps[0]); } } } else { var effects = []; for (var dep of deps) { if (dep) { effects.push(...dep); } } { triggerEffects(createDep(effects)); } } } function triggerEffects(dep, debuggerEventExtraInfo) { // spread into array for stabilization for (var _effect2 of isArray(dep) ? dep : [...dep]) { if (_effect2 !== activeEffect || _effect2.allowRecurse) { if (_effect2.scheduler) { _effect2.scheduler(); } else { _effect2.run(); } } } } var isNonTrackableKeys = /*#__PURE__*/makeMap("__proto__,__v_isRef,__isVue"); var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map(key => Symbol[key]).filter(isSymbol)); var get = /*#__PURE__*/createGetter(); var shallowGet = /*#__PURE__*/createGetter(false, true); var readonlyGet = /*#__PURE__*/createGetter(true); var shallowReadonlyGet = /*#__PURE__*/createGetter(true, true); var arrayInstrumentations = /*#__PURE__*/createArrayInstrumentations(); function createArrayInstrumentations() { var instrumentations = {}; ['includes', 'indexOf', 'lastIndexOf'].forEach(key => { instrumentations[key] = function () { var arr = toRaw(this); for (var i = 0, l = this.length; i < l; i++) { track(arr, "get" /* GET */ , i + ''); } // we run the method using the original args first (which may be reactive) for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) { args[_key2] = arguments[_key2]; } var res = arr[key](...args); if (res === -1 || res === false) { // if that didn't work, run it again using raw values. return arr[key](...args.map(toRaw)); } else { return res; } }; }); ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => { instrumentations[key] = function () { pauseTracking(); for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) { args[_key3] = arguments[_key3]; } var res = toRaw(this)[key].apply(this, args); resetTracking(); return res; }; }); return instrumentations; } function createGetter() { var isReadonly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var shallow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return function get(target, key, receiver) { if (key === "__v_isReactive" /* IS_REACTIVE */ ) { return !isReadonly; } else if (key === "__v_isReadonly" /* IS_READONLY */ ) { return isReadonly; } else if (key === "__v_raw" /* RAW */ && receiver === (isReadonly ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) { return target; } var targetIsArray = isArray(target); if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) { return Reflect.get(arrayInstrumentations, key, receiver); } var res = Reflect.get(target, key, receiver); if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { return res; } if (!isReadonly) { track(target, "get" /* GET */ , key); } if (shallow) { return res; } if (isRef(res)) { // ref unwrapping - does not apply for Array + integer key. var shouldUnwrap = !targetIsArray || !isIntegerKey(key); return shouldUnwrap ? res.value : res; } if (isObject(res)) { // Convert returned value into a proxy as well. we do the isObject check // here to avoid invalid value warning. Also need to lazy access readonly // and reactive here to avoid circular dependency. return isReadonly ? readonly(res) : reactive(res); } return res; }; } var set = /*#__PURE__*/createSetter(); var shallowSet = /*#__PURE__*/createSetter(true); function createSetter() { var shallow = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return function set(target, key, value, receiver) { var oldValue = target[key]; if (!shallow && !isReadonly(value)) { value = toRaw(value); oldValue = toRaw(oldValue); if (!isArray(target) && isRef(oldValue) && !isRef(value)) { oldValue.value = value; return true; } } var hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); var result = Reflect.set(target, key, value, receiver); // don't trigger if target is something up in the prototype chain of original if (target === toRaw(receiver)) { if (!hadKey) { trigger(target, "add" /* ADD */ , key, value); } else if (hasChanged(value, oldValue)) { trigger(target, "set" /* SET */ , key, value); } } return result; }; } function deleteProperty(target, key) { var hadKey = hasOwn(target, key); target[key]; var result = Reflect.deleteProperty(target, key); if (result && hadKey) { trigger(target, "delete" /* DELETE */ , key, undefined); } return result; } function has(target, key) { var result = Reflect.has(target, key); if (!isSymbol(key) || !builtInSymbols.has(key)) { track(target, "has" /* HAS */ , key); } return result; } function ownKeys(target) { track(target, "iterate" /* ITERATE */ , isArray(target) ? 'length' : ITERATE_KEY); return Reflect.ownKeys(target); } var mutableHandlers = { get, set, deleteProperty, has, ownKeys }; var readonlyHandlers = { get: readonlyGet, set(target, key) { return true; }, deleteProperty(target, key) { return true; } }; var shallowReactiveHandlers = /*#__PURE__*/extend({}, mutableHandlers, { get: shallowGet, set: shallowSet }); // Props handlers are special in the sense that it should not unwrap top-level // refs (in order to allow refs to be explicitly passed down), but should // retain the reactivity of the normal readonly object. var shallowReadonlyHandlers = /*#__PURE__*/extend({}, readonlyHandlers, { get: shallowReadonlyGet }); var toShallow = value => value; var getProto = v => Reflect.getPrototypeOf(v); function get$1(target, key) { var isReadonly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isShallow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; // #1772: readonly(reactive(Map)) should return readonly + reactive version // of the value target = target["__v_raw" /* RAW */ ]; var rawTarget = toRaw(target); var rawKey = toRaw(key); if (key !== rawKey) { !isReadonly && track(rawTarget, "get" /* GET */ , key); } !isReadonly && track(rawTarget, "get" /* GET */ , rawKey); var { has } = getProto(rawTarget); var wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; if (has.call(rawTarget, key)) { return wrap(target.get(key)); } else if (has.call(rawTarget, rawKey)) { return wrap(target.get(rawKey)); } else if (target !== rawTarget) { // #3602 readonly(reactive(Map)) // ensure that the nested reactive `Map` can do tracking for itself target.get(key); } } function has$1(key) { var isReadonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var target = this["__v_raw" /* RAW */ ]; var rawTarget = toRaw(target); var rawKey = toRaw(key); if (key !== rawKey) { !isReadonly && track(rawTarget, "has" /* HAS */ , key); } !isReadonly && track(rawTarget, "has" /* HAS */ , rawKey); return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); } function size(target) { var isReadonly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; target = target["__v_raw" /* RAW */ ]; !isReadonly && track(toRaw(target), "iterate" /* ITERATE */ , ITERATE_KEY); return Reflect.get(target, 'size', target); } function add(value) { value = toRaw(value); var target = toRaw(this); var proto = getProto(target); var hadKey = proto.has.call(target, value); if (!hadKey) { target.add(value); trigger(target, "add" /* ADD */ , value, value); } return this; } function set$1(key, value) { value = toRaw(value); var target = toRaw(this); var { has, get } = getProto(target); var hadKey = has.call(target, key); if (!hadKey) { key = toRaw(key); hadKey = has.call(target, key); } var oldValue = get.call(target, key); target.set(key, value); if (!hadKey) { trigger(target, "add" /* ADD */ , key, value); } else if (hasChanged(value, oldValue)) { trigger(target, "set" /* SET */ , key, value); } return this; } function deleteEntry(key) { var target = toRaw(this); var { has, get } = getProto(target); var hadKey = has.call(target, key); if (!hadKey) { key = toRaw(key); hadKey = has.call(target, key); } get ? get.call(target, key) : undefined; // forward the operation before queueing reactions var result = target.delete(key); if (hadKey) { trigger(target, "delete" /* DELETE */ , key, undefined); } return result; } function clear() { var target = toRaw(this); var hadItems = target.size !== 0; // forward the operation before queueing reactions var result = target.clear(); if (hadItems) { trigger(target, "clear" /* CLEAR */ , undefined, undefined); } return result; } function createForEach(isReadonly, isShallow) { return function forEach(callback, thisArg) { var observed = this; var target = observed["__v_raw" /* RAW */ ]; var rawTarget = toRaw(target); var wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; !isReadonly && track(rawTarget, "iterate" /* ITERATE */ , ITERATE_KEY); return target.forEach((value, key) => { // important: make sure the callback is // 1. invoked with the reactive map as `this` and 3rd arg // 2. the value received should be a corresponding reactive/readonly. return callback.call(thisArg, wrap(value), wrap(key), observed); }); }; } function createIterableMethod(method, isReadonly, isShallow) { return function () { var target = this["__v_raw" /* RAW */ ]; var rawTarget = toRaw(target); var targetIsMap = isMap(rawTarget); var isPair = method === 'entries' || method === Symbol.iterator && targetIsMap; var isKeyOnly = method === 'keys' && targetIsMap; var innerIterator = target[method](...arguments); var wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive; !isReadonly && track(rawTarget, "iterate" /* ITERATE */ , isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY); // return a wrapped iterator which returns observed versions of the // values emitted from the real iterator return { // iterator protocol next() { var { value, done } = innerIterator.next(); return done ? { value, done } : { value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), done }; }, // iterable protocol [Symbol.iterator]() { return this; } }; }; } function createReadonlyMethod(type) { return function () { return type === "delete" /* DELETE */ ? false : this; }; } function createInstrumentations() { var mutableInstrumentations = { get(key) { return get$1(this, key); }, get size() { return size(this); }, has: has$1, add, set: set$1, delete: deleteEntry, clear, forEach: createForEach(false, false) }; var shallowInstrumentations = { get(key) { return get$1(this, key, false, true); }, get size() { return size(this); }, has: has$1, add, set: set$1, delete: deleteEntry, clear, forEach: createForEach(false, true) }; var readonlyInstrumentations = { get(key) { return get$1(this, key, true); }, get size() { return size(this, true); }, has(key) { return has$1.call(this, key, true); }, add: createReadonlyMethod("add" /* ADD */ ), set: createReadonlyMethod("set" /* SET */ ), delete: createReadonlyMethod("delete" /* DELETE */ ), clear: createReadonlyMethod("clear" /* CLEAR */ ), forEach: createForEach(true, false) }; var shallowReadonlyInstrumentations = { get(key) { return get$1(this, key, true, true); }, get size() { return size(this, true); }, has(key) { return has$1.call(this, key, true); }, add: createReadonlyMethod("add" /* ADD */ ), set: createReadonlyMethod("set" /* SET */ ), delete: createReadonlyMethod("delete" /* DELETE */ ), clear: createReadonlyMethod("clear" /* CLEAR */ ), forEach: createForEach(true, true) }; var iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator]; iteratorMethods.forEach(method => { mutableInstrumentations[method] = createIterableMethod(method, false, false); readonlyInstrumentations[method] = createIterableMethod(method, true, false); shallowInstrumentations[method] = createIterableMethod(method, false, true); shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true); }); return [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations]; } var [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/createInstrumentations(); function createInstrumentationGetter(isReadonly, shallow) { var instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations; return (target, key, receiver) => { if (key === "__v_isReactive" /* IS_REACTIVE */ ) { return !isReadonly; } else if (key === "__v_isReadonly" /* IS_READONLY */ ) { return isReadonly; } else if (key === "__v_raw" /* RAW */ ) { return target; } return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver); }; } var mutableCollectionHandlers = { get: /*#__PURE__*/createInstrumentationGetter(false, false) }; var shallowCollectionHandlers = { get: /*#__PURE__*/createInstrumentationGetter(false, true) }; var readonlyCollectionHandlers = { get: /*#__PURE__*/createInstrumentationGetter(true, false) }; var shallowReadonlyCollectionHandlers = { get: /*#__PURE__*/createInstrumentationGetter(true, true) }; var reactiveMap = new WeakMap(); var shallowReactiveMap = new WeakMap(); var readonlyMap = new WeakMap(); var shallowReadonlyMap = new WeakMap(); function targetTypeMap(rawType) { switch (rawType) { case 'Object': case 'Array': return 1 /* COMMON */ ; case 'Map': case 'Set': case 'WeakMap': case 'WeakSet': return 2 /* COLLECTION */ ; default: return 0 /* INVALID */ ; } } function getTargetType(value) { return value["__v_skip" /* SKIP */ ] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value)); } function reactive(target) { // if trying to observe a readonly proxy, return the readonly version. if (target && target["__v_isReadonly" /* IS_READONLY */ ]) { return target; } return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap); } /** * Return a shallowly-reactive copy of the original object, where only the root * level properties are reactive. It also does not auto-unwrap refs (even at the * root level). */ function shallowReactive(target) { return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap); } /** * Creates a readonly copy of the original object. Note the returned copy is not * made reactive, but `readonly` can be called on an already reactive object. */ function readonly(target) { return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap); } /** * Returns a reactive-copy of the original object, where only the root level * properties are readonly, and does NOT unwrap refs nor recursively convert * returned properties. * This is used for creating the props proxy object for stateful components. */ function shallowReadonly(target) { return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap); } function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) { if (!isObject(target)) { return target; } // target is already a Proxy, return it. // exception: calling readonly() on a reactive object if (target["__v_raw" /* RAW */ ] && !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */ ])) { return target; } // target already has corresponding Proxy var existingProxy = proxyMap.get(target); if (existingProxy) { return existingProxy; } // only a whitelist of value types can be observed. var targetType = getTargetType(target); if (targetType === 0 /* INVALID */ ) { return target; } var proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers); proxyMap.set(target, proxy); return proxy; } function isReactive(value) { if (isReadonly(value)) { return isReactive(value["__v_raw" /* RAW */ ]); } return !!(value && value["__v_isReactive" /* IS_REACTIVE */ ]); } function isReadonly(value) { return !!(value && value["__v_isReadonly" /* IS_READONLY */ ]); } function isProxy(value) { return isReactive(value) || isReadonly(value); } function toRaw(observed) { var raw = observed && observed["__v_raw" /* RAW */ ]; return raw ? toRaw(raw) : observed; } function markRaw(value) { def(value, "__v_skip" /* SKIP */ , true); return value; } var toReactive = value => isObject(value) ? reactive(value) : value; var toReadonly = value => isObject(value) ? readonly(value) : value; function trackRefValue(ref) { if (isTracking()) { ref = toRaw(ref); if (!ref.dep) { ref.dep = createDep(); } { trackEffects(ref.dep); } } } function triggerRefValue(ref, newVal) { ref = toRaw(ref); if (ref.dep) { { triggerEffects(ref.dep); } } } function isRef(r) { return Boolean(r && r.__v_isRef === true); } function ref(value) { return createRef(value, false); } function shallowRef(value) { return createRef(value, true); } function createRef(rawValue, shallow) { if (isRef(rawValue)) { return rawValue; } return new RefImpl(rawValue, shallow); } class RefImpl { constructor(value, _shallow) { this._shallow = _shallow; this.dep = undefined; this.__v_isRef = true; this._rawValue = _shallow ? value : toRaw(value); this._value = _shallow ? value : toReactive(value); } get value() { trackRefValue(this); return this._value; } set value(newVal) { newVal = this._shallow ? newVal : toRaw(newVal); if (hasChanged(newVal, this._rawValue)) { this._rawValue = newVal; this._value = this._shallow ? newVal : toReactive(newVal); triggerRefValue(this); } } } function triggerRef(ref) { triggerRefValue(ref); } function unref(ref) { return isRef(ref) ? ref.value : ref; } var shallowUnwrapHandlers = { get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), set: (target, key, value, receiver) => { var oldValue = target[key]; if (isRef(oldValue) && !isRef(value)) { oldValue.value = value; return true; } else { return Reflect.set(target, key, value, receiver); } } }; function proxyRefs(objectWithRefs) { return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); } class CustomRefImpl { constructor(factory) { this.dep = undefined; this.__v_isRef = true; var { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this)); this._get = get; this._set = set; } get value() { return this._get(); } set value(newVal) { this._set(newVal); } } function customRef(factory) { return new CustomRefImpl(factory); } function toRefs(object) { var ret = isArray(object) ? new Array(object.length) : {}; for (var key in object) { ret[key] = toRef(object, key); } return ret; } class ObjectRefImpl { constructor(_object, _key) { this._object = _object; this._key = _key; this.__v_isRef = true; } get value() { return this._object[this._key]; } set value(newVal) { this._object[this._key] = newVal; } } function toRef(object, key) { var val = object[key]; return isRef(val) ? val : new ObjectRefImpl(object, key); } class ComputedRefImpl { constructor(getter, _setter, isReadonly) { this._setter = _setter; this.dep = undefined; this._dirty = true; this.__v_isRef = true; this.effect = new ReactiveEffect(getter, () => { if (!this._dirty) { this._dirty = true; triggerRefValue(this); } }); this["__v_isReadonly" /* IS_READONLY */ ] = isReadonly; } get value() { // the computed ref may get wrapped by other proxies e.g. readonly() #3376 var self = toRaw(this); trackRefValue(self); if (self._dirty) { self._dirty = false; self._value = self.effect.run(); } return self._value; } set value(newValue) { this._setter(newValue); } } function computed(getterOrOptions, debugOptions) { var getter; var setter; var onlyGetter = isFunction(getterOrOptions); if (onlyGetter) { getter = getterOrOptions; setter = NOOP; } else { getter = getterOrOptions.get; setter = getterOrOptions.set; } var cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter); return cRef; } var devtools; var buffer = []; function setDevtoolsHook(hook, target) { var _a, _b; devtools = hook; if (devtools) { devtools.enabled = true; buffer.forEach(_ref3 => { var { event, args } = _ref3; return devtools.emit(event, ...args); }); buffer = []; } else if ( // handle late devtools injection - only do this if we are in an actual // browser environment to avoid the timer handle stalling test runner exit // (#4815) // eslint-disable-next-line no-restricted-globals typeof window !== 'undefined' && // some envs mock window but not fully // eslint-disable-next-line no-restricted-globals window.HTMLElement && // also exclude jsdom // eslint-disable-next-line no-restricted-globals !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) { var replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; replay.push(newHook => { setDevtoolsHook(newHook, target); }); // clear buffer after 3s - the user probably doesn't have devtools installed // at all, and keeping the buffer will cause memory leaks (#4738) setTimeout(() => { if (!devtools) { target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; buffer = []; } }, 3000); } else { buffer = []; } } function emit$1(instance, event) { var props = instance.vnode.props || EMPTY_OBJ; for (var _len3 = arguments.length, rawArgs = new Array(_len3 > 2 ? _len3 - 2 : 0), _key4 = 2; _key4 < _len3; _key4++) { rawArgs[_key4 - 2] = arguments[_key4]; } var args = rawArgs; var isModelListener = event.startsWith('update:'); // for v-model update:xxx events, apply modifiers on args var modelArg = isModelListener && event.slice(7); if (modelArg && modelArg in props) { var modifiersKey = "".concat(modelArg === 'modelValue' ? 'model' : modelArg, "Modifiers"); var { number, trim } = props[modifiersKey] || EMPTY_OBJ; if (trim) { args = rawArgs.map(a => a.trim()); } else if (number) { args = rawArgs.map(toNumber); } } var handlerName; var handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249) props[handlerName = toHandlerKey(camelize(event))]; // for v-model update:xxx events, also trigger kebab-case equivalent // for props passed via kebab-case if (!handler && isModelListener) { handler = props[handlerName = toHandlerKey(hyphenate(event))]; } if (handler) { callWithAsyncErrorHandling(handler, instance, 6 /* COMPONENT_EVENT_HANDLER */ , args); } var 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 /* COMPONENT_EVENT_HANDLER */ , args); } } function normalizeEmitsOptions(comp, appContext) { var asMixin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var cache = appContext.emitsCache; var cached = cache.get(comp); if (cached !== undefined) { return cached; } var raw = comp.emits; var normalized = {}; // apply mixin/extends props var hasExtends = false; if (!isFunction(comp)) { var extendEmits = raw => { var normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true); if (normalizedFromExtend) { hasExtends = true; 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) { cache.set(comp, null); return null; } if (isArray(raw)) { raw.forEach(key => normalized[key] = null); } else { extend(normalized, raw); } cache.set(comp, normalized); return normalized; } // Check if an incoming prop key is a declared emit event listener. // e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are // both considered matched listeners. function isEmitListener(options, key) { if (!options || !isOn(key)) { return false; } key = key.slice(2).replace(/Once$/, ''); return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key); } /** * mark the current rendering instance for asset resolution (e.g. * resolveComponent, resolveDirective) during render */ var currentRenderingInstance = null; var currentScopeId = null; /** * Note: rendering calls maybe nested. The function returns the parent rendering * instance if present, which should be restored after the render is done: * * ```js * const prev = setCurrentRenderingInstance(i) * // ...render * setCurrentRenderingInstance(prev) * ``` */ function setCurrentRenderingInstance(instance) { var prev = currentRenderingInstance; currentRenderingInstance = instance; currentScopeId = instance && instance.type.__scopeId || null; return prev; } /** * Set scope id when creating hoisted vnodes. * @private compiler helper */ function pushScopeId(id) { currentScopeId = id; } /** * Technically we no longer need this after 3.0.8 but we need to keep the same * API for backwards compat w/ code generated by compilers. * @private */ function popScopeId() { currentScopeId = null; } /** * Only for backwards compat * @private */ var withScopeId = _id => withCtx; /** * Wrap a slot function to memoize current rendering instance * @private compiler helper */ function withCtx(fn) { var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : currentRenderingInstance; var isNonScopedSlot // false only = arguments.length > 2 ? arguments[2] : undefined; if (!ctx) return fn; // already normalized if (fn._n) { return fn; } var renderFnWithContext = function () { // If a user calls a compiled slot inside a template expression (#1745), it // can mess up block tracking, so by default we disable block tracking and // force bail out when invoking a compiled slot (indicated by the ._d flag). // This isn't necessary if rendering a compiled ``, so we flip the // ._d flag off when invoking the wrapped fn inside `renderSlot`. if (renderFnWithContext._d) { setBlockTracking(-1); } var prevInstance = setCurrentRenderingInstance(ctx); var res = fn(...arguments); setCurrentRenderingInstance(prevInstance); if (renderFnWithContext._d) { setBlockTracking(1); } return res; }; // mark normalized to avoid duplicated wrapping renderFnWithContext._n = true; // mark this as compiled by default // this is used in vnode.ts -> normalizeChildren() to set the slot // rendering flag. renderFnWithContext._c = true; // disable block tracking by default renderFnWithContext._d = true; return renderFnWithContext; } function markAttrsAccessed() {} function renderComponentRoot(instance) { var { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance; var result; var fallthroughAttrs; var prev = setCurrentRenderingInstance(instance); try { if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ ) { // withProxy is a proxy with a different `has` trap only for // runtime-compiled render functions using `with` block. var proxyToUse = withProxy || proxy; result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx)); fallthroughAttrs = attrs; } else { // functional var _render = Component; // in dev, mark attrs accessed if optional props (attrs === props) if ("production" !== 'production' && attrs === props) ; result = normalizeVNode(_render.length > 1 ? _render(props, "production" !== 'production' ? { get attrs() { markAttrsAccessed(); return attrs; }, slots, emit } : { attrs, slots, emit }) : _render(props, null /* we know it doesn't need it */ )); fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); } } catch (err) { blockStack.length = 0; handleError(err, instance, 1 /* RENDER_FUNCTION */ ); result = createVNode(Comment); } // attr merging // in dev mode, comments are preserved, and it's possible for a template // to have comments along side the root element which makes it a fragment var root = result; if (fallthroughAttrs && inheritAttrs !== false) { var keys = Object.keys(fallthroughAttrs); var { shapeFlag } = root; if (keys.length) { if (shapeFlag & (1 /* ELEMENT */ | 6 /* COMPONENT */ )) { if (propsOptions && keys.some(isModelListener)) { // If a v-model listener (onUpdate:xxx) has a corresponding declared // prop, it indicates this component expects to handle v-model and // it should not fallthrough. // related: #1543, #1643, #1989 fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions); } root = cloneVNode(root, fallthroughAttrs); } } } // inherit directives if (vnode.dirs) { root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; } // inherit transition data if (vnode.transition) { root.transition = vnode.transition; } { result = root; } setCurrentRenderingInstance(prev); return result; } function filterSingleRoot(children) { var singleRoot; for (var i = 0; i < children.length; i++) { var child = children[i]; if (isVNode(child)) { // ignore user comment if (child.type !== Comment || child.children === 'v-if') { if (singleRoot) { // has more than 1 non-comment child, return now return; } else { singleRoot = child; } } } else { return; } } return singleRoot; } var getFunctionalFallthrough = attrs => { var res; for (var key in attrs) { if (key === 'class' || key === 'style' || isOn(key)) { (res || (res = {}))[key] = attrs[key]; } } return res; }; var filterModelListeners = (attrs, props) => { var res = {}; for (var key in attrs) { if (!isModelListener(key) || !(key.slice(9) in props)) { res[key] = attrs[key]; } } return res; }; function shouldUpdateComponent(prevVNode, nextVNode, optimized) { var { props: prevProps, children: prevChildren, component } = prevVNode; var { props: nextProps, children: nextChildren, patchFlag } = nextVNode; var emits = component.emitsOptions; // force child update for runtime directive or transition on component vnode. if (nextVNode.dirs || nextVNode.transition) { return true; } if (optimized && patchFlag >= 0) { if (patchFlag & 1024 /* DYNAMIC_SLOTS */ ) { // slot content that references values that might have changed, // e.g. in a v-for return true; } if (patchFlag & 16 /* FULL_PROPS */ ) { if (!prevProps) { return !!nextProps; } // presence of this flag indicates props are always non-null return hasPropsChanged(prevProps, nextProps, emits); } else if (patchFlag & 8 /* PROPS */ ) { var dynamicProps = nextVNode.dynamicProps; for (var i = 0; i < dynamicProps.length; i++) { var key = dynamicProps[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { return true; } } } } else { // this path is only taken by manually written render functions // so presence of any children leads to a forced update 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) { var nextKeys = Object.keys(nextProps); if (nextKeys.length !== Object.keys(prevProps).length) { return true; } for (var i = 0; i < nextKeys.length; i++) { var key = nextKeys[i]; if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { return true; } } return false; } function updateHOCHostEl(_ref4, el // HostNode ) { var { vnode, parent } = _ref4; while (parent && parent.subTree === vnode) { (vnode = parent.vnode).el = el; parent = parent.parent; } } var isSuspense = type => type.__isSuspense; // Suspense exposes a component-like API, and is treated like a component // in the compiler, but internally it's a special built-in type that hooks // directly into the renderer. var 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 vnode's type and calls the `process` method, passing in renderer // internals. __isSuspense: true, process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, // platform-specific impl passed from renderer rendererInternals) { if (n1 == null) { mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals); } else { patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals); } }, hydrate: hydrateSuspense, create: createSuspenseBoundary, normalize: normalizeSuspenseChildren }; // Force-casted public typing for h and TSX props inference var Suspense = SuspenseImpl; function triggerEvent(vnode, name) { var eventListener = vnode.props && vnode.props[name]; if (isFunction(eventListener)) { eventListener(); } } function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) { var { p: patch, o: { createElement } } = rendererInternals; var hiddenContainer = createElement('div', container); // fixed by xxxxxx var suspense = vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals); // start mounting the content subtree in an off-dom container patch(null, suspense.pendingBranch = vnode.ssContent, hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds); // now check if we have encountered any async deps if (suspense.deps > 0) { // has async // invoke @fallback event triggerEvent(vnode, 'onPending'); triggerEvent(vnode, 'onFallback'); // mount the fallback tree patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context isSVG, slotScopeIds); setActiveBranch(suspense, vnode.ssFallback); } else { // Suspense has no async deps. Just resolve. suspense.resolve(); } } function patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, _ref5) { var { p: patch, um: unmount, o: { createElement } } = _ref5; var suspense = n2.suspense = n1.suspense; suspense.vnode = n2; n2.el = n1.el; var newBranch = n2.ssContent; var newFallback = n2.ssFallback; var { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; if (pendingBranch) { suspense.pendingBranch = newBranch; if (isSameVNodeType(newBranch, pendingBranch)) { // same root type but content may have changed. patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); if (suspense.deps <= 0) { suspense.resolve(); } else if (isInFallback) { patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context isSVG, slotScopeIds, optimized); setActiveBranch(suspense, newFallback); } } else { // toggled before pending tree is resolved suspense.pendingId++; if (isHydrating) { // if toggled before hydration is finished, the current DOM tree is // no longer valid. set it as the active branch so it will be unmounted // when resolved suspense.isHydrating = false; suspense.activeBranch = pendingBranch; } else { unmount(pendingBranch, parentComponent, suspense); } // increment pending ID. this is used to invalidate async callbacks // reset suspense state suspense.deps = 0; // discard effects from pending branch suspense.effects.length = 0; // discard previous container suspense.hiddenContainer = createElement('div', container); // fixed by xxxxxx if (isInFallback) { // already in fallback state patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); if (suspense.deps <= 0) { suspense.resolve(); } else { patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context isSVG, slotScopeIds, optimized); setActiveBranch(suspense, newFallback); } } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { // toggled "back" to current active branch patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized); // force resolve suspense.resolve(true); } else { // switched to a 3rd branch patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); if (suspense.deps <= 0) { suspense.resolve(); } } } } else { if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { // root did not change, just normal patch patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized); setActiveBranch(suspense, newBranch); } else { // root node toggled // invoke @pending event triggerEvent(n2, 'onPending'); // mount pending branch in off-dom container suspense.pendingBranch = newBranch; suspense.pendingId++; patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized); if (suspense.deps <= 0) { // incoming branch has no async deps, resolve now. suspense.resolve(); } else { var { timeout, pendingId } = suspense; if (timeout > 0) { setTimeout(() => { if (suspense.pendingId === pendingId) { suspense.fallback(newFallback); } }, timeout); } else if (timeout === 0) { suspense.fallback(newFallback); } } } } } function createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals) { var isHydrating = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : false; var { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals; var timeout = toNumber(vnode.props && vnode.props.timeout); var suspense = { vnode, parent, parentComponent, isSVG, container, hiddenContainer, anchor, deps: 0, pendingId: 0, timeout: typeof timeout === 'number' ? timeout : -1, activeBranch: null, pendingBranch: null, isInFallback: true, isHydrating, isUnmounted: false, effects: [], resolve() { var resume = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense; if (suspense.isHydrating) { suspense.isHydrating = false; } else if (!resume) { var delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === 'out-in'; if (delayEnter) { activeBranch.transition.afterLeave = () => { if (pendingId === suspense.pendingId) { move(pendingBranch, container, _anchor, 0 /* ENTER */ ); } }; } // this is initial anchor on mount var { anchor: _anchor } = suspense; // unmount current active tree if (activeBranch) { // if the fallback tree was mounted, it may have been moved // as part of a parent suspense. get the latest anchor for insertion _anchor = next(activeBranch); unmount(activeBranch, parentComponent, suspense, true); } if (!delayEnter) { // move content from off-dom container to actual container move(pendingBranch, container, _anchor, 0 /* ENTER */ ); } } setActiveBranch(suspense, pendingBranch); suspense.pendingBranch = null; suspense.isInFallback = false; // flush buffered effects // check if there is a pending parent suspense var parent = suspense.parent; var hasUnresolvedAncestor = false; while (parent) { if (parent.pendingBranch) { // found a pending parent suspense, merge buffered post jobs // into that parent parent.effects.push(...effects); hasUnresolvedAncestor = true; break; } parent = parent.parent; } // no pending parent suspense, flush all jobs if (!hasUnresolvedAncestor) { queuePostFlushCb(effects); } suspense.effects = []; // invoke @resolve event triggerEvent(vnode, 'onResolve'); }, fallback(fallbackVNode) { if (!suspense.pendingBranch) { return; } var { vnode, activeBranch, parentComponent, container, isSVG } = suspense; // invoke @fallback event triggerEvent(vnode, 'onFallback'); var anchor = next(activeBranch); var mountFallback = () => { if (!suspense.isInFallback) { return; } // mount the fallback tree patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context isSVG, slotScopeIds, optimized); setActiveBranch(suspense, fallbackVNode); }; var delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in'; if (delayEnter) { activeBranch.transition.afterLeave = mountFallback; } suspense.isInFallback = true; // unmount current active branch unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now true // shouldRemove ); if (!delayEnter) { mountFallback(); } }, move(container, anchor, type) { suspense.activeBranch && move(suspense.activeBranch, container, anchor, type); suspense.container = container; }, next() { return suspense.activeBranch && next(suspense.activeBranch); }, registerDep(instance, setupRenderEffect) { var isInPendingSuspense = !!suspense.pendingBranch; if (isInPendingSuspense) { suspense.deps++; } var hydratedEl = instance.vnode.el; instance.asyncDep.catch(err => { handleError(err, instance, 0 /* SETUP_FUNCTION */ ); }).then(asyncSetupResult => { // retry when the setup() promise resolves. // component may have been unmounted before resolve. if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) { return; } // retry from this component instance.asyncResolved = true; var { vnode } = instance; handleSetupResult(instance, asyncSetupResult, false); if (hydratedEl) { // vnode may have been replaced if an update happened before the // async dep is resolved. vnode.el = hydratedEl; } var placeholder = !hydratedEl && instance.subTree.el; setupRenderEffect(instance, vnode, // 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, isSVG, optimized); if (placeholder) { remove(placeholder); } updateHOCHostEl(instance, vnode.el); // only decrease deps count if suspense is not already resolved if (isInPendingSuspense && --suspense.deps === 0) { suspense.resolve(); } }); }, unmount(parentSuspense, doRemove) { suspense.isUnmounted = true; if (suspense.activeBranch) { unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove); } if (suspense.pendingBranch) { unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove); } } }; return suspense; } function hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) { /* eslint-disable no-restricted-globals */ var suspense = vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */ ); // there are two possible scenarios for server-rendered suspense: // - success: ssr content should be fully resolved // - failure: ssr content should be the fallback branch. // however, on the client we don't really know if it has failed or not // attempt to hydrate the DOM assuming it has succeeded, but we still // need to construct a suspense boundary first var result = hydrateNode(node, suspense.pendingBranch = vnode.ssContent, parentComponent, suspense, slotScopeIds, optimized); if (suspense.deps === 0) { suspense.resolve(); } return result; /* eslint-enable no-restricted-globals */ } function normalizeSuspenseChildren(vnode) { var { shapeFlag, children } = vnode; var isSlotChildren = shapeFlag & 32 /* SLOTS_CHILDREN */ ; vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children); vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment); } function normalizeSuspenseSlot(s) { var block; if (isFunction(s)) { var trackBlock = isBlockTreeEnabled && s._c; if (trackBlock) { // disableTracking: false // allow block tracking for compiled slots // (see ./componentRenderContext.ts) s._d = false; openBlock(); } s = s(); if (trackBlock) { s._d = true; block = currentBlock; closeBlock(); } } if (isArray(s)) { var singleChild = filterSingleRoot(s); s = singleChild; } s = normalizeVNode(s); if (block && !s.dynamicChildren) { s.dynamicChildren = block.filter(c => c !== s); } return s; } function queueEffectWithSuspense(fn, suspense) { if (suspense && suspense.pendingBranch) { if (isArray(fn)) { suspense.effects.push(...fn); } else { suspense.effects.push(fn); } } else { queuePostFlushCb(fn); } } function setActiveBranch(suspense, branch) { suspense.activeBranch = branch; var { vnode, parentComponent } = suspense; var el = vnode.el = branch.el; // in case suspense is the root node of a component, // recursively update the HOC el if (parentComponent && parentComponent.subTree === vnode) { parentComponent.vnode.el = el; updateHOCHostEl(parentComponent, el); } } function provide(key, value) { if (!currentInstance) ;else { var provides = currentInstance.provides; // by default an instance inherits its parent's provides object // but when it needs to provide values of its own, it creates its // own provides object using parent provides object as prototype. // this way in `inject` we can simply look up injections from direct // parent and let the prototype chain do the work. var parentProvides = currentInstance.parent && currentInstance.parent.provides; if (parentProvides === provides) { provides = currentInstance.provides = Object.create(parentProvides); } // TS doesn't allow symbol as index type provides[key] = value; } } function inject(key, defaultValue) { var treatDefaultAsFactory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; // fallback to `currentRenderingInstance` so that this can be called in // a functional component var instance = currentInstance || currentRenderingInstance; if (instance) { // #2400 // to support `app.use` plugins, // fallback to appContext's `provides` if the intance is at root var provides = instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides; if (provides && key in provides) { // TS doesn't allow symbol as index type return provides[key]; } else if (arguments.length > 1) { return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance.proxy) : defaultValue; } else ; } } function useTransitionState() { var state = { isMounted: false, isLeaving: false, isUnmounting: false, leavingVNodes: new Map() }; onMounted(() => { state.isMounted = true; }); onBeforeUnmount(() => { state.isUnmounting = true; }); return state; } var TransitionHookValidator = [Function, Array]; var BaseTransitionImpl = { name: "BaseTransition", props: { 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 }, setup(props, _ref6) { var { slots } = _ref6; var instance = getCurrentInstance(); var state = useTransitionState(); var prevTransitionKey; return () => { var children = slots.default && getTransitionRawChildren(slots.default(), true); if (!children || !children.length) { return; } // there's no need to track reactivity for these props so use the raw // props for a bit better perf var rawProps = toRaw(props); var { mode } = rawProps; // at this point children has a guaranteed length of 1. var child = children[0]; if (state.isLeaving) { return emptyPlaceholder(child); } // in the case of , we need to // compare the type of the kept-alive children. var innerChild = getKeepAliveChild(child); if (!innerChild) { return emptyPlaceholder(child); } var enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance); setTransitionHooks(innerChild, enterHooks); var oldChild = instance.subTree; var oldInnerChild = oldChild && getKeepAliveChild(oldChild); var transitionKeyChanged = false; var { getTransitionKey } = innerChild.type; if (getTransitionKey) { var key = getTransitionKey(); if (prevTransitionKey === undefined) { prevTransitionKey = key; } else if (key !== prevTransitionKey) { prevTransitionKey = key; transitionKeyChanged = true; } } // handle mode if (oldInnerChild && oldInnerChild.type !== Comment && (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) { var leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance); // update old tree's hooks in case of dynamic transition setTransitionHooks(oldInnerChild, leavingHooks); // switching between different views if (mode === 'out-in') { state.isLeaving = true; // return placeholder node and queue update when leave finishes leavingHooks.afterLeave = () => { state.isLeaving = false; instance.update(); }; return emptyPlaceholder(child); } else if (mode === 'in-out' && innerChild.type !== Comment) { leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { var leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild); leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; // early removal callback el._leaveCb = () => { earlyRemove(); el._leaveCb = undefined; delete enterHooks.delayedLeave; }; enterHooks.delayedLeave = delayedLeave; }; } } return child; }; } }; // export the public type for h/tsx inference // also to avoid inline import() in generated d.ts files var BaseTransition = BaseTransitionImpl; function getLeavingNodesForType(state, vnode) { var { leavingVNodes } = state; var leavingVNodesCache = leavingVNodes.get(vnode.type); if (!leavingVNodesCache) { leavingVNodesCache = Object.create(null); leavingVNodes.set(vnode.type, leavingVNodesCache); } return leavingVNodesCache; } // The transition hooks are attached to the vnode as vnode.transition // and will be called at appropriate timing in the renderer. function resolveTransitionHooks(vnode, props, state, instance) { var { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props; var key = String(vnode.key); var leavingVNodesCache = getLeavingNodesForType(state, vnode); var callHook = (hook, args) => { hook && callWithAsyncErrorHandling(hook, instance, 9 /* TRANSITION_HOOK */ , args); }; var hooks = { mode, persisted, beforeEnter(el) { var hook = onBeforeEnter; if (!state.isMounted) { if (appear) { hook = onBeforeAppear || onBeforeEnter; } else { return; } } // for same element (v-show) if (el._leaveCb) { el._leaveCb(true /* cancelled */ ); } // for toggled element with same key (v-if) var leavingVNode = leavingVNodesCache[key]; if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) { // force early removal (not cancelled) leavingVNode.el._leaveCb(); } callHook(hook, [el]); }, enter(el) { var hook = onEnter; var afterHook = onAfterEnter; var cancelHook = onEnterCancelled; if (!state.isMounted) { if (appear) { hook = onAppear || onEnter; afterHook = onAfterAppear || onAfterEnter; cancelHook = onAppearCancelled || onEnterCancelled; } else { return; } } var called = false; var done = el._enterCb = cancelled => { if (called) return; called = true; if (cancelled) { callHook(cancelHook, [el]); } else { callHook(afterHook, [el]); } if (hooks.delayedLeave) { hooks.delayedLeave(); } el._enterCb = undefined; }; if (hook) { hook(el, done); if (hook.length <= 1) { done(); } } else { done(); } }, leave(el, remove) { var key = String(vnode.key); if (el._enterCb) { el._enterCb(true /* cancelled */ ); } if (state.isUnmounting) { return remove(); } callHook(onBeforeLeave, [el]); var called = false; var done = el._leaveCb = cancelled => { if (called) return; called = true; remove(); if (cancelled) { callHook(onLeaveCancelled, [el]); } else { callHook(onAfterLeave, [el]); } el._leaveCb = undefined; if (leavingVNodesCache[key] === vnode) { delete leavingVNodesCache[key]; } }; leavingVNodesCache[key] = vnode; if (onLeave) { onLeave(el, done); if (onLeave.length <= 1) { done(); } } else { done(); } }, clone(vnode) { return resolveTransitionHooks(vnode, props, state, instance); } }; return hooks; } // the placeholder really only handles one special case: KeepAlive // in the case of a KeepAlive in a leave phase we need to return a KeepAlive // placeholder with empty content to avoid the KeepAlive instance from being // unmounted. function emptyPlaceholder(vnode) { if (isKeepAlive(vnode)) { vnode = cloneVNode(vnode); vnode.children = null; return vnode; } } function getKeepAliveChild(vnode) { return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : undefined : vnode; } function setTransitionHooks(vnode, hooks) { if (vnode.shapeFlag & 6 /* COMPONENT */ && vnode.component) { setTransitionHooks(vnode.component.subTree, hooks); } else if (vnode.shapeFlag & 128 /* SUSPENSE */ ) { vnode.ssContent.transition = hooks.clone(vnode.ssContent); vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); } else { vnode.transition = hooks; } } function getTransitionRawChildren(children) { var keepComment = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var ret = []; var keyedFragmentCount = 0; for (var i = 0; i < children.length; i++) { var child = children[i]; // handle fragment children case, e.g. v-for if (child.type === Fragment) { if (child.patchFlag & 128 /* KEYED_FRAGMENT */ ) keyedFragmentCount++; ret = ret.concat(getTransitionRawChildren(child.children, keepComment)); } // comment placeholders should be skipped, e.g. v-if else if (keepComment || child.type !== Comment) { ret.push(child); } } // #1126 if a transition children list contains multiple sub fragments, these // fragments will be merged into a flat children array. Since each v-for // fragment may contain different static bindings inside, we need to de-op // these children to force full diffs to ensure correct behavior. if (keyedFragmentCount > 1) { for (var _i = 0; _i < ret.length; _i++) { ret[_i].patchFlag = -2 /* BAIL */ ; } } return ret; } // implementation, close to no-op function defineComponent(options) { return isFunction(options) ? { setup: options, name: options.name } : options; } var isAsyncWrapper = i => !!i.type.__asyncLoader; function defineAsyncComponent(source) { if (isFunction(source)) { source = { loader: source }; } var { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out suspensible = true, onError: userOnError } = source; var pendingRequest = null; var resolvedComp; var retries = 0; var retry = () => { retries++; pendingRequest = null; return load(); }; var load = () => { var thisRequest; return pendingRequest || (thisRequest = pendingRequest = loader().catch(err => { err = err instanceof Error ? err : new Error(String(err)); if (userOnError) { return new Promise((resolve, reject) => { var userRetry = () => resolve(retry()); var userFail = () => reject(err); userOnError(err, userRetry, userFail, retries + 1); }); } else { throw err; } }).then(comp => { if (thisRequest !== pendingRequest && pendingRequest) { return pendingRequest; } // interop module default if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { comp = comp.default; } resolvedComp = comp; return comp; })); }; return defineComponent({ name: 'AsyncComponentWrapper', __asyncLoader: load, get __asyncResolved() { return resolvedComp; }, setup() { var instance = currentInstance; // already resolved if (resolvedComp) { return () => createInnerComp(resolvedComp, instance); } var onError = err => { pendingRequest = null; handleError(err, instance, 13 /* ASYNC_COMPONENT_LOADER */ , !errorComponent /* do not throw in dev if user provided error component */ ); }; // suspense-controlled or SSR. if (suspensible && instance.suspense || isInSSRComponentSetup) { return load().then(comp => { return () => createInnerComp(comp, instance); }).catch(err => { onError(err); return () => errorComponent ? createVNode(errorComponent, { error: err }) : null; }); } var loaded = ref(false); var error = ref(); var delayed = ref(!!delay); if (delay) { setTimeout(() => { delayed.value = false; }, delay); } if (timeout != null) { setTimeout(() => { if (!loaded.value && !error.value) { var err = new Error("Async component timed out after ".concat(timeout, "ms.")); onError(err); error.value = err; } }, timeout); } load().then(() => { loaded.value = true; if (instance.parent && isKeepAlive(instance.parent.vnode)) { // parent is keep-alive, force update so the loaded component's // name is taken into account queueJob(instance.parent.update); } }).catch(err => { onError(err); error.value = err; }); return () => { if (loaded.value && resolvedComp) { return createInnerComp(resolvedComp, instance); } else if (error.value && errorComponent) { return createVNode(errorComponent, { error: error.value }); } else if (loadingComponent && !delayed.value) { return createVNode(loadingComponent); } }; } }); } function createInnerComp(comp, _ref7) { var { vnode: { ref, props, children } } = _ref7; var vnode = createVNode(comp, props, children); // ensure inner component inherits the async wrapper's ref owner vnode.ref = ref; return vnode; } var isKeepAlive = vnode => vnode.type.__isKeepAlive; var KeepAliveImpl = { name: "KeepAlive", // Marker for special handling inside the renderer. We are not using a === // check directly on KeepAlive in the renderer, because importing it directly // would prevent it from being tree-shaken. __isKeepAlive: true, props: { include: [String, RegExp, Array], exclude: [String, RegExp, Array], max: [String, Number] }, setup(props, _ref8) { var { slots } = _ref8; var instance = getCurrentInstance(); // KeepAlive communicates with the instantiated renderer via the // ctx where the renderer passes in its internals, // and the KeepAlive instance exposes activate/deactivate implementations. // The whole point of this is to avoid importing KeepAlive directly in the // renderer to facilitate tree-shaking. var sharedContext = instance.ctx; // if the internal renderer is not registered, it indicates that this is server-side rendering, // for KeepAlive, we just need to render its children if (!sharedContext.renderer) { return slots.default; } var cache = new Map(); var keys = new Set(); var current = null; var parentSuspense = instance.suspense; var { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext; var storageContainer = createElement('div', null); // fixed by xxxxx sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => { var instance = vnode.component; move(vnode, container, anchor, 0 /* ENTER */ , parentSuspense); // in case props have changed patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized); queuePostRenderEffect(() => { instance.isDeactivated = false; if (instance.a) { invokeArrayFns(instance.a); } var vnodeHook = vnode.props && vnode.props.onVnodeMounted; if (vnodeHook) { invokeVNodeHook(vnodeHook, instance.parent, vnode); } }, parentSuspense); }; sharedContext.deactivate = vnode => { var instance = vnode.component; move(vnode, storageContainer, null, 1 /* LEAVE */ , parentSuspense); queuePostRenderEffect(() => { if (instance.da) { invokeArrayFns(instance.da); } var vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; if (vnodeHook) { invokeVNodeHook(vnodeHook, instance.parent, vnode); } instance.isDeactivated = true; }, parentSuspense); }; function unmount(vnode) { // reset the shapeFlag so it can be properly unmounted resetShapeFlag(vnode); _unmount(vnode, instance, parentSuspense); } function pruneCache(filter) { cache.forEach((vnode, key) => { var name = getComponentName(vnode.type); if (name && (!filter || !filter(name))) { pruneCacheEntry(key); } }); } function pruneCacheEntry(key) { var cached = cache.get(key); if (!current || cached.type !== current.type) { unmount(cached); } else if (current) { // current active instance should no longer be kept-alive. // we can't unmount it now but it might be later, so reset its flag now. resetShapeFlag(current); } cache.delete(key); keys.delete(key); } // prune cache on include/exclude prop change watch(() => [props.include, props.exclude], _ref9 => { var [include, exclude] = _ref9; include && pruneCache(name => matches(include, name)); exclude && pruneCache(name => !matches(exclude, name)); }, // prune post-render after `current` has been updated { flush: 'post', deep: true }); // cache sub tree after render var pendingCacheKey = null; var cacheSubtree = () => { // fix #1621, the pendingCacheKey could be 0 if (pendingCacheKey != null) { cache.set(pendingCacheKey, getInnerChild(instance.subTree)); } }; onMounted(cacheSubtree); onUpdated(cacheSubtree); onBeforeUnmount(() => { cache.forEach(cached => { var { subTree, suspense } = instance; var vnode = getInnerChild(subTree); if (cached.type === vnode.type) { // current instance will be unmounted as part of keep-alive's unmount resetShapeFlag(vnode); // but invoke its deactivated hook here var da = vnode.component.da; da && queuePostRenderEffect(da, suspense); return; } unmount(cached); }); }); return () => { pendingCacheKey = null; if (!slots.default) { return null; } var children = slots.default(); var rawVNode = children[0]; if (children.length > 1) { current = null; return children; } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4 /* STATEFUL_COMPONENT */ ) && !(rawVNode.shapeFlag & 128 /* SUSPENSE */ )) { current = null; return rawVNode; } var vnode = getInnerChild(rawVNode); var comp = vnode.type; // for async components, name check should be based in its loaded // inner component if available var name = getComponentName(isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp); var { include, exclude, max } = props; if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { current = vnode; return rawVNode; } var key = vnode.key == null ? comp : vnode.key; var cachedVNode = cache.get(key); // clone vnode if it's reused because we are going to mutate it if (vnode.el) { vnode = cloneVNode(vnode); if (rawVNode.shapeFlag & 128 /* SUSPENSE */ ) { rawVNode.ssContent = vnode; } } // #1513 it's possible for the returned vnode to be cloned due to attr // fallthrough or scopeId, so the vnode here may not be the final vnode // that is mounted. Instead of caching it directly, we store the pending // key and cache `instance.subTree` (the normalized vnode) in // beforeMount/beforeUpdate hooks. pendingCacheKey = key; if (cachedVNode) { // copy over mounted state vnode.el = cachedVNode.el; vnode.component = cachedVNode.component; if (vnode.transition) { // recursively update transition hooks on subTree setTransitionHooks(vnode, vnode.transition); } // avoid vnode being mounted as fresh vnode.shapeFlag |= 512 /* COMPONENT_KEPT_ALIVE */ ; // make this key the freshest keys.delete(key); keys.add(key); } else { keys.add(key); // prune oldest entry if (max && keys.size > parseInt(max, 10)) { pruneCacheEntry(keys.values().next().value); } } // avoid vnode being unmounted vnode.shapeFlag |= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */ ; current = vnode; return rawVNode; }; } }; // export the public type for h/tsx inference // also to avoid inline import() in generated d.ts files var KeepAlive = KeepAliveImpl; function matches(pattern, name) { if (isArray(pattern)) { return pattern.some(p => matches(p, name)); } else if (isString(pattern)) { return pattern.split(',').indexOf(name) > -1; } else if (pattern.test) { return pattern.test(name); } /* istanbul ignore next */ return false; } function onActivated(hook, target) { registerKeepAliveHook(hook, "a" /* ACTIVATED */ , target); } function onDeactivated(hook, target) { registerKeepAliveHook(hook, "da" /* DEACTIVATED */ , target); } function registerKeepAliveHook(hook, type) { var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentInstance; // cache the deactivate branch check wrapper for injected hooks so the same // hook can be properly deduped by the scheduler. "__wdc" stands for "with // deactivation check". var wrappedHook = hook.__wdc || (hook.__wdc = () => { // only fire the hook if the target instance is NOT in a deactivated branch. var current = target; while (current) { if (current.isDeactivated) { return; } current = current.parent; } return hook(); }); injectHook(type, wrappedHook, target); // In addition to registering it on the target instance, we walk up the parent // chain and register it on all ancestor instances that are keep-alive roots. // This avoids the need to walk the entire component tree when invoking these // hooks, and more importantly, avoids the need to track child components in // arrays. if (target) { var current = target.parent; while (current && current.parent) { if (isKeepAlive(current.parent.vnode)) { injectToKeepAliveRoot(wrappedHook, type, target, current); } current = current.parent; } } } function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { // injectHook wraps the original for error handling, so make sure to remove // the wrapped version. var injected = injectHook(type, hook, keepAliveRoot, true /* prepend */ ); onUnmounted(() => { remove(keepAliveRoot[type], injected); }, target); } function resetShapeFlag(vnode) { var shapeFlag = vnode.shapeFlag; if (shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */ ) { shapeFlag -= 256 /* COMPONENT_SHOULD_KEEP_ALIVE */ ; } if (shapeFlag & 512 /* COMPONENT_KEPT_ALIVE */ ) { shapeFlag -= 512 /* COMPONENT_KEPT_ALIVE */ ; } vnode.shapeFlag = shapeFlag; } function getInnerChild(vnode) { return vnode.shapeFlag & 128 /* SUSPENSE */ ? vnode.ssContent : vnode; } function injectHook(type, hook) { var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentInstance; var prepend = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (target) { // fixed by xxxxxx if (isRootHook(type)) { target = target.root; } var { __page_container__ } = target.root.vnode; // 仅限 App 端 if (__page_container__) { __page_container__.onInjectHook(type); } var hooks = target[type] || (target[type] = []); // cache the error handling wrapper for injected hooks so the same hook // can be properly deduped by the scheduler. "__weh" stands for "with error // handling". var wrappedHook = hook.__weh || (hook.__weh = function () { if (target.isUnmounted) { return; } // disable tracking inside all lifecycle hooks // since they can potentially be called inside effects. pauseTracking(); // Set currentInstance during hook invocation. // This assumes the hook does not synchronously trigger other hooks, which // can only be false when the user does something really funky. setCurrentInstance(target); // fixed by xxxxxx for (var _len4 = arguments.length, args = new Array(_len4), _key5 = 0; _key5 < _len4; _key5++) { args[_key5] = arguments[_key5]; } var res = callWithAsyncErrorHandling(hook, target, type, args); unsetCurrentInstance(); resetTracking(); return res; }); if (prepend) { hooks.unshift(wrappedHook); } else { hooks.push(wrappedHook); } return wrappedHook; } } var createHook = lifecycle => function (hook) { var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : currentInstance; return (// post-create lifecycle registrations are noops during SSR (except for serverPrefetch) (!isInSSRComponentSetup || lifecycle === "sp" /* SERVER_PREFETCH */ ) && injectHook(lifecycle, hook, target) ); }; var onBeforeMount = createHook("bm" /* BEFORE_MOUNT */ ); var onMounted = createHook("m" /* MOUNTED */ ); var onBeforeUpdate = createHook("bu" /* BEFORE_UPDATE */ ); var onUpdated = createHook("u" /* UPDATED */ ); var onBeforeUnmount = createHook("bum" /* BEFORE_UNMOUNT */ ); var onUnmounted = createHook("um" /* UNMOUNTED */ ); var onServerPrefetch = createHook("sp" /* SERVER_PREFETCH */ ); var onRenderTriggered = createHook("rtg" /* RENDER_TRIGGERED */ ); var onRenderTracked = createHook("rtc" /* RENDER_TRACKED */ ); function onErrorCaptured(hook) { var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : currentInstance; injectHook("ec" /* ERROR_CAPTURED */ , hook, target); } var shouldCacheAccess = true; function applyOptions(instance) { var options = resolveMergedOptions(instance); var publicThis = instance.proxy; var ctx = instance.ctx; // do not cache property access on public proxy during state initialization shouldCacheAccess = false; // call beforeCreate first before accessing other options since // the hook may mutate resolved options (#2791) if (options.beforeCreate) { callHook(options.beforeCreate, instance, "bc" /* BEFORE_CREATE */ ); } var { // state data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, // lifecycle created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, // public API expose, inheritAttrs, // assets components, directives, filters } = options; var checkDuplicateProperties = null; // options initialization order (to be consistent with Vue 2): // - props (already done outside of this function) // - inject // - methods // - data (deferred since it relies on `this` access) // - computed // - watch (deferred since it relies on `this` access) if (injectOptions) { resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef); } if (methods) { for (var key in methods) { var methodHandler = methods[key]; if (isFunction(methodHandler)) { // In dev mode, we use the `createRenderContext` function to define // methods to the proxy target, and those are read-only but // reconfigurable, so it needs to be redefined here { ctx[key] = methodHandler.bind(publicThis); } } } } if (dataOptions) { var data = dataOptions.call(publicThis, publicThis); if (!isObject(data)) ;else { instance.data = reactive(data); } } // state initialization complete at this point - start caching access shouldCacheAccess = true; if (computedOptions) { var _loop = function (_key6) { var opt = computedOptions[_key6]; var get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; var set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : NOOP; var c = computed({ get, set }); Object.defineProperty(ctx, _key6, { enumerable: true, configurable: true, get: () => c.value, set: v => c.value = v }); }; for (var _key6 in computedOptions) { _loop(_key6); } } if (watchOptions) { for (var _key7 in watchOptions) { createWatcher(watchOptions[_key7], ctx, publicThis, _key7); } } if (provideOptions) { var provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions; Reflect.ownKeys(provides).forEach(key => { provide(key, provides[key]); }); } if (created) { callHook(created, instance, "c" /* CREATED */ ); } function registerLifecycleHook(register, hook) { if (isArray(hook)) { hook.forEach(_hook => register(_hook.bind(publicThis))); } else if (hook) { register(hook.bind(publicThis)); } } registerLifecycleHook(onBeforeMount, beforeMount); registerLifecycleHook(onMounted, mounted); registerLifecycleHook(onBeforeUpdate, beforeUpdate); registerLifecycleHook(onUpdated, updated); registerLifecycleHook(onActivated, activated); registerLifecycleHook(onDeactivated, deactivated); registerLifecycleHook(onErrorCaptured, errorCaptured); registerLifecycleHook(onRenderTracked, renderTracked); registerLifecycleHook(onRenderTriggered, renderTriggered); registerLifecycleHook(onBeforeUnmount, beforeUnmount); registerLifecycleHook(onUnmounted, unmounted); registerLifecycleHook(onServerPrefetch, serverPrefetch); if (isArray(expose)) { if (expose.length) { var exposed = instance.exposed || (instance.exposed = {}); expose.forEach(key => { Object.defineProperty(exposed, key, { get: () => publicThis[key], set: val => publicThis[key] = val }); }); } else if (!instance.exposed) { instance.exposed = {}; } } // options that are handled when creating the instance but also need to be // applied from mixins if (render && instance.render === NOOP) { instance.render = render; } if (inheritAttrs != null) { instance.inheritAttrs = inheritAttrs; } // asset options. if (components) instance.components = components; if (directives) instance.directives = directives; // fixed by xxxxxx var customApplyOptions = instance.appContext.config.globalProperties.$applyOptions; if (customApplyOptions) { customApplyOptions(options, instance, publicThis); } } function resolveInjections(injectOptions, ctx) { var checkDuplicateProperties = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NOOP; var unwrapRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (isArray(injectOptions)) { injectOptions = normalizeInject(injectOptions); } var _loop2 = function (key) { var opt = injectOptions[key]; var injected = void 0; if (isObject(opt)) { if ('default' in opt) { injected = inject(opt.from || key, opt.default, true /* treat default function as factory */ ); } else { injected = inject(opt.from || key); } } else { injected = inject(opt); } if (isRef(injected)) { // TODO remove the check in 3.3 if (unwrapRef) { Object.defineProperty(ctx, key, { enumerable: true, configurable: true, get: () => injected.value, set: v => injected.value = v }); } else { ctx[key] = injected; } } else { ctx[key] = injected; } }; for (var key in injectOptions) { _loop2(key); } } function callHook(hook, instance, type) { callWithAsyncErrorHandling(isArray(hook) ? hook.map(h => h.bind(instance.proxy)) : hook.bind(instance.proxy), instance, type); } function createWatcher(raw, ctx, publicThis, key) { var getter = key.includes('.') ? createPathGetter(publicThis, key) : () => publicThis[key]; if (isString(raw)) { var handler = ctx[raw]; if (isFunction(handler)) { watch(getter, handler); } } else if (isFunction(raw)) { watch(getter, raw.bind(publicThis)); } else if (isObject(raw)) { if (isArray(raw)) { raw.forEach(r => createWatcher(r, ctx, publicThis, key)); } else { var _handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler]; if (isFunction(_handler)) { watch(getter, _handler, raw); } } } else ; } /** * Resolve merged options and cache it on the component. * This is done only once per-component since the merging does not involve * instances. */ function resolveMergedOptions(instance) { var base = instance.type; var { mixins, extends: extendsOptions } = base; var { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext; var cached = cache.get(base); var resolved; if (cached) { resolved = cached; } else if (!globalMixins.length && !mixins && !extendsOptions) { { resolved = base; } } else { resolved = {}; if (globalMixins.length) { globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true)); } mergeOptions(resolved, base, optionMergeStrategies); } cache.set(base, resolved); return resolved; } function mergeOptions(to, from, strats) { var asMixin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var { mixins, extends: extendsOptions } = from; if (extendsOptions) { mergeOptions(to, extendsOptions, strats, true); } if (mixins) { mixins.forEach(m => mergeOptions(to, m, strats, true)); } for (var key in from) { if (asMixin && key === 'expose') ;else { var strat = internalOptionMergeStrats[key] || strats && strats[key]; to[key] = strat ? strat(to[key], from[key]) : from[key]; } } return to; } var internalOptionMergeStrats = { data: mergeDataFn, props: mergeObjectOptions, emits: mergeObjectOptions, // objects methods: mergeObjectOptions, computed: mergeObjectOptions, // lifecycle beforeCreate: mergeAsArray, created: mergeAsArray, beforeMount: mergeAsArray, mounted: mergeAsArray, beforeUpdate: mergeAsArray, updated: mergeAsArray, beforeDestroy: mergeAsArray, beforeUnmount: mergeAsArray, destroyed: mergeAsArray, unmounted: mergeAsArray, activated: mergeAsArray, deactivated: mergeAsArray, errorCaptured: mergeAsArray, serverPrefetch: mergeAsArray, // assets components: mergeObjectOptions, directives: mergeObjectOptions, // watch watch: mergeWatchOptions, // provide / inject provide: mergeDataFn, inject: mergeInject }; function mergeDataFn(to, from) { if (!from) { return to; } if (!to) { return from; } return function mergedDataFn() { return extend(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from); }; } function mergeInject(to, from) { return mergeObjectOptions(normalizeInject(to), normalizeInject(from)); } function normalizeInject(raw) { if (isArray(raw)) { var res = {}; for (var i = 0; i < raw.length; i++) { res[raw[i]] = raw[i]; } return res; } return raw; } function mergeAsArray(to, from) { return to ? [...new Set([].concat(to, from))] : from; } function mergeObjectOptions(to, from) { return to ? extend(extend(Object.create(null), to), from) : from; } function mergeWatchOptions(to, from) { if (!to) return from; if (!from) return to; var merged = extend(Object.create(null), to); for (var key in from) { merged[key] = mergeAsArray(to[key], from[key]); } return merged; } function initProps(instance, rawProps, isStateful) { var isSSR = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var props = {}; var attrs = {}; def(attrs, InternalObjectKey, 1); instance.propsDefaults = Object.create(null); setFullProps(instance, rawProps, props, attrs); // ensure all declared prop keys are present for (var key in instance.propsOptions[0]) { if (!(key in props)) { props[key] = undefined; } } if (isStateful) { // stateful instance.props = isSSR ? props : shallowReactive(props); } else { if (!instance.type.props) { // functional w/ optional props, props === attrs instance.props = attrs; } else { // functional w/ declared props instance.props = props; } } instance.attrs = attrs; } function updateProps(instance, rawProps, rawPrevProps, optimized) { var { props, attrs, vnode: { patchFlag } } = instance; var rawCurrentProps = toRaw(props); var [options] = instance.propsOptions; var hasAttrsChanged = false; if ( // always force full diff in dev // - #1942 if hmr is enabled with sfc component // - vite#872 non-sfc component used by sfc component (optimized || patchFlag > 0) && !(patchFlag & 16 /* FULL_PROPS */ )) { if (patchFlag & 8 /* PROPS */ ) { // Compiler-generated props & no keys change, just set the updated // the props. var propsToUpdate = instance.vnode.dynamicProps; for (var i = 0; i < propsToUpdate.length; i++) { var key = propsToUpdate[i]; // PROPS flag guarantees rawProps to be non-null var value = rawProps[key]; if (options) { // attr / props separation was done on init and will be consistent // in this code path, so just check if attrs have it. if (hasOwn(attrs, key)) { if (value !== attrs[key]) { attrs[key] = value; hasAttrsChanged = true; } } else { var camelizedKey = camelize(key); props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */ ); } } else { if (value !== attrs[key]) { attrs[key] = value; hasAttrsChanged = true; } } } } } else { // full props update. if (setFullProps(instance, rawProps, props, attrs)) { hasAttrsChanged = true; } // in case of dynamic props, check if we need to delete keys from // the props object var kebabKey; for (var _key8 in rawCurrentProps) { if (!rawProps || // for camelCase !hasOwn(rawProps, _key8) && ( // it's possible the original props was passed in as kebab-case // and converted to camelCase (#955) (kebabKey = hyphenate(_key8)) === _key8 || !hasOwn(rawProps, kebabKey))) { if (options) { if (rawPrevProps && ( // for camelCase rawPrevProps[_key8] !== undefined || // for kebab-case rawPrevProps[kebabKey] !== undefined)) { props[_key8] = resolvePropValue(options, rawCurrentProps, _key8, undefined, instance, true /* isAbsent */ ); } } else { delete props[_key8]; } } } // in the case of functional component w/o props declaration, props and // attrs point to the same object so it should already have been updated. if (attrs !== rawCurrentProps) { for (var _key9 in attrs) { if (!rawProps || !hasOwn(rawProps, _key9)) { delete attrs[_key9]; hasAttrsChanged = true; } } } } // trigger updates for $attrs in case it's used in component slots if (hasAttrsChanged) { trigger(instance, "set" /* SET */ , '$attrs'); } } function setFullProps(instance, rawProps, props, attrs) { var [options, needCastKeys] = instance.propsOptions; var hasAttrsChanged = false; var rawCastValues; if (rawProps) { for (var key in rawProps) { // key, ref are reserved and never passed down if (isReservedProp(key)) { continue; } var value = rawProps[key]; // prop option names are camelized during normalization, so to support // kebab -> camel conversion here we need to camelize the key. var camelKey = void 0; if (options && hasOwn(options, camelKey = camelize(key))) { if (!needCastKeys || !needCastKeys.includes(camelKey)) { props[camelKey] = value; } else { (rawCastValues || (rawCastValues = {}))[camelKey] = value; } } else if (!isEmitListener(instance.emitsOptions, key)) { if (!(key in attrs) || value !== attrs[key]) { attrs[key] = value; hasAttrsChanged = true; } } } } if (needCastKeys) { var rawCurrentProps = toRaw(props); var castValues = rawCastValues || EMPTY_OBJ; for (var i = 0; i < needCastKeys.length; i++) { var _key10 = needCastKeys[i]; props[_key10] = resolvePropValue(options, rawCurrentProps, _key10, castValues[_key10], instance, !hasOwn(castValues, _key10)); } } return hasAttrsChanged; } function resolvePropValue(options, props, key, value, instance, isAbsent) { var opt = options[key]; if (opt != null) { var hasDefault = hasOwn(opt, 'default'); // default values if (hasDefault && value === undefined) { var defaultValue = opt.default; if (opt.type !== Function && isFunction(defaultValue)) { var { propsDefaults } = instance; if (key in propsDefaults) { value = propsDefaults[key]; } else { setCurrentInstance(instance); value = propsDefaults[key] = defaultValue.call(null, props); unsetCurrentInstance(); } } else { value = defaultValue; } } // boolean casting if (opt[0 /* shouldCast */ ]) { if (isAbsent && !hasDefault) { value = false; } else if (opt[1 /* shouldCastTrue */ ] && (value === '' || value === hyphenate(key))) { value = true; } } } return value; } function normalizePropsOptions(comp, appContext) { var asMixin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var cache = appContext.propsCache; var cached = cache.get(comp); if (cached) { return cached; } var raw = comp.props; var normalized = {}; var needCastKeys = []; // apply mixin/extends props var hasExtends = false; if (!isFunction(comp)) { var extendProps = raw => { hasExtends = true; var [props, keys] = normalizePropsOptions(raw, appContext, true); extend(normalized, props); if (keys) needCastKeys.push(...keys); }; if (!asMixin && appContext.mixins.length) { appContext.mixins.forEach(extendProps); } if (comp.extends) { extendProps(comp.extends); } if (comp.mixins) { comp.mixins.forEach(extendProps); } } if (!raw && !hasExtends) { cache.set(comp, EMPTY_ARR); return EMPTY_ARR; } if (isArray(raw)) { for (var i = 0; i < raw.length; i++) { var normalizedKey = camelize(raw[i]); if (validatePropName(normalizedKey)) { normalized[normalizedKey] = EMPTY_OBJ; } } } else if (raw) { for (var key in raw) { var _normalizedKey = camelize(key); if (validatePropName(_normalizedKey)) { var opt = raw[key]; var prop = normalized[_normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : opt; if (prop) { var booleanIndex = getTypeIndex(Boolean, prop.type); var stringIndex = getTypeIndex(String, prop.type); prop[0 /* shouldCast */ ] = booleanIndex > -1; prop[1 /* shouldCastTrue */ ] = stringIndex < 0 || booleanIndex < stringIndex; // if the prop needs boolean casting or default value if (booleanIndex > -1 || hasOwn(prop, 'default')) { needCastKeys.push(_normalizedKey); } } } } } var res = [normalized, needCastKeys]; cache.set(comp, res); return res; } function validatePropName(key) { if (key[0] !== '$') { return true; } return false; } // use function string name to check type constructors // so that it works across vms / iframes. function getType(ctor) { var match = ctor && ctor.toString().match(/^\s*function (\w+)/); return match ? match[1] : ctor === null ? 'null' : ''; } function isSameType(a, b) { return getType(a) === getType(b); } function getTypeIndex(type, expectedTypes) { if (isArray(expectedTypes)) { return expectedTypes.findIndex(t => isSameType(t, type)); } else if (isFunction(expectedTypes)) { return isSameType(expectedTypes, type) ? 0 : -1; } return -1; } var isInternalKey = key => key[0] === '_' || key === '$stable'; var normalizeSlotValue = value => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; var normalizeSlot = (key, rawSlot, ctx) => { var normalized = withCtx(function () { return normalizeSlotValue(rawSlot(...arguments)); }, ctx); normalized._c = false; return normalized; }; var normalizeObjectSlots = (rawSlots, slots, instance) => { var ctx = rawSlots._ctx; for (var key in rawSlots) { if (isInternalKey(key)) continue; var value = rawSlots[key]; if (isFunction(value)) { slots[key] = normalizeSlot(key, value, ctx); } else if (value != null) { (function () { var normalized = normalizeSlotValue(value); slots[key] = () => normalized; })(); } } }; var normalizeVNodeSlots = (instance, children) => { var normalized = normalizeSlotValue(children); instance.slots.default = () => normalized; }; var initSlots = (instance, children) => { if (instance.vnode.shapeFlag & 32 /* SLOTS_CHILDREN */ ) { var type = children._; if (type) { // users can get the shallow readonly version of the slots object through `this.$slots`, // we should avoid the proxy object polluting the slots of the internal instance instance.slots = toRaw(children); // make compiler marker non-enumerable def(children, '_', type); } else { normalizeObjectSlots(children, instance.slots = {}); } } else { instance.slots = {}; if (children) { normalizeVNodeSlots(instance, children); } } def(instance.slots, InternalObjectKey, 1); }; var updateSlots = (instance, children, optimized) => { var { vnode, slots } = instance; var needDeletionCheck = true; var deletionComparisonTarget = EMPTY_OBJ; if (vnode.shapeFlag & 32 /* SLOTS_CHILDREN */ ) { var type = children._; if (type) { // compiled slots. if (optimized && type === 1 /* STABLE */ ) { // compiled AND stable. // no need to update, and skip stale slots removal. needDeletionCheck = false; } else { // compiled but dynamic (v-if/v-for on slots) - update slots, but skip // normalization. extend(slots, children); // #2893 // when rendering the optimized slots by manually written render function, // we need to delete the `slots._` flag if necessary to make subsequent updates reliable, // i.e. let the `renderSlot` create the bailed Fragment if (!optimized && type === 1 /* STABLE */ ) { delete slots._; } } } else { needDeletionCheck = !children.$stable; normalizeObjectSlots(children, slots); } deletionComparisonTarget = children; } else if (children) { // non slot object children (direct value) passed to a component normalizeVNodeSlots(instance, children); deletionComparisonTarget = { default: 1 }; } // delete stale slots if (needDeletionCheck) { for (var key in slots) { if (!isInternalKey(key) && !(key in deletionComparisonTarget)) { delete slots[key]; } } } }; /** * Adds directives to a VNode. */ function withDirectives(vnode, directives) { var internalInstance = currentRenderingInstance; if (internalInstance === null) { return vnode; } var instance = internalInstance.proxy; var bindings = vnode.dirs || (vnode.dirs = []); for (var i = 0; i < directives.length; i++) { var [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; if (isFunction(dir)) { dir = { mounted: dir, updated: dir }; } if (dir.deep) { traverse(value); } bindings.push({ dir, instance, value, oldValue: void 0, arg, modifiers }); } return vnode; } function invokeDirectiveHook(vnode, prevVNode, instance, name) { var bindings = vnode.dirs; var oldBindings = prevVNode && prevVNode.dirs; for (var i = 0; i < bindings.length; i++) { var binding = bindings[i]; if (oldBindings) { binding.oldValue = oldBindings[i].value; } var hook = binding.dir[name]; if (hook) { // disable tracking inside all lifecycle hooks // since they can potentially be called inside effects. pauseTracking(); callWithAsyncErrorHandling(hook, instance, 8 /* DIRECTIVE_HOOK */ , [vnode.el, binding, vnode, prevVNode]); resetTracking(); } } } function createAppContext() { return { app: null, config: { isNativeTag: NO, performance: false, globalProperties: {}, optionMergeStrategies: {}, errorHandler: undefined, warnHandler: undefined, compilerOptions: {} }, mixins: [], components: {}, directives: {}, provides: Object.create(null), optionsCache: new WeakMap(), propsCache: new WeakMap(), emitsCache: new WeakMap() }; } var uid = 0; function createAppAPI(render, hydrate) { return function createApp(rootComponent) { var rootProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (rootProps != null && !isObject(rootProps)) { rootProps = null; } var context = createAppContext(); var installedPlugins = new Set(); var isMounted = false; var app = context.app = { _uid: uid++, _component: rootComponent, _props: rootProps, _container: null, _context: context, _instance: null, version, get config() { return context.config; }, set config(v) {}, use(plugin) { for (var _len5 = arguments.length, options = new Array(_len5 > 1 ? _len5 - 1 : 0), _key11 = 1; _key11 < _len5; _key11++) { options[_key11 - 1] = arguments[_key11]; } if (installedPlugins.has(plugin)) ;else if (plugin && isFunction(plugin.install)) { installedPlugins.add(plugin); plugin.install(app, ...options); } else if (isFunction(plugin)) { installedPlugins.add(plugin); plugin(app, ...options); } else ; return app; }, mixin(mixin) { { if (!context.mixins.includes(mixin)) { context.mixins.push(mixin); } } return app; }, component(name, component) { if (!component) { return context.components[name]; } context.components[name] = component; return app; }, directive(name, directive) { if (!directive) { return context.directives[name]; } context.directives[name] = directive; return app; }, mount(rootContainer, isHydrate, isSVG) { if (!isMounted) { var vnode = createVNode(rootComponent, rootProps); // store app context on the root VNode. // this will be set on the root instance on initial mount. vnode.appContext = context; if (isHydrate && hydrate) { hydrate(vnode, rootContainer); } else { render(vnode, rootContainer, isSVG); } isMounted = true; app._container = rootContainer; rootContainer.__vue_app__ = app; return getExposeProxy(vnode.component) || vnode.component.proxy; } }, unmount() { if (isMounted) { render(null, app._container); delete app._container.__vue_app__; } }, provide(key, value) { // TypeScript doesn't allow symbols as index type // https://github.com/Microsoft/TypeScript/issues/24587 context.provides[key] = value; return app; } }; return app; }; } var hasMismatch = false; var isSVGContainer = container => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject'; var isComment = node => node.nodeType === 8 /* COMMENT */ ; // Note: hydration is DOM-specific // But we have to place it in core due to tight coupling with core - splitting // it out creates a ton of unnecessary complexity. // Hydration also depends on some renderer internal logic which needs to be // passed in via arguments. function createHydrationFunctions(rendererInternals) { var { mt: mountComponent, p: patch, o: { patchProp, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals; var hydrate = (vnode, container) => { if (!container.hasChildNodes()) { patch(null, vnode, container); flushPostFlushCbs(); return; } hasMismatch = false; hydrateNode(container.firstChild, vnode, null, null, null); flushPostFlushCbs(); if (hasMismatch && !false) { // this error should show up in production console.error("Hydration completed but contains mismatches."); } }; var hydrateNode = function (node, vnode, parentComponent, parentSuspense, slotScopeIds) { var optimized = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; var isFragmentStart = isComment(node) && node.data === '['; var onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart); var { type, ref, shapeFlag } = vnode; var domType = node.nodeType; vnode.el = node; var nextNode = null; switch (type) { case Text: if (domType !== 3 /* TEXT */ ) { nextNode = onMismatch(); } else { if (node.data !== vnode.children) { hasMismatch = true; node.data = vnode.children; } nextNode = nextSibling(node); } break; case Comment: if (domType !== 8 /* COMMENT */ || isFragmentStart) { nextNode = onMismatch(); } else { nextNode = nextSibling(node); } break; case Static: if (domType !== 1 /* ELEMENT */ ) { nextNode = onMismatch(); } else { // determine anchor, adopt content nextNode = node; // if the static vnode has its content stripped during build, // adopt it from the server-rendered HTML. var needToAdoptContent = !vnode.children.length; for (var i = 0; i < vnode.staticCount; i++) { if (needToAdoptContent) vnode.children += nextNode.outerHTML; if (i === vnode.staticCount - 1) { vnode.anchor = nextNode; } nextNode = nextSibling(nextNode); } return nextNode; } break; case Fragment: if (!isFragmentStart) { nextNode = onMismatch(); } else { nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); } break; default: if (shapeFlag & 1 /* ELEMENT */ ) { if (domType !== 1 /* ELEMENT */ || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) { nextNode = onMismatch(); } else { nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized); } } else if (shapeFlag & 6 /* COMPONENT */ ) { // when setting up the render effect, if the initial vnode already // has .el set, the component will perform hydration instead of mount // on its sub-tree. vnode.slotScopeIds = slotScopeIds; var container = parentNode(node); mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized); // component may be async, so in the case of fragments we cannot rely // on component's rendered output to determine the end of the fragment // instead, we do a lookahead to find the end anchor node. nextNode = isFragmentStart ? locateClosingAsyncAnchor(node) : nextSibling(node); // #3787 // if component is async, it may get moved / unmounted before its // inner component is loaded, so we need to give it a placeholder // vnode that matches its adopted DOM. if (isAsyncWrapper(vnode)) { var subTree; if (isFragmentStart) { subTree = createVNode(Fragment); subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; } else { subTree = node.nodeType === 3 ? createTextVNode('') : createVNode('div'); } subTree.el = node; vnode.component.subTree = subTree; } } else if (shapeFlag & 64 /* TELEPORT */ ) { if (domType !== 8 /* COMMENT */ ) { nextNode = onMismatch(); } else { nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren); } } else if (shapeFlag & 128 /* SUSPENSE */ ) { nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode); } else ; } if (ref != null) { setRef(ref, null, parentSuspense, vnode); } return nextNode; }; var hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { optimized = optimized || !!vnode.dynamicChildren; var { type, props, patchFlag, shapeFlag, dirs } = vnode; // #4006 for form elements with non-string v-model value bindings // e.g.