From 9c7016b5a6f79f0367e4f1e66d6c8ae81155ce4b Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 17 Jan 2022 16:47:13 +0800 Subject: [PATCH] wip(app): nvue --- packages/uni-app-vue/build.json | 32 + .../dist/service.runtime.esm.dev.js | 12907 ---------------- .../dist/service.runtime.esm.prod.js | 11027 ------------- .../nvue.runtime.esm.js} | 1663 +- pnpm-lock.yaml | 5 +- 5 files changed, 138 insertions(+), 25496 deletions(-) delete mode 100644 packages/uni-app-vue/dist/service.runtime.esm.dev.js delete mode 100644 packages/uni-app-vue/dist/service.runtime.esm.prod.js rename packages/uni-app-vue/{dist/view.runtime.esm.js => lib/nvue.runtime.esm.js} (83%) diff --git a/packages/uni-app-vue/build.json b/packages/uni-app-vue/build.json index 407237669..0702f1f08 100644 --- a/packages/uni-app-vue/build.json +++ b/packages/uni-app-vue/build.json @@ -40,5 +40,37 @@ "__VUE_PROD_DEVTOOLS__": "false" }, "external": ["@vue/shared"] + }, + { + "input": { + "src/nvue/factory.ts": ["dist/nvue.runtime.esm.dev.js"] + }, + "output": { + "banner": "export function vueFactory (exports) {\n", + "footer": "}" + }, + "replacements": { + "__VUE_OPTIONS_API__": "true", + "__VUE_PROD_DEVTOOLS__": "false", + "process.env.NODE_ENV": "\"development\"" + }, + "external": false, + "babel": true + }, + { + "input": { + "src/nvue/factory.ts": ["dist/nvue.runtime.esm.prod.js"] + }, + "output": { + "banner": "export function vueFactory (exports) {\n", + "footer": "}" + }, + "replacements": { + "__VUE_OPTIONS_API__": "true", + "__VUE_PROD_DEVTOOLS__": "false", + "process.env.NODE_ENV": "\"production\"" + }, + "external": false, + "babel": true } ] diff --git a/packages/uni-app-vue/dist/service.runtime.esm.dev.js b/packages/uni-app-vue/dist/service.runtime.esm.dev.js deleted file mode 100644 index f0eacf988..000000000 --- a/packages/uni-app-vue/dist/service.runtime.esm.dev.js +++ /dev/null @@ -1,12907 +0,0 @@ -export 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. - */ - Object.freeze({}); - Object.freeze([]); - 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 => vnode.el && isElement(vnode.el)); - - if (elemVNode) { - return elemVNode.el; - } - } - - return vnode.el; - } - - var lastLogTime = 0; - - function formatLog(module) { - var now = Date.now(); - var diff = lastLogTime ? now - lastLogTime : 0; - lastLogTime = now; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key2 = 1; _key2 < _len; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - return "[".concat(now, "][").concat(diff, "ms][").concat(module, "]\uFF1A").concat(args.map(arg => JSON.stringify(arg)).join(' ')); - } - - 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) { - { - console.error(formatLog('dispatchEvent', this.nodeId), evt.type, 'not found'); - } - 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 = 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; - } // These tag configs are shared between compiler-dom and runtime-dom, so they - // https://developer.mozilla.org/en-US/docs/Web/HTML/Element - - - var HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' + 'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' + 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' + 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' + 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' + 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' + 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' + 'option,output,progress,select,textarea,details,dialog,menu,' + 'summary,template,blockquote,iframe,tfoot'; // https://developer.mozilla.org/en-US/docs/Web/SVG/Element - - var SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' + 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' + 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' + 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' + 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' + 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' + 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' + 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' + 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' + 'text,textPath,title,tspan,unknown,use,view'; - var isHTMLTag = /*#__PURE__*/makeMap(HTML_TAGS); - var isSVGTag = /*#__PURE__*/makeMap(SVG_TAGS); - /** - * 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 = Object.freeze({}); - var EMPTY_ARR = Object.freeze([]); - - 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,ref_for,ref_key,' + '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 : {}); - }; - - function warn(msg) { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) { - args[_key3 - 1] = arguments[_key3]; - } - - console.warn("[Vue warn] ".concat(msg), ...args); - } - - 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(); - } - } else { - warn("cannot run an inactive effect scope."); - } - } - - 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); - } else { - warn("onScopeDispose() is called when there is no active effect scope" + " to be associated with."); - } - } - - 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('iterate'); - var MAP_KEY_ITERATE_KEY = Symbol('Map key iterate'); - - 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()); - } - - var eventInfo = { - effect: activeEffect, - target, - type, - key - }; - trackEffects(dep, eventInfo); - } - - 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); - - if (activeEffect.onTrack) { - activeEffect.onTrack(Object.assign({ - effect: activeEffect - }, debuggerEventExtraInfo)); - } - } - } - - 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; - } - } - - var eventInfo = { - target, - type, - key, - newValue, - oldValue, - oldTarget - }; - - if (deps.length === 1) { - if (deps[0]) { - { - triggerEffects(deps[0], eventInfo); - } - } - } else { - var effects = []; - - for (var dep of deps) { - if (dep) { - effects.push(...dep); - } - } - - { - triggerEffects(createDep(effects), eventInfo); - } - } - } - - function triggerEffects(dep, debuggerEventExtraInfo) { - // spread into array for stabilization - for (var _effect2 of isArray(dep) ? dep : [...dep]) { - if (_effect2 !== activeEffect || _effect2.allowRecurse) { - if (_effect2.onTrigger) { - _effect2.onTrigger(extend({ - effect: _effect2 - }, debuggerEventExtraInfo)); - } - - 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 _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) { - args[_key4] = arguments[_key4]; - } - - 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 _len4 = arguments.length, args = new Array(_len4), _key5 = 0; _key5 < _len4; _key5++) { - args[_key5] = arguments[_key5]; - } - - 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, oldValue); - } - } - - return result; - }; - } - - function deleteProperty(target, key) { - var hadKey = hasOwn(target, key); - var oldValue = target[key]; - var result = Reflect.deleteProperty(target, key); - - if (result && hadKey) { - trigger(target, "delete" - /* DELETE */ - , key, undefined, oldValue); - } - - 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) { - { - console.warn("Set operation on key \"".concat(String(key), "\" failed: target is readonly."), target); - } - return true; - }, - - deleteProperty(target, key) { - { - console.warn("Delete operation on key \"".concat(String(key), "\" failed: target is readonly."), target); - } - 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); - } else { - checkIdentityKeys(target, has, 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, oldValue); - } - - 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); - } else { - checkIdentityKeys(target, has, key); - } - - var oldValue = 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, oldValue); - } - - return result; - } - - function clear() { - var target = toRaw(this); - var hadItems = target.size !== 0; - var oldTarget = isMap(target) ? new Map(target) : new Set(target); // forward the operation before queueing reactions - - var result = target.clear(); - - if (hadItems) { - trigger(target, "clear" - /* CLEAR */ - , undefined, undefined, oldTarget); - } - - 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 () { - { - var key = (arguments.length <= 0 ? undefined : arguments[0]) ? "on key \"".concat(arguments.length <= 0 ? undefined : arguments[0], "\" ") : ""; - console.warn("".concat(capitalize(type), " operation ").concat(key, "failed: target is readonly."), toRaw(this)); - } - 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) - }; - - function checkIdentityKeys(target, has, key) { - var rawKey = toRaw(key); - - if (rawKey !== key && has.call(target, rawKey)) { - var type = toRawType(target); - console.warn("Reactive ".concat(type, " contains both the raw and reactive ") + "versions of the same object".concat(type === "Map" ? " as keys" : "", ", ") + "which can lead to inconsistencies. " + "Avoid differentiating between the raw and reactive versions " + "of an object and only use the reactive version if possible."); - } - } - - 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)) { - { - console.warn("value cannot be made reactive: ".concat(String(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, { - target: ref, - type: "get" - /* GET */ - , - key: 'value' - }); - } - } - } - - function triggerRefValue(ref, newVal) { - ref = toRaw(ref); - - if (ref.dep) { - { - triggerEffects(ref.dep, { - target: ref, - type: "set" - /* SET */ - , - key: 'value', - newValue: newVal - }); - } - } - } - - 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, newVal); - } - } - - } - - function triggerRef(ref) { - triggerRefValue(ref, ref.value); - } - - 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) { - if (!isProxy(object)) { - console.warn("toRefs() expects a reactive object but received a plain one."); - } - - 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, _defaultValue) { - this._object = _object; - this._key = _key; - this._defaultValue = _defaultValue; - this.__v_isRef = true; - } - - get value() { - var val = this._object[this._key]; - return val === undefined ? this._defaultValue : val; - } - - set value(newVal) { - this._object[this._key] = newVal; - } - - } - - function toRef(object, key, defaultValue) { - var val = object[key]; - return isRef(val) ? val : new ObjectRefImpl(object, key, defaultValue); - } - - 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 = () => { - console.warn('Write operation failed: computed value is readonly'); - }; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - - var cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter); - - if (debugOptions) { - cRef.effect.onTrack = debugOptions.onTrack; - cRef.effect.onTrigger = debugOptions.onTrigger; - } - - return cRef; - } - /* eslint-disable no-restricted-globals */ - - - var isHmrUpdating = false; - var hmrDirtyComponents = new Set(); // Expose the HMR runtime on the global object - // This makes it entirely tree-shakable without polluting the exports and makes - // it easier to be used in toolings like vue-loader - // Note: for a component to be eligible for HMR it also needs the __hmrId option - // to be set so that its instances can be registered / removed. - - { - getGlobalThis().__VUE_HMR_RUNTIME__ = { - createRecord: tryWrap(createRecord), - rerender: tryWrap(rerender), - reload: tryWrap(reload) - }; - } - var map = new Map(); - - function registerHMR(instance) { - var id = instance.type.__hmrId; - var record = map.get(id); - - if (!record) { - createRecord(id, instance.type); - record = map.get(id); - } - - record.instances.add(instance); - } - - function unregisterHMR(instance) { - map.get(instance.type.__hmrId).instances.delete(instance); - } - - function createRecord(id, initialDef) { - if (map.has(id)) { - return false; - } - - map.set(id, { - initialDef: normalizeClassComponent(initialDef), - instances: new Set() - }); - return true; - } - - function normalizeClassComponent(component) { - return isClassComponent(component) ? component.__vccOpts : component; - } - - function rerender(id, newRender) { - var record = map.get(id); - - if (!record) { - return; - } // update initial record (for not-yet-rendered component) - - - record.initialDef.render = newRender; - [...record.instances].forEach(instance => { - if (newRender) { - instance.render = newRender; - normalizeClassComponent(instance.type).render = newRender; - } - - instance.renderCache = []; // this flag forces child components with slot content to update - - isHmrUpdating = true; - instance.update(); - isHmrUpdating = false; - }); - } - - function reload(id, newComp) { - var record = map.get(id); - if (!record) return; - newComp = normalizeClassComponent(newComp); // update initial def (for not-yet-rendered components) - - updateComponentDef(record.initialDef, newComp); // create a snapshot which avoids the set being mutated during updates - - var instances = [...record.instances]; - - for (var instance of instances) { - var oldComp = normalizeClassComponent(instance.type); - - if (!hmrDirtyComponents.has(oldComp)) { - // 1. Update existing comp definition to match new one - if (oldComp !== record.initialDef) { - updateComponentDef(oldComp, newComp); - } // 2. mark definition dirty. This forces the renderer to replace the - // component on patch. - - - hmrDirtyComponents.add(oldComp); - } // 3. invalidate options resolution cache - - - instance.appContext.optionsCache.delete(instance.type); // 4. actually update - - if (instance.ceReload) { - // custom element - hmrDirtyComponents.add(oldComp); - instance.ceReload(newComp.styles); - hmrDirtyComponents.delete(oldComp); - } else if (instance.parent) { - // 4. Force the parent instance to re-render. This will cause all updated - // components to be unmounted and re-mounted. Queue the update so that we - // don't end up forcing the same parent to re-render multiple times. - queueJob(instance.parent.update); // instance is the inner component of an async custom element - // invoke to reset styles - - if (instance.parent.type.__asyncLoader && instance.parent.ceReload) { - instance.parent.ceReload(newComp.styles); - } - } else if (instance.appContext.reload) { - // root instance mounted via createApp() has a reload method - instance.appContext.reload(); - } else if (typeof window !== 'undefined') { - // root instance inside tree created via raw render(). Force reload. - window.location.reload(); - } else { - console.warn('[HMR] Root or manually mounted instance modified. Full reload required.'); - } - } // 5. make sure to cleanup dirty hmr components after update - - - queuePostFlushCb(() => { - for (var _instance of instances) { - hmrDirtyComponents.delete(normalizeClassComponent(_instance.type)); - } - }); - } - - function updateComponentDef(oldComp, newComp) { - extend(oldComp, newComp); - - for (var key in oldComp) { - if (key !== '__file' && !(key in newComp)) { - delete oldComp[key]; - } - } - } - - function tryWrap(fn) { - return (id, arg) => { - try { - return fn(id, arg); - } catch (e) { - console.error(e); - console.warn("[HMR] Something went wrong during Vue component hot-reload. " + "Full reload required."); - } - }; - } - - var devtools; - var buffer = []; - var devtoolsNotInstalled = false; - - function emit(event) { - for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key6 = 1; _key6 < _len5; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - if (devtools) { - devtools.emit(event, ...args); - } else if (!devtoolsNotInstalled) { - buffer.push({ - event, - args - }); - } - } - - 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; - devtoolsNotInstalled = true; - buffer = []; - } - }, 3000); - } else { - // non-browser env, assume not installed - devtoolsNotInstalled = true; - buffer = []; - } - } - - function devtoolsInitApp(app, version) { - emit("app:init" - /* APP_INIT */ - , app, version, { - Fragment, - Text, - Comment, - Static - }); - } - - function devtoolsUnmountApp(app) { - emit("app:unmount" - /* APP_UNMOUNT */ - , app); - } - - var devtoolsComponentAdded = /*#__PURE__*/createDevtoolsComponentHook("component:added" - /* COMPONENT_ADDED */ - ); - var devtoolsComponentUpdated = /*#__PURE__*/createDevtoolsComponentHook("component:updated" - /* COMPONENT_UPDATED */ - ); - var devtoolsComponentRemoved = /*#__PURE__*/createDevtoolsComponentHook("component:removed" - /* COMPONENT_REMOVED */ - ); - - function createDevtoolsComponentHook(hook) { - return component => { - emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component); - }; - } - - var devtoolsPerfStart = /*#__PURE__*/createDevtoolsPerformanceHook("perf:start" - /* PERFORMANCE_START */ - ); - var devtoolsPerfEnd = /*#__PURE__*/createDevtoolsPerformanceHook("perf:end" - /* PERFORMANCE_END */ - ); - - function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - emit(hook, component.appContext.app, component.uid, component, type, time); - }; - } - - function devtoolsComponentEmit(component, event, params) { - emit("component:emit" - /* COMPONENT_EMIT */ - , component.appContext.app, component, event, params); - } - - function emit$1(instance, event) { - var props = instance.vnode.props || EMPTY_OBJ; - - for (var _len6 = arguments.length, rawArgs = new Array(_len6 > 2 ? _len6 - 2 : 0), _key7 = 2; _key7 < _len6; _key7++) { - rawArgs[_key7 - 2] = arguments[_key7]; - } - - { - var { - emitsOptions, - propsOptions: [propsOptions] - } = instance; - - if (emitsOptions) { - if (!(event in emitsOptions) && !false) { - if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { - warn$1("Component emitted event \"".concat(event, "\" but it is neither declared in ") + "the emits option nor as an \"".concat(toHandlerKey(event), "\" prop.")); - } - } else { - var validator = emitsOptions[event]; - - if (isFunction(validator)) { - var isValid = validator(...rawArgs); - - if (!isValid) { - warn$1("Invalid event arguments: event validation failed for event \"".concat(event, "\".")); - } - } - } - } - } - 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); - } - } - - { - devtoolsComponentEmit(instance, event, args); - } - { - var lowerCaseEvent = event.toLowerCase(); - - if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { - warn$1("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + "".concat(formatComponentName(instance, instance.type), " but the handler is registered for \"").concat(event, "\". ") + "Note that HTML attributes are case-insensitive and you cannot use " + "v-on to listen to camelCase events when using in-DOM templates. " + "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); - } - } - 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); - } - - { - devtoolsComponentUpdated(ctx); - } - 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; - } - /** - * dev only flag to track whether $attrs was used during render. - * If $attrs was used during render then the warning for failed attrs - * fallthrough can be suppressed. - */ - - - var accessedAttrs = false; - - function markAttrsAccessed() { - accessedAttrs = true; - } - - 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); - { - accessedAttrs = false; - } - - 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 ("development" !== 'production' && attrs === props) { - markAttrsAccessed(); - } - - result = normalizeVNode(_render.length > 1 ? _render(props, "development" !== '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; - var setRoot = undefined; - - if (result.patchFlag > 0 && result.patchFlag & 2048 - /* DEV_ROOT_FRAGMENT */ - ) { - [root, setRoot] = getChildRoot(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); - } else if (!accessedAttrs && root.type !== Comment) { - var allAttrs = Object.keys(attrs); - var eventAttrs = []; - var extraAttrs = []; - - for (var i = 0, l = allAttrs.length; i < l; i++) { - var key = allAttrs[i]; - - if (isOn(key)) { - // ignore v-model handlers when they fail to fallthrough - if (!isModelListener(key)) { - // remove `on`, lowercase first letter to reflect event casing - // accurately - eventAttrs.push(key[2].toLowerCase() + key.slice(3)); - } - } else { - extraAttrs.push(key); - } - } - - if (extraAttrs.length) { - warn$1("Extraneous non-props attributes (" + "".concat(extraAttrs.join(', '), ") ") + "were passed to component but could not be automatically inherited " + "because component renders fragment or text root nodes."); - } - - if (eventAttrs.length) { - warn$1("Extraneous non-emits event listeners (" + "".concat(eventAttrs.join(', '), ") ") + "were passed to component but could not be automatically inherited " + "because component renders fragment or text root nodes. " + "If the listener is intended to be a component custom event listener only, " + "declare it using the \"emits\" option."); - } - } - } - } // inherit directives - - - if (vnode.dirs) { - if (!isElementRoot(root)) { - warn$1("Runtime directive used on component with non-element root node. " + "The directives will not function as intended."); - } - - root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; - } // inherit transition data - - - if (vnode.transition) { - if (!isElementRoot(root)) { - warn$1("Component inside renders non-element root node " + "that cannot be animated."); - } - - root.transition = vnode.transition; - } - - if (setRoot) { - setRoot(root); - } else { - result = root; - } - - setCurrentRenderingInstance(prev); - return result; - } - /** - * dev only - * In dev mode, template root level comments are rendered, which turns the - * template into a fragment root, but we need to locate the single element - * root for attrs and scope id processing. - */ - - - var getChildRoot = vnode => { - var rawChildren = vnode.children; - var dynamicChildren = vnode.dynamicChildren; - var childRoot = filterSingleRoot(rawChildren); - - if (!childRoot) { - return [vnode, undefined]; - } - - var index = rawChildren.indexOf(childRoot); - var dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; - - var setRoot = updatedRoot => { - rawChildren[index] = updatedRoot; - - if (dynamicChildren) { - if (dynamicIndex > -1) { - dynamicChildren[dynamicIndex] = updatedRoot; - } else if (updatedRoot.patchFlag > 0) { - vnode.dynamicChildren = [...dynamicChildren, updatedRoot]; - } - } - }; - - return [normalizeVNode(childRoot), setRoot]; - }; - - 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; - }; - - var isElementRoot = vnode => { - return vnode.shapeFlag & (6 - /* COMPONENT */ - | 1 - /* ELEMENT */ - ) || vnode.type === Comment // potential v-if branch switch - ; - }; - - function shouldUpdateComponent(prevVNode, nextVNode, optimized) { - var { - props: prevProps, - children: prevChildren, - component - } = prevVNode; - var { - props: nextProps, - children: nextChildren, - patchFlag - } = nextVNode; - var emits = component.emitsOptions; // Parent component's render function was hot-updated. Since this may have - // caused the child component's slots content to have changed, we need to - // force the child to update as well. - - if ((prevChildren || nextChildren) && isHmrUpdating) { - return true; - } // 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); - } - } - } - } - } - - var hasWarned = false; - - function createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals) { - var isHydrating = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : false; - - /* istanbul ignore if */ - if (!hasWarned) { - hasWarned = true; // @ts-ignore `console.info` cannot be null error - - console[console.info ? 'info' : 'log'](" is an experimental feature and its API will likely change."); - } - - 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; - { - if (!resume && !suspense.pendingBranch) { - throw new Error("suspense.resolve() is called without a pending branch."); - } - - if (suspense.isUnmounted) { - throw new Error("suspense.resolve() is called on an already unmounted suspense boundary."); - } - } - 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; - { - pushWarningContext(vnode); - } - 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); - { - popWarningContext(); - } // 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); - - if (!singleChild) { - warn$1(" slots expect a single root node."); - } - - 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) { - { - warn$1("provide() can only be used inside setup()."); - } - } 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 { - warn$1("injection \"".concat(String(key), "\" not found.")); - } - } else { - warn$1("inject() can only be used inside setup() or functional components."); - } - } - - 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; - } // warn multiple elements - - - if (children.length > 1) { - warn$1(' can only be used on a single element or component. Use ' + ' for lists.'); - } // 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; // check mode - - if (mode && mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') { - warn$1("invalid mode: ".concat(mode)); - } // 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; - } - - if (!comp) { - warn$1("Async component loader resolved to undefined. " + "If you are using retry(), make sure to return its return value."); - } // interop module default - - - if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { - comp = comp.default; - } - - if (comp && !isObject(comp) && !isFunction(comp)) { - throw new Error("Invalid async component load result: ".concat(comp)); - } - - 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; - { - instance.__v_cache = cache; - } - 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); - { - // Update components tree - devtoolsComponentAdded(instance); - } - }; - - 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); - { - // Update components tree - devtoolsComponentAdded(instance); - } - }; - - 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) { - { - warn$1("KeepAlive should contain exactly one component child."); - } - 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 _len7 = arguments.length, args = new Array(_len7), _key8 = 0; _key8 < _len7; _key8++) { - args[_key8] = arguments[_key8]; - } - - var res = callWithAsyncErrorHandling(hook, target, type, args); - unsetCurrentInstance(); - resetTracking(); - return res; - }); - - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - - return wrappedHook; - } else { - var apiName = toHandlerKey((ErrorTypeStrings[type] || type.replace(/^on/, '')).replace(/ hook$/, '')); // fixed by xxxxxx - - warn$1("".concat(apiName, " is called when there is no active component instance to be ") + "associated with. " + "Lifecycle injection APIs can only be used during execution of setup()." + (" If you are using async setup(), make sure to register lifecycle " + "hooks before the first await statement.")); - } - } - - 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); - } - - function createDuplicateChecker() { - var cache = Object.create(null); - return (type, key) => { - if (cache[key]) { - warn$1("".concat(type, " property \"").concat(key, "\" is already defined in ").concat(cache[key], ".")); - } else { - cache[key] = type; - } - }; - } - - 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 = createDuplicateChecker(); - { - var [propsOptions] = instance.propsOptions; - - if (propsOptions) { - for (var key in propsOptions) { - checkDuplicateProperties("Props" - /* PROPS */ - , key); - } - } - } // 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 _key9 in methods) { - var methodHandler = methods[_key9]; - - 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 - { - Object.defineProperty(ctx, _key9, { - value: methodHandler.bind(publicThis), - configurable: true, - enumerable: true, - writable: true - }); - } - { - checkDuplicateProperties("Methods" - /* METHODS */ - , _key9); - } - } else { - warn$1("Method \"".concat(_key9, "\" has type \"").concat(typeof methodHandler, "\" in the component definition. ") + "Did you reference the function correctly?"); - } - } - } - - if (dataOptions) { - (function () { - if (!isFunction(dataOptions)) { - warn$1("The data option must be a function. " + "Plain object usage is no longer supported."); - } - - var data = dataOptions.call(publicThis, publicThis); - - if (isPromise(data)) { - warn$1("data() returned a Promise - note data() cannot be async; If you " + "intend to perform data fetching before component renders, use " + "async setup() + ."); - } - - if (!isObject(data)) { - warn$1("data() should return an object."); - } else { - instance.data = reactive(data); - { - var _loop = function (_key10) { - checkDuplicateProperties("Data" - /* DATA */ - , _key10); // expose data on ctx during dev - - if (_key10[0] !== '$' && _key10[0] !== '_') { - Object.defineProperty(ctx, _key10, { - configurable: true, - enumerable: true, - get: () => data[_key10], - set: NOOP - }); - } - }; - - for (var _key10 in data) { - _loop(_key10); - } - } - } - })(); - } // state initialization complete at this point - start caching access - - - shouldCacheAccess = true; - - if (computedOptions) { - var _loop2 = function (_key11) { - var opt = computedOptions[_key11]; - var get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; - - if (get === NOOP) { - warn$1("Computed property \"".concat(_key11, "\" has no getter.")); - } - - var set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : () => { - warn$1("Write operation failed: computed property \"".concat(_key11, "\" is readonly.")); - }; - var c = computed({ - get, - set - }); - Object.defineProperty(ctx, _key11, { - enumerable: true, - configurable: true, - get: () => c.value, - set: v => c.value = v - }); - { - checkDuplicateProperties("Computed" - /* COMPUTED */ - , _key11); - } - }; - - for (var _key11 in computedOptions) { - _loop2(_key11); - } - } - - if (watchOptions) { - for (var _key12 in watchOptions) { - createWatcher(watchOptions[_key12], ctx, publicThis, _key12); - } - } - - 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 _loop3 = 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 { - { - warn$1("injected property \"".concat(key, "\" is a ref and will be auto-unwrapped ") + "and no longer needs `.value` in the next minor release. " + "To opt-in to the new behavior now, " + "set `app.config.unwrapInjectedRef = true` (this config is " + "temporary and will not be needed in the future.)"); - } - ctx[key] = injected; - } - } else { - ctx[key] = injected; - } - - { - checkDuplicateProperties("Inject" - /* INJECT */ - , key); - } - }; - - for (var key in injectOptions) { - _loop3(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 { - warn$1("Invalid watch handler specified by key \"".concat(raw, "\""), 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 { - warn$1("Invalid watch handler specified by key \"".concat(raw.handler, "\""), _handler); - } - } - } else { - warn$1("Invalid watch option: \"".concat(key, "\""), raw); - } - } - /** - * 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') { - warn$1("\"expose\" option is ignored when declared in mixins or extends. " + "It should only be declared in the base component itself."); - } 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; - } - } // validation - - - { - validateProps(rawProps || {}, props, instance); - } - - 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 - !(instance.type.__hmrId || instance.parent && instance.parent.type.__hmrId) && (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 _key13 in rawCurrentProps) { - if (!rawProps || // for camelCase - !hasOwn(rawProps, _key13) && ( // it's possible the original props was passed in as kebab-case - // and converted to camelCase (#955) - (kebabKey = hyphenate(_key13)) === _key13 || !hasOwn(rawProps, kebabKey))) { - if (options) { - if (rawPrevProps && ( // for camelCase - rawPrevProps[_key13] !== undefined || // for kebab-case - rawPrevProps[kebabKey] !== undefined)) { - props[_key13] = resolvePropValue(options, rawCurrentProps, _key13, undefined, instance, true - /* isAbsent */ - ); - } - } else { - delete props[_key13]; - } - } - } // 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 _key14 in attrs) { - if (!rawProps || !hasOwn(rawProps, _key14)) { - delete attrs[_key14]; - hasAttrsChanged = true; - } - } - } - } // trigger updates for $attrs in case it's used in component slots - - - if (hasAttrsChanged) { - trigger(instance, "set" - /* SET */ - , '$attrs'); - } - - { - validateProps(rawProps || {}, props, instance); - } - } - - 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 _key15 = needCastKeys[i]; - props[_key15] = resolvePropValue(options, rawCurrentProps, _key15, castValues[_key15], instance, !hasOwn(castValues, _key15)); - } - } - - 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++) { - if (!isString(raw[i])) { - warn$1("props must be strings when using array syntax.", raw[i]); - } - - var normalizedKey = camelize(raw[i]); - - if (validatePropName(normalizedKey)) { - normalized[normalizedKey] = EMPTY_OBJ; - } - } - } else if (raw) { - if (!isObject(raw)) { - warn$1("invalid props options", 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; - } else { - warn$1("Invalid prop name: \"".concat(key, "\" is a reserved property.")); - } - - 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; - } - /** - * dev only - */ - - - function validateProps(rawProps, props, instance) { - var resolvedValues = toRaw(props); - var options = instance.propsOptions[0]; - - for (var key in options) { - var opt = options[key]; - if (opt == null) continue; - validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))); - } - } - /** - * dev only - */ - - - function validateProp(name, value, prop, isAbsent) { - var { - type, - required, - validator - } = prop; // required! - - if (required && isAbsent) { - warn$1('Missing required prop: "' + name + '"'); - return; - } // missing but optional - - - if (value == null && !prop.required) { - return; - } // type check - - - if (type != null && type !== true) { - var isValid = false; - var types = isArray(type) ? type : [type]; - var expectedTypes = []; // value is valid as long as one of the specified types match - - for (var i = 0; i < types.length && !isValid; i++) { - var { - valid, - expectedType - } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - - if (!isValid) { - warn$1(getInvalidTypeMessage(name, value, expectedTypes)); - return; - } - } // custom validator - - - if (validator && !validator(value)) { - warn$1('Invalid prop: custom validator check failed for prop "' + name + '".'); - } - } - - var isSimpleType = /*#__PURE__*/makeMap('String,Number,Boolean,Function,Symbol,BigInt'); - /** - * dev only - */ - - function assertType(value, type) { - var valid; - var expectedType = getType(type); - - if (isSimpleType(expectedType)) { - var t = typeof value; - valid = t === expectedType.toLowerCase(); // for primitive wrapper objects - - if (!valid && t === 'object') { - valid = value instanceof type; - } - } else if (expectedType === 'Object') { - valid = isObject(value); - } else if (expectedType === 'Array') { - valid = isArray(value); - } else if (expectedType === 'null') { - valid = value === null; - } else { - valid = value instanceof type; - } - - return { - valid, - expectedType - }; - } - /** - * dev only - */ - - - function getInvalidTypeMessage(name, value, expectedTypes) { - var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + " Expected ".concat(expectedTypes.map(capitalize).join(' | ')); - var expectedType = expectedTypes[0]; - var receivedType = toRawType(value); - var expectedValue = styleValue(value, expectedType); - var receivedValue = styleValue(value, receivedType); // check if we need to specify expected value - - if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) { - message += " with value ".concat(expectedValue); - } - - message += ", got ".concat(receivedType, " "); // check if we need to specify received value - - if (isExplicable(receivedType)) { - message += "with value ".concat(receivedValue, "."); - } - - return message; - } - /** - * dev only - */ - - - function styleValue(value, type) { - if (type === 'String') { - return "\"".concat(value, "\""); - } else if (type === 'Number') { - return "".concat(Number(value)); - } else { - return "".concat(value); - } - } - /** - * dev only - */ - - - function isExplicable(type) { - var explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some(elem => type.toLowerCase() === elem); - } - /** - * dev only - */ - - - function isBoolean() { - for (var _len8 = arguments.length, args = new Array(_len8), _key16 = 0; _key16 < _len8; _key16++) { - args[_key16] = arguments[_key16]; - } - - return args.some(elem => elem.toLowerCase() === 'boolean'); - } - - 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 () { - if (currentInstance) { - warn$1("Slot \"".concat(key, "\" invoked outside of the render function: ") + "this will not track dependencies used in the slot. " + "Invoke the slot function inside the render function instead."); - } - - 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 () { - { - warn$1("Non-function value encountered for slot \"".concat(key, "\". ") + "Prefer function slots for better performance."); - } - var normalized = normalizeSlotValue(value); - - slots[key] = () => normalized; - })(); - } - } - }; - - var normalizeVNodeSlots = (instance, children) => { - if (!isKeepAlive(instance.vnode) && !false) { - warn$1("Non-function value encountered for default slot. " + "Prefer function slots for better performance."); - } - - 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 (isHmrUpdating) { - // Parent was HMR updated so slot content may have changed. - // force update slots and mark instance for hmr as well - extend(slots, children); - } else 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]; - } - } - } - }; - /** - Runtime helper for applying directives to a vnode. Example usage: - - const comp = resolveComponent('comp') - const foo = resolveDirective('foo') - const bar = resolveDirective('bar') - - return withDirectives(h(comp), [ - [foo, this.x], - [bar, this.y] - ]) - */ - - - var isBuiltInDirective = /*#__PURE__*/makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo'); - - function validateDirectiveName(name) { - if (isBuiltInDirective(name)) { - warn$1('Do not use built-in directive ids as custom directive id: ' + name); - } - } - /** - * Adds directives to a VNode. - */ - - - function withDirectives(vnode, directives) { - var internalInstance = currentRenderingInstance; - - if (internalInstance === null) { - warn$1("withDirectives can only be used inside render functions."); - 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)) { - warn$1("root props passed to app.mount() must be an object."); - 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) { - { - warn$1("app.config cannot be replaced. Modify individual options instead."); - } - }, - - use(plugin) { - for (var _len9 = arguments.length, options = new Array(_len9 > 1 ? _len9 - 1 : 0), _key17 = 1; _key17 < _len9; _key17++) { - options[_key17 - 1] = arguments[_key17]; - } - - if (installedPlugins.has(plugin)) { - warn$1("Plugin has already been applied to target app."); - } else if (plugin && isFunction(plugin.install)) { - installedPlugins.add(plugin); - plugin.install(app, ...options); - } else if (isFunction(plugin)) { - installedPlugins.add(plugin); - plugin(app, ...options); - } else { - warn$1("A plugin must either be a function or an object with an \"install\" " + "function."); - } - - return app; - }, - - mixin(mixin) { - { - if (!context.mixins.includes(mixin)) { - context.mixins.push(mixin); - } else { - warn$1('Mixin has already been applied to target app' + (mixin.name ? ": ".concat(mixin.name) : '')); - } - } - return app; - }, - - component(name, component) { - { - validateComponentName(name, context.config); - } - - if (!component) { - return context.components[name]; - } - - if (context.components[name]) { - warn$1("Component \"".concat(name, "\" has already been registered in target app.")); - } - - context.components[name] = component; - return app; - }, - - directive(name, directive) { - { - validateDirectiveName(name); - } - - if (!directive) { - return context.directives[name]; - } - - if (context.directives[name]) { - warn$1("Directive \"".concat(name, "\" has already been registered in target app.")); - } - - 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; // HMR root reload - - { - context.reload = () => { - render(cloneVNode(vnode), rootContainer, isSVG); - }; - } - - if (isHydrate && hydrate) { - hydrate(vnode, rootContainer); - } else { - render(vnode, rootContainer, isSVG); - } - - isMounted = true; - app._container = rootContainer; - rootContainer.__vue_app__ = app; - { - app._instance = vnode.component; - devtoolsInitApp(app, version); - } - return getExposeProxy(vnode.component) || vnode.component.proxy; - } else { - warn$1("App has already been mounted.\n" + "If you want to remount the same app, move your app creation logic " + "into a factory function and create fresh app instances for each " + "mount - e.g. `const createMyApp = () => createApp(App)`"); - } - }, - - unmount() { - if (isMounted) { - render(null, app._container); - { - app._instance = null; - devtoolsUnmountApp(app); - } - delete app._container.__vue_app__; - } else { - warn$1("Cannot unmount an app that is not mounted."); - } - }, - - provide(key, value) { - if (key in context.provides) { - warn$1("App already provides property with key \"".concat(String(key), "\". ") + "It will be overwritten with the new value."); - } // TypeScript doesn't allow symbols as index type - // https://github.com/Microsoft/TypeScript/issues/24587 - - - context.provides[key] = value; - return app; - } - - }; - return app; - }; - } - /** - * Function for handling a template ref - */ - - - function setRef(rawRef, oldRawRef, parentSuspense, vnode) { - var isUnmount = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - if (isArray(rawRef)) { - rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount)); - return; - } - - if (isAsyncWrapper(vnode) && !isUnmount) { - // when mounting async components, nothing needs to be done, - // because the template ref is forwarded to inner component - return; - } - - var refValue = vnode.shapeFlag & 4 - /* STATEFUL_COMPONENT */ - ? getExposeProxy(vnode.component) || vnode.component.proxy : vnode.el; - var value = isUnmount ? null : refValue; - var { - i: owner, - r: ref - } = rawRef; - - if (!owner) { - warn$1("Missing ref owner context. ref cannot be used on hoisted vnodes. " + "A vnode with ref must be created inside the render function."); - return; - } - - var oldRef = oldRawRef && oldRawRef.r; - var refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - var setupState = owner.setupState; // dynamic ref changed. unset old ref - - if (oldRef != null && oldRef !== ref) { - if (isString(oldRef)) { - refs[oldRef] = null; - - if (hasOwn(setupState, oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef(oldRef)) { - oldRef.value = null; - } - } - - if (isFunction(ref)) { - callWithErrorHandling(ref, owner, 12 - /* FUNCTION_REF */ - , [value, refs]); - } else { - var _isString = isString(ref); - - var _isRef = isRef(ref); - - if (_isString || _isRef) { - var doSet = () => { - if (rawRef.f) { - var existing = _isString ? refs[ref] : ref.value; - - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref] = [refValue]; - } else { - ref.value = [refValue]; - if (rawRef.k) refs[rawRef.k] = ref.value; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref] = value; - - if (hasOwn(setupState, ref)) { - setupState[ref] = value; - } - } else if (isRef(ref)) { - ref.value = value; - if (rawRef.k) refs[rawRef.k] = value; - } else { - warn$1('Invalid template ref type:', ref, "(".concat(typeof ref, ")")); - } - }; - - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else { - warn$1('Invalid template ref type:', ref, "(".concat(typeof ref, ")")); - } - } - } - - 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()) { - warn$1("Attempting to hydrate existing markup but container is empty. " + "Performing full mount instead."); - 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; - warn$1("Hydration text mismatch:" + "\n- Client: ".concat(JSON.stringify(node.data)) + "\n- Server: ".concat(JSON.stringify(vnode.children))); - 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 { - warn$1('Invalid HostVNode type:', type, "(".concat(typeof type, ")")); - } - - } - - 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.