From 765912d40e59dc57146b1c7f2b2a5768586d420f Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Fri, 2 Jul 2021 19:51:35 +0800 Subject: [PATCH] wip(app): uni-app-plus --- package.json | 2 + packages/uni-app-plus/dist/style.css | 264 +- .../uni-app-plus/dist/uni-app-service.es.js | 26 +- .../uni-app-plus/dist/uni-app-view.umd.js | 5326 +--- packages/uni-app-plus/src/PageAction.ts | 74 + packages/uni-app-plus/src/constants.ts | 1 + .../src/service/framework/dom/Page.ts | 117 +- .../src/service/framework/page/define.ts | 3 +- .../src/service/framework/page/register.ts | 8 +- .../src/service/framework/runtime.ts | 16 - .../uni-app-plus/src/view/components/index.ts | 42 +- .../uni-app-plus/src/view/components/view.ts | 4 + .../uni-app-plus/src/view/framework/index.ts | 5 + .../src/view/framework/subscriber/index.ts | 7 + .../view/framework/subscriber/vdom/index.ts | 18 + .../framework/subscriber/vdom/onPageCreate.ts | 70 + .../subscriber/vdom/onPageCreated.ts | 1 + packages/uni-app-plus/src/view/ready.ts | 2 + packages/uni-app-vue/build.json | 3 +- .../uni-app-vue/dist/service.runtime.esm.js | 22595 ++++++++-------- packages/uni-h5/dist/uni-h5.es.js | 34 +- packages/vite-plugin-uni/src/utils/plugin.ts | 14 +- rollup.config.js | 30 +- yarn.lock | 731 +- 24 files changed, 13486 insertions(+), 15907 deletions(-) create mode 100644 packages/uni-app-plus/src/PageAction.ts delete mode 100644 packages/uni-app-plus/src/service/framework/runtime.ts create mode 100644 packages/uni-app-plus/src/view/components/view.ts create mode 100644 packages/uni-app-plus/src/view/framework/index.ts create mode 100644 packages/uni-app-plus/src/view/framework/subscriber/index.ts create mode 100644 packages/uni-app-plus/src/view/framework/subscriber/vdom/index.ts create mode 100644 packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreate.ts create mode 100644 packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreated.ts diff --git a/package.json b/package.json index f33355e1e..0c3546cc6 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,12 @@ "node": ">=10.0.0" }, "devDependencies": { + "@babel/preset-env": "^7.14.7", "@dcloudio/types": "^2.2.18", "@jest/types": "^27.0.2", "@microsoft/api-extractor": "^7.13.2", "@rollup/plugin-alias": "^3.1.1", + "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", diff --git a/packages/uni-app-plus/dist/style.css b/packages/uni-app-plus/dist/style.css index c65dcaa31..dde338974 100644 --- a/packages/uni-app-plus/dist/style.css +++ b/packages/uni-app-plus/dist/style.css @@ -1,264 +1,6 @@ -uni-button { - position: relative; +uni-view { display: block; - margin-left: auto; - margin-right: auto; - padding-left: 14px; - padding-right: 14px; - box-sizing: border-box; - font-size: 18px; - text-align: center; - text-decoration: none; - line-height: 2.55555556; - border-radius: 5px; - -webkit-tap-highlight-color: transparent; - overflow: hidden; - color: #000000; - background-color: #f8f8f8; - cursor: pointer; } - -uni-button[hidden] { - display: none !important; -} - -uni-button:after { - content: ' '; - width: 200%; - height: 200%; - position: absolute; - top: 0; - left: 0; - border: 1px solid rgba(0, 0, 0, 0.2); - transform: scale(0.5); - transform-origin: 0 0; - box-sizing: border-box; - border-radius: 10px; -} - -uni-button[native] { - padding-left: 0; - padding-right: 0; -} - -uni-button[native] .uni-button-cover-view-wrapper { - border: inherit; - border-color: inherit; - border-radius: inherit; - background-color: inherit; -} - -uni-button[native] .uni-button-cover-view-inner { - padding-left: 14px; - padding-right: 14px; -} - -uni-button uni-cover-view { - line-height: inherit; - white-space: inherit; -} - -uni-button[type='default'] { - color: #000000; - background-color: #f8f8f8; -} - -uni-button[type='primary'] { - color: #ffffff; - background-color: #007aff; -} - -uni-button[type='warn'] { - color: #ffffff; - background-color: #e64340; -} - -uni-button[disabled] { - color: rgba(255, 255, 255, 0.6); - cursor: not-allowed; -} - -uni-button[disabled][type='default'], -uni-button[disabled]:not([type]) { - color: rgba(0, 0, 0, 0.3); - background-color: #f7f7f7; -} - -uni-button[disabled][type='primary'] { - background-color: rgba(0, 122, 255, 0.6); -} - -uni-button[disabled][type='warn'] { - background-color: #ec8b89; -} - -uni-button[type='primary'][plain] { - color: #007aff; - border: 1px solid #007aff; - background-color: transparent; -} - -uni-button[type='primary'][plain][disabled] { - color: rgba(0, 0, 0, 0.2); - border-color: rgba(0, 0, 0, 0.2); -} - -uni-button[type='primary'][plain]:after { - border-width: 0; -} - -uni-button[type='default'][plain] { - color: #353535; - border: 1px solid #353535; - background-color: transparent; -} - -uni-button[type='default'][plain][disabled] { - color: rgba(0, 0, 0, 0.2); - border-color: rgba(0, 0, 0, 0.2); -} - -uni-button[type='default'][plain]:after { - border-width: 0; -} - -uni-button[plain] { - color: #353535; - border: 1px solid #353535; - background-color: transparent; -} - -uni-button[plain][disabled] { - color: rgba(0, 0, 0, 0.2); - border-color: rgba(0, 0, 0, 0.2); -} - -uni-button[plain]:after { - border-width: 0; -} - -uni-button[plain][native] .uni-button-cover-view-inner { - padding: 0; -} - -uni-button[type='warn'][plain] { - color: #e64340; - border: 1px solid #e64340; - background-color: transparent; -} - -uni-button[type='warn'][plain][disabled] { - color: rgba(0, 0, 0, 0.2); - border-color: rgba(0, 0, 0, 0.2); -} - -uni-button[type='warn'][plain]:after { - border-width: 0; -} - -uni-button[size='mini'] { - display: inline-block; - line-height: 2.3; - font-size: 13px; - padding: 0 1.34em; -} - -uni-button[size='mini'][native] { - padding: 0; -} - -uni-button[size='mini'][native] .uni-button-cover-view-inner { - padding: 0 1.34em; -} - -uni-button[loading]:not([disabled]) { - cursor: progress; -} - -uni-button[loading]:before { - content: ' '; - display: inline-block; - width: 18px; - height: 18px; - vertical-align: middle; - animation: uni-loading 1s steps(12, end) infinite; - background-size: 100%; -} - -uni-button[loading][type='primary'] { - color: rgba(255, 255, 255, 0.6); - background-color: #0062cc; -} - -uni-button[loading][type='primary'][plain] { - color: #007aff; - background-color: transparent; -} - -uni-button[loading][type='default'] { - color: rgba(0, 0, 0, 0.6); - background-color: #dedede; -} - -uni-button[loading][type='default'][plain] { - color: #353535; - background-color: transparent; -} - -uni-button[loading][type='warn'] { - color: rgba(255, 255, 255, 0.6); - background-color: #ce3c39; -} - -uni-button[loading][type='warn'][plain] { - color: #e64340; - background-color: transparent; -} - -uni-button[loading][native]:before { - content: none; -} - -.button-hover { - color: rgba(0, 0, 0, 0.6); - background-color: #dedede; -} - -.button-hover[plain] { - color: rgba(53, 53, 53, 0.6); - border-color: rgba(53, 53, 53, 0.6); - background-color: transparent; -} - -.button-hover[type='primary'] { - color: rgba(255, 255, 255, 0.6); - background-color: #0062cc; -} - -.button-hover[type='primary'][plain] { - color: rgba(26, 173, 25, 0.6); - border-color: rgba(26, 173, 25, 0.6); - background-color: transparent; -} - -.button-hover[type='default'] { - color: rgba(0, 0, 0, 0.6); - background-color: #dedede; -} - -.button-hover[type='default'][plain] { - color: rgba(53, 53, 53, 0.6); - border-color: rgba(53, 53, 53, 0.6); - background-color: transparent; -} - -.button-hover[type='warn'] { - color: rgba(255, 255, 255, 0.6); - background-color: #ce3c39; -} - -.button-hover[type='warn'][plain] { - color: rgba(230, 67, 64, 0.6); - border-color: rgba(230, 67, 64, 0.6); - background-color: transparent; +uni-view[hidden] { + display: none; } diff --git a/packages/uni-app-plus/dist/uni-app-service.es.js b/packages/uni-app-plus/dist/uni-app-service.es.js index 1e8da9385..95b12aeb4 100644 --- a/packages/uni-app-plus/dist/uni-app-service.es.js +++ b/packages/uni-app-plus/dist/uni-app-service.es.js @@ -5614,6 +5614,7 @@ var serviceContext = (function (vue) { }); } + const VD_SYNC = 'vdSync'; const ON_WEBVIEW_READY = 'onWebviewReady'; function initNVue(webviewStyle, routeMeta, path) { @@ -6490,7 +6491,6 @@ var serviceContext = (function (vue) { }, delay); } - const BRIDGE_NODE_SYNC = 'nodeSync'; const ACTION_TYPE_PAGE_CREATE = 1; const ACTION_TYPE_PAGE_CREATED = 2; const ACTION_TYPE_CREATE = 3; @@ -6498,7 +6498,8 @@ var serviceContext = (function (vue) { const ACTION_TYPE_REMOVE = 5; const ACTION_TYPE_SET_ATTRIBUTE = 6; const ACTION_TYPE_REMOVE_ATTRIBUTE = 7; - const ACTION_TYPE_SET_TEXT = 8; + const ACTION_TYPE_SET_TEXT = 8; + class UniPageNode extends UniNode { constructor(pageId, options, setup = false) { super(NODE_TYPE_PAGE, '#page', null); @@ -6509,6 +6510,7 @@ var serviceContext = (function (vue) { this.pageNode = this; this.createAction = [ACTION_TYPE_PAGE_CREATE, options]; this.createdAction = [ACTION_TYPE_PAGE_CREATED]; + this._update = this.update.bind(this); setup && this.setup(); } onCreate(thisNode, nodeName) { @@ -6548,6 +6550,10 @@ var serviceContext = (function (vue) { } push(action) { this.updateActions.push(action); + if ((process.env.NODE_ENV !== 'production')) { + console.log(formatLog('PageNode', 'push', action)); + } + vue.queuePostFlushCb(this._update); } restore() { this.push(this.createAction); @@ -6557,20 +6563,23 @@ var serviceContext = (function (vue) { setup() { this.send([this.createAction]); } - mounted() { - const { updateActions, createdAction } = this; - updateActions.unshift(createdAction); - this.update(); - } + // mounted() { + // const { updateActions, createdAction } = this + // updateActions.unshift(createdAction) + // this.update() + // } update() { const { updateActions } = this; + if ((process.env.NODE_ENV !== 'production')) { + console.log(formatLog('PageNode', 'update', updateActions.length)); + } if (updateActions.length) { this.send(updateActions); updateActions.length = 0; } } send(action) { - UniServiceJSBridge.publishHandler(BRIDGE_NODE_SYNC, action, this.pageId); + UniServiceJSBridge.publishHandler(VD_SYNC, action, this.pageId); } } function pushCreateAction(pageNode, nodeId, nodeName) { @@ -6730,6 +6739,7 @@ var serviceContext = (function (vue) { function initPageOptions({ meta }) { const statusbarHeight = getStatusbarHeight(); return { + route: meta.route, version: 1, locale: '', disableScroll: meta.disableScroll === true, diff --git a/packages/uni-app-plus/dist/uni-app-view.umd.js b/packages/uni-app-plus/dist/uni-app-view.umd.js index e06788f70..142d6d6cd 100644 --- a/packages/uni-app-plus/dist/uni-app-view.umd.js +++ b/packages/uni-app-plus/dist/uni-app-view.umd.js @@ -130,9 +130,9 @@ P(a, b, function(g) { a.f && R(a, g); if (g.localName === "link" && g.getAttribute("rel") === "import") { - var h2 = g.import; - h2 instanceof Node && (h2.__CE_isImportDocument = true, h2.__CE_registry = document.__CE_registry); - h2 && h2.readyState === "complete" ? h2.__CE_documentLoadHandled = true : g.addEventListener("load", function() { + var h = g.import; + h instanceof Node && (h.__CE_isImportDocument = true, h.__CE_registry = document.__CE_registry); + h && h.readyState === "complete" ? h.__CE_documentLoadHandled = true : g.addEventListener("load", function() { var k = g.import; if (!k.__CE_documentLoadHandled) { k.__CE_documentLoadHandled = true; @@ -170,8 +170,8 @@ if (d.attributeChangedCallback && b.hasAttributes()) { var e = d.observedAttributes; for (d = 0; d < e.length; d++) { - var g = e[d], h2 = b.getAttribute(g); - h2 !== null && a.attributeChangedCallback(b, g, null, h2, null); + var g = e[d], h = b.getAttribute(g); + h !== null && a.attributeChangedCallback(b, g, null, h, null); } } J(b) && a.connectedCallback(b); @@ -336,7 +336,7 @@ return x; }; var g = e("connectedCallback"); - var h2 = e("disconnectedCallback"); + var h = e("disconnectedCallback"); var k = e("adoptedCallback"); var l = (f = e("attributeChangedCallback")) && c.observedAttributes || []; } catch (m) { @@ -348,7 +348,7 @@ localName: b, constructorFunction: c, connectedCallback: g, - disconnectedCallback: h2, + disconnectedCallback: h, adoptedCallback: k, attributeChangedCallback: f, observedAttributes: l, @@ -375,8 +375,8 @@ for (d = 0; d < b.length; d++) T(a.b, b[d]); for (d = 0; d < c.length; d++) { - for (var e = c[d], g = f.get(e), h2 = 0; h2 < g.length; h2++) - T(a.b, g[h2]); + for (var e = c[d], g = f.get(e), h = 0; h < g.length; h++) + T(a.b, g[h]); (e = a.s.get(e)) && e.resolve(void 0); } c.length = 0; @@ -431,24 +431,24 @@ function Z(a, b, c) { function f(d) { return function(e) { - for (var g = [], h2 = 0; h2 < arguments.length; ++h2) - g[h2] = arguments[h2]; - h2 = []; + for (var g = [], h = 0; h < arguments.length; ++h) + g[h] = arguments[h]; + h = []; for (var k = [], l = 0; l < g.length; l++) { var m = g[l]; m instanceof Element && J(m) && k.push(m); if (m instanceof DocumentFragment) for (m = m.firstChild; m; m = m.nextSibling) - h2.push(m); + h.push(m); else - h2.push(m); + h.push(m); } d.apply(this, g); for (g = 0; g < k.length; g++) U(a, k[g]); if (J(this)) - for (g = 0; g < h2.length; g++) - k = h2[g], k instanceof Element && S(a, k); + for (g = 0; g < h.length; g++) + k = h[g], k instanceof Element && S(a, k); }; } c.prepend !== void 0 && (b.prepend = f(c.prepend)); @@ -474,9 +474,9 @@ for (var e = [], g = 0; g < arguments.length; ++g) e[g] = arguments[g]; g = []; - for (var h2 = [], k = 0; k < e.length; k++) { + for (var h = [], k = 0; k < e.length; k++) { var l = e[k]; - l instanceof Element && J(l) && h2.push(l); + l instanceof Element && J(l) && h.push(l); if (l instanceof DocumentFragment) for (l = l.firstChild; l; l = l.nextSibling) g.push(l); @@ -484,11 +484,11 @@ g.push(l); } f.apply(this, e); - for (e = 0; e < h2.length; e++) - U(a, h2[e]); + for (e = 0; e < h.length; e++) + U(a, h[e]); if (J(this)) for (e = 0; e < g.length; e++) - h2 = g[e], h2 instanceof Element && S(a, h2); + h = g[e], h instanceof Element && S(a, h); }; } var c = Element.prototype; @@ -498,8 +498,8 @@ for (var d = [], e = 0; e < arguments.length; ++e) d[e] = arguments[e]; e = []; - for (var g = [], h2 = 0; h2 < d.length; h2++) { - var k = d[h2]; + for (var g = [], h = 0; h < d.length; h++) { + var k = d[h]; k instanceof Element && J(k) && g.push(k); if (k instanceof DocumentFragment) for (k = k.firstChild; k; k = k.nextSibling) @@ -507,11 +507,11 @@ else e.push(k); } - h2 = J(this); + h = J(this); ka.apply(this, d); for (d = 0; d < g.length; d++) U(a, g[d]); - if (h2) + if (h) for (U(a, this), d = 0; d < e.length; d++) g = e[d], g instanceof Element && S(a, g); }); @@ -524,9 +524,9 @@ function Da(a) { function b(d, e) { Object.defineProperty(d, "innerHTML", { enumerable: e.enumerable, configurable: true, get: e.get, set: function(g) { - var h2 = this, k = void 0; + var h = this, k = void 0; J(this) && (k = [], P(a, this, function(x) { - x !== h2 && k.push(x); + x !== h && k.push(x); })); e.set.call(this, g); if (k) @@ -539,35 +539,35 @@ } }); } function c(d, e) { - d.insertAdjacentElement = function(g, h2) { - var k = J(h2); - g = e.call(this, g, h2); - k && U(a, h2); - J(g) && S(a, h2); + d.insertAdjacentElement = function(g, h) { + var k = J(h); + g = e.call(this, g, h); + k && U(a, h); + J(g) && S(a, h); return g; }; } function f(d, e) { - function g(h2, k) { - for (var l = []; h2 !== k; h2 = h2.nextSibling) - l.push(h2); + function g(h, k) { + for (var l = []; h !== k; h = h.nextSibling) + l.push(h); for (k = 0; k < l.length; k++) V(a, l[k]); } - d.insertAdjacentHTML = function(h2, k) { - h2 = h2.toLowerCase(); - if (h2 === "beforebegin") { + d.insertAdjacentHTML = function(h, k) { + h = h.toLowerCase(); + if (h === "beforebegin") { var l = this.previousSibling; - e.call(this, h2, k); + e.call(this, h, k); g(l || this.parentNode.firstChild, this); - } else if (h2 === "afterbegin") - l = this.firstChild, e.call(this, h2, k), g(this.firstChild, l); - else if (h2 === "beforeend") - l = this.lastChild, e.call(this, h2, k), g(l || this.firstChild, null); - else if (h2 === "afterend") - l = this.nextSibling, e.call(this, h2, k), g(this.nextSibling, l); + } else if (h === "afterbegin") + l = this.firstChild, e.call(this, h, k), g(this.firstChild, l); + else if (h === "beforeend") + l = this.lastChild, e.call(this, h, k), g(l || this.firstChild, null); + else if (h === "afterend") + l = this.nextSibling, e.call(this, h, k), g(this.nextSibling, l); else - throw new SyntaxError("The value provided (" + String(h2) + ") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'."); + throw new SyntaxError("The value provided (" + String(h) + ") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'."); }; } y && (Element.prototype.attachShadow = function(d) { @@ -583,11 +583,11 @@ b(d, { enumerable: true, configurable: true, get: function() { return q.call(this, true).innerHTML; }, set: function(e) { - var g = this.localName === "template", h2 = g ? this.content : this, k = p2.call(document, this.namespaceURI, this.localName); - for (k.innerHTML = e; 0 < h2.childNodes.length; ) - u.call(h2, h2.childNodes[0]); + var g = this.localName === "template", h = g ? this.content : this, k = p2.call(document, this.namespaceURI, this.localName); + for (k.innerHTML = e; 0 < h.childNodes.length; ) + u.call(h, h.childNodes[0]); for (e = g ? k.content : k; 0 < e.childNodes.length; ) - r.call(h2, e.childNodes[0]); + r.call(h, e.childNodes[0]); } }); }); Element.prototype.setAttribute = function(d, e) { @@ -601,10 +601,10 @@ Element.prototype.setAttributeNS = function(d, e, g) { if (this.__CE_state !== 1) return E2.call(this, d, e, g); - var h2 = D.call(this, d, e); + var h = D.call(this, d, e); E2.call(this, d, e, g); g = D.call(this, d, e); - a.attributeChangedCallback(this, e, h2, g, d); + a.attributeChangedCallback(this, e, h, g, d); }; Element.prototype.removeAttribute = function(d) { if (this.__CE_state !== 1) @@ -618,8 +618,8 @@ return F.call(this, d, e); var g = D.call(this, d, e); F.call(this, d, e); - var h2 = D.call(this, d, e); - g !== h2 && a.attributeChangedCallback(this, e, g, h2, d); + var h = D.call(this, d, e); + g !== h && a.attributeChangedCallback(this, e, g, h, d); }; na ? c(HTMLElement.prototype, na) : G && c(Element.prototype, G); oa ? f(HTMLElement.prototype, oa) : H && f(Element.prototype, H); @@ -656,10 +656,10 @@ else { var e = void 0; if (this.firstChild) { - var g = this.childNodes, h2 = g.length; - if (0 < h2 && J(this)) { - e = Array(h2); - for (var k = 0; k < h2; k++) + var g = this.childNodes, h = g.length; + if (0 < h && J(this)) { + e = Array(h); + for (var k = 0; k < h; k++) e[k] = g[k]; } } @@ -753,6 +753,9 @@ O && !O.forcePolyfill && typeof O.define == "function" && typeof O.get == "function" || Ha(); window.__CE_installPolyfill = Ha; }).call(self); + var view = "uni-view {\n display: block;\n}\nuni-view[hidden] {\n display: none;\n}\n"; + const VD_SYNC = "vdSync"; + const ON_WEBVIEW_READY = "onWebviewReady"; function makeMap(str, expectsLowerCase) { const map = Object.create(null); const list = str.split(","); @@ -765,60 +768,9 @@ const isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED); const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); - function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = normalizeStyle(isString(item) ? parseStringStyle(item) : item); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } - } - return res; - } else if (isObject$1(value)) { - return value; - } - } - const listDelimiterRE = /;(?![^(]*\))/g; - const propertyDelimiterRE = /:(.+)/; - function parseStringStyle(cssText) { - const ret = {}; - cssText.split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); - } - }); - return ret; - } - function normalizeClass(value) { - let res = ""; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + " "; - } - } - } else if (isObject$1(value)) { - for (const name in value) { - if (value[name]) { - res += name + " "; - } - } - } - return res.trim(); - } const EMPTY_OBJ = {}; - const EMPTY_ARR = []; const NOOP = () => { }; - const NO = () => false; const onRE = /^on[^a-z]/; const isOn = (key) => onRE.test(key); const isModelListener = (key) => key.startsWith("onUpdate:"); @@ -829,17 +781,17 @@ arr.splice(i, 1); } }; - const hasOwnProperty$1 = Object.prototype.hasOwnProperty; - const hasOwn$1 = (val, key) => hasOwnProperty$1.call(val, key); + const hasOwnProperty = Object.prototype.hasOwnProperty; + const hasOwn = (val, key) => hasOwnProperty.call(val, key); const isArray = Array.isArray; const isMap = (val) => toTypeString(val) === "[object Map]"; const isSet = (val) => toTypeString(val) === "[object Set]"; const isFunction = (val) => typeof val === "function"; const isString = (val) => typeof val === "string"; const isSymbol = (val) => typeof val === "symbol"; - const isObject$1 = (val) => val !== null && typeof val === "object"; + const isObject = (val) => val !== null && typeof val === "object"; const isPromise = (val) => { - return isObject$1(val) && isFunction(val.then) && isFunction(val.catch); + return isObject(val) && isFunction(val.then) && isFunction(val.catch); }; const objectToString = Object.prototype.toString; const toTypeString = (value) => objectToString.call(value); @@ -848,39 +800,98 @@ }; const isPlainObject = (val) => toTypeString(val) === "[object Object]"; const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; - const isReservedProp = /* @__PURE__ */ makeMap(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"); - const cacheStringFunction$1 = (fn) => { - const cache2 = Object.create(null); + const cacheStringFunction = (fn) => { + const cache = Object.create(null); return (str) => { - const hit = cache2[str]; - return hit || (cache2[str] = fn(str)); + const hit = cache[str]; + return hit || (cache[str] = fn(str)); }; }; const camelizeRE = /-(\w)/g; - const camelize = cacheStringFunction$1((str) => { + const camelize = cacheStringFunction((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); }); const hyphenateRE = /\B([A-Z])/g; - const hyphenate = cacheStringFunction$1((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); - const capitalize = cacheStringFunction$1((str) => str.charAt(0).toUpperCase() + str.slice(1)); - const toHandlerKey = cacheStringFunction$1((str) => str ? `on${capitalize(str)}` : ``); + const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); + const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1)); const hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue); - const invokeArrayFns = (fns, arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](arg); - } - }; - const def = (obj, key, value) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - value - }); + function formatLog(module, ...args) { + return `[${Date.now()}][${module}]\uFF1A${args.map((arg) => JSON.stringify(arg)).join(" ")}`; + } + const E = function() { }; - const toNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n; + E.prototype = { + on: function(name, callback, ctx) { + var e = this.e || (this.e = {}); + (e[name] || (e[name] = [])).push({ + fn: callback, + ctx + }); + return this; + }, + once: function(name, callback, ctx) { + var self2 = this; + function listener() { + self2.off(name, listener); + callback.apply(ctx, arguments); + } + listener._ = callback; + return this.on(name, listener, ctx); + }, + emit: function(name) { + var data = [].slice.call(arguments, 1); + var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + var i = 0; + var len = evtArr.length; + for (i; i < len; i++) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + return this; + }, + off: function(name, callback) { + var e = this.e || (this.e = {}); + var evts = e[name]; + var liveEvents = []; + if (evts && callback) { + for (var i = 0, len = evts.length; i < len; i++) { + if (evts[i].fn !== callback && evts[i].fn._ !== callback) + liveEvents.push(evts[i]); + } + } + liveEvents.length ? e[name] = liveEvents : delete e[name]; + return this; + } }; + function initBridge(subscribeNamespace) { + const emitter = new E(); + return { + on(event, callback) { + return emitter.on(event, callback); + }, + once(event, callback) { + return emitter.once(event, callback); + }, + off(event, callback) { + return emitter.off(event, callback); + }, + emit(event, ...args) { + return emitter.emit(event, ...args); + }, + subscribe(event, callback, once = false) { + emitter[once ? "once" : "on"](`${subscribeNamespace}.${event}`, callback); + }, + unsubscribe(event, callback) { + emitter.off(`${subscribeNamespace}.${event}`, callback); + }, + subscribeHandler(event, args, pageId2) { + { + console.log(formatLog(subscribeNamespace, "subscribeHandler", pageId2, event, args)); + } + emitter.emit(`${subscribeNamespace}.${event}`, args, pageId2); + } + }; + } + const ViewJSBridge = /* @__PURE__ */ initBridge("service"); const targetMap = new WeakMap(); const effectStack = []; let activeEffect; @@ -1080,7 +1091,7 @@ return target; } const targetIsArray = isArray(target); - if (!isReadonly2 && targetIsArray && hasOwn$1(arrayInstrumentations, key)) { + if (!isReadonly2 && targetIsArray && hasOwn(arrayInstrumentations, key)) { return Reflect.get(arrayInstrumentations, key, receiver); } const res = Reflect.get(target, key, receiver); @@ -1097,7 +1108,7 @@ const shouldUnwrap = !targetIsArray || !isIntegerKey(key); return shouldUnwrap ? res.value : res; } - if (isObject$1(res)) { + if (isObject(res)) { return isReadonly2 ? readonly(res) : reactive(res); } return res; @@ -1116,7 +1127,7 @@ return true; } } - const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn$1(target, key); + const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); const result = Reflect.set(target, key, value, receiver); if (target === toRaw(receiver)) { if (!hadKey) { @@ -1129,7 +1140,7 @@ }; } function deleteProperty(target, key) { - const hadKey = hasOwn$1(target, key); + const hadKey = hasOwn(target, key); target[key]; const result = Reflect.deleteProperty(target, key); if (result && hadKey) { @@ -1164,15 +1175,15 @@ return true; } }; - const shallowReactiveHandlers = extend({}, mutableHandlers, { + extend({}, mutableHandlers, { get: shallowGet, set: shallowSet }); extend({}, readonlyHandlers, { get: shallowReadonlyGet }); - const toReactive = (value) => isObject$1(value) ? reactive(value) : value; - const toReadonly = (value) => isObject$1(value) ? readonly(value) : value; + const toReactive = (value) => isObject(value) ? reactive(value) : value; + const toReadonly = (value) => isObject(value) ? readonly(value) : value; const toShallow = (value) => value; const getProto = (v) => Reflect.getPrototypeOf(v); function get$1(target, key, isReadonly2 = false, isShallow = false) { @@ -1379,15 +1390,12 @@ } else if (key === "__v_raw") { return target; } - return Reflect.get(hasOwn$1(instrumentations, key) && key in target ? instrumentations : target, key, receiver); + return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver); }; } const mutableCollectionHandlers = { get: createInstrumentationGetter(false, false) }; - const shallowCollectionHandlers = { - get: createInstrumentationGetter(false, true) - }; const readonlyCollectionHandlers = { get: createInstrumentationGetter(true, false) }; @@ -1418,14 +1426,11 @@ } return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap); } - function shallowReactive(target) { - return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap); - } function readonly(target) { return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap); } function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject$1(target)) { + if (!isObject(target)) { return target; } if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { @@ -1452,107 +1457,12 @@ function isReadonly(value) { return !!(value && value["__v_isReadonly"]); } - function isProxy(value) { - return isReactive(value) || isReadonly(value); - } function toRaw(observed) { return observed && toRaw(observed["__v_raw"]) || observed; } - function markRaw(value) { - def(value, "__v_skip", true); - return value; - } - const convert = (val) => isObject$1(val) ? reactive(val) : val; function isRef(r) { return Boolean(r && r.__v_isRef === true); } - function ref(value) { - return createRef(value); - } - class RefImpl { - constructor(_rawValue, _shallow) { - this._rawValue = _rawValue; - this._shallow = _shallow; - this.__v_isRef = true; - this._value = _shallow ? _rawValue : convert(_rawValue); - } - get value() { - track(toRaw(this), "get", "value"); - return this._value; - } - set value(newVal) { - if (hasChanged(toRaw(newVal), this._rawValue)) { - this._rawValue = newVal; - this._value = this._shallow ? newVal : convert(newVal); - trigger(toRaw(this), "set", "value", newVal); - } - } - } - function createRef(rawValue, shallow = false) { - if (isRef(rawValue)) { - return rawValue; - } - return new RefImpl(rawValue, shallow); - } - function unref(ref2) { - return isRef(ref2) ? ref2.value : ref2; - } - const shallowUnwrapHandlers = { - get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const 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 ComputedRefImpl { - constructor(getter, _setter, isReadonly2) { - this._setter = _setter; - this._dirty = true; - this.__v_isRef = true; - this.effect = effect(getter, { - lazy: true, - scheduler: () => { - if (!this._dirty) { - this._dirty = true; - trigger(toRaw(this), "set", "value"); - } - } - }); - this["__v_isReadonly"] = isReadonly2; - } - get value() { - const self2 = toRaw(this); - if (self2._dirty) { - self2._value = this.effect(); - self2._dirty = false; - } - track(self2, "get", "value"); - return self2._value; - } - set value(newValue) { - this._setter(newValue); - } - } - function computed(getterOrOptions) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - setter = NOOP; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - return new ComputedRefImpl(getter, setter, isFunction(getterOrOptions) || !getterOrOptions.set); - } const stack = []; function warn(msg, ...args) { pauseTracking(); @@ -1612,11 +1522,11 @@ const close = `>` + postfix; return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; } - function formatProps(props2) { + function formatProps(props) { const res = []; - const keys = Object.keys(props2); + const keys = Object.keys(props); keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props2[key])); + res.push(...formatProp(key, props[key])); }); if (keys.length > 3) { res.push(` ...`); @@ -1744,12 +1654,6 @@ currentFlushPromise = resolvedPromise.then(flushJobs); } } - function invalidateJob(job) { - const i = queue.indexOf(job); - if (i > flushIndex) { - queue.splice(i, 1); - } - } function queueCb(cb, activeQueue, pendingQueue, index) { if (!isArray(cb)) { if (!activeQueue || !activeQueue.includes(cb, cb.allowRecurse ? index + 1 : index)) { @@ -1838,348 +1742,6 @@ } } } - const globalCompatConfig = { - MODE: 2 - }; - function getCompatConfigForKey(key, instance) { - const instanceConfig = instance && instance.type.compatConfig; - if (instanceConfig && key in instanceConfig) { - return instanceConfig[key]; - } - return globalCompatConfig[key]; - } - function isCompatEnabled(key, instance, enableForBuiltIn = false) { - if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) { - return false; - } - const rawMode = getCompatConfigForKey("MODE", instance) || 2; - const val = getCompatConfigForKey(key, instance); - const mode = isFunction(rawMode) ? rawMode(instance && instance.type) : rawMode; - if (mode === 2) { - return val !== false; - } else { - return val === true || val === "suppress-warning"; - } - } - function emit(instance, event, ...rawArgs) { - const props2 = instance.vnode.props || EMPTY_OBJ; - let args = rawArgs; - const isModelListener2 = event.startsWith("update:"); - const modelArg = isModelListener2 && event.slice(7); - if (modelArg && modelArg in props2) { - const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; - const { number, trim } = props2[modifiersKey] || EMPTY_OBJ; - if (trim) { - args = rawArgs.map((a) => a.trim()); - } else if (number) { - args = rawArgs.map(toNumber); - } - } - let handlerName; - let handler = props2[handlerName = toHandlerKey(event)] || props2[handlerName = toHandlerKey(camelize(event))]; - if (!handler && isModelListener2) { - handler = props2[handlerName = toHandlerKey(hyphenate(event))]; - } - if (handler) { - callWithAsyncErrorHandling(handler, instance, 6, args); - } - const onceHandler = props2[handlerName + `Once`]; - if (onceHandler) { - if (!instance.emitted) { - instance.emitted = {}; - } else if (instance.emitted[handlerName]) { - return; - } - instance.emitted[handlerName] = true; - callWithAsyncErrorHandling(onceHandler, instance, 6, args); - } - } - function normalizeEmitsOptions(comp, appContext, asMixin = false) { - const cache2 = appContext.emitsCache; - const cached = cache2.get(comp); - if (cached !== void 0) { - return cached; - } - const raw = comp.emits; - let normalized = {}; - let hasExtends = false; - if (!isFunction(comp)) { - const extendEmits = (raw2) => { - const normalizedFromExtend = normalizeEmitsOptions(raw2, 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) { - cache2.set(comp, null); - return null; - } - if (isArray(raw)) { - raw.forEach((key) => normalized[key] = null); - } else { - extend(normalized, raw); - } - cache2.set(comp, normalized); - return normalized; - } - function isEmitListener(options, key) { - if (!options || !isOn(key)) { - return false; - } - key = key.slice(2).replace(/Once$/, ""); - return hasOwn$1(options, key[0].toLowerCase() + key.slice(1)) || hasOwn$1(options, hyphenate(key)) || hasOwn$1(options, key); - } - let currentRenderingInstance = null; - let currentScopeId = null; - function setCurrentRenderingInstance(instance) { - const prev = currentRenderingInstance; - currentRenderingInstance = instance; - currentScopeId = instance && instance.type.__scopeId || null; - return prev; - } - function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { - if (!ctx) - return fn; - if (fn._n) { - return fn; - } - const renderFnWithContext = (...args) => { - if (renderFnWithContext._d) { - setBlockTracking(-1); - } - const prevInstance = setCurrentRenderingInstance(ctx); - const res = fn(...args); - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); - } - return res; - }; - renderFnWithContext._n = true; - renderFnWithContext._c = true; - renderFnWithContext._d = true; - return renderFnWithContext; - } - let accessedAttrs = false; - function markAttrsAccessed() { - accessedAttrs = true; - } - function renderComponentRoot(instance) { - const { - type: Component, - vnode, - proxy, - withProxy, - props: props2, - propsOptions: [propsOptions], - slots, - attrs, - emit: emit2, - render, - renderCache, - data, - setupState, - ctx, - inheritAttrs - } = instance; - let result; - const prev = setCurrentRenderingInstance(instance); - try { - let fallthroughAttrs; - if (vnode.shapeFlag & 4) { - const proxyToUse = withProxy || proxy; - result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props2, setupState, data, ctx)); - fallthroughAttrs = attrs; - } else { - const render2 = Component; - if (false) - ; - result = normalizeVNode(render2.length > 1 ? render2(props2, false ? { - get attrs() { - markAttrsAccessed(); - return attrs; - }, - slots, - emit: emit2 - } : { attrs, slots, emit: emit2 }) : render2(props2, null)); - fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); - } - let root = result; - let setRoot = void 0; - if (false) - ; - if (fallthroughAttrs && inheritAttrs !== false) { - const keys = Object.keys(fallthroughAttrs); - const { shapeFlag } = root; - if (keys.length) { - if (shapeFlag & 1 || shapeFlag & 6) { - if (propsOptions && keys.some(isModelListener)) { - fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions); - } - root = cloneVNode(root, fallthroughAttrs); - } else if (false) - ; - } - } - if (false) - ; - if (vnode.dirs) { - if (false) - ; - root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; - } - if (vnode.transition) { - if (false) - ; - root.transition = vnode.transition; - } - if (false) - ; - else { - result = root; - } - } catch (err) { - handleError(err, instance, 1); - result = createVNode(Comment$1); - } - setCurrentRenderingInstance(prev); - return result; - } - const getChildRoot = (vnode) => { - const rawChildren = vnode.children; - const dynamicChildren = vnode.dynamicChildren; - const childRoot = filterSingleRoot(rawChildren); - if (!childRoot) { - return [vnode, void 0]; - } - const index = rawChildren.indexOf(childRoot); - const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; - const 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) { - let singleRoot; - for (let i = 0; i < children.length; i++) { - const child = children[i]; - if (isVNode(child)) { - if (child.type !== Comment$1 || child.children === "v-if") { - if (singleRoot) { - return; - } else { - singleRoot = child; - } - } - } else { - return; - } - } - return singleRoot; - } - const getFunctionalFallthrough = (attrs) => { - let res; - for (const key in attrs) { - if (key === "class" || key === "style" || isOn(key)) { - (res || (res = {}))[key] = attrs[key]; - } - } - return res; - }; - const filterModelListeners = (attrs, props2) => { - const res = {}; - for (const key in attrs) { - if (!isModelListener(key) || !(key.slice(9) in props2)) { - res[key] = attrs[key]; - } - } - return res; - }; - const isElementRoot = (vnode) => { - return vnode.shapeFlag & 6 || vnode.shapeFlag & 1 || vnode.type === Comment$1; - }; - function shouldUpdateComponent(prevVNode, nextVNode, optimized) { - const { props: prevProps, children: prevChildren, component } = prevVNode; - const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; - const emits = component.emitsOptions; - if (nextVNode.dirs || nextVNode.transition) { - return true; - } - if (optimized && patchFlag >= 0) { - if (patchFlag & 1024) { - return true; - } - if (patchFlag & 16) { - if (!prevProps) { - return !!nextProps; - } - return hasPropsChanged(prevProps, nextProps, emits); - } else if (patchFlag & 8) { - const dynamicProps = nextVNode.dynamicProps; - for (let i = 0; i < dynamicProps.length; i++) { - const key = dynamicProps[i]; - if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { - return true; - } - } - } - } else { - if (prevChildren || nextChildren) { - if (!nextChildren || !nextChildren.$stable) { - return true; - } - } - if (prevProps === nextProps) { - return false; - } - if (!prevProps) { - return !!nextProps; - } - if (!nextProps) { - return true; - } - return hasPropsChanged(prevProps, nextProps, emits); - } - return false; - } - function hasPropsChanged(prevProps, nextProps, emitsOptions) { - const nextKeys = Object.keys(nextProps); - if (nextKeys.length !== Object.keys(prevProps).length) { - return true; - } - for (let i = 0; i < nextKeys.length; i++) { - const key = nextKeys[i]; - if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { - return true; - } - } - return false; - } - function updateHOCHostEl({ vnode, parent }, el) { - while (parent && parent.subTree === vnode) { - (vnode = parent.vnode).el = el; - parent = parent.parent; - } - } - const isSuspense = (type) => type.__isSuspense; function queueEffectWithSuspense(fn, suspense) { if (suspense && suspense.pendingBranch) { if (isArray(fn)) { @@ -2191,34 +1753,7 @@ queuePostFlushCb(fn); } } - function provide(key, value) { - if (!currentInstance) - ; - else { - let provides = currentInstance.provides; - const parentProvides = currentInstance.parent && currentInstance.parent.provides; - if (parentProvides === provides) { - provides = currentInstance.provides = Object.create(parentProvides); - } - provides[key] = value; - } - } - function inject(key, defaultValue, treatDefaultAsFactory = false) { - const instance = currentInstance || currentRenderingInstance; - if (instance) { - const provides = instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides; - if (provides && key in provides) { - return provides[key]; - } else if (arguments.length > 1) { - return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance.proxy) : defaultValue; - } else - ; - } - } const INITIAL_WATCHER_VALUE = {}; - function watch(source, cb, options) { - return doWatch(source, cb, options); - } function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ, instance = currentInstance) { let getter; let forceTrigger = false; @@ -2354,7 +1889,7 @@ }; } function traverse(value, seen = new Set()) { - if (!isObject$1(value) || seen.has(value) || value["__v_skip"]) { + if (!isObject(value) || seen.has(value) || value["__v_skip"]) { return value; } seen.add(value); @@ -2375,265 +1910,15 @@ } return value; } - function defineComponent(options) { - return isFunction(options) ? { setup: options, name: options.name } : options; - } - const isAsyncWrapper = (i) => !!i.type.__asyncLoader; - const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; - function onActivated(hook, target) { - registerKeepAliveHook(hook, "a", target); - } - function onDeactivated(hook, target) { - registerKeepAliveHook(hook, "da", target); - } - function registerKeepAliveHook(hook, type, target = currentInstance) { - const wrappedHook = hook.__wdc || (hook.__wdc = () => { - let current = target; - while (current) { - if (current.isDeactivated) { - return; - } - current = current.parent; - } - hook(); - }); - injectHook(type, wrappedHook, target); - if (target) { - let 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) { - const injected = injectHook(type, hook, keepAliveRoot, true); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); - } - function injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const hooks = target[type] || (target[type] = []); - const wrappedHook = hook.__weh || (hook.__weh = (...args) => { - if (target.isUnmounted) { - return; - } - pauseTracking(); - setCurrentInstance(target); - const res = callWithAsyncErrorHandling(hook, target, type, args); - setCurrentInstance(null); - resetTracking(); - return res; - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook; - } - } - const createHook = (lifecycle) => (hook, target = currentInstance) => (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, hook, target); - const onBeforeMount = createHook("bm"); - const onMounted = createHook("m"); - const onBeforeUpdate = createHook("bu"); - const onUpdated = createHook("u"); - const onBeforeUnmount = createHook("bum"); - const onUnmounted = createHook("um"); - const onServerPrefetch = createHook("sp"); - const onRenderTriggered = createHook("rtg"); - const onRenderTracked = createHook("rtc"); - function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); - } - let shouldCacheAccess = true; - function applyOptions(instance) { - const options = resolveMergedOptions(instance); - const publicThis = instance.proxy; - const ctx = instance.ctx; - shouldCacheAccess = false; - if (options.beforeCreate) { - callHook(options.beforeCreate, instance, "bc"); - } - const { - data: dataOptions, - computed: computedOptions, - methods, - watch: watchOptions, - provide: provideOptions, - inject: injectOptions, - created, - beforeMount, - mounted, - beforeUpdate, - updated, - activated, - deactivated, - beforeDestroy, - beforeUnmount, - destroyed, - unmounted, - render, - renderTracked, - renderTriggered, - errorCaptured, - serverPrefetch, - expose, - inheritAttrs, - components, - directives, - filters - } = options; - const checkDuplicateProperties = null; - if (injectOptions) { - resolveInjections(injectOptions, ctx, checkDuplicateProperties); - } - if (methods) { - for (const key in methods) { - const methodHandler = methods[key]; - if (isFunction(methodHandler)) { - { - ctx[key] = methodHandler.bind(publicThis); - } - } - } - } - if (dataOptions) { - const data = dataOptions.call(publicThis, publicThis); - if (!isObject$1(data)) - ; - else { - instance.data = reactive(data); - } - } - shouldCacheAccess = true; - if (computedOptions) { - for (const key in computedOptions) { - const opt = computedOptions[key]; - const get2 = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP; - const set2 = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : NOOP; - const c = computed$1({ - get: get2, - set: set2 - }); - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => c.value, - set: (v) => c.value = v - }); - } - } - if (watchOptions) { - for (const key in watchOptions) { - createWatcher(watchOptions[key], ctx, publicThis, key); - } - } - if (provideOptions) { - const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions; - Reflect.ownKeys(provides).forEach((key) => { - provide(key, provides[key]); - }); - } - if (created) { - callHook(created, instance, "c"); - } - 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) { - const 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 = {}; - } - } - if (render && instance.render === NOOP) { - instance.render = render; - } - if (inheritAttrs != null) { - instance.inheritAttrs = inheritAttrs; - } - if (components) - instance.components = components; - if (directives) - instance.directives = directives; - } - function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) { - if (isArray(injectOptions)) { - injectOptions = normalizeInject(injectOptions); - } - for (const key in injectOptions) { - const opt = injectOptions[key]; - if (isObject$1(opt)) { - if ("default" in opt) { - ctx[key] = inject(opt.from || key, opt.default, true); - } else { - ctx[key] = inject(opt.from || key); - } - } else { - ctx[key] = inject(opt); - } - } - } - function callHook(hook, instance, type) { - callWithAsyncErrorHandling(isArray(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy), instance, type); - } - function createWatcher(raw, ctx, publicThis, key) { - const getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key]; - if (isString(raw)) { - const handler = ctx[raw]; - if (isFunction(handler)) { - watch(getter, handler); - } - } else if (isFunction(raw)) { - watch(getter, raw.bind(publicThis)); - } else if (isObject$1(raw)) { - if (isArray(raw)) { - raw.forEach((r) => createWatcher(r, ctx, publicThis, key)); - } else { - const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler]; - if (isFunction(handler)) { - watch(getter, handler, raw); - } - } - } else - ; - } function resolveMergedOptions(instance) { const base = instance.type; const { mixins, extends: extendsOptions } = base; const { mixins: globalMixins, - optionsCache: cache2, + optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext; - const cached = cache2.get(base); + const cached = cache.get(base); let resolved; if (cached) { resolved = cached; @@ -2648,7 +1933,7 @@ } mergeOptions(resolved, base, optionMergeStrategies); } - cache2.set(base, resolved); + cache.set(base, resolved); return resolved; } function mergeOptions(to, from, strats, asMixin = false) { @@ -2734,3864 +2019,557 @@ } return merged; } - function initProps(instance, rawProps, isStateful, isSSR = false) { - const props2 = {}; - const attrs = {}; - def(attrs, InternalObjectKey, 1); - instance.propsDefaults = Object.create(null); - setFullProps(instance, rawProps, props2, attrs); - for (const key in instance.propsOptions[0]) { - if (!(key in props2)) { - props2[key] = void 0; - } - } - if (isStateful) { - instance.props = isSSR ? props2 : shallowReactive(props2); - } else { - if (!instance.type.props) { - instance.props = attrs; - } else { - instance.props = props2; - } - } - instance.attrs = attrs; - } - function updateProps(instance, rawProps, rawPrevProps, optimized) { - const { - props: props2, - attrs, - vnode: { patchFlag } - } = instance; - const rawCurrentProps = toRaw(props2); - const [options] = instance.propsOptions; - let hasAttrsChanged = false; - if ((optimized || patchFlag > 0) && !(patchFlag & 16)) { - if (patchFlag & 8) { - const propsToUpdate = instance.vnode.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - let key = propsToUpdate[i]; - const value = rawProps[key]; - if (options) { - if (hasOwn$1(attrs, key)) { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } else { - const camelizedKey = camelize(key); - props2[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false); - } - } else { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } - } - } - } else { - if (setFullProps(instance, rawProps, props2, attrs)) { - hasAttrsChanged = true; - } - let kebabKey; - for (const key in rawCurrentProps) { - if (!rawProps || !hasOwn$1(rawProps, key) && ((kebabKey = hyphenate(key)) === key || !hasOwn$1(rawProps, kebabKey))) { - if (options) { - if (rawPrevProps && (rawPrevProps[key] !== void 0 || rawPrevProps[kebabKey] !== void 0)) { - props2[key] = resolvePropValue(options, rawCurrentProps, key, void 0, instance, true); - } - } else { - delete props2[key]; - } - } - } - if (attrs !== rawCurrentProps) { - for (const key in attrs) { - if (!rawProps || !hasOwn$1(rawProps, key)) { - delete attrs[key]; - hasAttrsChanged = true; + const queuePostRenderEffect = queueEffectWithSuspense; + const getPublicInstance = (i) => { + if (!i) + return null; + if (isStatefulComponent(i)) + return i.exposed ? i.exposed : i.proxy; + return getPublicInstance(i.parent); + }; + const publicPropertiesMap = extend(Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => i.props, + $attrs: (i) => i.attrs, + $slots: (i) => i.slots, + $refs: (i) => i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $emit: (i) => i.emit, + $options: (i) => resolveMergedOptions(i), + $forceUpdate: (i) => () => queueJob(i.update), + $nextTick: (i) => nextTick.bind(i.proxy), + $watch: (i) => instanceWatch.bind(i) + }); + const PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 0: + return setupState[key]; + case 1: + return data[key]; + case 3: + return ctx[key]; + case 2: + return props[key]; } + } else if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) { + accessCache[key] = 0; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 1; + return data[key]; + } else if ((normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)) { + accessCache[key] = 2; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 3; + return ctx[key]; + } else { + accessCache[key] = 4; } } - } - if (hasAttrsChanged) { - trigger(instance, "set", "$attrs"); - } - } - function setFullProps(instance, rawProps, props2, attrs) { - const [options, needCastKeys] = instance.propsOptions; - let hasAttrsChanged = false; - let rawCastValues; - if (rawProps) { - for (let key in rawProps) { - if (isReservedProp(key)) { - continue; - } - const value = rawProps[key]; - let camelKey; - if (options && hasOwn$1(options, camelKey = camelize(key))) { - if (!needCastKeys || !needCastKeys.includes(camelKey)) { - props2[camelKey] = value; - } else { - (rawCastValues || (rawCastValues = {}))[camelKey] = value; - } - } else if (!isEmitListener(instance.emitsOptions, key)) { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance, "get", key); } - } - } - if (needCastKeys) { - const rawCurrentProps = toRaw(props2); - const castValues = rawCastValues || EMPTY_OBJ; - for (let i = 0; i < needCastKeys.length; i++) { - const key = needCastKeys[i]; - props2[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn$1(castValues, key)); - } - } - return hasAttrsChanged; - } - function resolvePropValue(options, props2, key, value, instance, isAbsent) { - const opt = options[key]; - if (opt != null) { - const hasDefault = hasOwn$1(opt, "default"); - if (hasDefault && value === void 0) { - const defaultValue = opt.default; - if (opt.type !== Function && isFunction(defaultValue)) { - const { propsDefaults } = instance; - if (key in propsDefaults) { - value = propsDefaults[key]; - } else { - setCurrentInstance(instance); - value = propsDefaults[key] = defaultValue.call(null, props2); - setCurrentInstance(null); - } - } else { - value = defaultValue; + return publicGetter(instance); + } else if ((cssModule = type.__cssModules) && (cssModule = cssModule[key])) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 3; + return ctx[key]; + } else if (globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)) { + { + return globalProperties[key]; } + } else + ; + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) { + setupState[key] = value; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + data[key] = value; + } else if (hasOwn(instance.props, key)) { + return false; } - if (opt[0]) { - if (isAbsent && !hasDefault) { - value = false; - } else if (opt[1] && (value === "" || value === hyphenate(key))) { - value = true; + if (key[0] === "$" && key.slice(1) in instance) { + return false; + } else { + { + ctx[key] = value; } } + return true; + }, + has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) { + let normalizedProps; + return accessCache[key] !== void 0 || data !== EMPTY_OBJ && hasOwn(data, key) || setupState !== EMPTY_OBJ && hasOwn(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key); } - return value; - } - function normalizePropsOptions(comp, appContext, asMixin = false) { - const cache2 = appContext.propsCache; - const cached = cache2.get(comp); - if (cached) { - return cached; - } - const raw = comp.props; - const normalized = {}; - const needCastKeys = []; - let hasExtends = false; - if (!isFunction(comp)) { - const extendProps = (raw2) => { - hasExtends = true; - const [props2, keys] = normalizePropsOptions(raw2, appContext, true); - extend(normalized, props2); - 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) { - cache2.set(comp, EMPTY_ARR); - return EMPTY_ARR; - } - if (isArray(raw)) { - for (let i = 0; i < raw.length; i++) { - const normalizedKey = camelize(raw[i]); - if (validatePropName(normalizedKey)) { - normalized[normalizedKey] = EMPTY_OBJ; - } - } - } else if (raw) { - for (const key in raw) { - const normalizedKey = camelize(key); - if (validatePropName(normalizedKey)) { - const opt = raw[key]; - const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : opt; - if (prop) { - const booleanIndex = getTypeIndex(Boolean, prop.type); - const stringIndex = getTypeIndex(String, prop.type); - prop[0] = booleanIndex > -1; - prop[1] = stringIndex < 0 || booleanIndex < stringIndex; - if (booleanIndex > -1 || hasOwn$1(prop, "default")) { - needCastKeys.push(normalizedKey); - } - } - } + }; + extend({}, PublicInstanceProxyHandlers, { + get(target, key) { + if (key === Symbol.unscopables) { + return; } + return PublicInstanceProxyHandlers.get(target, key, target); + }, + has(_, key) { + const has2 = key[0] !== "_" && !isGloballyWhitelisted(key); + return has2; } - const res = [normalized, needCastKeys]; - cache2.set(comp, res); - return res; + }); + let currentInstance = null; + function isStatefulComponent(instance) { + return instance.vnode.shapeFlag & 4; } - function validatePropName(key) { - if (key[0] !== "$") { - return true; + function recordInstanceBoundEffect(effect2, instance = currentInstance) { + if (instance) { + (instance.effects || (instance.effects = [])).push(effect2); } - return false; } - function getType(ctor) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : ""; - } - 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; + const classifyRE = /(?:^|[-_])(\w)/g; + const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, ""); + function getComponentName(Component) { + return isFunction(Component) ? Component.displayName || Component.name : Component.name; } - const isInternalKey = (key) => key[0] === "_" || key === "$stable"; - const normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; - const normalizeSlot = (key, rawSlot, ctx) => { - const normalized = withCtx((props2) => { - return normalizeSlotValue(rawSlot(props2)); - }, ctx); - normalized._c = false; - return normalized; - }; - const normalizeObjectSlots = (rawSlots, slots, instance) => { - const ctx = rawSlots._ctx; - for (const key in rawSlots) { - if (isInternalKey(key)) - continue; - const value = rawSlots[key]; - if (isFunction(value)) { - slots[key] = normalizeSlot(key, value, ctx); - } else if (value != null) { - const normalized = normalizeSlotValue(value); - slots[key] = () => normalized; - } - } - }; - const normalizeVNodeSlots = (instance, children) => { - const normalized = normalizeSlotValue(children); - instance.slots.default = () => normalized; - }; - const initSlots = (instance, children) => { - if (instance.vnode.shapeFlag & 32) { - const type = children._; - if (type) { - instance.slots = toRaw(children); - def(children, "_", type); - } else { - normalizeObjectSlots(children, instance.slots = {}); - } - } else { - instance.slots = {}; - if (children) { - normalizeVNodeSlots(instance, children); + function formatComponentName(instance, Component, isRoot = false) { + let name = getComponentName(Component); + if (!name && Component.__file) { + const match = Component.__file.match(/([^/\\]+)\.\w+$/); + if (match) { + name = match[1]; } } - def(instance.slots, InternalObjectKey, 1); - }; - const updateSlots = (instance, children, optimized) => { - const { vnode, slots } = instance; - let needDeletionCheck = true; - let deletionComparisonTarget = EMPTY_OBJ; - if (vnode.shapeFlag & 32) { - const type = children._; - if (type) { - if (optimized && type === 1) { - needDeletionCheck = false; - } else { - extend(slots, children); - if (!optimized && type === 1) { - delete slots._; + if (!name && instance && instance.parent) { + const inferFromRegistry = (registry) => { + for (const key in registry) { + if (registry[key] === Component) { + return key; } } - } else { - needDeletionCheck = !children.$stable; - normalizeObjectSlots(children, slots); - } - deletionComparisonTarget = children; - } else if (children) { - normalizeVNodeSlots(instance, children); - deletionComparisonTarget = { default: 1 }; - } - if (needDeletionCheck) { - for (const key in slots) { - if (!isInternalKey(key) && !(key in deletionComparisonTarget)) { - delete slots[key]; - } - } + }; + name = inferFromRegistry(instance.components || instance.parent.type.components) || inferFromRegistry(instance.appContext.components); } - }; - function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; + return name ? classify(name) : isRoot ? `App` : `Anonymous`; + } + const svgNS = "http://www.w3.org/2000/svg"; + const doc = typeof document !== "undefined" ? document : null; + const nodeOps = { + insert: (child, parent, anchor) => { + parent.insertBefore(child, anchor || null); + }, + remove: (child) => { + const parent = child.parentNode; + if (parent) { + parent.removeChild(child); } - let hook = binding.dir[name]; - if (hook) { - pauseTracking(); - callWithAsyncErrorHandling(hook, instance, 8, [ - vnode.el, - binding, - vnode, - prevVNode - ]); - resetTracking(); + }, + createElement: (tag, isSVG, is, props) => { + const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0); + if (tag === "select" && props && props.multiple != null) { + el.setAttribute("multiple", props.multiple); } - } - } - function createAppContext() { - return { - app: null, - config: { - isNativeTag: NO, - performance: false, - globalProperties: {}, - optionMergeStrategies: {}, - errorHandler: void 0, - warnHandler: void 0, - compilerOptions: {} - }, - mixins: [], - components: {}, - directives: {}, - provides: Object.create(null), - optionsCache: new WeakMap(), - propsCache: new WeakMap(), - emitsCache: new WeakMap() - }; - } - let uid$1 = 0; - function createAppAPI(render, hydrate) { - return function createApp2(rootComponent, rootProps = null) { - if (rootProps != null && !isObject$1(rootProps)) { - rootProps = null; - } - const context = createAppContext(); - const installedPlugins = new Set(); - let isMounted = false; - const app = context.app = { - _uid: uid$1++, - _component: rootComponent, - _props: rootProps, - _container: null, - _context: context, - _instance: null, - version, - get config() { - return context.config; - }, - set config(v) { - }, - use(plugin, ...options) { - if (installedPlugins.has(plugin)) - ; - else if (plugin && isFunction(plugin.install)) { - installedPlugins.add(plugin); - plugin.install(app, ...options); - } else if (isFunction(plugin)) { - installedPlugins.add(plugin); - plugin(app, ...options); - } else - ; - return app; - }, - mixin(mixin) { - { - if (!context.mixins.includes(mixin)) { - context.mixins.push(mixin); - } - } - return app; - }, - component(name, component) { - if (!component) { - return context.components[name]; - } - context.components[name] = component; - return app; - }, - directive(name, directive) { - if (!directive) { - return context.directives[name]; - } - context.directives[name] = directive; - return app; - }, - mount(rootContainer, isHydrate, isSVG) { - if (!isMounted) { - const vnode = createVNode(rootComponent, rootProps); - vnode.appContext = context; - if (isHydrate && hydrate) { - hydrate(vnode, rootContainer); - } else { - render(vnode, rootContainer, isSVG); - } - isMounted = true; - app._container = rootContainer; - rootContainer.__vue_app__ = app; - return vnode.component.proxy; - } - }, - unmount() { - if (isMounted) { - render(null, app._container); - delete app._container.__vue_app__; - } - }, - provide(key, value) { - context.provides[key] = value; - return app; - } - }; - return app; - }; - } - const prodEffectOptions = { - scheduler: queueJob, - allowRecurse: true - }; - const queuePostRenderEffect = queueEffectWithSuspense; - const setRef = (rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) => { - if (isArray(rawRef)) { - rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount)); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - return; - } - const refValue = vnode.shapeFlag & 4 ? getExposeProxy(vnode.component) || vnode.component.proxy : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref2 } = rawRef; - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - if (oldRef != null && oldRef !== ref2) { - if (isString(oldRef)) { - refs[oldRef] = null; - if (hasOwn$1(setupState, oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef(oldRef)) { - oldRef.value = null; - } - } - if (isString(ref2)) { - const doSet = () => { - { - refs[ref2] = value; - } - if (hasOwn$1(setupState, ref2)) { - setupState[ref2] = value; - } - }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (isRef(ref2)) { - const doSet = () => { - ref2.value = value; - }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (isFunction(ref2)) { - callWithErrorHandling(ref2, owner, 12, [value, refs]); - } else - ; - }; - function createRenderer(options) { - return baseCreateRenderer(options); - } - function baseCreateRenderer(options, createHydrationFns) { - const { - insert: hostInsert, - remove: hostRemove, - patchProp: hostPatchProp, - forcePatchProp: hostForcePatchProp, - createElement: hostCreateElement, - createText: hostCreateText, - createComment: hostCreateComment, - setText: hostSetText, - setElementText: hostSetElementText, - parentNode: hostParentNode, - nextSibling: hostNextSibling, - setScopeId: hostSetScopeId = NOOP, - cloneNode: hostCloneNode, - insertStaticContent: hostInsertStaticContent - } = options; - const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = false) => { - if (n1 && !isSameVNodeType(n1, n2)) { - anchor = getNextHostNode(n1); - unmount(n1, parentComponent, parentSuspense, true); - n1 = null; - } - if (n2.patchFlag === -2) { - optimized = false; - n2.dynamicChildren = null; - } - const { type, ref: ref2, shapeFlag } = n2; - switch (type) { - case Text$1: - processText(n1, n2, container, anchor); - break; - case Comment$1: - processCommentNode(n1, n2, container, anchor); - break; - case Static: - if (n1 == null) { - mountStaticNode(n2, container, anchor, isSVG); - } - break; - case Fragment: - processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - break; - default: - if (shapeFlag & 1) { - processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (shapeFlag & 6) { - processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (shapeFlag & 64) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } else if (shapeFlag & 128) { - type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals); - } else - ; - } - if (ref2 != null && parentComponent) { - setRef(ref2, n1 && n1.ref, parentSuspense, n2 || n1, !n2); - } - }; - const processText = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert(n2.el = hostCreateText(n2.children), container, anchor); - } else { - const el = n2.el = n1.el; - if (n2.children !== n1.children) { - hostSetText(el, n2.children); - } - } - }; - const processCommentNode = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert(n2.el = hostCreateComment(n2.children || ""), container, anchor); - } else { - n2.el = n1.el; - } - }; - const mountStaticNode = (n2, container, anchor, isSVG) => { - [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el && [n2.el, n2.anchor]); - }; - const moveStaticNode = ({ el, anchor }, container, nextSibling) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostInsert(el, container, nextSibling); - el = next; - } - hostInsert(anchor, container, nextSibling); - }; - const removeStaticNode = ({ el, anchor }) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostRemove(el); - el = next; - } - hostRemove(anchor); - }; - const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - isSVG = isSVG || n2.type === "svg"; - if (n1 == null) { - mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - let el; - let vnodeHook; - const { type, props: props2, shapeFlag, transition, patchFlag, dirs } = vnode; - if (vnode.el && hostCloneNode !== void 0 && patchFlag === -1) { - el = vnode.el = hostCloneNode(vnode.el); - } else { - el = vnode.el = hostCreateElement(vnode.type, isSVG, props2 && props2.is, props2); - if (shapeFlag & 8) { - hostSetElementText(el, vnode.children); - } else if (shapeFlag & 16) { - mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== "foreignObject", slotScopeIds, optimized || !!vnode.dynamicChildren); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - if (props2) { - for (const key in props2) { - if (!isReservedProp(key)) { - hostPatchProp(el, key, null, props2[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - if (vnodeHook = props2.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - } - setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - const needCallTransitionHooks = (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted; - if (needCallTransitionHooks) { - transition.beforeEnter(el); - } - hostInsert(el, container, anchor); - if ((vnodeHook = props2 && props2.onVnodeMounted) || needCallTransitionHooks || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - }; - const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => { - if (scopeId) { - hostSetScopeId(el, scopeId); - } - if (slotScopeIds) { - for (let i = 0; i < slotScopeIds.length; i++) { - hostSetScopeId(el, slotScopeIds[i]); - } - } - if (parentComponent) { - let subTree = parentComponent.subTree; - if (vnode === subTree) { - const parentVNode = parentComponent.vnode; - setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent); - } - } - }; - const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => { - for (let i = start; i < children.length; i++) { - const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]); - patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - }; - const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - const el = n2.el = n1.el; - let { patchFlag, dynamicChildren, dirs } = n2; - patchFlag |= n1.patchFlag & 16; - const oldProps = n1.props || EMPTY_OBJ; - const newProps = n2.props || EMPTY_OBJ; - let vnodeHook; - if (vnodeHook = newProps.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - } - if (dirs) { - invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate"); - } - if (patchFlag > 0) { - if (patchFlag & 16) { - patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG); - } else { - if (patchFlag & 2) { - if (oldProps.class !== newProps.class) { - hostPatchProp(el, "class", null, newProps.class, isSVG); - } - } - if (patchFlag & 4) { - hostPatchProp(el, "style", oldProps.style, newProps.style, isSVG); - } - if (patchFlag & 8) { - const propsToUpdate = n2.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - const key = propsToUpdate[i]; - const prev = oldProps[key]; - const next = newProps[key]; - if (next !== prev || hostForcePatchProp && hostForcePatchProp(el, key)) { - hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren); - } - } - } - } - if (patchFlag & 1) { - if (n1.children !== n2.children) { - hostSetElementText(el, n2.children); - } - } - } else if (!optimized && dynamicChildren == null) { - patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG); - } - const areChildrenSVG = isSVG && n2.type !== "foreignObject"; - if (dynamicChildren) { - patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds); - } else if (!optimized) { - patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false); - } - if ((vnodeHook = newProps.onVnodeUpdated) || dirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1); - dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated"); - }, parentSuspense); - } - }; - const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => { - for (let i = 0; i < newChildren.length; i++) { - const oldVNode = oldChildren[i]; - const newVNode = newChildren[i]; - const container = oldVNode.el && (oldVNode.type === Fragment || !isSameVNodeType(oldVNode, newVNode) || oldVNode.shapeFlag & 6 || oldVNode.shapeFlag & 64) ? hostParentNode(oldVNode.el) : fallbackContainer; - patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true); - } - }; - const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => { - if (oldProps !== newProps) { - for (const key in newProps) { - if (isReservedProp(key)) - continue; - const next = newProps[key]; - const prev = oldProps[key]; - if (next !== prev || hostForcePatchProp && hostForcePatchProp(el, key)) { - hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - if (oldProps !== EMPTY_OBJ) { - for (const key in oldProps) { - if (!isReservedProp(key) && !(key in newProps)) { - hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren); - } - } - } - } - }; - const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(""); - const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(""); - let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2; - if (dynamicChildren) { - optimized = true; - } - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - if (n1 == null) { - hostInsert(fragmentStartAnchor, container, anchor); - hostInsert(fragmentEndAnchor, container, anchor); - mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && n1.dynamicChildren) { - patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds); - if (n2.key != null || parentComponent && n2 === parentComponent.subTree) { - traverseStaticChildren(n1, n2, true); - } - } else { - patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - } - }; - const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - n2.slotScopeIds = slotScopeIds; - if (n1 == null) { - if (n2.shapeFlag & 512) { - parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized); - } else { - mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized); - } - } else { - updateComponent(n1, n2, optimized); - } - }; - const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => { - const instance = initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense); - if (isKeepAlive(initialVNode)) { - instance.ctx.renderer = internals; - } - { - setupComponent(instance); - } - if (instance.asyncDep) { - parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect); - if (!initialVNode.el) { - const placeholder = instance.subTree = createVNode(Comment$1); - processCommentNode(null, placeholder, container, anchor); - } - return; - } - setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized); - }; - const updateComponent = (n1, n2, optimized) => { - const instance = n2.component = n1.component; - if (shouldUpdateComponent(n1, n2, optimized)) { - if (instance.asyncDep && !instance.asyncResolved) { - updateComponentPreRender(instance, n2, optimized); - return; - } else { - instance.next = n2; - invalidateJob(instance.update); - instance.update(); - } - } else { - n2.component = n1.component; - n2.el = n1.el; - instance.vnode = n2; - } - }; - const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => { - instance.update = effect(function componentEffect() { - if (!instance.isMounted) { - let vnodeHook; - const { el, props: props2 } = initialVNode; - const { bm, m, parent } = instance; - if (bm) { - invokeArrayFns(bm); - } - if (vnodeHook = props2 && props2.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHook, parent, initialVNode); - } - if (el && hydrateNode) { - const hydrateSubTree = () => { - instance.subTree = renderComponentRoot(instance); - hydrateNode(el, instance.subTree, instance, parentSuspense, null); - }; - if (isAsyncWrapper(initialVNode)) { - initialVNode.type.__asyncLoader().then(() => !instance.isUnmounted && hydrateSubTree()); - } else { - hydrateSubTree(); - } - } else { - const subTree = instance.subTree = renderComponentRoot(instance); - patch(null, subTree, container, anchor, instance, parentSuspense, isSVG); - initialVNode.el = subTree.el; - } - if (m) { - queuePostRenderEffect(m, parentSuspense); - } - if (vnodeHook = props2 && props2.onVnodeMounted) { - const scopedInitialVNode = initialVNode; - queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense); - } - if (initialVNode.shapeFlag & 256) { - instance.a && queuePostRenderEffect(instance.a, parentSuspense); - } - instance.isMounted = true; - initialVNode = container = anchor = null; - } else { - let { next, bu, u, parent, vnode } = instance; - let originNext = next; - let vnodeHook; - if (next) { - next.el = vnode.el; - updateComponentPreRender(instance, next, optimized); - } else { - next = vnode; - } - if (bu) { - invokeArrayFns(bu); - } - if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) { - invokeVNodeHook(vnodeHook, parent, next, vnode); - } - const nextTree = renderComponentRoot(instance); - const prevTree = instance.subTree; - instance.subTree = nextTree; - patch(prevTree, nextTree, hostParentNode(prevTree.el), getNextHostNode(prevTree), instance, parentSuspense, isSVG); - next.el = nextTree.el; - if (originNext === null) { - updateHOCHostEl(instance, nextTree.el); - } - if (u) { - queuePostRenderEffect(u, parentSuspense); - } - if (vnodeHook = next.props && next.props.onVnodeUpdated) { - queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense); - } - } - }, prodEffectOptions); - }; - const updateComponentPreRender = (instance, nextVNode, optimized) => { - nextVNode.component = instance; - const prevProps = instance.vnode.props; - instance.vnode = nextVNode; - instance.next = null; - updateProps(instance, nextVNode.props, prevProps, optimized); - updateSlots(instance, nextVNode.children, optimized); - pauseTracking(); - flushPreFlushCbs(void 0, instance.update); - resetTracking(); - }; - const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => { - const c1 = n1 && n1.children; - const prevShapeFlag = n1 ? n1.shapeFlag : 0; - const c2 = n2.children; - const { patchFlag, shapeFlag } = n2; - if (patchFlag > 0) { - if (patchFlag & 128) { - patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - return; - } else if (patchFlag & 256) { - patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - return; - } + return el; + }, + createText: (text) => doc.createTextNode(text), + createComment: (text) => doc.createComment(text), + setText: (node, text) => { + node.nodeValue = text; + }, + setElementText: (el, text) => { + el.textContent = text; + }, + parentNode: (node) => node.parentNode, + nextSibling: (node) => node.nextSibling, + querySelector: (selector) => doc.querySelector(selector), + setScopeId(el, id) { + el.setAttribute(id, ""); + }, + cloneNode(el) { + const cloned = el.cloneNode(true); + if (`_value` in el) { + cloned._value = el._value; } - if (shapeFlag & 8) { - if (prevShapeFlag & 16) { - unmountChildren(c1, parentComponent, parentSuspense); - } - if (c2 !== c1) { - hostSetElementText(container, c2); - } - } else { - if (prevShapeFlag & 16) { - if (shapeFlag & 16) { - patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - unmountChildren(c1, parentComponent, parentSuspense, true); - } - } else { - if (prevShapeFlag & 8) { - hostSetElementText(container, ""); - } - if (shapeFlag & 16) { - mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); + return cloned; + }, + insertStaticContent(content, parent, anchor, isSVG, cached) { + if (cached) { + let [cachedFirst, cachedLast] = cached; + let first, last; + while (true) { + let node = cachedFirst.cloneNode(true); + if (!first) + first = node; + parent.insertBefore(node, anchor); + if (cachedFirst === cachedLast) { + last = node; + break; } + cachedFirst = cachedFirst.nextSibling; } + return [first, last]; } - }; - const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - c1 = c1 || EMPTY_ARR; - c2 = c2 || EMPTY_ARR; - const oldLength = c1.length; - const newLength = c2.length; - const commonLength = Math.min(oldLength, newLength); - let i; - for (i = 0; i < commonLength; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } - if (oldLength > newLength) { - unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength); - } else { - mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength); - } - }; - const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => { - let i = 0; - const l2 = c2.length; - let e1 = c1.length - 1; - let e2 = l2 - 1; - while (i <= e1 && i <= e2) { - const n1 = c1[i]; - const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (isSameVNodeType(n1, n2)) { - patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else { - break; - } - i++; - } - while (i <= e1 && i <= e2) { - const n1 = c1[e1]; - const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]); - if (isSameVNodeType(n1, n2)) { - patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); + const before = anchor ? anchor.previousSibling : parent.lastChild; + if (anchor) { + let insertionPoint; + let usingTempInsertionPoint = false; + if (anchor instanceof Element) { + insertionPoint = anchor; } else { - break; - } - e1--; - e2--; - } - if (i > e1) { - if (i <= e2) { - const nextPos = e2 + 1; - const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor; - while (i <= e2) { - patch(null, c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - i++; - } - } - } else if (i > e2) { - while (i <= e1) { - unmount(c1[i], parentComponent, parentSuspense, true); - i++; - } - } else { - const s1 = i; - const s2 = i; - const keyToNewIndexMap = new Map(); - for (i = s2; i <= e2; i++) { - const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]); - if (nextChild.key != null) { - keyToNewIndexMap.set(nextChild.key, i); - } - } - let j; - let patched = 0; - const toBePatched = e2 - s2 + 1; - let moved = false; - let maxNewIndexSoFar = 0; - const newIndexToOldIndexMap = new Array(toBePatched); - for (i = 0; i < toBePatched; i++) - newIndexToOldIndexMap[i] = 0; - for (i = s1; i <= e1; i++) { - const prevChild = c1[i]; - if (patched >= toBePatched) { - unmount(prevChild, parentComponent, parentSuspense, true); - continue; - } - let newIndex; - if (prevChild.key != null) { - newIndex = keyToNewIndexMap.get(prevChild.key); - } else { - for (j = s2; j <= e2; j++) { - if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) { - newIndex = j; - break; - } - } - } - if (newIndex === void 0) { - unmount(prevChild, parentComponent, parentSuspense, true); - } else { - newIndexToOldIndexMap[newIndex - s2] = i + 1; - if (newIndex >= maxNewIndexSoFar) { - maxNewIndexSoFar = newIndex; - } else { - moved = true; - } - patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - patched++; - } - } - const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR; - j = increasingNewIndexSequence.length - 1; - for (i = toBePatched - 1; i >= 0; i--) { - const nextIndex = s2 + i; - const nextChild = c2[nextIndex]; - const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor; - if (newIndexToOldIndexMap[i] === 0) { - patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized); - } else if (moved) { - if (j < 0 || i !== increasingNewIndexSequence[j]) { - move(nextChild, container, anchor, 2); - } else { - j--; - } - } + usingTempInsertionPoint = true; + insertionPoint = isSVG ? doc.createElementNS(svgNS, "g") : doc.createElement("div"); + parent.insertBefore(insertionPoint, anchor); } - } - }; - const move = (vnode, container, anchor, moveType, parentSuspense = null) => { - const { el, type, transition, children, shapeFlag } = vnode; - if (shapeFlag & 6) { - move(vnode.component.subTree, container, anchor, moveType); - return; - } - if (shapeFlag & 128) { - vnode.suspense.move(container, anchor, moveType); - return; - } - if (shapeFlag & 64) { - type.move(vnode, container, anchor, internals); - return; - } - if (type === Fragment) { - hostInsert(el, container, anchor); - for (let i = 0; i < children.length; i++) { - move(children[i], container, anchor, moveType); + insertionPoint.insertAdjacentHTML("beforebegin", content); + if (usingTempInsertionPoint) { + parent.removeChild(insertionPoint); } - hostInsert(vnode.anchor, container, anchor); - return; - } - if (type === Static) { - moveStaticNode(vnode, container, anchor); - return; - } - const needTransition = moveType !== 2 && shapeFlag & 1 && transition; - if (needTransition) { - if (moveType === 0) { - transition.beforeEnter(el); - hostInsert(el, container, anchor); - queuePostRenderEffect(() => transition.enter(el), parentSuspense); - } else { - const { leave, delayLeave, afterLeave } = transition; - const remove3 = () => hostInsert(el, container, anchor); - const performLeave = () => { - leave(el, () => { - remove3(); - afterLeave && afterLeave(); - }); - }; - if (delayLeave) { - delayLeave(el, remove3, performLeave); - } else { - performLeave(); - } - } - } else { - hostInsert(el, container, anchor); - } - }; - const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => { - const { - type, - props: props2, - ref: ref2, - children, - dynamicChildren, - shapeFlag, - patchFlag, - dirs - } = vnode; - if (ref2 != null) { - setRef(ref2, null, parentSuspense, vnode, true); - } - if (shapeFlag & 256) { - parentComponent.ctx.deactivate(vnode); - return; - } - const shouldInvokeDirs = shapeFlag & 1 && dirs; - let vnodeHook; - if (vnodeHook = props2 && props2.onVnodeBeforeUnmount) { - invokeVNodeHook(vnodeHook, parentComponent, vnode); - } - if (shapeFlag & 6) { - unmountComponent(vnode.component, parentSuspense, doRemove); - } else { - if (shapeFlag & 128) { - vnode.suspense.unmount(parentSuspense, doRemove); - return; - } - if (shouldInvokeDirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount"); - } - if (shapeFlag & 64) { - vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove); - } else if (dynamicChildren && (type !== Fragment || patchFlag > 0 && patchFlag & 64)) { - unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true); - } else if (type === Fragment && (patchFlag & 128 || patchFlag & 256) || !optimized && shapeFlag & 16) { - unmountChildren(children, parentComponent, parentSuspense); - } - if (doRemove) { - remove2(vnode); - } - } - if ((vnodeHook = props2 && props2.onVnodeUnmounted) || shouldInvokeDirs) { - queuePostRenderEffect(() => { - vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode); - shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted"); - }, parentSuspense); - } - }; - const remove2 = (vnode) => { - const { type, el, anchor, transition } = vnode; - if (type === Fragment) { - removeFragment(el, anchor); - return; - } - if (type === Static) { - removeStaticNode(vnode); - return; - } - const performRemove = () => { - hostRemove(el); - if (transition && !transition.persisted && transition.afterLeave) { - transition.afterLeave(); - } - }; - if (vnode.shapeFlag & 1 && transition && !transition.persisted) { - const { leave, delayLeave } = transition; - const performLeave = () => leave(el, performRemove); - if (delayLeave) { - delayLeave(vnode.el, performRemove, performLeave); - } else { - performLeave(); - } - } else { - performRemove(); - } - }; - const removeFragment = (cur, end) => { - let next; - while (cur !== end) { - next = hostNextSibling(cur); - hostRemove(cur); - cur = next; - } - hostRemove(end); - }; - const unmountComponent = (instance, parentSuspense, doRemove) => { - const { bum, effects, update, subTree, um } = instance; - if (bum) { - invokeArrayFns(bum); - } - if (effects) { - for (let i = 0; i < effects.length; i++) { - stop(effects[i]); - } - } - if (update) { - stop(update); - unmount(subTree, instance, parentSuspense, doRemove); - } - if (um) { - queuePostRenderEffect(um, parentSuspense); - } - queuePostRenderEffect(() => { - instance.isUnmounted = true; - }, parentSuspense); - if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) { - parentSuspense.deps--; - if (parentSuspense.deps === 0) { - parentSuspense.resolve(); - } - } - }; - const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => { - for (let i = start; i < children.length; i++) { - unmount(children[i], parentComponent, parentSuspense, doRemove, optimized); - } - }; - const getNextHostNode = (vnode) => { - if (vnode.shapeFlag & 6) { - return getNextHostNode(vnode.component.subTree); - } - if (vnode.shapeFlag & 128) { - return vnode.suspense.next(); - } - return hostNextSibling(vnode.anchor || vnode.el); - }; - const render = (vnode, container, isSVG) => { - if (vnode == null) { - if (container._vnode) { - unmount(container._vnode, null, null, true); - } - } else { - patch(container._vnode || null, vnode, container, null, null, null, isSVG); - } - flushPostFlushCbs(); - container._vnode = vnode; - }; - const internals = { - p: patch, - um: unmount, - m: move, - r: remove2, - mt: mountComponent, - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - n: getNextHostNode, - o: options - }; - let hydrate; - let hydrateNode; - if (createHydrationFns) { - [hydrate, hydrateNode] = createHydrationFns(internals); - } - return { - render, - hydrate, - createApp: createAppAPI(render, hydrate) - }; - } - function invokeVNodeHook(hook, instance, vnode, prevVNode = null) { - callWithAsyncErrorHandling(hook, instance, 7, [ - vnode, - prevVNode - ]); - } - function traverseStaticChildren(n1, n2, shallow = false) { - const ch1 = n1.children; - const ch2 = n2.children; - if (isArray(ch1) && isArray(ch2)) { - for (let i = 0; i < ch1.length; i++) { - const c1 = ch1[i]; - let c2 = ch2[i]; - if (c2.shapeFlag & 1 && !c2.dynamicChildren) { - if (c2.patchFlag <= 0 || c2.patchFlag === 32) { - c2 = ch2[i] = cloneIfMounted(ch2[i]); - c2.el = c1.el; - } - if (!shallow) - traverseStaticChildren(c1, c2); - } - } - } - } - function getSequence(arr) { - const p2 = arr.slice(); - const result = [0]; - let i, j, u, v, c; - const len = arr.length; - for (i = 0; i < len; i++) { - const arrI = arr[i]; - if (arrI !== 0) { - j = result[result.length - 1]; - if (arr[j] < arrI) { - p2[i] = j; - result.push(i); - continue; - } - u = 0; - v = result.length - 1; - while (u < v) { - c = (u + v) / 2 | 0; - if (arr[result[c]] < arrI) { - u = c + 1; - } else { - v = c; - } - } - if (arrI < arr[result[u]]) { - if (u > 0) { - p2[i] = result[u - 1]; - } - result[u] = i; - } - } - } - u = result.length; - v = result[u - 1]; - while (u-- > 0) { - result[u] = v; - v = p2[v]; - } - return result; - } - const isTeleport = (type) => type.__isTeleport; - const NULL_DYNAMIC_COMPONENT = Symbol(); - const Fragment = Symbol(void 0); - const Text$1 = Symbol(void 0); - const Comment$1 = Symbol(void 0); - const Static = Symbol(void 0); - let currentBlock = null; - let isBlockTreeEnabled = 1; - function setBlockTracking(value) { - isBlockTreeEnabled += value; - } - function isVNode(value) { - return value ? value.__v_isVNode === true : false; - } - function isSameVNodeType(n1, n2) { - return n1.type === n2.type && n1.key === n2.key; - } - const InternalObjectKey = `__vInternal`; - const normalizeKey = ({ key }) => key != null ? key : null; - const normalizeRef = ({ ref: ref2 }) => { - return ref2 != null ? isString(ref2) || isRef(ref2) || isFunction(ref2) ? { i: currentRenderingInstance, r: ref2 } : ref2 : null; - }; - const createVNode = _createVNode; - function _createVNode(type, props2 = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) { - if (!type || type === NULL_DYNAMIC_COMPONENT) { - type = Comment$1; - } - if (isVNode(type)) { - const cloned = cloneVNode(type, props2, true); - if (children) { - normalizeChildren(cloned, children); - } - return cloned; - } - if (isClassComponent(type)) { - type = type.__vccOpts; - } - if (props2) { - if (isProxy(props2) || InternalObjectKey in props2) { - props2 = extend({}, props2); - } - let { class: klass, style } = props2; - if (klass && !isString(klass)) { - props2.class = normalizeClass(klass); - } - if (isObject$1(style)) { - if (isProxy(style) && !isArray(style)) { - style = extend({}, style); - } - props2.style = normalizeStyle(style); - } - } - const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject$1(type) ? 4 : isFunction(type) ? 2 : 0; - const vnode = { - __v_isVNode: true, - __v_skip: true, - type, - props: props2, - key: props2 && normalizeKey(props2), - ref: props2 && normalizeRef(props2), - scopeId: currentScopeId, - slotScopeIds: null, - children: null, - component: null, - suspense: null, - ssContent: null, - ssFallback: null, - dirs: null, - transition: null, - el: null, - anchor: null, - target: null, - targetAnchor: null, - staticCount: 0, - shapeFlag, - patchFlag, - dynamicProps, - dynamicChildren: null, - appContext: null - }; - normalizeChildren(vnode, children); - if (shapeFlag & 128) { - type.normalize(vnode); - } - if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock && (patchFlag > 0 || shapeFlag & 6) && patchFlag !== 32) { - currentBlock.push(vnode); - } - return vnode; - } - function cloneVNode(vnode, extraProps, mergeRef = false) { - const { props: props2, ref: ref2, patchFlag, children } = vnode; - const mergedProps = extraProps ? mergeProps(props2 || {}, extraProps) : props2; - const cloned = { - __v_isVNode: true, - __v_skip: true, - type: vnode.type, - props: mergedProps, - key: mergedProps && normalizeKey(mergedProps), - ref: extraProps && extraProps.ref ? mergeRef && ref2 ? isArray(ref2) ? ref2.concat(normalizeRef(extraProps)) : [ref2, normalizeRef(extraProps)] : normalizeRef(extraProps) : ref2, - scopeId: vnode.scopeId, - slotScopeIds: vnode.slotScopeIds, - children, - target: vnode.target, - targetAnchor: vnode.targetAnchor, - staticCount: vnode.staticCount, - shapeFlag: vnode.shapeFlag, - patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag, - dynamicProps: vnode.dynamicProps, - dynamicChildren: vnode.dynamicChildren, - appContext: vnode.appContext, - dirs: vnode.dirs, - transition: vnode.transition, - component: vnode.component, - suspense: vnode.suspense, - ssContent: vnode.ssContent && cloneVNode(vnode.ssContent), - ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback), - el: vnode.el, - anchor: vnode.anchor - }; - return cloned; - } - function createTextVNode(text = " ", flag = 0) { - return createVNode(Text$1, null, text, flag); - } - function normalizeVNode(child) { - if (child == null || typeof child === "boolean") { - return createVNode(Comment$1); - } else if (isArray(child)) { - return createVNode(Fragment, null, child.slice()); - } else if (typeof child === "object") { - return cloneIfMounted(child); - } else { - return createVNode(Text$1, null, String(child)); - } - } - function cloneIfMounted(child) { - return child.el === null ? child : cloneVNode(child); - } - function normalizeChildren(vnode, children) { - let type = 0; - const { shapeFlag } = vnode; - if (children == null) { - children = null; - } else if (isArray(children)) { - type = 16; - } else if (typeof children === "object") { - if (shapeFlag & 1 || shapeFlag & 64) { - const slot = children.default; - if (slot) { - slot._c && (slot._d = false); - normalizeChildren(vnode, slot()); - slot._c && (slot._d = true); - } - return; - } else { - type = 32; - const slotFlag = children._; - if (!slotFlag && !(InternalObjectKey in children)) { - children._ctx = currentRenderingInstance; - } else if (slotFlag === 3 && currentRenderingInstance) { - if (currentRenderingInstance.slots._ === 1) { - children._ = 1; - } else { - children._ = 2; - vnode.patchFlag |= 1024; - } - } - } - } else if (isFunction(children)) { - children = { default: children, _ctx: currentRenderingInstance }; - type = 32; - } else { - children = String(children); - if (shapeFlag & 64) { - type = 16; - children = [createTextVNode(children)]; - } else { - type = 8; - } - } - vnode.children = children; - vnode.shapeFlag |= type; - } - function mergeProps(...args) { - const ret = extend({}, args[0]); - for (let i = 1; i < args.length; i++) { - const toMerge = args[i]; - for (const key in toMerge) { - if (key === "class") { - if (ret.class !== toMerge.class) { - ret.class = normalizeClass([ret.class, toMerge.class]); - } - } else if (key === "style") { - ret.style = normalizeStyle([ret.style, toMerge.style]); - } else if (isOn(key)) { - const existing = ret[key]; - const incoming = toMerge[key]; - if (existing !== incoming) { - ret[key] = existing ? [].concat(existing, incoming) : incoming; - } - } else if (key !== "") { - ret[key] = toMerge[key]; - } - } - } - return ret; - } - const getPublicInstance = (i) => { - if (!i) - return null; - if (isStatefulComponent(i)) - return i.exposed ? i.exposed : i.proxy; - return getPublicInstance(i.parent); - }; - const publicPropertiesMap = extend(Object.create(null), { - $: (i) => i, - $el: (i) => i.vnode.el, - $data: (i) => i.data, - $props: (i) => i.props, - $attrs: (i) => i.attrs, - $slots: (i) => i.slots, - $refs: (i) => i.refs, - $parent: (i) => getPublicInstance(i.parent), - $root: (i) => getPublicInstance(i.root), - $emit: (i) => i.emit, - $options: (i) => resolveMergedOptions(i), - $forceUpdate: (i) => () => queueJob(i.update), - $nextTick: (i) => nextTick.bind(i.proxy), - $watch: (i) => instanceWatch.bind(i) - }); - const PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - const { ctx, setupState, data, props: props2, accessCache, type, appContext } = instance; - let normalizedProps; - if (key[0] !== "$") { - const n = accessCache[key]; - if (n !== void 0) { - switch (n) { - case 0: - return setupState[key]; - case 1: - return data[key]; - case 3: - return ctx[key]; - case 2: - return props2[key]; - } - } else if (setupState !== EMPTY_OBJ && hasOwn$1(setupState, key)) { - accessCache[key] = 0; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) { - accessCache[key] = 1; - return data[key]; - } else if ((normalizedProps = instance.propsOptions[0]) && hasOwn$1(normalizedProps, key)) { - accessCache[key] = 2; - return props2[key]; - } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) { - accessCache[key] = 3; - return ctx[key]; - } else if (shouldCacheAccess) { - accessCache[key] = 4; - } - } - const publicGetter = publicPropertiesMap[key]; - let cssModule, globalProperties; - if (publicGetter) { - if (key === "$attrs") { - track(instance, "get", key); - } - return publicGetter(instance); - } else if ((cssModule = type.__cssModules) && (cssModule = cssModule[key])) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn$1(ctx, key)) { - accessCache[key] = 3; - return ctx[key]; - } else if (globalProperties = appContext.config.globalProperties, hasOwn$1(globalProperties, key)) { - { - return globalProperties[key]; - } - } else - ; - }, - set({ _: instance }, key, value) { - const { data, setupState, ctx } = instance; - if (setupState !== EMPTY_OBJ && hasOwn$1(setupState, key)) { - setupState[key] = value; - } else if (data !== EMPTY_OBJ && hasOwn$1(data, key)) { - data[key] = value; - } else if (hasOwn$1(instance.props, key)) { - return false; - } - if (key[0] === "$" && key.slice(1) in instance) { - return false; - } else { - { - ctx[key] = value; - } - } - return true; - }, - has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) { - let normalizedProps; - return accessCache[key] !== void 0 || data !== EMPTY_OBJ && hasOwn$1(data, key) || setupState !== EMPTY_OBJ && hasOwn$1(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn$1(normalizedProps, key) || hasOwn$1(ctx, key) || hasOwn$1(publicPropertiesMap, key) || hasOwn$1(appContext.config.globalProperties, key); - } - }; - const RuntimeCompiledPublicInstanceProxyHandlers = extend({}, PublicInstanceProxyHandlers, { - get(target, key) { - if (key === Symbol.unscopables) { - return; - } - return PublicInstanceProxyHandlers.get(target, key, target); - }, - has(_, key) { - const has2 = key[0] !== "_" && !isGloballyWhitelisted(key); - return has2; - } - }); - const emptyAppContext = createAppContext(); - let uid$2 = 0; - function createComponentInstance(vnode, parent, suspense) { - const type = vnode.type; - const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext; - const instance = { - uid: uid$2++, - vnode, - type, - parent, - appContext, - root: null, - next: null, - subTree: null, - update: null, - render: null, - proxy: null, - exposed: null, - exposeProxy: null, - withProxy: null, - effects: null, - provides: parent ? parent.provides : Object.create(appContext.provides), - accessCache: null, - renderCache: [], - components: null, - directives: null, - propsOptions: normalizePropsOptions(type, appContext), - emitsOptions: normalizeEmitsOptions(type, appContext), - emit: null, - emitted: null, - propsDefaults: EMPTY_OBJ, - inheritAttrs: type.inheritAttrs, - ctx: EMPTY_OBJ, - data: EMPTY_OBJ, - props: EMPTY_OBJ, - attrs: EMPTY_OBJ, - slots: EMPTY_OBJ, - refs: EMPTY_OBJ, - setupState: EMPTY_OBJ, - setupContext: null, - suspense, - suspenseId: suspense ? suspense.pendingId : 0, - asyncDep: null, - asyncResolved: false, - isMounted: false, - isUnmounted: false, - isDeactivated: false, - bc: null, - c: null, - bm: null, - m: null, - bu: null, - u: null, - um: null, - bum: null, - da: null, - a: null, - rtg: null, - rtc: null, - ec: null, - sp: null - }; - { - instance.ctx = { _: instance }; - } - instance.root = parent ? parent.root : instance; - instance.emit = emit.bind(null, instance); - return instance; - } - let currentInstance = null; - const getCurrentInstance = () => currentInstance || currentRenderingInstance; - const setCurrentInstance = (instance) => { - currentInstance = instance; - }; - function isStatefulComponent(instance) { - return instance.vnode.shapeFlag & 4; - } - let isInSSRComponentSetup = false; - function setupComponent(instance, isSSR = false) { - isInSSRComponentSetup = isSSR; - const { props: props2, children } = instance.vnode; - const isStateful = isStatefulComponent(instance); - initProps(instance, props2, isStateful, isSSR); - initSlots(instance, children); - const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0; - isInSSRComponentSetup = false; - return setupResult; - } - function setupStatefulComponent(instance, isSSR) { - const Component = instance.type; - instance.accessCache = Object.create(null); - instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers)); - const { setup } = Component; - if (setup) { - const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null; - currentInstance = instance; - pauseTracking(); - const setupResult = callWithErrorHandling(setup, instance, 0, [ - instance.props, - setupContext - ]); - resetTracking(); - currentInstance = null; - if (isPromise(setupResult)) { - if (isSSR) { - return setupResult.then((resolvedResult) => { - handleSetupResult(instance, resolvedResult); - }).catch((e) => { - handleError(e, instance, 0); - }); - } else { - instance.asyncDep = setupResult; - } - } else { - handleSetupResult(instance, setupResult); - } - } else { - finishComponentSetup(instance); - } - } - function handleSetupResult(instance, setupResult, isSSR) { - if (isFunction(setupResult)) { - { - instance.render = setupResult; - } - } else if (isObject$1(setupResult)) { - instance.setupState = proxyRefs(setupResult); - } else - ; - finishComponentSetup(instance); - } - function finishComponentSetup(instance, isSSR, skipOptions) { - const Component = instance.type; - if (!instance.render) { - instance.render = Component.render || NOOP; - if (instance.render._rc) { - instance.withProxy = new Proxy(instance.ctx, RuntimeCompiledPublicInstanceProxyHandlers); - } - } - { - currentInstance = instance; - pauseTracking(); - applyOptions(instance); - resetTracking(); - currentInstance = null; - } - } - function createSetupContext(instance) { - const expose = (exposed) => { - instance.exposed = exposed || {}; - }; - { - return { - attrs: instance.attrs, - slots: instance.slots, - emit: instance.emit, - expose - }; - } - } - function getExposeProxy(instance) { - if (instance.exposed) { - return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), { - get(target, key) { - if (key in target) { - return target[key]; - } else if (key in publicPropertiesMap) { - return publicPropertiesMap[key](instance); - } - } - })); - } - } - function recordInstanceBoundEffect(effect2, instance = currentInstance) { - if (instance) { - (instance.effects || (instance.effects = [])).push(effect2); - } - } - const classifyRE = /(?:^|[-_])(\w)/g; - const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, ""); - function getComponentName(Component) { - return isFunction(Component) ? Component.displayName || Component.name : Component.name; - } - function formatComponentName(instance, Component, isRoot = false) { - let name = getComponentName(Component); - if (!name && Component.__file) { - const match = Component.__file.match(/([^/\\]+)\.\w+$/); - if (match) { - name = match[1]; - } - } - if (!name && instance && instance.parent) { - const inferFromRegistry = (registry) => { - for (const key in registry) { - if (registry[key] === Component) { - return key; - } - } - }; - name = inferFromRegistry(instance.components || instance.parent.type.components) || inferFromRegistry(instance.appContext.components); - } - return name ? classify(name) : isRoot ? `App` : `Anonymous`; - } - function isClassComponent(value) { - return isFunction(value) && "__vccOpts" in value; - } - function computed$1(getterOrOptions) { - const c = computed(getterOrOptions); - recordInstanceBoundEffect(c.effect); - return c; - } - function h(type, propsOrChildren, children) { - const l = arguments.length; - if (l === 2) { - if (isObject$1(propsOrChildren) && !isArray(propsOrChildren)) { - if (isVNode(propsOrChildren)) { - return createVNode(type, null, [propsOrChildren]); - } - return createVNode(type, propsOrChildren); - } else { - return createVNode(type, null, propsOrChildren); - } - } else { - if (l > 3) { - children = Array.prototype.slice.call(arguments, 2); - } else if (l === 3 && isVNode(children)) { - children = [children]; - } - return createVNode(type, propsOrChildren, children); - } - } - const version = "3.1.2"; - const svgNS = "http://www.w3.org/2000/svg"; - const doc = typeof document !== "undefined" ? document : null; - const nodeOps = { - insert: (child, parent, anchor) => { - parent.insertBefore(child, anchor || null); - }, - remove: (child) => { - const parent = child.parentNode; - if (parent) { - parent.removeChild(child); - } - }, - createElement: (tag, isSVG, is, props2) => { - const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0); - if (tag === "select" && props2 && props2.multiple != null) { - el.setAttribute("multiple", props2.multiple); - } - return el; - }, - createText: (text) => doc.createTextNode(text), - createComment: (text) => doc.createComment(text), - setText: (node, text) => { - node.nodeValue = text; - }, - setElementText: (el, text) => { - el.textContent = text; - }, - parentNode: (node) => node.parentNode, - nextSibling: (node) => node.nextSibling, - querySelector: (selector) => doc.querySelector(selector), - setScopeId(el, id) { - el.setAttribute(id, ""); - }, - cloneNode(el) { - const cloned = el.cloneNode(true); - if (`_value` in el) { - cloned._value = el._value; - } - return cloned; - }, - insertStaticContent(content, parent, anchor, isSVG, cached) { - if (cached) { - let [cachedFirst, cachedLast] = cached; - let first, last; - while (true) { - let node = cachedFirst.cloneNode(true); - if (!first) - first = node; - parent.insertBefore(node, anchor); - if (cachedFirst === cachedLast) { - last = node; - break; - } - cachedFirst = cachedFirst.nextSibling; - } - return [first, last]; - } - const before = anchor ? anchor.previousSibling : parent.lastChild; - if (anchor) { - let insertionPoint; - let usingTempInsertionPoint = false; - if (anchor instanceof Element) { - insertionPoint = anchor; - } else { - usingTempInsertionPoint = true; - insertionPoint = isSVG ? doc.createElementNS(svgNS, "g") : doc.createElement("div"); - parent.insertBefore(insertionPoint, anchor); - } - insertionPoint.insertAdjacentHTML("beforebegin", content); - if (usingTempInsertionPoint) { - parent.removeChild(insertionPoint); - } - } else { - parent.insertAdjacentHTML("beforeend", content); - } - return [ - before ? before.nextSibling : parent.firstChild, - anchor ? anchor.previousSibling : parent.lastChild - ]; - } - }; - function patchClass(el, value, isSVG) { - if (value == null) { - value = ""; - } - if (isSVG) { - el.setAttribute("class", value); - } else { - const transitionClasses = el._vtc; - if (transitionClasses) { - value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); - } - el.className = value; - } - } - function patchStyle(el, prev, next) { - const style = el.style; - if (!next) { - el.removeAttribute("style"); - } else if (isString(next)) { - if (prev !== next) { - const current = style.display; - style.cssText = next; - if ("_vod" in el) { - style.display = current; - } - } - } else { - for (const key in next) { - setStyle(style, key, next[key]); - } - if (prev && !isString(prev)) { - for (const key in prev) { - if (next[key] == null) { - setStyle(style, key, ""); - } - } - } - } - } - const importantRE = /\s*!important$/; - function setStyle(style, name, val) { - if (isArray(val)) { - val.forEach((v) => setStyle(style, name, v)); - } else { - if (name.startsWith("--")) { - style.setProperty(name, val); - } else { - const prefixed = autoPrefix(style, name); - if (importantRE.test(val)) { - style.setProperty(hyphenate(prefixed), val.replace(importantRE, ""), "important"); - } else { - style[prefixed] = val; - } - } - } - } - const prefixes = ["Webkit", "Moz", "ms"]; - const prefixCache = {}; - function autoPrefix(style, rawName) { - const cached = prefixCache[rawName]; - if (cached) { - return cached; - } - let name = camelize(rawName); - if (name !== "filter" && name in style) { - return prefixCache[rawName] = name; - } - name = capitalize(name); - for (let i = 0; i < prefixes.length; i++) { - const prefixed = prefixes[i] + name; - if (prefixed in style) { - return prefixCache[rawName] = prefixed; - } - } - return rawName; - } - const xlinkNS = "http://www.w3.org/1999/xlink"; - function patchAttr(el, key, value, isSVG, instance) { - if (isSVG && key.startsWith("xlink:")) { - if (value == null) { - el.removeAttributeNS(xlinkNS, key.slice(6, key.length)); - } else { - el.setAttributeNS(xlinkNS, key, value); - } - } else { - const isBoolean = isSpecialBooleanAttr(key); - if (value == null || isBoolean && value === false) { - el.removeAttribute(key); - } else { - el.setAttribute(key, isBoolean ? "" : value); - } - } - } - function patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) { - if (key === "innerHTML" || key === "textContent") { - if (prevChildren) { - unmountChildren(prevChildren, parentComponent, parentSuspense); - } - el[key] = value == null ? "" : value; - return; - } - if (key === "value" && el.tagName !== "PROGRESS") { - el._value = value; - const newValue = value == null ? "" : value; - if (el.value !== newValue) { - el.value = newValue; - } - if (value == null) { - el.removeAttribute(key); - } - return; - } - if (value === "" || value == null) { - const type = typeof el[key]; - if (value === "" && type === "boolean") { - el[key] = true; - return; - } else if (value == null && type === "string") { - el[key] = ""; - el.removeAttribute(key); - return; - } else if (type === "number") { - el[key] = 0; - el.removeAttribute(key); - return; - } - } - try { - el[key] = value; - } catch (e) { - } - } - let _getNow = Date.now; - let skipTimestampCheck = false; - if (typeof window !== "undefined") { - if (_getNow() > document.createEvent("Event").timeStamp) { - _getNow = () => performance.now(); - } - const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i); - skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53); - } - let cachedNow = 0; - const p = Promise.resolve(); - const reset = () => { - cachedNow = 0; - }; - const getNow = () => cachedNow || (p.then(reset), cachedNow = _getNow()); - function addEventListener(el, event, handler, options) { - el.addEventListener(event, handler, options); - } - function removeEventListener(el, event, handler, options) { - el.removeEventListener(event, handler, options); - } - function patchEvent(el, rawName, prevValue, nextValue, instance = null) { - const invokers = el._vei || (el._vei = {}); - const existingInvoker = invokers[rawName]; - if (nextValue && existingInvoker) { - existingInvoker.value = nextValue; - } else { - const [name, options] = parseName(rawName); - if (nextValue) { - const invoker = invokers[rawName] = createInvoker(nextValue, instance); - addEventListener(el, name, invoker, options); - } else if (existingInvoker) { - removeEventListener(el, name, existingInvoker, options); - invokers[rawName] = void 0; - } - } - } - const optionsModifierRE = /(?:Once|Passive|Capture)$/; - function parseName(name) { - let options; - if (optionsModifierRE.test(name)) { - options = {}; - let m; - while (m = name.match(optionsModifierRE)) { - name = name.slice(0, name.length - m[0].length); - options[m[0].toLowerCase()] = true; - } - } - return [hyphenate(name.slice(2)), options]; - } - function createInvoker(initialValue, instance) { - const invoker = (e) => { - const timeStamp = e.timeStamp || _getNow(); - if (skipTimestampCheck || timeStamp >= invoker.attached - 1) { - callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5, [e]); - } - }; - invoker.value = initialValue; - invoker.attached = getNow(); - return invoker; - } - function patchStopImmediatePropagation(e, value) { - if (isArray(value)) { - const originalStop = e.stopImmediatePropagation; - e.stopImmediatePropagation = () => { - originalStop.call(e); - e._stopped = true; - }; - return value.map((fn) => (e2) => !e2._stopped && fn(e2)); - } else { - return value; - } - } - const nativeOnRE = /^on[a-z]/; - const forcePatchProp = (_, key) => key === "value"; - const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => { - switch (key) { - case "class": - patchClass(el, nextValue, isSVG); - break; - case "style": - patchStyle(el, prevValue, nextValue); - break; - default: - if (isOn(key)) { - if (!isModelListener(key)) { - patchEvent(el, key, prevValue, nextValue, parentComponent); - } - } else if (shouldSetAsProp(el, key, nextValue, isSVG)) { - patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren); - } else { - if (key === "true-value") { - el._trueValue = nextValue; - } else if (key === "false-value") { - el._falseValue = nextValue; - } - patchAttr(el, key, nextValue, isSVG); - } - break; - } - }; - function shouldSetAsProp(el, key, value, isSVG) { - if (isSVG) { - if (key === "innerHTML") { - return true; - } - if (key in el && nativeOnRE.test(key) && isFunction(value)) { - return true; - } - return false; - } - if (key === "spellcheck" || key === "draggable") { - return false; - } - if (key === "form") { - return false; - } - if (key === "list" && el.tagName === "INPUT") { - return false; - } - if (key === "type" && el.tagName === "TEXTAREA") { - return false; - } - if (nativeOnRE.test(key) && isString(value)) { - return false; - } - return key in el; - } - const rendererOptions = extend({ patchProp, forcePatchProp }, nodeOps); - let renderer; - function ensureRenderer() { - return renderer || (renderer = createRenderer(rendererOptions)); - } - const createApp = (...args) => { - const app = ensureRenderer().createApp(...args); - const { mount } = app; - app.mount = (containerOrSelector) => { - const container = normalizeContainer(containerOrSelector); - if (!container) - return; - const component = app._component; - if (!isFunction(component) && !component.render && !component.template) { - component.template = container.innerHTML; - } - container.innerHTML = ""; - const proxy = mount(container, false, container instanceof SVGElement); - if (container instanceof Element) { - container.removeAttribute("v-cloak"); - container.setAttribute("data-v-app", ""); - } - return proxy; - }; - return app; - }; - function normalizeContainer(container) { - if (isString(container)) { - const res = document.querySelector(container); - return res; - } - return container; - } - var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}; - function getDefaultExportFromCjs(x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; - } - var dist = { exports: {} }; - (function(module, exports) { - !function(t, e) { - module.exports = e(); - }(typeof self != "undefined" ? self : commonjsGlobal, function() { - return function(t) { - var e = {}; - function n(r) { - if (e[r]) - return e[r].exports; - var o = e[r] = { i: r, l: false, exports: {} }; - return t[r].call(o.exports, o, o.exports, n), o.l = true, o.exports; - } - return n.m = t, n.c = e, n.d = function(t2, e2, r) { - n.o(t2, e2) || Object.defineProperty(t2, e2, { enumerable: true, get: r }); - }, n.r = function(t2) { - typeof Symbol != "undefined" && Symbol.toStringTag && Object.defineProperty(t2, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t2, "__esModule", { value: true }); - }, n.t = function(t2, e2) { - if (1 & e2 && (t2 = n(t2)), 8 & e2) - return t2; - if (4 & e2 && typeof t2 == "object" && t2 && t2.__esModule) - return t2; - var r = Object.create(null); - if (n.r(r), Object.defineProperty(r, "default", { enumerable: true, value: t2 }), 2 & e2 && typeof t2 != "string") - for (var o in t2) - n.d(r, o, function(e3) { - return t2[e3]; - }.bind(null, o)); - return r; - }, n.n = function(t2) { - var e2 = t2 && t2.__esModule ? function() { - return t2.default; - } : function() { - return t2; - }; - return n.d(e2, "a", e2), e2; - }, n.o = function(t2, e2) { - return Object.prototype.hasOwnProperty.call(t2, e2); - }, n.p = "", n(n.s = 1); - }([function(t, e, n) { - (function(t2) { - n.d(e, "a", function() { - return c; - }); - const r = (t3) => { - const e2 = Object.create(null); - return (n2) => e2[n2] || (e2[n2] = t3(n2)); - }, u = r((t3) => t3.charAt(0).toUpperCase() + t3.slice(1)), c = r((t3) => t3 ? "on" + u(t3) : ""); - }).call(this, n(2)); - }, function(t, e, n) { - t.exports = n(3); - }, function(t, e) { - var n; - n = function() { - return this; - }(); - try { - n = n || new Function("return this")(); - } catch (t2) { - typeof window == "object" && (n = window); - } - t.exports = n; - }, function(t, e, n) { - n.r(e), n.d(e, "default", function() { - return j; - }); - var r = n(0), o = /-(\w)/g, i = function(t2) { - return t2.replace(o, function(t3, e2) { - return e2 ? e2.toUpperCase() : ""; - }); - }, u = /\B([A-Z])/g, c = function(t2) { - return t2.replace(u, "-$1").toLowerCase(); - }; - function a(t2, e2) { - if (t2) { - var n2 = t2.$options[e2] || []; - Array.isArray(n2) || (n2 = [n2]), n2.forEach(function(e3) { - e3.call(t2); - }); - } - } - function f(t2, e2) { - return new CustomEvent(t2, { bubbles: false, cancelable: false, detail: e2.length === 1 ? e2[0] : e2 }); - } - var s = function(t2) { - return /function Boolean/.test(String(t2)); - }, l = function(t2) { - return /function Number/.test(String(t2)); - }; - function p2(t2, e2) { - if (t2.nodeType === 3) - return t2.data.trim() ? t2.data : null; - if (t2.nodeType === 1) { - var n2 = { attrs: d(t2), domProps: { innerHTML: t2.innerHTML } }; - return n2.attrs.slot && (n2.slot = n2.attrs.slot, delete n2.attrs.slot), e2(t2.tagName, n2); - } - return null; - } - function d(t2) { - for (var e2 = {}, n2 = 0, r2 = t2.attributes.length; n2 < r2; n2++) { - var o2 = t2.attributes[n2]; - e2[o2.nodeName] = o2.nodeValue; - } - return e2; - } - function y(t2) { - return (y = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t3) { - return typeof t3; - } : function(t3) { - return t3 && typeof Symbol == "function" && t3.constructor === Symbol && t3 !== Symbol.prototype ? "symbol" : typeof t3; - })(t2); - } - function b(t2, e2) { - for (var n2 = 0; n2 < e2.length; n2++) { - var r2 = e2[n2]; - r2.enumerable = r2.enumerable || false, r2.configurable = true, "value" in r2 && (r2.writable = true), Object.defineProperty(t2, r2.key, r2); - } - } - function v(t2, e2) { - return !e2 || y(e2) !== "object" && typeof e2 != "function" ? h2(t2) : e2; - } - function h2(t2) { - if (t2 === void 0) - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return t2; - } - function m(t2) { - var e2 = typeof Map == "function" ? new Map() : void 0; - return (m = function(t3) { - if (t3 === null || (n2 = t3, Function.toString.call(n2).indexOf("[native code]") === -1)) - return t3; - var n2; - if (typeof t3 != "function") - throw new TypeError("Super expression must either be null or a function"); - if (e2 !== void 0) { - if (e2.has(t3)) - return e2.get(t3); - e2.set(t3, r2); - } - function r2() { - return _(t3, arguments, O(this).constructor); - } - return r2.prototype = Object.create(t3.prototype, { constructor: { value: r2, enumerable: false, writable: true, configurable: true } }), w(r2, t3); - })(t2); - } - function _(t2, e2, n2) { - return (_ = g() ? Reflect.construct : function(t3, e3, n3) { - var r2 = [null]; - r2.push.apply(r2, e3); - var o2 = new (Function.bind.apply(t3, r2))(); - return n3 && w(o2, n3.prototype), o2; - }).apply(null, arguments); - } - function g() { - if (typeof Reflect == "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy == "function") - return true; - try { - return Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })), true; - } catch (t2) { - return false; - } - } - function w(t2, e2) { - return (w = Object.setPrototypeOf || function(t3, e3) { - return t3.__proto__ = e3, t3; - })(t2, e2); - } - function O(t2) { - return (O = Object.setPrototypeOf ? Object.getPrototypeOf : function(t3) { - return t3.__proto__ || Object.getPrototypeOf(t3); - })(t2); - } - function j(t2, e2, n2, o2) { - var u2, d2, y2, _2 = t2, j2 = false; - var x = function(t3) { - !function(t4, e3) { - if (typeof e3 != "function" && e3 !== null) - throw new TypeError("Super expression must either be null or a function"); - t4.prototype = Object.create(e3 && e3.prototype, { constructor: { value: t4, writable: true, configurable: true } }), e3 && w(t4, e3); - }(C, t3); - var c2, m2, x2, A, P = (c2 = C, m2 = g(), function() { - var t4, e3 = O(c2); - if (m2) { - var n3 = O(this).constructor; - t4 = Reflect.construct(e3, arguments, n3); - } else - t4 = e3.apply(this, arguments); - return v(this, t4); - }); - function C() { - var t4; - !function(t5, e3) { - if (!(t5 instanceof e3)) - throw new TypeError("Cannot call a class as a function"); - }(this, C), (t4 = P.call(this))._wrapper = void 0, t4._component = void 0, t4._props = void 0, t4._slotChildren = void 0, t4._mounted = false; - var r2 = t4.createEventProxies(_2.emits); - t4._props = {}, t4._slotChildren = []; - var o3 = h2(t4); - return t4._wrapper = e2({ render: function() { - var t5 = Object.assign({}, o3._props, r2); - return delete t5.dataVApp, n2(_2, t5, function() { - return o3._slotChildren; - }); - }, mounted: function() { - o3._mounted = true; - }, unmounted: function() { - o3._mounted = false; - } }), new MutationObserver(function(e3) { - for (var n3 = 0; n3 < e3.length; n3++) { - var r3 = e3[n3]; - j2 && r3.type === "attributes" && r3.target === h2(t4) ? r3.attributeName && t4.syncAttribute(r3.attributeName) : true; - } - }).observe(h2(t4), { childList: true, subtree: true, characterData: true, attributes: true }), t4; - } - return x2 = C, (A = [{ key: "createEventProxies", value: function(t4) { - var e3 = this, n3 = {}; - return t4 && t4.forEach(function(t5) { - var o3 = Object(r.a)(i(t5)); - n3[o3] = function() { - for (var n4 = arguments.length, r2 = new Array(n4), o4 = 0; o4 < n4; o4++) - r2[o4] = arguments[o4]; - e3.dispatchEvent(f(t5, r2)); - }; - }), n3; - } }, { key: "syncAttribute", value: function(t4) { - var e3, n3 = i(t4), r2 = void 0; - this.hasOwnProperty(t4) ? r2 = this[t4] : this.hasAttribute(t4) && (r2 = this.getAttribute(t4)), this._props[n3] = function(t5, e4) { - var n4 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r3 = n4.type; - if (s(r3)) - return t5 === "true" || t5 === "false" ? t5 === "true" : t5 === "" || t5 === e4 || t5 != null; - if (l(r3)) { - var o3 = parseFloat(t5); - return isNaN(o3) ? t5 : o3; - } - return t5; - }(r2, t4, y2[n3]), (e3 = this._component) === null || e3 === void 0 || e3.$forceUpdate(); - } }, { key: "syncSlots", value: function() { - var t4; - this._slotChildren = function(t5, e3) { - for (var n3 = [], r2 = 0, o3 = t5.length; r2 < o3; r2++) - n3.push(p2(t5[r2], e3)); - return n3; - }(this.childNodes, n2), (t4 = this._component) === null || t4 === void 0 || t4.$forceUpdate(); - } }, { key: "syncInitialAttributes", value: function() { - var t4, e3 = this; - this._props = (t4 = {}, d2.forEach(function(e4) { - t4[e4] = void 0; - }), t4), u2.forEach(function(t5) { - e3.syncAttribute(t5); - }); - } }, { key: "connectedCallback", value: function() { - this._component && this._mounted ? a(this._component, "mounted") : (j2 && this.syncInitialAttributes(), this.syncSlots(), this._component = this._wrapper.mount(this)), (o2 == null ? void 0 : o2.connectedCallback) && o2.connectedCallback.bind(this)(); - } }, { key: "disconnectedCallback", value: function() { - a(this._component, "unmounted"); - } }]) && b(x2.prototype, A), C; - }(m(HTMLElement)); - return function() { - if (!j2) { - var t3 = Array.isArray(_2.props) ? _2.props : Object.keys(_2.props || {}); - u2 = t3.map(c), d2 = t3.map(i); - var e3 = Array.isArray(_2.props) ? {} : _2.props || {}; - y2 = d2.reduce(function(n3, r2, o3) { - return n3[r2] = e3[t3[o3]], n3; - }, {}), j2 = true; - } - }(), x; - } - }]).default; - }); - })(dist); - var wrapper = /* @__PURE__ */ getDefaultExportFromCjs(dist.exports); - var button = "uni-button {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n padding-left: 14px;\n padding-right: 14px;\n box-sizing: border-box;\n font-size: 18px;\n text-align: center;\n text-decoration: none;\n line-height: 2.55555556;\n border-radius: 5px;\n -webkit-tap-highlight-color: transparent;\n overflow: hidden;\n color: #000000;\n background-color: #f8f8f8;\n cursor: pointer;\n}\n\nuni-button[hidden] {\n display: none !important;\n}\n\nuni-button:after {\n content: ' ';\n width: 200%;\n height: 200%;\n position: absolute;\n top: 0;\n left: 0;\n border: 1px solid rgba(0, 0, 0, 0.2);\n transform: scale(0.5);\n transform-origin: 0 0;\n box-sizing: border-box;\n border-radius: 10px;\n}\n\nuni-button[native] {\n padding-left: 0;\n padding-right: 0;\n}\n\nuni-button[native] .uni-button-cover-view-wrapper {\n border: inherit;\n border-color: inherit;\n border-radius: inherit;\n background-color: inherit;\n}\n\nuni-button[native] .uni-button-cover-view-inner {\n padding-left: 14px;\n padding-right: 14px;\n}\n\nuni-button uni-cover-view {\n line-height: inherit;\n white-space: inherit;\n}\n\nuni-button[type='default'] {\n color: #000000;\n background-color: #f8f8f8;\n}\n\nuni-button[type='primary'] {\n color: #ffffff;\n background-color: #007aff;\n}\n\nuni-button[type='warn'] {\n color: #ffffff;\n background-color: #e64340;\n}\n\nuni-button[disabled] {\n color: rgba(255, 255, 255, 0.6);\n cursor: not-allowed;\n}\n\nuni-button[disabled][type='default'],\nuni-button[disabled]:not([type]) {\n color: rgba(0, 0, 0, 0.3);\n background-color: #f7f7f7;\n}\n\nuni-button[disabled][type='primary'] {\n background-color: rgba(0, 122, 255, 0.6);\n}\n\nuni-button[disabled][type='warn'] {\n background-color: #ec8b89;\n}\n\nuni-button[type='primary'][plain] {\n color: #007aff;\n border: 1px solid #007aff;\n background-color: transparent;\n}\n\nuni-button[type='primary'][plain][disabled] {\n color: rgba(0, 0, 0, 0.2);\n border-color: rgba(0, 0, 0, 0.2);\n}\n\nuni-button[type='primary'][plain]:after {\n border-width: 0;\n}\n\nuni-button[type='default'][plain] {\n color: #353535;\n border: 1px solid #353535;\n background-color: transparent;\n}\n\nuni-button[type='default'][plain][disabled] {\n color: rgba(0, 0, 0, 0.2);\n border-color: rgba(0, 0, 0, 0.2);\n}\n\nuni-button[type='default'][plain]:after {\n border-width: 0;\n}\n\nuni-button[plain] {\n color: #353535;\n border: 1px solid #353535;\n background-color: transparent;\n}\n\nuni-button[plain][disabled] {\n color: rgba(0, 0, 0, 0.2);\n border-color: rgba(0, 0, 0, 0.2);\n}\n\nuni-button[plain]:after {\n border-width: 0;\n}\n\nuni-button[plain][native] .uni-button-cover-view-inner {\n padding: 0;\n}\n\nuni-button[type='warn'][plain] {\n color: #e64340;\n border: 1px solid #e64340;\n background-color: transparent;\n}\n\nuni-button[type='warn'][plain][disabled] {\n color: rgba(0, 0, 0, 0.2);\n border-color: rgba(0, 0, 0, 0.2);\n}\n\nuni-button[type='warn'][plain]:after {\n border-width: 0;\n}\n\nuni-button[size='mini'] {\n display: inline-block;\n line-height: 2.3;\n font-size: 13px;\n padding: 0 1.34em;\n}\n\nuni-button[size='mini'][native] {\n padding: 0;\n}\n\nuni-button[size='mini'][native] .uni-button-cover-view-inner {\n padding: 0 1.34em;\n}\n\nuni-button[loading]:not([disabled]) {\n cursor: progress;\n}\n\nuni-button[loading]:before {\n content: ' ';\n display: inline-block;\n width: 18px;\n height: 18px;\n vertical-align: middle;\n animation: uni-loading 1s steps(12, end) infinite;\n background-size: 100%;\n}\n\nuni-button[loading][type='primary'] {\n color: rgba(255, 255, 255, 0.6);\n background-color: #0062cc;\n}\n\nuni-button[loading][type='primary'][plain] {\n color: #007aff;\n background-color: transparent;\n}\n\nuni-button[loading][type='default'] {\n color: rgba(0, 0, 0, 0.6);\n background-color: #dedede;\n}\n\nuni-button[loading][type='default'][plain] {\n color: #353535;\n background-color: transparent;\n}\n\nuni-button[loading][type='warn'] {\n color: rgba(255, 255, 255, 0.6);\n background-color: #ce3c39;\n}\n\nuni-button[loading][type='warn'][plain] {\n color: #e64340;\n background-color: transparent;\n}\n\nuni-button[loading][native]:before {\n content: none;\n}\n\n.button-hover {\n color: rgba(0, 0, 0, 0.6);\n background-color: #dedede;\n}\n\n.button-hover[plain] {\n color: rgba(53, 53, 53, 0.6);\n border-color: rgba(53, 53, 53, 0.6);\n background-color: transparent;\n}\n\n.button-hover[type='primary'] {\n color: rgba(255, 255, 255, 0.6);\n background-color: #0062cc;\n}\n\n.button-hover[type='primary'][plain] {\n color: rgba(26, 173, 25, 0.6);\n border-color: rgba(26, 173, 25, 0.6);\n background-color: transparent;\n}\n\n.button-hover[type='default'] {\n color: rgba(0, 0, 0, 0.6);\n background-color: #dedede;\n}\n\n.button-hover[type='default'][plain] {\n color: rgba(53, 53, 53, 0.6);\n border-color: rgba(53, 53, 53, 0.6);\n background-color: transparent;\n}\n\n.button-hover[type='warn'] {\n color: rgba(255, 255, 255, 0.6);\n background-color: #ce3c39;\n}\n\n.button-hover[type='warn'][plain] {\n color: rgba(230, 67, 64, 0.6);\n border-color: rgba(230, 67, 64, 0.6);\n background-color: transparent;\n}\n"; - function formatLog(module, ...args) { - return `[${Date.now()}][${module}]\uFF1A${args.map((arg) => JSON.stringify(arg)).join(" ")}`; - } - function getCustomDataset(el) { - return extend({}, el.dataset, el.__uniDataset); - } - function normalizeTarget(el) { - const { id, offsetTop, offsetLeft } = el; - return { - id, - dataset: getCustomDataset(el), - offsetTop, - offsetLeft - }; - } - function cache(fn) { - const cache2 = Object.create(null); - return (str) => { - const hit = cache2[str]; - return hit || (cache2[str] = fn(str)); - }; - } - function cacheStringFunction(fn) { - return cache(fn); - } - const PRIMARY_COLOR = "#007aff"; - const SCHEME_RE = /^([a-z-]+:)?\/\//i; - const DATA_RE = /^data:.*,.*/; - const isObject = (val) => val !== null && typeof val === "object"; - class BaseFormatter { - constructor() { - this._caches = Object.create(null); - } - interpolate(message, values) { - if (!values) { - return [message]; - } - let tokens = this._caches[message]; - if (!tokens) { - tokens = parse(message); - this._caches[message] = tokens; - } - return compile(tokens, values); - } - } - const RE_TOKEN_LIST_VALUE = /^(?:\d)+/; - const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; - function parse(format) { - const tokens = []; - let position = 0; - let text = ""; - while (position < format.length) { - let char = format[position++]; - if (char === "{") { - if (text) { - tokens.push({ type: "text", value: text }); - } - text = ""; - let sub = ""; - char = format[position++]; - while (char !== void 0 && char !== "}") { - sub += char; - char = format[position++]; - } - const isClosed = char === "}"; - const type = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown"; - tokens.push({ value: sub, type }); - } else if (char === "%") { - if (format[position] !== "{") { - text += char; - } - } else { - text += char; - } - } - text && tokens.push({ type: "text", value: text }); - return tokens; - } - function compile(tokens, values) { - const compiled = []; - let index = 0; - const mode = Array.isArray(values) ? "list" : isObject(values) ? "named" : "unknown"; - if (mode === "unknown") { - return compiled; - } - while (index < tokens.length) { - const token = tokens[index]; - switch (token.type) { - case "text": - compiled.push(token.value); - break; - case "list": - compiled.push(values[parseInt(token.value, 10)]); - break; - case "named": - if (mode === "named") { - compiled.push(values[token.value]); - } - break; - } - index++; - } - return compiled; - } - const LOCALE_ZH_HANS = "zh-Hans"; - const LOCALE_ZH_HANT = "zh-Hant"; - const LOCALE_EN = "en"; - const LOCALE_FR = "fr"; - const LOCALE_ES = "es"; - const hasOwnProperty = Object.prototype.hasOwnProperty; - const hasOwn = (val, key) => hasOwnProperty.call(val, key); - const defaultFormatter = new BaseFormatter(); - function include(str, parts) { - return !!parts.find((part) => str.indexOf(part) !== -1); - } - function startsWith(str, parts) { - return parts.find((part) => str.indexOf(part) === 0); - } - function normalizeLocale(locale, messages) { - if (!locale) { - return; - } - locale = locale.trim().replace(/_/g, "-"); - if (messages[locale]) { - return locale; - } - locale = locale.toLowerCase(); - if (locale.indexOf("zh") === 0) { - if (locale.indexOf("-hans") !== -1) { - return LOCALE_ZH_HANS; - } - if (locale.indexOf("-hant") !== -1) { - return LOCALE_ZH_HANT; - } - if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) { - return LOCALE_ZH_HANT; - } - return LOCALE_ZH_HANS; - } - const lang = startsWith(locale, [LOCALE_EN, LOCALE_FR, LOCALE_ES]); - if (lang) { - return lang; - } - } - class I18n { - constructor({ locale, fallbackLocale, messages, watcher, formater }) { - this.locale = LOCALE_EN; - this.fallbackLocale = LOCALE_EN; - this.message = {}; - this.messages = {}; - this.watchers = []; - if (fallbackLocale) { - this.fallbackLocale = fallbackLocale; - } - this.formater = formater || defaultFormatter; - this.messages = messages || {}; - this.setLocale(locale); - if (watcher) { - this.watchLocale(watcher); - } - } - setLocale(locale) { - const oldLocale = this.locale; - this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale; - if (!this.messages[this.locale]) { - this.messages[this.locale] = {}; - } - this.message = this.messages[this.locale]; - this.watchers.forEach((watcher) => { - watcher(this.locale, oldLocale); - }); - } - getLocale() { - return this.locale; - } - watchLocale(fn) { - const index = this.watchers.push(fn) - 1; - return () => { - this.watchers.splice(index, 1); - }; - } - add(locale, message) { - if (this.messages[locale]) { - Object.assign(this.messages[locale], message); } else { - this.messages[locale] = message; + parent.insertAdjacentHTML("beforeend", content); } + return [ + before ? before.nextSibling : parent.firstChild, + anchor ? anchor.previousSibling : parent.lastChild + ]; } - t(key, locale, values) { - let message = this.message; - if (typeof locale === "string") { - locale = normalizeLocale(locale, this.messages); - locale && (message = this.messages[locale]); - } else { - values = locale; - } - if (!hasOwn(message, key)) { - console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`); - return key; + }; + function patchClass(el, value, isSVG) { + if (value == null) { + value = ""; + } + if (isSVG) { + el.setAttribute("class", value); + } else { + const transitionClasses = el._vtc; + if (transitionClasses) { + value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" "); } - return this.formater.interpolate(message[key], values).join(""); + el.className = value; } } - function initLocaleWatcher(appVm, i18n2) { - appVm.$i18n && appVm.$i18n.vm.$watch("locale", (newLocale) => { - i18n2.setLocale(newLocale); - }, { - immediate: true - }); - } - function initVueI18n(locale = LOCALE_EN, messages = {}, fallbackLocale = LOCALE_EN) { - if (typeof locale !== "string") { - [locale, messages] = [messages, locale]; - } - if (typeof locale !== "string") { - locale = fallbackLocale; - } - const i18n2 = new I18n({ - locale: locale || fallbackLocale, - fallbackLocale, - messages - }); - let t = (key, values) => { - if (typeof getApp !== "function") { - t = function(key2, values2) { - return i18n2.t(key2, values2); - }; - } else { - const appVm = getApp().$vm; - if (!appVm.$t || !appVm.$i18n) { - t = function(key2, values2) { - return i18n2.t(key2, values2); - }; - } else { - initLocaleWatcher(appVm, i18n2); - t = function(key2, values2) { - const $i18n = appVm.$i18n; - const silentTranslationWarn = $i18n.silentTranslationWarn; - $i18n.silentTranslationWarn = true; - const msg = appVm.$t(key2, values2); - $i18n.silentTranslationWarn = silentTranslationWarn; - if (msg !== key2) { - return msg; - } - return i18n2.t(key2, $i18n.locale, values2); - }; + function patchStyle(el, prev, next) { + const style = el.style; + if (!next) { + el.removeAttribute("style"); + } else if (isString(next)) { + if (prev !== next) { + const current = style.display; + style.cssText = next; + if ("_vod" in el) { + style.display = current; } } - return t(key, values); - }; - return { - i18n: i18n2, - t(key, values) { - return t(key, values); - }, - add(locale2, message) { - return i18n2.add(locale2, message); - }, - getLocale() { - return i18n2.getLocale(); - }, - setLocale(newLocale) { - return i18n2.setLocale(newLocale); + } else { + for (const key in next) { + setStyle(style, key, next[key]); } - }; - } - let i18n; - function useI18n() { - if (!i18n) { - let language; - { - { - language = navigator.language; + if (prev && !isString(prev)) { + for (const key in prev) { + if (next[key] == null) { + setStyle(style, key, ""); + } } } - i18n = initVueI18n(language); } - return i18n; } - const E = function() { - }; - E.prototype = { - on: function(name, callback, ctx) { - var e = this.e || (this.e = {}); - (e[name] || (e[name] = [])).push({ - fn: callback, - ctx - }); - return this; - }, - once: function(name, callback, ctx) { - var self2 = this; - function listener() { - self2.off(name, listener); - callback.apply(ctx, arguments); - } - listener._ = callback; - return this.on(name, listener, ctx); - }, - emit: function(name) { - var data = [].slice.call(arguments, 1); - var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); - var i = 0; - var len = evtArr.length; - for (i; i < len; i++) { - evtArr[i].fn.apply(evtArr[i].ctx, data); - } - return this; - }, - off: function(name, callback) { - var e = this.e || (this.e = {}); - var evts = e[name]; - var liveEvents = []; - if (evts && callback) { - for (var i = 0, len = evts.length; i < len; i++) { - if (evts[i].fn !== callback && evts[i].fn._ !== callback) - liveEvents.push(evts[i]); + const importantRE = /\s*!important$/; + function setStyle(style, name, val) { + if (isArray(val)) { + val.forEach((v) => setStyle(style, name, v)); + } else { + if (name.startsWith("--")) { + style.setProperty(name, val); + } else { + const prefixed = autoPrefix(style, name); + if (importantRE.test(val)) { + style.setProperty(hyphenate(prefixed), val.replace(importantRE, ""), "important"); + } else { + style[prefixed] = val; } } - liveEvents.length ? e[name] = liveEvents : delete e[name]; - return this; } - }; - function initBridge(subscribeNamespace) { - const emitter = new E(); - return { - on(event, callback) { - return emitter.on(event, callback); - }, - once(event, callback) { - return emitter.once(event, callback); - }, - off(event, callback) { - return emitter.off(event, callback); - }, - emit(event, ...args) { - return emitter.emit(event, ...args); - }, - subscribe(event, callback, once = false) { - emitter[once ? "once" : "on"](`${subscribeNamespace}.${event}`, callback); - }, - unsubscribe(event, callback) { - emitter.off(`${subscribeNamespace}.${event}`, callback); - }, - subscribeHandler(event, args, pageId2) { - { - console.log(formatLog(subscribeNamespace, "subscribeHandler", pageId2, event, args)); - } - emitter.emit(`${subscribeNamespace}.${event}`, args, pageId2); - } - }; - } - const ViewJSBridge = /* @__PURE__ */ initBridge("service"); - function PolySymbol(name) { - return Symbol("[uni-app]: " + name); - } - function hasRpx(str) { - return str.indexOf("rpx") !== -1 || str.indexOf("upx") !== -1; } - function rpx2px(str, replace = false) { - if (replace) { - return rpx2pxWithReplace(str); - } - if (typeof str === "string") { - const res = parseInt(str) || 0; - if (hasRpx(str)) { - return uni.upx2px(res); - } - return res; + const prefixes = ["Webkit", "Moz", "ms"]; + const prefixCache = {}; + function autoPrefix(style, rawName) { + const cached = prefixCache[rawName]; + if (cached) { + return cached; } - return str; - } - function rpx2pxWithReplace(str) { - if (!hasRpx(str)) { - return str; + let name = camelize(rawName); + if (name !== "filter" && name in style) { + return prefixCache[rawName] = name; } - return str.replace(/(\d+(\.\d+)?)[ru]px/g, (_a, b) => { - return uni.upx2px(parseFloat(b)) + "px"; - }); - } - const ICON_PATH_CANCEL = "M20.928 10.176l-4.928 4.928-4.928-4.928-0.896 0.896 4.928 4.928-4.928 4.928 0.896 0.896 4.928-4.928 4.928 4.928 0.896-0.896-4.928-4.928 4.928-4.928-0.896-0.896zM16 2.080q-3.776 0-7.040 1.888-3.136 1.856-4.992 4.992-1.888 3.264-1.888 7.040t1.888 7.040q1.856 3.136 4.992 4.992 3.264 1.888 7.040 1.888t7.040-1.888q3.136-1.856 4.992-4.992 1.888-3.264 1.888-7.040t-1.888-7.040q-1.856-3.136-4.992-4.992-3.264-1.888-7.040-1.888zM16 28.64q-3.424 0-6.4-1.728-2.848-1.664-4.512-4.512-1.728-2.976-1.728-6.4t1.728-6.4q1.664-2.848 4.512-4.512 2.976-1.728 6.4-1.728t6.4 1.728q2.848 1.664 4.512 4.512 1.728 2.976 1.728 6.4t-1.728 6.4q-1.664 2.848-4.512 4.512-2.976 1.728-6.4 1.728z"; - const ICON_PATH_CLEAR = "M16 0q-4.352 0-8.064 2.176-3.616 2.144-5.76 5.76-2.176 3.712-2.176 8.064t2.176 8.064q2.144 3.616 5.76 5.76 3.712 2.176 8.064 2.176t8.064-2.176q3.616-2.144 5.76-5.76 2.176-3.712 2.176-8.064t-2.176-8.064q-2.144-3.616-5.76-5.76-3.712-2.176-8.064-2.176zM22.688 21.408q0.32 0.32 0.304 0.752t-0.336 0.736-0.752 0.304-0.752-0.32l-5.184-5.376-5.376 5.184q-0.32 0.32-0.752 0.304t-0.736-0.336-0.304-0.752 0.32-0.752l5.376-5.184-5.184-5.376q-0.32-0.32-0.304-0.752t0.336-0.752 0.752-0.304 0.752 0.336l5.184 5.376 5.376-5.184q0.32-0.32 0.752-0.304t0.752 0.336 0.304 0.752-0.336 0.752l-5.376 5.184 5.184 5.376z"; - const ICON_PATH_DOWNLOAD = "M15.808 1.696q-3.776 0-7.072 1.984-3.2 1.888-5.088 5.152-1.952 3.392-1.952 7.36 0 3.776 1.952 7.072 1.888 3.2 5.088 5.088 3.296 1.952 7.072 1.952 3.968 0 7.36-1.952 3.264-1.888 5.152-5.088 1.984-3.296 1.984-7.072 0-4-1.984-7.36-1.888-3.264-5.152-5.152-3.36-1.984-7.36-1.984zM20.864 18.592l-3.776 4.928q-0.448 0.576-1.088 0.576t-1.088-0.576l-3.776-4.928q-0.448-0.576-0.24-0.992t0.944-0.416h2.976v-8.928q0-0.256 0.176-0.432t0.4-0.176h1.216q0.224 0 0.4 0.176t0.176 0.432v8.928h2.976q0.736 0 0.944 0.416t-0.24 0.992z"; - const ICON_PATH_INFO = "M15.808 0.128q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.176 3.776-2.176 8.16 0 4.224 2.176 7.872 2.080 3.552 5.632 5.632 3.648 2.176 7.872 2.176 4.384 0 8.16-2.176 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.416-2.176-8.16-2.112-3.616-5.728-5.728-3.744-2.176-8.16-2.176zM16.864 23.776q0 0.064-0.064 0.064h-1.568q-0.096 0-0.096-0.064l-0.256-11.328q0-0.064 0.064-0.064h2.112q0.096 0 0.064 0.064l-0.256 11.328zM16 10.88q-0.576 0-0.976-0.4t-0.4-0.96 0.4-0.96 0.976-0.4 0.976 0.4 0.4 0.96-0.4 0.96-0.976 0.4z"; - const ICON_PATH_SEARCH = "M20.928 22.688q-1.696 1.376-3.744 2.112-2.112 0.768-4.384 0.768-3.488 0-6.464-1.728-2.88-1.696-4.576-4.608-1.76-2.976-1.76-6.464t1.76-6.464q1.696-2.88 4.576-4.576 2.976-1.76 6.464-1.76t6.464 1.76q2.912 1.696 4.608 4.576 1.728 2.976 1.728 6.464 0 2.272-0.768 4.384-0.736 2.048-2.112 3.744l9.312 9.28-1.824 1.824-9.28-9.312zM12.8 23.008q2.784 0 5.184-1.376 2.304-1.376 3.68-3.68 1.376-2.4 1.376-5.184t-1.376-5.152q-1.376-2.336-3.68-3.68-2.4-1.408-5.184-1.408t-5.152 1.408q-2.336 1.344-3.68 3.68-1.408 2.368-1.408 5.152t1.408 5.184q1.344 2.304 3.68 3.68 2.368 1.376 5.152 1.376zM12.8 23.008v0z"; - const ICON_PATH_SUCCESS_NO_CIRCLE = "M1.952 18.080q-0.32-0.352-0.416-0.88t0.128-0.976l0.16-0.352q0.224-0.416 0.64-0.528t0.8 0.176l6.496 4.704q0.384 0.288 0.912 0.272t0.88-0.336l17.312-14.272q0.352-0.288 0.848-0.256t0.848 0.352l-0.416-0.416q0.32 0.352 0.32 0.816t-0.32 0.816l-18.656 18.912q-0.32 0.352-0.8 0.352t-0.8-0.32l-7.936-8.064z"; - const ICON_PATH_SUCCESS = "M15.808 0.16q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM24.832 11.328l-11.264 11.104q-0.032 0.032-0.112 0.032t-0.112-0.032l-5.216-5.376q-0.096-0.128 0-0.288l0.704-0.96q0.032-0.064 0.112-0.064t0.112 0.032l4.256 3.264q0.064 0.032 0.144 0.032t0.112-0.032l10.336-8.608q0.064-0.064 0.144-0.064t0.112 0.064l0.672 0.672q0.128 0.128 0 0.224z"; - const ICON_PATH_WAITING = "M15.84 0.096q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM23.008 21.92l-0.512 0.896q-0.096 0.128-0.224 0.064l-8-3.808q-0.096-0.064-0.16-0.128-0.128-0.096-0.128-0.288l0.512-12.096q0-0.064 0.048-0.112t0.112-0.048h1.376q0.064 0 0.112 0.048t0.048 0.112l0.448 10.848 6.304 4.256q0.064 0.064 0.080 0.128t-0.016 0.128z"; - const ICON_PATH_WARN = "M15.808 0.16q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM15.136 8.672h1.728q0.128 0 0.224 0.096t0.096 0.256l-0.384 10.24q0 0.064-0.048 0.112t-0.112 0.048h-1.248q-0.096 0-0.144-0.048t-0.048-0.112l-0.384-10.24q0-0.16 0.096-0.256t0.224-0.096zM16 23.328q-0.48 0-0.832-0.352t-0.352-0.848 0.352-0.848 0.832-0.352 0.832 0.352 0.352 0.848-0.352 0.848-0.832 0.352z"; - function createSvgIconVNode(path, color = "#000", size2 = 27) { - return createVNode("svg", { - width: size2, - height: size2, - viewBox: "0 0 32 32" - }, [ - createVNode("path", { - d: path, - fill: color - }, null, 8, ["d", "fill"]) - ], 8, ["width", "height"]); - } - function useCurrentPageId() { - return getCurrentInstance().root.proxy.$page.id; - } - function getRealRoute(fromRoute, toRoute) { - if (toRoute.indexOf("/") === 0) { - return toRoute; - } - if (toRoute.indexOf("./") === 0) { - return getRealRoute(fromRoute, toRoute.substr(2)); - } - const toRouteArray = toRoute.split("/"); - const toRouteLength = toRouteArray.length; - let i = 0; - for (; i < toRouteLength && toRouteArray[i] === ".."; i++) { - } - toRouteArray.splice(0, i); - toRoute = toRouteArray.join("/"); - const fromRouteArray = fromRoute.length > 0 ? fromRoute.split("/") : []; - fromRouteArray.splice(fromRouteArray.length - i - 1, i + 1); - return "/" + fromRouteArray.concat(toRouteArray).join("/"); - } - function converPx(value) { - if (/^-?\d+[ur]px$/i.test(value)) { - return value.replace(/(^-?\d+)[ur]px$/i, (text, num) => { - return `${uni.upx2px(parseFloat(num))}px`; - }); - } else if (/^-?[\d\.]+$/.test(value)) { - return `${value}px`; + name = capitalize(name); + for (let i = 0; i < prefixes.length; i++) { + const prefixed = prefixes[i] + name; + if (prefixed in style) { + return prefixCache[rawName] = prefixed; + } } - return value || ""; - } - function converType(type) { - return type.replace(/[A-Z]/g, (text) => { - return `-${text.toLowerCase()}`; - }).replace("webkit", "-webkit"); + return rawName; } - function getStyle(action) { - const animateTypes1 = [ - "matrix", - "matrix3d", - "scale", - "scale3d", - "rotate3d", - "skew", - "translate", - "translate3d" - ]; - const animateTypes2 = [ - "scaleX", - "scaleY", - "scaleZ", - "rotate", - "rotateX", - "rotateY", - "rotateZ", - "skewX", - "skewY", - "translateX", - "translateY", - "translateZ" - ]; - const animateTypes3 = ["opacity", "background-color"]; - const animateTypes4 = ["width", "height", "left", "right", "top", "bottom"]; - const animates = action.animates; - const option = action.option; - const transition = option.transition; - const style = {}; - const transform = []; - animates.forEach((animate) => { - let type = animate.type; - let args = [...animate.args]; - if (animateTypes1.concat(animateTypes2).includes(type)) { - if (type.startsWith("rotate") || type.startsWith("skew")) { - args = args.map((value) => parseFloat(value) + "deg"); - } else if (type.startsWith("translate")) { - args = args.map(converPx); - } - if (animateTypes2.indexOf(type) >= 0) { - args.length = 1; - } - transform.push(`${type}(${args.join(",")})`); - } else if (animateTypes3.concat(animateTypes4).includes(args[0])) { - type = args[0]; - const value = args[1]; - style[type] = animateTypes4.includes(type) ? converPx(value) : value; + const xlinkNS = "http://www.w3.org/1999/xlink"; + function patchAttr(el, key, value, isSVG, instance) { + if (isSVG && key.startsWith("xlink:")) { + if (value == null) { + el.removeAttributeNS(xlinkNS, key.slice(6, key.length)); + } else { + el.setAttributeNS(xlinkNS, key, value); } - }); - style.transform = style.webkitTransform = transform.join(" "); - style.transition = style.webkitTransition = Object.keys(style).map((type) => `${converType(type)} ${transition.duration}ms ${transition.timingFunction} ${transition.delay}ms`).join(","); - style.transformOrigin = style.webkitTransformOrigin = option.transformOrigin; - return style; - } - function startAnimation(context) { - const animation2 = context.animation; - if (!animation2 || !animation2.actions || !animation2.actions.length) { - return; - } - let index = 0; - const actions = animation2.actions; - const length = animation2.actions.length; - function animate() { - const action = actions[index]; - const transition = action.option.transition; - const style = getStyle(action); - Object.keys(style).forEach((key) => { - context.$el.style[key] = style[key]; - }); - index += 1; - if (index < length) { - setTimeout(animate, transition.duration + transition.delay); + } else { + const isBoolean = isSpecialBooleanAttr(key); + if (value == null || isBoolean && value === false) { + el.removeAttribute(key); + } else { + el.setAttribute(key, isBoolean ? "" : value); } } - setTimeout(() => { - animate(); - }, 0); } - var animation = { - props: ["animation"], - watch: { - animation: { - deep: true, - handler() { - startAnimation(this); - } + function patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) { + if (key === "innerHTML" || key === "textContent") { + if (prevChildren) { + unmountChildren(prevChildren, parentComponent, parentSuspense); } - }, - mounted() { - startAnimation(this); - } - }; - const defineBuiltInComponent = (options) => { - const { props: props2, mixins } = options; - if (!props2 || !props2.animation) { - (mixins || (options.mixins = [])).push(animation); - } - return defineSystemComponent(options); - }; - const defineSystemComponent = (options) => { - options.compatConfig = { - MODE: 3 - }; - return defineComponent(options); - }; - const hoverProps = { - hoverClass: { - type: String, - default: "none" - }, - hoverStopPropagation: { - type: Boolean, - default: false - }, - hoverStartTime: { - type: [Number, String], - default: 50 - }, - hoverStayTime: { - type: [Number, String], - default: 400 + el[key] = value == null ? "" : value; + return; } - }; - function useHover(props2) { - const hovering = ref(false); - let hoverTouch = false; - let hoverStartTimer; - let hoverStayTimer; - function hoverReset() { - requestAnimationFrame(() => { - clearTimeout(hoverStayTimer); - hoverStayTimer = setTimeout(() => { - hovering.value = false; - }, parseInt(props2.hoverStayTime)); - }); + if (key === "value" && el.tagName !== "PROGRESS") { + el._value = value; + const newValue = value == null ? "" : value; + if (el.value !== newValue) { + el.value = newValue; + } + if (value == null) { + el.removeAttribute(key); + } + return; } - function onTouchstartPassive(evt) { - if (evt._hoverPropagationStopped) { + if (value === "" || value == null) { + const type = typeof el[key]; + if (value === "" && type === "boolean") { + el[key] = true; return; - } - if (!props2.hoverClass || props2.hoverClass === "none" || props2.disabled) { + } else if (value == null && type === "string") { + el[key] = ""; + el.removeAttribute(key); return; - } - if (evt.touches.length > 1) { + } else if (type === "number") { + el[key] = 0; + el.removeAttribute(key); return; } - if (props2.hoverStopPropagation) { - evt._hoverPropagationStopped = true; - } - hoverTouch = true; - hoverStartTimer = setTimeout(() => { - hovering.value = true; - if (!hoverTouch) { - hoverReset(); - } - }, parseInt(props2.hoverStartTime)); } - function onTouchend() { - hoverTouch = false; - if (hovering.value) { - hoverReset(); + try { + el[key] = value; + } catch (e) { + } + } + let _getNow = Date.now; + let skipTimestampCheck = false; + if (typeof window !== "undefined") { + if (_getNow() > document.createEvent("Event").timeStamp) { + _getNow = () => performance.now(); + } + const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i); + skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53); + } + let cachedNow = 0; + const p = Promise.resolve(); + const reset = () => { + cachedNow = 0; + }; + const getNow = () => cachedNow || (p.then(reset), cachedNow = _getNow()); + function addEventListener(el, event, handler, options) { + el.addEventListener(event, handler, options); + } + function removeEventListener(el, event, handler, options) { + el.removeEventListener(event, handler, options); + } + function patchEvent(el, rawName, prevValue, nextValue, instance = null) { + const invokers = el._vei || (el._vei = {}); + const existingInvoker = invokers[rawName]; + if (nextValue && existingInvoker) { + existingInvoker.value = nextValue; + } else { + const [name, options] = parseName(rawName); + if (nextValue) { + const invoker = invokers[rawName] = createInvoker(nextValue, instance); + addEventListener(el, name, invoker, options); + } else if (existingInvoker) { + removeEventListener(el, name, existingInvoker, options); + invokers[rawName] = void 0; } } - function onTouchcancel() { - hoverTouch = false; - hovering.value = false; - clearTimeout(hoverStartTimer); - } - return { - hovering, - binding: { - onTouchstartPassive, - onTouchend, - onTouchcancel - } - }; } - function useBooleanAttr(props2, keys) { - if (isString(keys)) { - keys = [keys]; - } - return keys.reduce((res, key) => { - if (props2[key]) { - res[key] = true; + const optionsModifierRE = /(?:Once|Passive|Capture)$/; + function parseName(name) { + let options; + if (optionsModifierRE.test(name)) { + options = {}; + let m; + while (m = name.match(optionsModifierRE)) { + name = name.slice(0, name.length - m[0].length); + options[m[0].toLowerCase()] = true; } - return res; - }, Object.create(null)); - } - function withWebEvent(fn) { - return fn.__wwe = true, fn; + } + return [hyphenate(name.slice(2)), options]; } - function useCustomEvent(ref2, emit2) { - return (name, evt, detail) => { - if (ref2.value) { - emit2(name, normalizeCustomEvent(name, evt, ref2.value, detail || {})); + function createInvoker(initialValue, instance) { + const invoker = (e) => { + const timeStamp = e.timeStamp || _getNow(); + if (skipTimestampCheck || timeStamp >= invoker.attached - 1) { + callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5, [e]); } }; + invoker.value = initialValue; + invoker.attached = getNow(); + return invoker; } - function normalizeCustomEvent(name, domEvt, el, detail) { - const target = normalizeTarget(el); - return { - type: detail.type || name, - timeStamp: domEvt.timeStamp || 0, - target, - currentTarget: target, - detail - }; - } - const uniFormKey = PolySymbol("uniForm"); - const uniLabelKey = PolySymbol("uniLabel"); - function useListeners(props2, listeners) { - _addListeners(props2.id, listeners); - watch(() => props2.id, (newId, oldId) => { - _removeListeners(oldId, listeners, true); - _addListeners(newId, listeners, true); - }); - onUnmounted(() => { - _removeListeners(props2.id, listeners); - }); - } - function _addListeners(id, listeners, watch2) { - const pageId2 = useCurrentPageId(); - if (watch2 && !id) { - return; - } - if (!isPlainObject(listeners)) { - return; - } - Object.keys(listeners).forEach((name) => { - if (watch2) { - if (name.indexOf("@") !== 0 && name.indexOf("uni-") !== 0) { - UniViewJSBridge.on(`uni-${name}-${pageId2}-${id}`, listeners[name]); - } - } else { - if (name.indexOf("uni-") === 0) { - UniViewJSBridge.on(name, listeners[name]); - } else if (id) { - UniViewJSBridge.on(`uni-${name}-${pageId2}-${id}`, listeners[name]); - } - } - }); - } - function _removeListeners(id, listeners, watch2) { - const pageId2 = useCurrentPageId(); - if (watch2 && !id) { - return; - } - if (!isPlainObject(listeners)) { - return; + function patchStopImmediatePropagation(e, value) { + if (isArray(value)) { + const originalStop = e.stopImmediatePropagation; + e.stopImmediatePropagation = () => { + originalStop.call(e); + e._stopped = true; + }; + return value.map((fn) => (e2) => !e2._stopped && fn(e2)); + } else { + return value; } - Object.keys(listeners).forEach((name) => { - if (watch2) { - if (name.indexOf("@") !== 0 && name.indexOf("uni-") !== 0) { - UniViewJSBridge.off(`uni-${name}-${pageId2}-${id}`, listeners[name]); - } - } else { - if (name.indexOf("uni-") === 0) { - UniViewJSBridge.off(name, listeners[name]); - } else if (id) { - UniViewJSBridge.off(`uni-${name}-${pageId2}-${id}`, listeners[name]); - } - } - }); } - var Button = /* @__PURE__ */ defineBuiltInComponent({ - name: "Button", - props: { - id: { - type: String, - default: "" - }, - hoverClass: { - type: String, - default: "button-hover" - }, - hoverStartTime: { - type: [Number, String], - default: 20 - }, - hoverStayTime: { - type: [Number, String], - default: 70 - }, - hoverStopPropagation: { - type: Boolean, - default: false - }, - disabled: { - type: [Boolean, String], - default: false - }, - formType: { - type: String, - default: "" - }, - openType: { - type: String, - default: "" - }, - loading: { - type: [Boolean, String], - default: false - } - }, - setup(props2, { - slots - }) { - const rootRef = ref(null); - const uniForm = inject(uniFormKey, false); - const { - hovering, - binding - } = useHover(props2); - useI18n(); - const onClick = withWebEvent((e, isLabelClick) => { - if (props2.disabled) { - return e.stopImmediatePropagation(); - } - if (isLabelClick) { - rootRef.value.click(); - } - const formType = props2.formType; - if (formType) { - if (!uniForm) { - return; + const nativeOnRE = /^on[a-z]/; + const forcePatchProp = (_, key) => key === "value"; + const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => { + switch (key) { + case "class": + patchClass(el, nextValue, isSVG); + break; + case "style": + patchStyle(el, prevValue, nextValue); + break; + default: + if (isOn(key)) { + if (!isModelListener(key)) { + patchEvent(el, key, prevValue, nextValue, parentComponent); } - if (formType === "submit") { - uniForm.submit(); - } else if (formType === "reset") { - uniForm.reset(); + } else if (shouldSetAsProp(el, key, nextValue, isSVG)) { + patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren); + } else { + if (key === "true-value") { + el._trueValue = nextValue; + } else if (key === "false-value") { + el._falseValue = nextValue; } - return; + patchAttr(el, key, nextValue, isSVG); } - }); - const uniLabel = inject(uniLabelKey, false); - if (uniLabel) { - uniLabel.addHandler(onClick); - onBeforeUnmount(() => { - uniLabel.removeHandler(onClick); - }); - } - useListeners(props2, { - "label-click": onClick - }); - return () => { - const hoverClass = props2.hoverClass; - const booleanAttrs = useBooleanAttr(props2, "disabled"); - const loadingAttrs = useBooleanAttr(props2, "loading"); - const hasHoverClass = hoverClass && hoverClass !== "none"; - return createVNode("uni-button", mergeProps({ - "ref": rootRef, - "onClick": onClick, - "class": hasHoverClass && hovering.value ? hoverClass : "" - }, hasHoverClass && binding, booleanAttrs, loadingAttrs), { - default: () => [slots.default && slots.default()] - }, 16, ["onClick", "class"]); - }; - } - }); - function getRealPath(filepath) { - if (filepath.indexOf("//") === 0) { - return "https:" + filepath; - } - if (SCHEME_RE.test(filepath) || DATA_RE.test(filepath)) { - return filepath; - } - if (isSystemURL(filepath)) { - return "file://" + normalizeLocalPath(filepath); + break; } - const wwwPath = "file://" + normalizeLocalPath("_www"); - if (filepath.indexOf("/") === 0) { - if (filepath.startsWith("/storage/") || filepath.includes("/Containers/Data/Application/")) { - return "file://" + filepath; + }; + function shouldSetAsProp(el, key, value, isSVG) { + if (isSVG) { + if (key === "innerHTML") { + return true; } - return wwwPath + filepath; - } - if (filepath.indexOf("../") === 0 || filepath.indexOf("./") === 0) { - if (typeof __id__ === "string") { - return wwwPath + getRealRoute("/" + __id__, filepath); - } else { - const pages = getCurrentPages(); - if (pages.length) { - return wwwPath + getRealRoute("/" + pages[pages.length - 1].route, filepath); - } + if (key in el && nativeOnRE.test(key) && isFunction(value)) { + return true; } + return false; } - return filepath; - } - const normalizeLocalPath = cacheStringFunction((filepath) => { - return plus.io.convertLocalFileSystemURL(filepath).replace(/^\/?apps\//, "/android_asset/apps/").replace(/\/$/, ""); - }); - function isSystemURL(filepath) { - if (filepath.indexOf("_www") === 0 || filepath.indexOf("_doc") === 0 || filepath.indexOf("_documents") === 0 || filepath.indexOf("_downloads") === 0) { - return true; - } - return false; - } - var ResizeSensor = /* @__PURE__ */ defineBuiltInComponent({ - name: "ResizeSensor", - props: { - initial: { - type: Boolean, - default: false - } - }, - emits: ["resize"], - setup(props2, { - emit: emit2 - }) { - const rootRef = ref(null); - const reset2 = useResizeSensorReset(rootRef); - const update = useResizeSensorUpdate(rootRef, emit2, reset2); - useResizeSensorLifecycle(rootRef, props2, update, reset2); - return () => createVNode("uni-resize-sensor", { - "ref": rootRef, - "onAnimationstartOnce": update - }, { - default: () => [createVNode("div", { - "onScroll": update - }, [createVNode("div", null, null)], 40, ["onScroll"]), createVNode("div", { - "onScroll": update - }, [createVNode("div", null, null)], 40, ["onScroll"])], - _: 1 - }, 8, ["onAnimationstartOnce"]); + if (key === "spellcheck" || key === "draggable") { + return false; } - }); - function useResizeSensorUpdate(rootRef, emit2, reset2) { - const size2 = reactive({ - width: -1, - height: -1 - }); - watch(() => extend({}, size2), (value) => emit2("resize", value)); - return () => { - const rootEl = rootRef.value; - size2.width = rootEl.offsetWidth; - size2.height = rootEl.offsetHeight; - reset2(); - }; - } - function useResizeSensorReset(rootRef) { - return () => { - const { - firstElementChild, - lastElementChild - } = rootRef.value; - firstElementChild.scrollLeft = 1e5; - firstElementChild.scrollTop = 1e5; - lastElementChild.scrollLeft = 1e5; - lastElementChild.scrollTop = 1e5; - }; - } - function useResizeSensorLifecycle(rootRef, props2, update, reset2) { - onActivated(reset2); - onMounted(() => { - if (props2.initial) { - nextTick(update); - } - const rootEl = rootRef.value; - if (rootEl.offsetParent !== rootEl.parentElement) { - rootEl.parentElement.style.position = "relative"; - } - if (!("AnimationEvent" in window)) { - reset2(); - } - }); - } - const INFO_COLOR = "#10aeff"; - const WARN_COLOR = "#f76260"; - const GREY_COLOR = "#b2b2b2"; - const CANCEL_COLOR = "#f43530"; - const ICONS = { - success: { - d: ICON_PATH_SUCCESS, - c: PRIMARY_COLOR - }, - success_no_circle: { - d: ICON_PATH_SUCCESS_NO_CIRCLE, - c: PRIMARY_COLOR - }, - info: { - d: ICON_PATH_INFO, - c: INFO_COLOR - }, - warn: { - d: ICON_PATH_WARN, - c: WARN_COLOR - }, - waiting: { - d: ICON_PATH_WAITING, - c: INFO_COLOR - }, - cancel: { - d: ICON_PATH_CANCEL, - c: CANCEL_COLOR - }, - download: { - d: ICON_PATH_DOWNLOAD, - c: PRIMARY_COLOR - }, - search: { - d: ICON_PATH_SEARCH, - c: GREY_COLOR - }, - clear: { - d: ICON_PATH_CLEAR, - c: GREY_COLOR + if (key === "form") { + return false; } - }; - var Icon = /* @__PURE__ */ defineBuiltInComponent({ - name: "Icon", - props: { - type: { - type: String, - required: true, - default: "" - }, - size: { - type: [String, Number], - default: 23 - }, - color: { - type: String, - default: "" - } - }, - setup(props2) { - const path = computed$1(() => ICONS[props2.type]); - return () => { - const { - value - } = path; - return createVNode("uni-icon", null, { - default: () => [value && value.d && createSvgIconVNode(value.d, props2.color || value.c, rpx2px(props2.size))] - }); - }; + if (key === "list" && el.tagName === "INPUT") { + return false; } - }); - const props = { - src: { - type: String, - default: "" - }, - mode: { - type: String, - default: "scaleToFill" - }, - lazyLoad: { - type: [Boolean, String], - default: false - }, - draggable: { - type: Boolean, - default: true + if (key === "type" && el.tagName === "TEXTAREA") { + return false; } - }; - const FIX_MODES = { - widthFix: ["offsetWidth", "height"], - heightFix: ["offsetHeight", "width"] - }; - const IMAGE_MODES = { - aspectFit: ["center center", "contain"], - aspectFill: ["center center", "cover"], - widthFix: [, "100% 100%"], - heightFix: [, "100% 100%"], - top: ["center top"], - bottom: ["center bottom"], - center: ["center center"], - left: ["left center"], - right: ["right center"], - "top left": ["left top"], - "top right": ["right top"], - "bottom left": ["left bottom"], - "bottom right": ["right bottom"] - }; - var Image$1 = /* @__PURE__ */ defineBuiltInComponent({ - name: "Image", - props, - setup(props2, { - emit: emit2 - }) { - const rootRef = ref(null); - const state = useImageState(rootRef, props2); - const trigger2 = useCustomEvent(rootRef, emit2); - const { - fixSize - } = useImageSize(rootRef, props2, state); - useImageLoader(state, { - trigger: trigger2, - fixSize - }); - return () => { - const { - mode - } = props2; - const { - imgSrc, - modeStyle - } = state; - return createVNode("uni-image", { - "ref": rootRef - }, { - default: () => [createVNode("div", { - "style": modeStyle - }, null, 4), imgSrc ? createVNode("img", { - "src": imgSrc, - "draggable": props2.draggable - }, null, 8, ["src", "draggable"]) : createVNode("img", null, null), FIX_MODES[mode] ? createVNode(ResizeSensor, { - "onResize": fixSize - }, null, 8, ["onResize"]) : createVNode("span", null, null)], - _: 1 - }, 512); - }; + if (nativeOnRE.test(key) && isString(value)) { + return false; } - }); - function useImageState(rootRef, props2) { - const imgSrc = ref(""); - const modeStyleRef = computed$1(() => { - let size2 = "auto"; - let position = ""; - const opts = IMAGE_MODES[props2.mode]; - if (!opts) { - position = "0% 0%"; - size2 = "100% 100%"; - } else { - opts[0] && (position = opts[0]); - opts[1] && (size2 = opts[1]); - } - const srcVal = imgSrc.value; - return `background-image:${srcVal ? 'url("' + srcVal + '")' : "none"};background-position:${position};background-size:${size2};background-repeat:no-repeat;`; - }); - const state = reactive({ - rootEl: rootRef, - src: computed$1(() => props2.src ? getRealPath(props2.src) : ""), - origWidth: 0, - origHeight: 0, - origStyle: { - width: "", - height: "" - }, - modeStyle: modeStyleRef, - imgSrc - }); - onMounted(() => { - const rootEl = rootRef.value; - const style = rootEl.style; - state.origWidth = Number(style.width) || 0; - state.origHeight = Number(style.height) || 0; + return key in el; + } + extend({ patchProp, forcePatchProp }, nodeOps); + function updateCssVar(cssVars) { + const style = document.documentElement.style; + Object.keys(cssVars).forEach((name) => { + style.setProperty(name, cssVars[name]); }); - return state; } - function useImageLoader(state, { - trigger: trigger2, - fixSize + function disableScrollListener(evt) { + evt.preventDefault(); + } + let testReachBottomTimer; + let lastScrollHeight = 0; + function createScrollListener({ + onPageScroll, + onReachBottom, + onReachBottomDistance }) { - let img; - const setState = (width = 0, height = 0, imgSrc = "") => { - state.origWidth = width; - state.origHeight = height; - state.imgSrc = imgSrc; - }; - const loadImage = (src) => { - if (!src) { - resetImage(); - setState(); - return; - } - if (!img) { - img = new Image(); + let ticking = false; + let hasReachBottom = false; + let reachBottomLocking = true; + const isReachBottom = () => { + const { scrollHeight } = document.documentElement; + const windowHeight = window.innerHeight; + const scrollY = window.scrollY; + const isBottom = scrollY > 0 && scrollHeight > windowHeight && scrollY + windowHeight + onReachBottomDistance >= scrollHeight; + const heightChanged = Math.abs(scrollHeight - lastScrollHeight) > onReachBottomDistance; + if (isBottom && (!hasReachBottom || heightChanged)) { + lastScrollHeight = scrollHeight; + hasReachBottom = true; + return true; } - img.onload = (evt) => { - const { - width, - height - } = img; - setState(width, height, src); - fixSize(); - resetImage(); - trigger2("load", evt, { - width, - height - }); - }; - img.onerror = (evt) => { - setState(); - resetImage(); - trigger2("error", evt, { - errMsg: `GET ${state.src} 404 (Not Found)` - }); - }; - img.src = src; - }; - const resetImage = () => { - if (img) { - img.onload = null; - img.onerror = null; - img = null; + if (!isBottom && hasReachBottom) { + hasReachBottom = false; } + return false; }; - watch(() => state.src, (value) => loadImage(value)); - onMounted(() => loadImage(state.src)); - onBeforeUnmount(() => resetImage()); - } - const isChrome = navigator.vendor === "Google Inc."; - function fixNumber(num) { - if (isChrome && num > 10) { - num = Math.round(num / 2) * 2; - } - return num; - } - function useImageSize(rootRef, props2, state) { - const fixSize = () => { - const { - mode - } = props2; - const names = FIX_MODES[mode]; - if (!names) { - return; - } - const { - origWidth, - origHeight - } = state; - const ratio = origWidth && origHeight ? origWidth / origHeight : 0; - if (!ratio) { - return; - } - const rootEl = rootRef.value; - const value = rootEl[names[0]]; - if (value) { - rootEl.style[names[1]] = fixNumber(value / ratio) + "px"; + const trigger2 = () => { + onPageScroll && onPageScroll(window.pageYOffset); + function testReachBottom() { + if (isReachBottom()) { + onReachBottom && onReachBottom(); + reachBottomLocking = false; + setTimeout(function() { + reachBottomLocking = true; + }, 350); + return true; + } } - }; - const resetSize = () => { - const { - style - } = rootRef.value; - const { - origStyle: { - width, - height + if (onReachBottom && reachBottomLocking) { + if (testReachBottom()) + ; + else { + testReachBottomTimer = setTimeout(testReachBottom, 300); } - } = state; - style.width = width; - style.height = height; - }; - watch(() => props2.mode, (value, oldValue) => { - if (FIX_MODES[oldValue]) { - resetSize(); } - if (FIX_MODES[value]) { - fixSize(); + ticking = false; + }; + return function onScroll() { + clearTimeout(testReachBottomTimer); + if (!ticking) { + requestAnimationFrame(trigger2); } - }); - return { - fixSize, - resetSize + ticking = true; }; } - function _isSlot(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s); - } - const SPACE_UNICODE = { - ensp: "\u2002", - emsp: "\u2003", - nbsp: "\xA0" - }; - function normalizeText(text, { - space, - decode - }) { - if (space && SPACE_UNICODE[space]) { - text = text.replace(/ /g, SPACE_UNICODE[space]); - } - if (!decode) { - return text; - } - return text.replace(/ /g, SPACE_UNICODE.nbsp).replace(/ /g, SPACE_UNICODE.ensp).replace(/ /g, SPACE_UNICODE.emsp).replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'"); - } - var Text = /* @__PURE__ */ defineBuiltInComponent({ - name: "Text", - props: { - selectable: { - type: [Boolean, String], - default: false - }, - space: { - type: String, - default: "" - }, - decode: { - type: [Boolean, String], - default: false - } - }, - setup(props2, { - slots - }) { - return () => { - let _slot; - const children = []; - if (slots.default) { - slots.default().forEach((vnode) => { - if (vnode.shapeFlag & 8) { - const lines = vnode.children.replace(/\\n/g, "\n").split("\n"); - const len = lines.length - 1; - lines.forEach((text, index) => { - if (index === 0 && !text) - ; - else { - children.push(createTextVNode(normalizeText(text, { - space: props2.space, - decode: props2.decode - }))); - } - if (index !== len) { - children.push(createVNode("br")); - } - }); - } else { - if (vnode.shapeFlag & 6 && vnode.type.name !== "Text") { - console.warn("Do not nest other components in the text component, as there may be display differences on different platforms."); - } - children.push(vnode); - } - }); - } - return createVNode("uni-text", { - "selectable": props2.selectable ? true : null - }, _isSlot(_slot = createVNode("span", null, children)) ? _slot : { - default: () => [_slot], - _: 1 - }, 8, ["selectable"]); - }; - } - }); - var View = /* @__PURE__ */ defineBuiltInComponent({ - name: "View", - props: extend({}, hoverProps), - setup(props2, { - slots - }) { - const { - hovering, - binding - } = useHover(props2); - return () => { - const hoverClass = props2.hoverClass; - if (hoverClass && hoverClass !== "none") { - return createVNode("uni-view", mergeProps({ - "class": hovering.value ? hoverClass : "" - }, binding), { - default: () => [slots.default && slots.default()] - }, 16, ["class"]); - } - return createVNode("uni-view", null, { - default: () => [slots.default && slots.default()] - }); - }; - } - }); - const { customElements } = window; - customElements.define("v-uni-button", wrapper(Button, createApp, h)); - customElements.define("v-uni-icon", wrapper(Icon, createApp, h)); - customElements.define("v-uni-image", wrapper(Image$1, createApp, h)); - customElements.define("v-uni-text", wrapper(Text, createApp, h)); - customElements.define("v-uni-view", wrapper(View, createApp, h)); - const ON_WEBVIEW_READY = "onWebviewReady"; const APP_SERVICE_ID = "__uniapp__service"; const UniViewJSBridge$1 = /* @__PURE__ */ extend(ViewJSBridge, { publishHandler @@ -6613,8 +2591,76 @@ } }, APP_SERVICE_ID); } + const ACTION_TYPE_PAGE_CREATE = 1; + const ACTION_TYPE_PAGE_CREATED = 2; + function onPageCreate({ + route, + disableScroll, + onPageScroll, + onPageReachBottom, + onReachBottomDistance, + statusbarHeight, + windowTop, + windowBottom + }) { + const pageId2 = plus.webview.currentWebview().id; + window.__id__ = pageId2; + document.title = `${route}[${pageId2}]`; + initCssVar(statusbarHeight, windowTop, windowBottom); + if (disableScroll) { + document.addEventListener("touchmove", disableScrollListener); + } else if (onPageScroll || onPageReachBottom) { + initPageScroll(onPageScroll, onPageReachBottom, onReachBottomDistance); + } + } + function initCssVar(statusbarHeight, windowTop, windowBottom) { + const cssVars = { + "--window-left": "0px", + "--window-right": "0px", + "--window-top": windowTop + "px", + "--window-bottom": windowBottom + "px", + "--status-bar-height": statusbarHeight + "px" + }; + { + console.log(formatLog("initCssVar", cssVars)); + } + updateCssVar(cssVars); + } + function initPageScroll(onPageScroll, onPageReachBottom, onReachBottomDistance) { + const opts = {}; + if (onPageScroll) { + opts.onPageScroll = (scrollTop) => { + UniViewJSBridge.publishHandler("onPageScroll", { scrollTop }); + }; + } + if (onPageReachBottom) { + opts.onReachBottomDistance = onReachBottomDistance; + opts.onReachBottom = () => UniViewJSBridge.publishHandler("onReachBottom"); + } + requestAnimationFrame(() => document.addEventListener("scroll", createScrollListener(opts))); + } + function onPageCreated() { + } + function onVdSync(actions) { + actions.forEach((action) => { + switch (action[0]) { + case ACTION_TYPE_PAGE_CREATE: + return onPageCreate(action[1]); + case ACTION_TYPE_PAGE_CREATED: + return onPageCreated(); + } + }); + } + function initSubscribeHandlers() { + const { subscribe } = UniViewJSBridge; + subscribe(VD_SYNC, onVdSync); + } + function initView() { + initSubscribeHandlers(); + } window.UniViewJSBridge = UniViewJSBridge$1; function onWebviewReady() { + initView(); UniViewJSBridge$1.publishHandler(ON_WEBVIEW_READY); } if (typeof plus !== "undefined") { diff --git a/packages/uni-app-plus/src/PageAction.ts b/packages/uni-app-plus/src/PageAction.ts new file mode 100644 index 000000000..068f9e10f --- /dev/null +++ b/packages/uni-app-plus/src/PageAction.ts @@ -0,0 +1,74 @@ +export const ACTION_TYPE_PAGE_CREATE = 1 +export const ACTION_TYPE_PAGE_CREATED = 2 +export const ACTION_TYPE_CREATE = 3 +export const ACTION_TYPE_INSERT = 4 +export const ACTION_TYPE_REMOVE = 5 +export const ACTION_TYPE_SET_ATTRIBUTE = 6 +export const ACTION_TYPE_REMOVE_ATTRIBUTE = 7 +export const ACTION_TYPE_SET_TEXT = 8 + +export interface PageNodeOptions { + route: string + version: number + locale: string + disableScroll: boolean + onPageScroll: boolean + onPageReachBottom: boolean + onReachBottomDistance: number + statusbarHeight: number + windowTop: number + windowBottom: number +} + +export interface PageCreateData extends PageNodeOptions {} + +export type PageCreateAction = [typeof ACTION_TYPE_PAGE_CREATE, PageCreateData] +export type PageCreatedAction = [typeof ACTION_TYPE_PAGE_CREATED] + +export type CreateAction = [ + typeof ACTION_TYPE_CREATE, + number, // nodeId + string | number //nodeName +] + +export type InsertAction = [ + typeof ACTION_TYPE_INSERT, + number, // nodeId + number, // parentNodeId + number, // index + Record // Element JSON +] + +export type RemoveAction = [ + typeof ACTION_TYPE_REMOVE, + number, // nodeId + number // parentNodeId +] + +export type SetAttributeAction = [ + typeof ACTION_TYPE_SET_ATTRIBUTE, + number, // nodeId + string, // attribute name + unknown // attribute value +] +export type RemoveAttributeAction = [ + typeof ACTION_TYPE_REMOVE_ATTRIBUTE, + number, // nodeId + string // attribute name +] + +export type SetTextAction = [ + typeof ACTION_TYPE_SET_TEXT, + number, // nodeId + string // text content +] + +export type PageUpdateAction = + | CreateAction + | InsertAction + | RemoveAction + | SetAttributeAction + | RemoveAttributeAction + | SetTextAction + +export type PageAction = PageCreateAction | PageCreatedAction | PageUpdateAction diff --git a/packages/uni-app-plus/src/constants.ts b/packages/uni-app-plus/src/constants.ts index 2ca35938c..d4c524a5a 100644 --- a/packages/uni-app-plus/src/constants.ts +++ b/packages/uni-app-plus/src/constants.ts @@ -1 +1,2 @@ +export const VD_SYNC = 'vdSync' export const ON_WEBVIEW_READY = 'onWebviewReady' diff --git a/packages/uni-app-plus/src/service/framework/dom/Page.ts b/packages/uni-app-plus/src/service/framework/dom/Page.ts index decac5f11..6ffea3b06 100644 --- a/packages/uni-app-plus/src/service/framework/dom/Page.ts +++ b/packages/uni-app-plus/src/service/framework/dom/Page.ts @@ -1,85 +1,26 @@ +import { queuePostFlushCb } from 'vue' import { UniNode, NODE_TYPE_PAGE, UniBaseNode, IUniPageNode, + formatLog, } from '@dcloudio/uni-shared' - -const BRIDGE_NODE_SYNC = 'nodeSync' - -const ACTION_TYPE_PAGE_CREATE = 1 -const ACTION_TYPE_PAGE_CREATED = 2 -export const ACTION_TYPE_CREATE = 3 -export const ACTION_TYPE_INSERT = 4 -export const ACTION_TYPE_REMOVE = 5 -export const ACTION_TYPE_SET_ATTRIBUTE = 6 -export const ACTION_TYPE_REMOVE_ATTRIBUTE = 7 -export const ACTION_TYPE_SET_TEXT = 8 - -export interface PageNodeOptions { - version: number - locale: string - disableScroll: boolean - onPageScroll: boolean - onPageReachBottom: boolean - onReachBottomDistance: number - statusbarHeight: number - windowTop: number - windowBottom: number -} - -interface PageCreateData extends PageNodeOptions {} - -type PageCreateAction = [typeof ACTION_TYPE_PAGE_CREATE, PageCreateData] -type PageCreatedAction = [typeof ACTION_TYPE_PAGE_CREATED] - -export type CreateAction = [ - typeof ACTION_TYPE_CREATE, - number, // nodeId - string | number //nodeName -] - -export type InsertAction = [ - typeof ACTION_TYPE_INSERT, - number, // nodeId - number, // parentNodeId - number, // index - Record // Element JSON -] - -export type RemoveAction = [ - typeof ACTION_TYPE_REMOVE, - number, // nodeId - number // parentNodeId -] - -export type SetAttributeAction = [ - typeof ACTION_TYPE_SET_ATTRIBUTE, - number, // nodeId - string, // attribute name - unknown // attribute value -] -export type RemoveAttributeAction = [ - typeof ACTION_TYPE_REMOVE_ATTRIBUTE, - number, // nodeId - string // attribute name -] - -export type SetTextAction = [ - typeof ACTION_TYPE_SET_TEXT, - number, // nodeId - string // text content -] - -type PageUpdateAction = - | CreateAction - | InsertAction - | RemoveAction - | SetAttributeAction - | RemoveAttributeAction - | SetTextAction - -export type PageAction = PageCreateAction | PageCreatedAction | PageUpdateAction +import { + PageCreateAction, + PageCreatedAction, + PageAction, + PageNodeOptions, + ACTION_TYPE_CREATE, + ACTION_TYPE_INSERT, + ACTION_TYPE_REMOVE, + ACTION_TYPE_SET_ATTRIBUTE, + ACTION_TYPE_REMOVE_ATTRIBUTE, + ACTION_TYPE_SET_TEXT, + ACTION_TYPE_PAGE_CREATE, + ACTION_TYPE_PAGE_CREATED, +} from '../../../PageAction' +import { VD_SYNC } from '../../../constants' export default class UniPageNode extends UniNode implements IUniPageNode { pageId: number @@ -87,6 +28,9 @@ export default class UniPageNode extends UniNode implements IUniPageNode { private createAction: PageCreateAction private createdAction: PageCreatedAction public updateActions: PageAction[] = [] + + private _update: () => void + constructor( pageId: number, options: PageNodeOptions, @@ -100,6 +44,8 @@ export default class UniPageNode extends UniNode implements IUniPageNode { this.createAction = [ACTION_TYPE_PAGE_CREATE, options] this.createdAction = [ACTION_TYPE_PAGE_CREATED] + this._update = this.update.bind(this) + setup && this.setup() } onCreate(thisNode: UniNode, nodeName: string | number) { @@ -139,6 +85,10 @@ export default class UniPageNode extends UniNode implements IUniPageNode { } push(action: PageAction) { this.updateActions.push(action) + if (__DEV__) { + console.log(formatLog('PageNode', 'push', action)) + } + queuePostFlushCb(this._update) } restore() { this.push(this.createAction) @@ -148,20 +98,23 @@ export default class UniPageNode extends UniNode implements IUniPageNode { setup() { this.send([this.createAction]) } - mounted() { - const { updateActions, createdAction } = this - updateActions.unshift(createdAction) - this.update() - } + // mounted() { + // const { updateActions, createdAction } = this + // updateActions.unshift(createdAction) + // this.update() + // } update() { const { updateActions } = this + if (__DEV__) { + console.log(formatLog('PageNode', 'update', updateActions.length)) + } if (updateActions.length) { this.send(updateActions) updateActions.length = 0 } } send(action: PageAction[]) { - UniServiceJSBridge.publishHandler(BRIDGE_NODE_SYNC, action, this.pageId) + UniServiceJSBridge.publishHandler(VD_SYNC, action, this.pageId) } } diff --git a/packages/uni-app-plus/src/service/framework/page/define.ts b/packages/uni-app-plus/src/service/framework/page/define.ts index ac566cea7..e061d72ff 100644 --- a/packages/uni-app-plus/src/service/framework/page/define.ts +++ b/packages/uni-app-plus/src/service/framework/page/define.ts @@ -1,8 +1,9 @@ import { once } from '@dcloudio/uni-shared' import { createApp, defineComponent } from 'vue' -import { createPageNode, PageNodeOptions } from '../dom/Page' +import { createPageNode } from '../dom/Page' import { setupPage } from './setup' import __vuePlugin from '../plugin' +import { PageNodeOptions } from '../../../PageAction' export type VueComponent = ReturnType diff --git a/packages/uni-app-plus/src/service/framework/page/register.ts b/packages/uni-app-plus/src/service/framework/page/register.ts index 186af2950..bea700f92 100644 --- a/packages/uni-app-plus/src/service/framework/page/register.ts +++ b/packages/uni-app-plus/src/service/framework/page/register.ts @@ -1,19 +1,20 @@ +import { ComponentPublicInstance } from 'vue' import { hasOwn } from '@vue/shared' import { formatLog, NAVBAR_HEIGHT, ON_REACH_BOTTOM_DISTANCE, } from '@dcloudio/uni-shared' +import { initPageInternalInstance } from '@dcloudio/uni-core' + import { initEntry } from '../app/initEntry' import { initRouteOptions } from './routeOptions' import { createWebview, initWebview } from '../webview' import { createPage } from './define' -import { PageNodeOptions } from '../dom/Page' +import { PageNodeOptions } from '../../../PageAction' import { getStatusbarHeight } from '../../../helpers/statusBar' import tabBar from '../app/tabBar' import { addCurrentPage } from './getCurrentPages' -import { initPageInternalInstance } from '@dcloudio/uni-core' -import { ComponentPublicInstance } from 'vue' export type OpenType = | 'navigateTo' @@ -92,6 +93,7 @@ export function registerPage({ function initPageOptions({ meta }: UniApp.UniRoute): PageNodeOptions { const statusbarHeight = getStatusbarHeight() return { + route: meta.route, version: 1, locale: '', disableScroll: meta.disableScroll === true, diff --git a/packages/uni-app-plus/src/service/framework/runtime.ts b/packages/uni-app-plus/src/service/framework/runtime.ts deleted file mode 100644 index 089ec2159..000000000 --- a/packages/uni-app-plus/src/service/framework/runtime.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ComponentInternalInstance } from 'vue' -import { extend } from '@vue/shared' -interface JsRuntime { - injectHook: ( - type: string, - hook: Function, - target: ComponentInternalInstance | null, - prepend: boolean - ) => Function | undefined - createApp: typeof createApp -} - -export function defineRuntime(runtime: JsRuntime) { - // @ts-expect-error - extend(jsRuntime, runtime) -} diff --git a/packages/uni-app-plus/src/view/components/index.ts b/packages/uni-app-plus/src/view/components/index.ts index f42168675..5bef70215 100644 --- a/packages/uni-app-plus/src/view/components/index.ts +++ b/packages/uni-app-plus/src/view/components/index.ts @@ -1,41 +1 @@ -import { createApp, h } from 'vue' -import wrapper from 'vue3-webcomponent-wrapper' -import '@dcloudio/uni-components/style/button.css' -import { - // Audio, - Button, - // Canvas, - // Checkbox, - // CheckboxGroup, - // Editor, - // Form, - Icon, - Image, - // Input, - // Label, - // MovableArea, - // MovableView, - // Navigator, - // PickerView, - // PickerViewColumn, - // Progress, - // Radio, - // RadioGroup, - // ResizeSensor, - // RichText, - // ScrollView, - // Slider, - // Swiper, - // SwiperItem, - // Switch, - Text, - // Textarea, - View, -} from '@dcloudio/uni-components' - -const { customElements } = window -customElements.define('v-uni-button', wrapper(Button, createApp, h)) -customElements.define('v-uni-icon', wrapper(Icon, createApp, h)) -customElements.define('v-uni-image', wrapper(Image, createApp, h)) -customElements.define('v-uni-text', wrapper(Text, createApp, h)) -customElements.define('v-uni-view', wrapper(View, createApp, h)) +export * from './view' diff --git a/packages/uni-app-plus/src/view/components/view.ts b/packages/uni-app-plus/src/view/components/view.ts new file mode 100644 index 000000000..2a2d7a6a3 --- /dev/null +++ b/packages/uni-app-plus/src/view/components/view.ts @@ -0,0 +1,4 @@ +import '@dcloudio/uni-components/style/view.css' +export function View() { + return document.createElement('uni-view') +} diff --git a/packages/uni-app-plus/src/view/framework/index.ts b/packages/uni-app-plus/src/view/framework/index.ts new file mode 100644 index 000000000..f51d1289e --- /dev/null +++ b/packages/uni-app-plus/src/view/framework/index.ts @@ -0,0 +1,5 @@ +import { initSubscribeHandlers } from './subscriber' + +export function initView() { + initSubscribeHandlers() +} diff --git a/packages/uni-app-plus/src/view/framework/subscriber/index.ts b/packages/uni-app-plus/src/view/framework/subscriber/index.ts new file mode 100644 index 000000000..ddf9d3bde --- /dev/null +++ b/packages/uni-app-plus/src/view/framework/subscriber/index.ts @@ -0,0 +1,7 @@ +import { VD_SYNC } from '../../../constants' +import { onVdSync } from './vdom' + +export function initSubscribeHandlers() { + const { subscribe } = UniViewJSBridge + subscribe(VD_SYNC, onVdSync) +} diff --git a/packages/uni-app-plus/src/view/framework/subscriber/vdom/index.ts b/packages/uni-app-plus/src/view/framework/subscriber/vdom/index.ts new file mode 100644 index 000000000..08e7c1c80 --- /dev/null +++ b/packages/uni-app-plus/src/view/framework/subscriber/vdom/index.ts @@ -0,0 +1,18 @@ +import { + ACTION_TYPE_PAGE_CREATE, + ACTION_TYPE_PAGE_CREATED, + PageAction, +} from '../../../../PageAction' +import { onPageCreate } from './onPageCreate' +import { onPageCreated } from './onPageCreated' + +export function onVdSync(actions: PageAction[]) { + actions.forEach((action) => { + switch (action[0]) { + case ACTION_TYPE_PAGE_CREATE: + return onPageCreate(action[1]) + case ACTION_TYPE_PAGE_CREATED: + return onPageCreated() + } + }) +} diff --git a/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreate.ts b/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreate.ts new file mode 100644 index 000000000..49aed4d81 --- /dev/null +++ b/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreate.ts @@ -0,0 +1,70 @@ +import { + createScrollListener, + CreateScrollListenerOptions, + disableScrollListener, + updateCssVar, +} from '@dcloudio/uni-core' +import { formatLog } from '@dcloudio/uni-shared' +import { PageCreateData } from '../../../../PageAction' + +export function onPageCreate({ + route, + disableScroll, + onPageScroll, + onPageReachBottom, + onReachBottomDistance, + statusbarHeight, + windowTop, + windowBottom, +}: PageCreateData) { + const pageId = plus.webview.currentWebview().id! + ;(window as any).__id__ = pageId + document.title = `${route}[${pageId}]` + + initCssVar(statusbarHeight, windowTop, windowBottom) + + if (disableScroll) { + document.addEventListener('touchmove', disableScrollListener) + } else if (onPageScroll || onPageReachBottom) { + initPageScroll(onPageScroll, onPageReachBottom, onReachBottomDistance) + } +} + +function initCssVar( + statusbarHeight: number, + windowTop: number, + windowBottom: number +) { + const cssVars = { + '--window-left': '0px', + '--window-right': '0px', + '--window-top': windowTop + 'px', + '--window-bottom': windowBottom + 'px', + '--status-bar-height': statusbarHeight + 'px', + } + if (__DEV__) { + console.log(formatLog('initCssVar', cssVars)) + } + updateCssVar(cssVars) +} + +function initPageScroll( + onPageScroll: boolean, + onPageReachBottom: boolean, + onReachBottomDistance: number +) { + const opts: CreateScrollListenerOptions = {} + if (onPageScroll) { + opts.onPageScroll = (scrollTop) => { + UniViewJSBridge.publishHandler('onPageScroll', { scrollTop }) + } + } + if (onPageReachBottom) { + opts.onReachBottomDistance = onReachBottomDistance + opts.onReachBottom = () => UniViewJSBridge.publishHandler('onReachBottom') + } + // 避免监听太早,直接触发了 scroll + requestAnimationFrame(() => + document.addEventListener('scroll', createScrollListener(opts)) + ) +} diff --git a/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreated.ts b/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreated.ts new file mode 100644 index 000000000..efabbb227 --- /dev/null +++ b/packages/uni-app-plus/src/view/framework/subscriber/vdom/onPageCreated.ts @@ -0,0 +1 @@ +export function onPageCreated() {} diff --git a/packages/uni-app-plus/src/view/ready.ts b/packages/uni-app-plus/src/view/ready.ts index 063b1207b..9de9fc395 100644 --- a/packages/uni-app-plus/src/view/ready.ts +++ b/packages/uni-app-plus/src/view/ready.ts @@ -1,8 +1,10 @@ import { ON_WEBVIEW_READY } from '../constants' import { UniViewJSBridge } from './bridge' +import { initView } from './framework' ;(window as any).UniViewJSBridge = UniViewJSBridge function onWebviewReady() { + initView() UniViewJSBridge.publishHandler(ON_WEBVIEW_READY) } if (typeof plus !== 'undefined') { diff --git a/packages/uni-app-vue/build.json b/packages/uni-app-vue/build.json index 245935d47..1dcb126dd 100644 --- a/packages/uni-app-vue/build.json +++ b/packages/uni-app-vue/build.json @@ -11,7 +11,8 @@ "__VUE_OPTIONS_API__": "true", "__VUE_PROD_DEVTOOLS__": "false" }, - "external": false + "external": false, + "babel": true }, { "input": { diff --git a/packages/uni-app-vue/dist/service.runtime.esm.js b/packages/uni-app-vue/dist/service.runtime.esm.js index be3f4495c..6c882cdf0 100644 --- a/packages/uni-app-vue/dist/service.runtime.esm.js +++ b/packages/uni-app-vue/dist/service.runtime.esm.js @@ -1,11267 +1,12255 @@ -export default function vueFactory (exports) { - -/** - * Make a map and return a function for checking if a key - * is in that map. - * IMPORTANT: all calls of this function must be prefixed with - * \/\*#\_\_PURE\_\_\*\/ - * So that rollup can tree-shake them if necessary. - */ -(process.env.NODE_ENV !== 'production') - ? Object.freeze({}) - : {}; -(process.env.NODE_ENV !== 'production') ? Object.freeze([]) : []; -const extend$1 = Object.assign; -const cacheStringFunction$1 = (fn) => { - const cache = Object.create(null); - return ((str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }); -}; -const camelizeRE$1 = /-(\w)/g; -/** - * @private - */ -const camelize$1 = cacheStringFunction$1((str) => { - return str.replace(camelizeRE$1, (_, c) => (c ? c.toUpperCase() : '')); -}); -/** - * @private - */ -const capitalize$1 = cacheStringFunction$1((str) => str.charAt(0).toUpperCase() + str.slice(1)); - -class DOMException extends Error { - constructor(message) { - super(message); - this.name = 'DOMException'; - } -} +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } -function normalizeEventType(type) { - return `on${capitalize$1(camelize$1(type))}`; -} -class UniEventTarget { - constructor() { - this._listeners = {}; - } - dispatchEvent(evt) { - const listeners = this._listeners[evt.type]; - if (!listeners) { - return false; - } - const len = listeners.length; - for (let i = 0; i < len; i++) { - listeners[i].call(this, evt); - if (evt._end) { - break; - } - } - return evt.cancelable && evt.defaultPrevented; - } - addEventListener(type, listener, options) { - const isOnce = options && options.once; - if (isOnce) { - const wrapper = function (evt) { - listener.apply(this, [evt]); - this.removeEventListener(type, wrapper, options); - }; - return this.addEventListener(type, wrapper, extend$1(options, { once: false })); - } - (this._listeners[type] || (this._listeners[type] = [])).push(listener); - } - removeEventListener(type, callback, options) { - const listeners = this._listeners[type.toLowerCase()]; - if (!listeners) { - return; - } - const index = listeners.indexOf(callback); - if (index > -1) { - listeners.splice(index, 1); - } - } -} +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -class UniCSSStyleDeclaration { - constructor() { - this._cssText = null; - this._value = null; - } - setProperty(property, value) { - if (value === null || value === '') { - this.removeProperty(property); - } - else { - if (!this._value) { - this._value = {}; - } - this._value[property] = value; - } - } - getPropertyValue(property) { - if (!this._value) { - return ''; - } - return this._value[property] || ''; - } - removeProperty(property) { - if (!this._value) { - return ''; - } - const value = this._value[property]; - delete this._value[property]; - return value; - } - get cssText() { - return this._cssText || ''; - } - set cssText(cssText) { - this._cssText = cssText; - } - toJSON() { - const { _cssText, _value } = this; - const hasCssText = _cssText !== null; - const hasValue = _value !== null; - if (hasCssText && hasValue) { - return [_cssText, _value]; - } - if (hasCssText) { - return _cssText; - } - if (hasValue) { - return _value; - } - } -} -const STYLE_PROPS = [ - '_value', - '_cssText', - 'cssText', - 'getPropertyValue', - 'setProperty', - 'removeProperty', - 'toJSON', -]; -function proxyStyle(uniCssStyle) { - return new Proxy(uniCssStyle, { - get(target, key, receiver) { - if (STYLE_PROPS.indexOf(key) === -1) { - return target.getPropertyValue(key); - } - return Reflect.get(target, key, receiver); - }, - set(target, key, value, receiver) { - if (STYLE_PROPS.indexOf(key) === -1) { - target.setProperty(key, value); - return true; - } - return Reflect.set(target, key, value, receiver); - }, - }); -} +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } -const ATTR_MAP = { - class: '.c', - style: '.s', - onClick: '.e0', - onChange: '.e1', - onInput: '.e2', - onLoad: '.e3', - onError: '.e4', - onTouchstart: '.e5', - onTouchmove: '.e6', - onTouchcancel: '.e7', - onTouchend: '.e8', - onLongpress: '.e9', - onTransitionend: '.ea', - onAnimationstart: '.eb', - onAnimationiteration: '.ec', - onAnimationend: '.ed', - onTouchforcechange: '.ee', -}; -function encodeAttr(name) { - return ATTR_MAP[name] || name; -} -const COMPONENT_MAP = { - VIEW: 1, - IMAGE: 2, - TEXT: 3, - '#text': 4, - '#comment': 5, - NAVIGATOR: 6, - FORM: 7, - BUTTON: 8, - INPUT: 9, - LABEL: 10, - RADIO: 11, - CHECKBOX: 12, - 'CHECKBOX-GROUP': 13, - AD: 14, - AUDIO: 15, - CAMERA: 16, - CANVAS: 17, - 'COVER-IMAGE': 18, - 'COVER-VIEW': 19, - EDITOR: 20, - 'FUNCTIONAL-PAGE-NAVIGATOR': 21, - ICON: 22, - 'RADIO-GROUP': 23, - 'LIVE-PLAYER': 24, - 'LIVE-PUSHER': 25, - MAP: 26, - 'MOVABLE-AREA': 27, - 'MOVABLE-VIEW': 28, - 'OFFICIAL-ACCOUNT': 29, - 'OPEN-DATA': 30, - PICKER: 31, - 'PICKER-VIEW': 32, - 'PICKER-VIEW-COLUMN': 33, - PROGRESS: 34, - 'RICH-TEXT': 35, - 'SCROLL-VIEW': 36, - SLIDER: 37, - SWIPER: 38, - 'SWIPER-ITEM': 39, - SWITCH: 40, - TEXTAREA: 41, - VIDEO: 42, - 'WEB-VIEW': 43, -}; -function encodeTag(tag) { - return COMPONENT_MAP[tag] || tag; -} -const NODE_TYPE_ELEMENT = 1; -const NODE_TYPE_TEXT = 3; -const NODE_TYPE_COMMENT = 8; -function sibling(node, type) { - const { parentNode } = node; - if (!parentNode) { - return null; - } - const { childNodes } = parentNode; - return childNodes[childNodes.indexOf(node) + (type === 'n' ? 1 : -1)] || null; -} -function removeNode(node) { - const { 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) { - const { pageNode } = container; - if (pageNode) { - this.pageNode = pageNode; - this.nodeId = pageNode.genId(); - pageNode.onCreate(this, encodeTag(nodeName)); - } - } - this.nodeType = nodeType; - this.nodeName = nodeName; - this.childNodes = []; - } - get firstChild() { - return this.childNodes[0] || null; - } - get lastChild() { - const { childNodes } = this; - const 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.onTextContent(this, text); - } - } - get parentElement() { - const { 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) { - const cloned = extend$1(Object.create(Object.getPrototypeOf(this)), this); - const { 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); - const { childNodes } = this; - let index; - if (refChild) { - 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 { - index = childNodes.length; - childNodes.push(newChild); - } - return this.pageNode - ? this.pageNode.onInsertBefore(this, newChild, index) - : newChild; - } - removeChild(oldChild) { - const { childNodes } = this; - const 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.onRemoveChild(this, oldChild) - : oldChild; - } -} -class UniBaseNode extends UniNode { - constructor(nodeType, nodeName, container) { - super(nodeType, nodeName, container); - this.attributes = Object.create(null); - this._html = null; - this.style = proxyStyle(new UniCSSStyleDeclaration()); - } - get className() { - return (this.attributes['class'] || ''); - } - set className(val) { - this.setAttribute('class', val); - } - get innerHTML() { - return ''; - } - set innerHTML(html) { - this._html = html; - } - addEventListener(type, listener, options) { - super.addEventListener(type, listener, options); - const normalized = normalizeEventType(type); - if (!this.attributes[normalized]) { - this.setAttribute(normalized, 1); - } - } - removeEventListener(type, callback, options) { - super.removeEventListener(type, callback, options); - const normalized = normalizeEventType(type); - if (this.attributes[encodeAttr(normalized)]) { - this.removeAttribute(normalized); - } - } - getAttribute(qualifiedName) { - return this.attributes[encodeAttr(qualifiedName)]; - } - removeAttribute(qualifiedName) { - qualifiedName = encodeAttr(qualifiedName); - delete this.attributes[qualifiedName]; - if (this.pageNode) { - this.pageNode.onRemoveAttribute(this, qualifiedName); - } - } - setAttribute(qualifiedName, value) { - qualifiedName = encodeAttr(qualifiedName); - this.attributes[qualifiedName] = value; - if (this.pageNode) { - this.pageNode.onSetAttribute(this, qualifiedName, value); - } - } - toJSON(opts = {}) { - const res = { - a: this.attributes, - s: this.style.toJSON(), - }; - if (!opts.attr) { - res.i = this.nodeId; - res.n = encodeTag(this.nodeName); - } - if (this._text !== null) { - res.t = this._text; - } - return res; - } -} +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } -class UniCommentNode extends UniNode { - constructor(text, container) { - super(NODE_TYPE_COMMENT, '#comment', container); - this._text = text; - } - toJSON(opts = {}) { - return opts.attr - ? { t: this._text } - : { - i: this.nodeId, - t: this._text, - }; - } -} +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } -class UniElement extends UniBaseNode { - constructor(nodeName, container) { - super(NODE_TYPE_ELEMENT, nodeName.toUpperCase(), container); - this.tagName = this.nodeName; - } -} - -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.onNodeValue(this, text); - } - } -} +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -/** - * 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) { - const map = Object.create(null); - const list = str.split(','); - for (let i = 0; i < list.length; i++) { - map[list[i]] = true; - } - return expectsLowerCase - ? (val) => !!map[val.toLowerCase()] - : (val) => !!map[val] -} +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -const 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'; -const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED); - -function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = normalizeStyle( - isString(item) ? parseStringStyle(item) : item - ); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } + +function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } + +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } + +function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +export default function vueFactory(exports) { + /** + * Make a map and return a function for checking if a key + * is in that map. + * IMPORTANT: all calls of this function must be prefixed with + * \/\*#\_\_PURE\_\_\*\/ + * So that rollup can tree-shake them if necessary. + */ + process.env.NODE_ENV !== 'production' ? Object.freeze({}) : {}; + process.env.NODE_ENV !== 'production' ? Object.freeze([]) : []; + var extend$1 = Object.assign; + + var cacheStringFunction$1 = function cacheStringFunction$1(fn) { + var cache = Object.create(null); + return function (str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; + }; + + var camelizeRE$1 = /-(\w)/g; + /** + * @private + */ + + var camelize$1 = cacheStringFunction$1(function (str) { + return str.replace(camelizeRE$1, function (_, c) { + return c ? c.toUpperCase() : ''; + }); + }); + /** + * @private + */ + + var capitalize$1 = cacheStringFunction$1(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); + }); + + var DOMException = /*#__PURE__*/function (_Error) { + _inherits(DOMException, _Error); + + var _super = _createSuper(DOMException); + + function DOMException(message) { + var _this; + + _classCallCheck(this, DOMException); + + _this = _super.call(this, message); + _this.name = 'DOMException'; + return _this; } - return res - } else if (isObject(value)) { - return value + + return DOMException; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + + function normalizeEventType(type) { + return "on".concat(capitalize$1(camelize$1(type))); } -} -const listDelimiterRE = /;(?![^(]*\))/g; -const propertyDelimiterRE = /:(.+)/; -function parseStringStyle(cssText) { - const ret = {}; - cssText.split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + + var UniEventTarget = /*#__PURE__*/function () { + function UniEventTarget() { + _classCallCheck(this, UniEventTarget); + + this._listeners = {}; } - }); - return ret -} -function normalizeClass(value) { - let res = ''; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + ' '; + + _createClass(UniEventTarget, [{ + key: "dispatchEvent", + value: function dispatchEvent(evt) { + var listeners = this._listeners[evt.type]; + + if (!listeners) { + return false; + } + + var len = listeners.length; + + for (var i = 0; i < len; i++) { + listeners[i].call(this, evt); + + if (evt._end) { + break; + } + } + + return evt.cancelable && evt.defaultPrevented; } - } - } else if (isObject(value)) { - for (const name in value) { - if (value[name]) { - res += name + ' '; + }, { + key: "addEventListener", + value: function addEventListener(type, listener, options) { + var isOnce = options && options.once; + + if (isOnce) { + var wrapper = function wrapper(evt) { + listener.apply(this, [evt]); + this.removeEventListener(type, wrapper, options); + }; + + return this.addEventListener(type, wrapper, extend$1(options, { + once: false + })); + } + + (this._listeners[type] || (this._listeners[type] = [])).push(listener); + } + }, { + key: "removeEventListener", + value: function removeEventListener(type, callback, options) { + var listeners = this._listeners[type.toLowerCase()]; + + if (!listeners) { + return; + } + + var index = listeners.indexOf(callback); + + if (index > -1) { + listeners.splice(index, 1); + } } + }]); + + return UniEventTarget; + }(); + + var UniCSSStyleDeclaration = /*#__PURE__*/function () { + function UniCSSStyleDeclaration() { + _classCallCheck(this, UniCSSStyleDeclaration); + + this._cssText = null; + this._value = null; } + + _createClass(UniCSSStyleDeclaration, [{ + key: "setProperty", + value: function setProperty(property, value) { + if (value === null || value === '') { + this.removeProperty(property); + } else { + if (!this._value) { + this._value = {}; + } + + this._value[property] = value; + } + } + }, { + key: "getPropertyValue", + value: function getPropertyValue(property) { + if (!this._value) { + return ''; + } + + return this._value[property] || ''; + } + }, { + key: "removeProperty", + value: function removeProperty(property) { + if (!this._value) { + return ''; + } + + var value = this._value[property]; + delete this._value[property]; + return value; + } + }, { + key: "cssText", + get: function get() { + return this._cssText || ''; + }, + set: function set(cssText) { + this._cssText = cssText; + } + }, { + key: "toJSON", + value: function toJSON() { + var _cssText = this._cssText, + _value = this._value; + var hasCssText = _cssText !== null; + var hasValue = _value !== null; + + if (hasCssText && hasValue) { + return [_cssText, _value]; + } + + if (hasCssText) { + return _cssText; + } + + if (hasValue) { + return _value; + } + } + }]); + + return UniCSSStyleDeclaration; + }(); + + var STYLE_PROPS = ['_value', '_cssText', 'cssText', 'getPropertyValue', 'setProperty', 'removeProperty', 'toJSON']; + + function proxyStyle(uniCssStyle) { + return new Proxy(uniCssStyle, { + get(target, key, receiver) { + if (STYLE_PROPS.indexOf(key) === -1) { + return target.getPropertyValue(key); + } + + return Reflect.get(target, key, receiver); + }, + + set(target, key, value, receiver) { + if (STYLE_PROPS.indexOf(key) === -1) { + target.setProperty(key, value); + return true; + } + + return Reflect.set(target, key, value, receiver); + } + + }); } - return res.trim() -} -// These tag configs are shared between compiler-dom and runtime-dom, so they -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element -const HTML_TAGS = - 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' + - 'header,h1,h2,h3,h4,h5,h6,hgroup,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,rtc,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 -const 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'; -const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS); -const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS); - -/** - * For converting {{ interpolation }} values to displayed strings. - * @private - */ -const toDisplayString = (val) => { - return val == null - ? '' - : isObject(val) - ? JSON.stringify(val, replacer, 2) - : String(val) -}; -const replacer = (_key, val) => { - if (isMap(val)) { - return { - [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => { - entries[`${key} =>`] = val; - return entries - }, {}), - } - } else if (isSet(val)) { - return { - [`Set(${val.size})`]: [...val.values()], - } - } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { - return String(val) - } - return val -}; - -const EMPTY_OBJ = process.env.NODE_ENV !== 'production' ? Object.freeze({}) : {}; -const EMPTY_ARR = process.env.NODE_ENV !== 'production' ? Object.freeze([]) : []; -const NOOP = () => {}; -/** - * Always return false. - */ -const NO = () => false; -const onRE = /^on[^a-z]/; -const isOn = (key) => onRE.test(key); -const isModelListener = (key) => key.startsWith('onUpdate:'); -const extend = Object.assign; -const remove = (arr, el) => { - const i = arr.indexOf(el); - if (i > -1) { - arr.splice(i, 1); - } -}; -const hasOwnProperty = Object.prototype.hasOwnProperty; -const hasOwn = (val, key) => hasOwnProperty.call(val, key); -const isArray = Array.isArray; -const isMap = (val) => toTypeString(val) === '[object Map]'; -const isSet = (val) => toTypeString(val) === '[object Set]'; -const isFunction = (val) => typeof val === 'function'; -const isString = (val) => typeof val === 'string'; -const isSymbol = (val) => typeof val === 'symbol'; -const isObject = (val) => val !== null && typeof val === 'object'; -const isPromise = (val) => { - return isObject(val) && isFunction(val.then) && isFunction(val.catch) -}; -const objectToString = Object.prototype.toString; -const toTypeString = (value) => objectToString.call(value); -const toRawType = (value) => { - // extract "RawType" from strings like "[object RawType]" - return toTypeString(value).slice(8, -1) -}; -const isPlainObject = (val) => toTypeString(val) === '[object Object]'; -const isIntegerKey = (key) => - isString(key) && - key !== 'NaN' && - key[0] !== '-' && - '' + parseInt(key, 10) === key; -const isReservedProp = /*#__PURE__*/ makeMap( - // the leading comma is intentional so empty string "" is also included - ',key,ref,' + - 'onVnodeBeforeMount,onVnodeMounted,' + - 'onVnodeBeforeUpdate,onVnodeUpdated,' + - 'onVnodeBeforeUnmount,onVnodeUnmounted' -); -const cacheStringFunction = (fn) => { - const cache = Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)) - } -}; -const camelizeRE = /-(\w)/g; -/** - * @private - */ -const camelize = cacheStringFunction((str) => { - return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : '')) -}); -const hyphenateRE = /\B([A-Z])/g; -/** - * @private - */ -const hyphenate = cacheStringFunction((str) => - str.replace(hyphenateRE, '-$1').toLowerCase() -); -/** - * @private - */ -const capitalize = cacheStringFunction( - (str) => str.charAt(0).toUpperCase() + str.slice(1) -); -/** - * @private - */ -const toHandlerKey = cacheStringFunction((str) => - str ? `on${capitalize(str)}` : `` -); -// compare whether a value has changed, accounting for NaN. -const hasChanged = (value, oldValue) => - value !== oldValue && (value === value || oldValue === oldValue); -const invokeArrayFns = (fns, arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](arg); - } -}; -const def = (obj, key, value) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - value, - }); -}; -const toNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n -}; -let _globalThis; -const getGlobalThis = () => { - return ( - _globalThis || - (_globalThis = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof window !== 'undefined' - ? window - : {}) - ) -}; - -const targetMap = new WeakMap(); -const effectStack = []; -let activeEffect; -const ITERATE_KEY = Symbol( - process.env.NODE_ENV !== 'production' ? 'iterate' : '' -); -const MAP_KEY_ITERATE_KEY = Symbol( - process.env.NODE_ENV !== 'production' ? 'Map key iterate' : '' -); -function isEffect(fn) { - return fn && fn._isEffect === true -} -function effect(fn, options = EMPTY_OBJ) { - if (isEffect(fn)) { - fn = fn.raw; + var ATTR_MAP = { + class: '.c', + style: '.s', + onClick: '.e0', + onChange: '.e1', + onInput: '.e2', + onLoad: '.e3', + onError: '.e4', + onTouchstart: '.e5', + onTouchmove: '.e6', + onTouchcancel: '.e7', + onTouchend: '.e8', + onLongpress: '.e9', + onTransitionend: '.ea', + onAnimationstart: '.eb', + onAnimationiteration: '.ec', + onAnimationend: '.ed', + onTouchforcechange: '.ee' + }; + + function encodeAttr(name) { + return ATTR_MAP[name] || name; } - const effect = createReactiveEffect(fn, options); - if (!options.lazy) { - effect(); + + var COMPONENT_MAP = { + VIEW: 1, + IMAGE: 2, + TEXT: 3, + '#text': 4, + '#comment': 5, + NAVIGATOR: 6, + FORM: 7, + BUTTON: 8, + INPUT: 9, + LABEL: 10, + RADIO: 11, + CHECKBOX: 12, + 'CHECKBOX-GROUP': 13, + AD: 14, + AUDIO: 15, + CAMERA: 16, + CANVAS: 17, + 'COVER-IMAGE': 18, + 'COVER-VIEW': 19, + EDITOR: 20, + 'FUNCTIONAL-PAGE-NAVIGATOR': 21, + ICON: 22, + 'RADIO-GROUP': 23, + 'LIVE-PLAYER': 24, + 'LIVE-PUSHER': 25, + MAP: 26, + 'MOVABLE-AREA': 27, + 'MOVABLE-VIEW': 28, + 'OFFICIAL-ACCOUNT': 29, + 'OPEN-DATA': 30, + PICKER: 31, + 'PICKER-VIEW': 32, + 'PICKER-VIEW-COLUMN': 33, + PROGRESS: 34, + 'RICH-TEXT': 35, + 'SCROLL-VIEW': 36, + SLIDER: 37, + SWIPER: 38, + 'SWIPER-ITEM': 39, + SWITCH: 40, + TEXTAREA: 41, + VIDEO: 42, + 'WEB-VIEW': 43 + }; + + function encodeTag(tag) { + return COMPONENT_MAP[tag] || tag; } - return effect -} -function stop(effect) { - if (effect.active) { - cleanup(effect); - if (effect.options.onStop) { - effect.options.onStop(); + + var NODE_TYPE_ELEMENT = 1; + var NODE_TYPE_TEXT = 3; + var NODE_TYPE_COMMENT = 8; + + function sibling(node, type) { + var parentNode = node.parentNode; + + if (!parentNode) { + return null; } - effect.active = false; + + var childNodes = parentNode.childNodes; + return childNodes[childNodes.indexOf(node) + (type === 'n' ? 1 : -1)] || null; } -} -let uid = 0; -function createReactiveEffect(fn, options) { - const effect = function reactiveEffect() { - if (!effect.active) { - return fn() - } - if (!effectStack.includes(effect)) { - cleanup(effect); - try { - enableTracking(); - effectStack.push(effect); - activeEffect = effect; - return fn() - } finally { - effectStack.pop(); - resetTracking(); - activeEffect = effectStack[effectStack.length - 1]; - } - } - }; - effect.id = uid++; - effect.allowRecurse = !!options.allowRecurse; - effect._isEffect = true; - effect.active = true; - effect.raw = fn; - effect.deps = []; - effect.options = options; - return effect -} -function cleanup(effect) { - const { deps } = effect; - if (deps.length) { - for (let i = 0; i < deps.length; i++) { - deps[i].delete(effect); + + function removeNode(node) { + var parentNode = node.parentNode; + + if (parentNode) { + parentNode.removeChild(node); } - deps.length = 0; } -} -let shouldTrack = true; -const trackStack = []; -function pauseTracking() { - trackStack.push(shouldTrack); - shouldTrack = false; -} -function enableTracking() { - trackStack.push(shouldTrack); - shouldTrack = true; -} -function resetTracking() { - const last = trackStack.pop(); - shouldTrack = last === undefined ? true : last; -} -function track(target, type, key) { - if (!shouldTrack || activeEffect === undefined) { - return - } - let depsMap = targetMap.get(target); - if (!depsMap) { - targetMap.set(target, (depsMap = new Map())); - } - let dep = depsMap.get(key); - if (!dep) { - depsMap.set(key, (dep = new Set())); - } - if (!dep.has(activeEffect)) { - dep.add(activeEffect); - activeEffect.deps.push(dep); - if (process.env.NODE_ENV !== 'production' && activeEffect.options.onTrack) { - activeEffect.options.onTrack({ - effect: activeEffect, - target, - type, - key, - }); + + function checkNodeId(node) { + if (!node.nodeId && node.pageNode) { + node.nodeId = node.pageNode.genId(); } - } -} -function trigger(target, type, key, newValue, oldValue, oldTarget) { - const depsMap = targetMap.get(target); - if (!depsMap) { - // never been tracked - return - } - const effects = new Set(); - const add = (effectsToAdd) => { - if (effectsToAdd) { - effectsToAdd.forEach((effect) => { - if (effect !== activeEffect || effect.allowRecurse) { - effects.add(effect); + } // 为优化性能,各平台不使用proxy来实现node的操作拦截,而是直接通过pageNode定制 + + + var UniNode = /*#__PURE__*/function (_UniEventTarget) { + _inherits(UniNode, _UniEventTarget); + + var _super2 = _createSuper(UniNode); + + function UniNode(nodeType, nodeName, container) { + var _this2; + + _classCallCheck(this, UniNode); + + _this2 = _super2.call(this); + _this2.pageNode = null; + _this2.parentNode = null; + _this2._text = null; + + if (container) { + var pageNode = container.pageNode; + + if (pageNode) { + _this2.pageNode = pageNode; + _this2.nodeId = pageNode.genId(); + pageNode.onCreate(_assertThisInitialized(_this2), encodeTag(nodeName)); } - }); + } + + _this2.nodeType = nodeType; + _this2.nodeName = nodeName; + _this2.childNodes = []; + return _this2; } - }; - if (type === 'clear' /* CLEAR */) { - // collection being cleared - // trigger all effects for target - depsMap.forEach(add); - } else if (key === 'length' && isArray(target)) { - depsMap.forEach((dep, key) => { - if (key === 'length' || key >= newValue) { - add(dep); + + _createClass(UniNode, [{ + key: "firstChild", + get: function get() { + return this.childNodes[0] || null; + } + }, { + key: "lastChild", + get: function get() { + var childNodes = this.childNodes; + var length = childNodes.length; + return length ? childNodes[length - 1] : null; + } + }, { + key: "nextSibling", + get: function get() { + return sibling(this, 'n'); + } + }, { + key: "nodeValue", + get: function get() { + return null; + }, + set: function set(_val) {} + }, { + key: "textContent", + get: function get() { + return this._text || ''; + }, + set: function set(text) { + this._text = text; + + if (this.pageNode) { + this.pageNode.onTextContent(this, text); + } } - }); - } else { - // schedule runs for SET | ADD | DELETE - if (key !== void 0) { - add(depsMap.get(key)); - } - // also run for iteration key on ADD | DELETE | Map.SET - switch (type) { - case 'add' /* ADD */: - if (!isArray(target)) { - add(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - add(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } else if (isIntegerKey(key)) { - // new index added to array -> length changes - add(depsMap.get('length')); + }, { + key: "parentElement", + get: function get() { + var parentNode = this.parentNode; + + if (parentNode && parentNode.nodeType === NODE_TYPE_ELEMENT) { + return parentNode; } - break - case 'delete' /* DELETE */: - if (!isArray(target)) { - add(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - add(depsMap.get(MAP_KEY_ITERATE_KEY)); + + return null; + } + }, { + key: "previousSibling", + get: function get() { + return sibling(this, 'p'); + } + }, { + key: "appendChild", + value: function appendChild(newChild) { + return this.insertBefore(newChild, null); + } + }, { + key: "cloneNode", + value: function cloneNode(deep) { + var cloned = extend$1(Object.create(Object.getPrototypeOf(this)), this); + var attributes = cloned.attributes; + + if (attributes) { + cloned.attributes = extend$1({}, attributes); + } + + if (deep) { + cloned.childNodes = cloned.childNodes.map(function (childNode) { + return childNode.cloneNode(true); + }); + } + + return cloned; + } + }, { + key: "insertBefore", + value: function insertBefore(newChild, refChild) { + removeNode(newChild); + newChild.pageNode = this.pageNode; + newChild.parentNode = this; + checkNodeId(newChild); + var childNodes = this.childNodes; + var index; + + if (refChild) { + 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 { + index = childNodes.length; + childNodes.push(newChild); } - break - case 'set' /* SET */: - if (isMap(target)) { - add(depsMap.get(ITERATE_KEY)); + + return this.pageNode ? this.pageNode.onInsertBefore(this, newChild, index) : newChild; + } + }, { + key: "removeChild", + value: function removeChild(oldChild) { + var childNodes = this.childNodes; + 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."); } - break - } - } - const run = (effect) => { - if (process.env.NODE_ENV !== 'production' && effect.options.onTrigger) { - effect.options.onTrigger({ - effect, - target, - key, - type, - newValue, - oldValue, - oldTarget, - }); - } - if (effect.options.scheduler) { - effect.options.scheduler(effect); - } else { - effect(); - } - }; - effects.forEach(run); -} -const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`); -const builtInSymbols = new Set( - Object.getOwnPropertyNames(Symbol) - .map((key) => Symbol[key]) - .filter(isSymbol) -); -const get = /*#__PURE__*/ createGetter(); -const shallowGet = /*#__PURE__*/ createGetter(false, true); -const readonlyGet = /*#__PURE__*/ createGetter(true); -const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true); -const arrayInstrumentations = {} -;['includes', 'indexOf', 'lastIndexOf'].forEach((key) => { - const method = Array.prototype[key]; - arrayInstrumentations[key] = function (...args) { - const arr = toRaw(this); - for (let 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) - const res = method.apply(arr, args); - if (res === -1 || res === false) { - // if that didn't work, run it again using raw values. - return method.apply(arr, args.map(toRaw)) - } else { - return res - } - }; -}) -;['push', 'pop', 'shift', 'unshift', 'splice'].forEach((key) => { - const method = Array.prototype[key]; - arrayInstrumentations[key] = function (...args) { - pauseTracking(); - const res = method.apply(this, args); - resetTracking(); - return res - }; -}); -function createGetter(isReadonly = false, shallow = 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 - } - const targetIsArray = isArray(target); - if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) { - return Reflect.get(arrayInstrumentations, key, receiver) - } - const 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. - const 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) + oldChild.parentNode = null; + childNodes.splice(index, 1); + return this.pageNode ? this.pageNode.onRemoveChild(this, oldChild) : oldChild; + } + }]); + + return UniNode; + }(UniEventTarget); + + var UniBaseNode = /*#__PURE__*/function (_UniNode) { + _inherits(UniBaseNode, _UniNode); + + var _super3 = _createSuper(UniBaseNode); + + function UniBaseNode(nodeType, nodeName, container) { + var _this3; + + _classCallCheck(this, UniBaseNode); + + _this3 = _super3.call(this, nodeType, nodeName, container); + _this3.attributes = Object.create(null); + _this3._html = null; + _this3.style = proxyStyle(new UniCSSStyleDeclaration()); + return _this3; } - return res - } -} -const set = /*#__PURE__*/ createSetter(); -const shallowSet = /*#__PURE__*/ createSetter(true); -function createSetter(shallow = false) { - return function set(target, key, value, receiver) { - let oldValue = target[key]; - if (!shallow) { - value = toRaw(value); - oldValue = toRaw(oldValue); - if (!isArray(target) && isRef(oldValue) && !isRef(value)) { - oldValue.value = value; - return true + + _createClass(UniBaseNode, [{ + key: "className", + get: function get() { + return this.attributes['class'] || ''; + }, + set: function set(val) { + this.setAttribute('class', val); + } + }, { + key: "innerHTML", + get: function get() { + return ''; + }, + set: function set(html) { + this._html = html; + } + }, { + key: "addEventListener", + value: function addEventListener(type, listener, options) { + _get(_getPrototypeOf(UniBaseNode.prototype), "addEventListener", this).call(this, type, listener, options); + + var normalized = normalizeEventType(type); + + if (!this.attributes[normalized]) { + this.setAttribute(normalized, 1); + } + } + }, { + key: "removeEventListener", + value: function removeEventListener(type, callback, options) { + _get(_getPrototypeOf(UniBaseNode.prototype), "removeEventListener", this).call(this, type, callback, options); + + var normalized = normalizeEventType(type); + + if (this.attributes[encodeAttr(normalized)]) { + this.removeAttribute(normalized); + } } + }, { + key: "getAttribute", + value: function getAttribute(qualifiedName) { + return this.attributes[encodeAttr(qualifiedName)]; + } + }, { + key: "removeAttribute", + value: function removeAttribute(qualifiedName) { + qualifiedName = encodeAttr(qualifiedName); + delete this.attributes[qualifiedName]; + + if (this.pageNode) { + this.pageNode.onRemoveAttribute(this, qualifiedName); + } + } + }, { + key: "setAttribute", + value: function setAttribute(qualifiedName, value) { + qualifiedName = encodeAttr(qualifiedName); + this.attributes[qualifiedName] = value; + + if (this.pageNode) { + this.pageNode.onSetAttribute(this, qualifiedName, value); + } + } + }, { + key: "toJSON", + value: function toJSON() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var res = { + a: this.attributes, + s: this.style.toJSON() + }; + + if (!opts.attr) { + res.i = this.nodeId; + res.n = encodeTag(this.nodeName); + } + + if (this._text !== null) { + res.t = this._text; + } + + return res; + } + }]); + + return UniBaseNode; + }(UniNode); + + var UniCommentNode = /*#__PURE__*/function (_UniNode2) { + _inherits(UniCommentNode, _UniNode2); + + var _super4 = _createSuper(UniCommentNode); + + function UniCommentNode(text, container) { + var _this4; + + _classCallCheck(this, UniCommentNode); + + _this4 = _super4.call(this, NODE_TYPE_COMMENT, '#comment', container); + _this4._text = text; + return _this4; } - const hadKey = - isArray(target) && isIntegerKey(key) - ? Number(key) < target.length - : hasOwn(target, key); - const 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); + + _createClass(UniCommentNode, [{ + key: "toJSON", + value: function toJSON() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return opts.attr ? { + t: this._text + } : { + i: this.nodeId, + t: this._text + }; } + }]); + + return UniCommentNode; + }(UniNode); + + var UniElement = /*#__PURE__*/function (_UniBaseNode) { + _inherits(UniElement, _UniBaseNode); + + var _super5 = _createSuper(UniElement); + + function UniElement(nodeName, container) { + var _this5; + + _classCallCheck(this, UniElement); + + _this5 = _super5.call(this, NODE_TYPE_ELEMENT, nodeName.toUpperCase(), container); + _this5.tagName = _this5.nodeName; + return _this5; } - return result - } -} -function deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - const oldValue = target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, 'delete' /* DELETE */, key, undefined, oldValue); - } - return result -} -function has(target, key) { - const 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) -} -const mutableHandlers = { - get, - set, - deleteProperty, - has, - ownKeys, -}; -const readonlyHandlers = { - get: readonlyGet, - set(target, key) { - if (process.env.NODE_ENV !== 'production') { - console.warn( - `Set operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true - }, - deleteProperty(target, key) { - if (process.env.NODE_ENV !== 'production') { - console.warn( - `Delete operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true - }, -}; -const shallowReactiveHandlers = 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. -const shallowReadonlyHandlers = extend({}, readonlyHandlers, { - get: shallowReadonlyGet, -}); - -const toReactive = (value) => (isObject(value) ? reactive(value) : value); -const toReadonly = (value) => (isObject(value) ? readonly(value) : value); -const toShallow = (value) => value; -const getProto = (v) => Reflect.getPrototypeOf(v); -function get$1(target, key, isReadonly = false, isShallow = false) { - // #1772: readonly(reactive(Map)) should return readonly + reactive version - // of the value - target = target['__v_raw' /* RAW */]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (key !== rawKey) { - !isReadonly && track(rawTarget, 'get' /* GET */, key); - } - !isReadonly && track(rawTarget, 'get' /* GET */, rawKey); - const { has } = getProto(rawTarget); - const 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, isReadonly = false) { - const target = this['__v_raw' /* RAW */]; - const rawTarget = toRaw(target); - const 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, isReadonly = 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); - const target = toRaw(this); - const proto = getProto(target); - const 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); - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (process.env.NODE_ENV !== 'production') { - checkIdentityKeys(target, has, key); - } - const 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) { - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else if (process.env.NODE_ENV !== 'production') { - checkIdentityKeys(target, has, key); - } - const oldValue = get ? get.call(target, key) : undefined; - // forward the operation before queueing reactions - const result = target.delete(key); - if (hadKey) { - trigger(target, 'delete' /* DELETE */, key, undefined, oldValue); - } - return result -} -function clear() { - const target = toRaw(this); - const hadItems = target.size !== 0; - const oldTarget = - process.env.NODE_ENV !== 'production' - ? isMap(target) - ? new Map(target) - : new Set(target) - : undefined; - // forward the operation before queueing reactions - const result = target.clear(); - if (hadItems) { - trigger(target, 'clear' /* CLEAR */, undefined, undefined, oldTarget); - } - return result -} -function createForEach(isReadonly, isShallow) { - return function forEach(callback, thisArg) { - const observed = this; - const target = observed['__v_raw' /* RAW */]; - const rawTarget = toRaw(target); - const 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 (...args) { - const target = this['__v_raw' /* RAW */]; - const rawTarget = toRaw(target); - const targetIsMap = isMap(rawTarget); - const isPair = - method === 'entries' || (method === Symbol.iterator && targetIsMap); - const isKeyOnly = method === 'keys' && targetIsMap; - const innerIterator = target[method](...args); - const 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() { - const { 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 (...args) { - if (process.env.NODE_ENV !== 'production') { - const key = args[0] ? `on key "${args[0]}" ` : ``; - console.warn( - `${capitalize(type)} operation ${key}failed: target is readonly.`, - toRaw(this) - ); - } - return type === 'delete' /* DELETE */ ? false : this - } -} -const 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), -}; -const 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), -}; -const 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), -}; -const 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), -}; -const 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 - ); -}); -function createInstrumentationGetter(isReadonly, shallow) { - const 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 - ) - } -} -const mutableCollectionHandlers = { - get: createInstrumentationGetter(false, false), -}; -const shallowCollectionHandlers = { - get: createInstrumentationGetter(false, true), -}; -const readonlyCollectionHandlers = { - get: createInstrumentationGetter(true, false), -}; -const shallowReadonlyCollectionHandlers = { - get: createInstrumentationGetter(true, true), -}; -function checkIdentityKeys(target, has, key) { - const rawKey = toRaw(key); - if (rawKey !== key && has.call(target, rawKey)) { - const type = toRawType(target); - console.warn( - `Reactive ${type} contains both the raw and reactive ` + - `versions of the same object${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.` - ); - } -} -const reactiveMap = new WeakMap(); -const shallowReactiveMap = new WeakMap(); -const readonlyMap = new WeakMap(); -const 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)) { - if (process.env.NODE_ENV !== 'production') { - console.warn(`value cannot be made reactive: ${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 - const existingProxy = proxyMap.get(target); - if (existingProxy) { - return existingProxy - } - // only a whitelist of value types can be observed. - const targetType = getTargetType(target); - if (targetType === 0 /* INVALID */) { - return target - } - const 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) { - return (observed && toRaw(observed['__v_raw' /* RAW */])) || observed -} -function markRaw(value) { - def(value, '__v_skip' /* SKIP */, true); - return value -} + return UniElement; + }(UniBaseNode); -const convert = (val) => (isObject(val) ? reactive(val) : val); -function isRef(r) { - return Boolean(r && r.__v_isRef === true) -} -function ref(value) { - return createRef(value) -} -function shallowRef(value) { - return createRef(value, true) -} -class RefImpl { - constructor(_rawValue, _shallow) { - this._rawValue = _rawValue; - this._shallow = _shallow; - this.__v_isRef = true; - this._value = _shallow ? _rawValue : convert(_rawValue); - } - get value() { - track(toRaw(this), 'get' /* GET */, 'value'); - return this._value - } - set value(newVal) { - if (hasChanged(toRaw(newVal), this._rawValue)) { - this._rawValue = newVal; - this._value = this._shallow ? newVal : convert(newVal); - trigger(toRaw(this), 'set' /* SET */, 'value', newVal); + var UniTextNode = /*#__PURE__*/function (_UniBaseNode2) { + _inherits(UniTextNode, _UniBaseNode2); + + var _super6 = _createSuper(UniTextNode); + + function UniTextNode(text, container) { + var _this6; + + _classCallCheck(this, UniTextNode); + + _this6 = _super6.call(this, NODE_TYPE_TEXT, '#text', container); + _this6._text = text; + return _this6; } - } -} -function createRef(rawValue, shallow = false) { - if (isRef(rawValue)) { - return rawValue - } - return new RefImpl(rawValue, shallow) -} -function triggerRef(ref) { - trigger( - toRaw(ref), - 'set' /* SET */, - 'value', - process.env.NODE_ENV !== 'production' ? ref.value : void 0 - ); -} -function unref(ref) { - return isRef(ref) ? ref.value : ref -} -const shallowUnwrapHandlers = { - get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const 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.__v_isRef = true; - const { get, set } = factory( - () => track(this, 'get' /* GET */, 'value'), - () => trigger(this, 'set' /* SET */, 'value') - ); - 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 (process.env.NODE_ENV !== 'production' && !isProxy(object)) { - console.warn(`toRefs() expects a reactive object but received a plain one.`); - } - const ret = isArray(object) ? new Array(object.length) : {}; - for (const key in object) { - ret[key] = toRef(object, key); - } - return ret -} -class ObjectRefImpl { - constructor(_object, _key) { - this._object = _object; - this._key = _key; - this.__v_isRef = true; - } - get value() { - return this._object[this._key] - } - set value(newVal) { - this._object[this._key] = newVal; - } -} -function toRef(object, key) { - return isRef(object[key]) ? object[key] : new ObjectRefImpl(object, key) -} -class ComputedRefImpl { - constructor(getter, _setter, isReadonly) { - this._setter = _setter; - this._dirty = true; - this.__v_isRef = true; - this.effect = effect(getter, { - lazy: true, - scheduler: () => { - if (!this._dirty) { - this._dirty = true; - trigger(toRaw(this), 'set' /* SET */, 'value'); - } + _createClass(UniTextNode, [{ + key: "nodeValue", + get: function get() { + return this._text || ''; }, - }); - this['__v_isReadonly' /* IS_READONLY */] = isReadonly; - } - get value() { - // the computed ref may get wrapped by other proxies e.g. readonly() #3376 - const self = toRaw(this); - if (self._dirty) { - self._value = this.effect(); - self._dirty = false; - } - track(self, 'get' /* GET */, 'value'); - return self._value - } - set value(newValue) { - this._setter(newValue); - } -} -function computed(getterOrOptions) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - setter = - process.env.NODE_ENV !== 'production' - ? () => { - console.warn('Write operation failed: computed value is readonly'); - } - : NOOP; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - return new ComputedRefImpl( - getter, - setter, - isFunction(getterOrOptions) || !getterOrOptions.set - ) -} + set: function set(text) { + this._text = text; -const stack = []; -function pushWarningContext(vnode) { - stack.push(vnode); -} -function popWarningContext() { - stack.pop(); -} -function warn(msg, ...args) { - // avoid props formatting or warn handler tracking deps that might be mutated - // during patch, leading to infinite recursion. - pauseTracking(); - const instance = stack.length ? stack[stack.length - 1].component : null; - const appWarnHandler = instance && instance.appContext.config.warnHandler; - const trace = getComponentTrace(); - if (appWarnHandler) { - callWithErrorHandling(appWarnHandler, instance, 11 /* APP_WARN_HANDLER */, [ - msg + args.join(''), - instance && instance.proxy, - trace - .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`) - .join('\n'), - trace, - ]); - } else { - const warnArgs = [`[Vue warn]: ${msg}`, ...args]; - /* istanbul ignore if */ - if ( - trace.length && - // avoid spamming console during tests - !false - ) { - warnArgs.push(`\n`, ...formatTrace(trace)); - } - console.warn(...warnArgs); - } - resetTracking(); -} -function getComponentTrace() { - let currentVNode = stack[stack.length - 1]; - if (!currentVNode) { - return [] - } - // we can't just use the stack because it will be incomplete during updates - // that did not start from the root. Re-construct the parent chain using - // instance parent pointers. - const normalizedStack = []; - while (currentVNode) { - const last = normalizedStack[0]; - if (last && last.vnode === currentVNode) { - last.recurseCount++; - } else { - normalizedStack.push({ - vnode: currentVNode, - recurseCount: 0, - }); - } - const parentInstance = - currentVNode.component && currentVNode.component.parent; - currentVNode = parentInstance && parentInstance.vnode; - } - return normalizedStack -} -/* istanbul ignore next */ -function formatTrace(trace) { - const logs = []; - trace.forEach((entry, i) => { - logs.push(...(i === 0 ? [] : [`\n`]), ...formatTraceEntry(entry)); - }); - return logs -} -function formatTraceEntry({ vnode, recurseCount }) { - const postfix = - recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; - const isRoot = vnode.component ? vnode.component.parent == null : false; - const open = ` at <${formatComponentName( - vnode.component, - vnode.type, - isRoot - )}`; - const close = `>` + postfix; - return vnode.props - ? [open, ...formatProps(vnode.props), close] - : [open + close] -} -/* istanbul ignore next */ -function formatProps(props) { - const res = []; - const keys = Object.keys(props); - keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props[key])); - }); - if (keys.length > 3) { - res.push(` ...`); - } - return res -} -/* istanbul ignore next */ -function formatProp(key, value, raw) { - if (isString(value)) { - value = JSON.stringify(value); - return raw ? value : [`${key}=${value}`] - } else if ( - typeof value === 'number' || - typeof value === 'boolean' || - value == null - ) { - return raw ? value : [`${key}=${value}`] - } else if (isRef(value)) { - value = formatProp(key, toRaw(value.value), true); - return raw ? value : [`${key}=Ref<`, value, `>`] - } else if (isFunction(value)) { - return [`${key}=fn${value.name ? `<${value.name}>` : ``}`] - } else { - value = toRaw(value); - return raw ? value : [`${key}=`, value] - } -} + if (this.pageNode) { + this.pageNode.onNodeValue(this, text); + } + } + }]); -const ErrorTypeStrings = { - ['bc' /* BEFORE_CREATE */]: 'beforeCreate hook', - ['c' /* CREATED */]: 'created hook', - ['bm' /* BEFORE_MOUNT */]: 'beforeMount hook', - ['m' /* MOUNTED */]: 'mounted hook', - ['bu' /* BEFORE_UPDATE */]: 'beforeUpdate hook', - ['u' /* UPDATED */]: 'updated', - ['bum' /* BEFORE_UNMOUNT */]: 'beforeUnmount hook', - ['um' /* UNMOUNTED */]: 'unmounted hook', - ['a' /* ACTIVATED */]: 'activated hook', - ['da' /* DEACTIVATED */]: 'deactivated hook', - ['ec' /* ERROR_CAPTURED */]: 'errorCaptured hook', - ['rtc' /* RENDER_TRACKED */]: 'renderTracked hook', - ['rtg' /* RENDER_TRIGGERED */]: 'renderTriggered hook', - [0 /* SETUP_FUNCTION */]: 'setup function', - [1 /* RENDER_FUNCTION */]: 'render function', - [2 /* WATCH_GETTER */]: 'watcher getter', - [3 /* WATCH_CALLBACK */]: 'watcher callback', - [4 /* WATCH_CLEANUP */]: 'watcher cleanup function', - [5 /* NATIVE_EVENT_HANDLER */]: 'native event handler', - [6 /* COMPONENT_EVENT_HANDLER */]: 'component event handler', - [7 /* VNODE_HOOK */]: 'vnode hook', - [8 /* DIRECTIVE_HOOK */]: 'directive hook', - [9 /* TRANSITION_HOOK */]: 'transition hook', - [10 /* APP_ERROR_HANDLER */]: 'app errorHandler', - [11 /* APP_WARN_HANDLER */]: 'app warnHandler', - [12 /* FUNCTION_REF */]: 'ref function', - [13 /* ASYNC_COMPONENT_LOADER */]: 'async component loader', - [14 /* SCHEDULER */]: - 'scheduler flush. This is likely a Vue internals bug. ' + - 'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/vue-next', -}; -function callWithErrorHandling(fn, instance, type, args) { - let res; - try { - res = args ? fn(...args) : fn(); - } catch (err) { - handleError(err, instance, type); - } - return res -} -function callWithAsyncErrorHandling(fn, instance, type, args) { - if (isFunction(fn)) { - const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise(res)) { - res.catch((err) => { - handleError(err, instance, type); - }); + return UniTextNode; + }(UniBaseNode); + /** + * 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 res - } - const values = []; - for (let i = 0; i < fn.length; i++) { - values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + + return expectsLowerCase ? function (val) { + return !!map[val.toLowerCase()]; + } : function (val) { + return !!map[val]; + }; } - return values -} -function handleError(err, instance, type, throwInDev = true) { - const contextVNode = instance ? instance.vnode : null; - if (instance) { - let cur = instance.parent; - // the exposed instance is the render proxy to keep it consistent with 2.x - const exposedInstance = instance.proxy; - // in production the hook receives only the error code - const errorInfo = - process.env.NODE_ENV !== 'production' ? ErrorTypeStrings[type] : type; - while (cur) { - const errorCapturedHooks = cur.ec; - if (errorCapturedHooks) { - for (let i = 0; i < errorCapturedHooks.length; i++) { - if ( - errorCapturedHooks[i](err, exposedInstance, errorInfo) === false - ) { - return + + 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 = normalizeStyle(isString(item) ? parseStringStyle(item) : item); + + if (normalized) { + for (var key in normalized) { + res[key] = normalized[key]; } } } - cur = cur.parent; - } - // app-level handling - const appErrorHandler = instance.appContext.config.errorHandler; - if (appErrorHandler) { - callWithErrorHandling(appErrorHandler, null, 10 /* APP_ERROR_HANDLER */, [ - err, - exposedInstance, - errorInfo, - ]); - return - } - } - logError(err, type, contextVNode, throwInDev); -} -function logError(err, type, contextVNode, throwInDev = true) { - if (process.env.NODE_ENV !== 'production') { - const info = ErrorTypeStrings[type]; - if (contextVNode) { - pushWarningContext(contextVNode); - } - warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`); - if (contextVNode) { - popWarningContext(); - } - // crash in dev by default so it's more noticeable - if (throwInDev) { - throw err - } else { - console.error(err); - } - } else { - // recover in prod to reduce the impact on end-user - console.error(err); - } -} -let isFlushing = false; -let isFlushPending = false; -const queue = []; -let flushIndex = 0; -const pendingPreFlushCbs = []; -let activePreFlushCbs = null; -let preFlushIndex = 0; -const pendingPostFlushCbs = []; -let activePostFlushCbs = null; -let postFlushIndex = 0; -const resolvedPromise = Promise.resolve(); -let currentFlushPromise = null; -let currentPreFlushParentJob = null; -const RECURSION_LIMIT = 100; -function nextTick(fn) { - const p = currentFlushPromise || resolvedPromise; - return fn ? p.then(this ? fn.bind(this) : fn) : p -} -// #2768 -// Use binary-search to find a suitable position in the queue, -// so that the queue maintains the increasing order of job's id, -// which can prevent the job from being skipped and also can avoid repeated patching. -function findInsertionIndex(job) { - // the start index should be `flushIndex + 1` - let start = flushIndex + 1; - let end = queue.length; - const jobId = getId(job); - while (start < end) { - const middle = (start + end) >>> 1; - const middleJobId = getId(queue[middle]); - middleJobId < jobId ? (start = middle + 1) : (end = middle); - } - return start -} -function queueJob(job) { - // the dedupe search uses the startIndex argument of Array.includes() - // by default the search index includes the current job that is being run - // so it cannot recursively trigger itself again. - // if the job is a watch() callback, the search will start with a +1 index to - // allow it recursively trigger itself - it is the user's responsibility to - // ensure it doesn't end up in an infinite loop. - if ( - (!queue.length || - !queue.includes( - job, - isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex - )) && - job !== currentPreFlushParentJob - ) { - const pos = findInsertionIndex(job); - if (pos > -1) { - queue.splice(pos, 0, job); - } else { - queue.push(job); - } - queueFlush(); - } -} -function queueFlush() { - if (!isFlushing && !isFlushPending) { - isFlushPending = true; - currentFlushPromise = resolvedPromise.then(flushJobs); - } -} -function invalidateJob(job) { - const i = queue.indexOf(job); - if (i > flushIndex) { - queue.splice(i, 1); - } -} -function queueCb(cb, activeQueue, pendingQueue, index) { - if (!isArray(cb)) { - if ( - !activeQueue || - !activeQueue.includes(cb, cb.allowRecurse ? index + 1 : index) - ) { - pendingQueue.push(cb); - } - } else { - // if cb is an array, it is a component lifecycle hook which can only be - // triggered by a job, which is already deduped in the main queue, so - // we can skip duplicate check here to improve perf - pendingQueue.push(...cb); - } - queueFlush(); -} -function queuePreFlushCb(cb) { - queueCb(cb, activePreFlushCbs, pendingPreFlushCbs, preFlushIndex); -} -function queuePostFlushCb(cb) { - queueCb(cb, activePostFlushCbs, pendingPostFlushCbs, postFlushIndex); -} -function flushPreFlushCbs(seen, parentJob = null) { - if (pendingPreFlushCbs.length) { - currentPreFlushParentJob = parentJob; - activePreFlushCbs = [...new Set(pendingPreFlushCbs)]; - pendingPreFlushCbs.length = 0; - if (process.env.NODE_ENV !== 'production') { - seen = seen || new Map(); - } - for ( - preFlushIndex = 0; - preFlushIndex < activePreFlushCbs.length; - preFlushIndex++ - ) { - if ( - process.env.NODE_ENV !== 'production' && - checkRecursiveUpdates(seen, activePreFlushCbs[preFlushIndex]) - ) { - continue - } - activePreFlushCbs[preFlushIndex](); - } - activePreFlushCbs = null; - preFlushIndex = 0; - currentPreFlushParentJob = null; - // recursively flush until it drains - flushPreFlushCbs(seen, parentJob); - } -} -function flushPostFlushCbs(seen) { - if (pendingPostFlushCbs.length) { - const deduped = [...new Set(pendingPostFlushCbs)]; - pendingPostFlushCbs.length = 0; - // #1947 already has active queue, nested flushPostFlushCbs call - if (activePostFlushCbs) { - activePostFlushCbs.push(...deduped); - return - } - activePostFlushCbs = deduped; - if (process.env.NODE_ENV !== 'production') { - seen = seen || new Map(); - } - activePostFlushCbs.sort((a, b) => getId(a) - getId(b)); - for ( - postFlushIndex = 0; - postFlushIndex < activePostFlushCbs.length; - postFlushIndex++ - ) { - if ( - process.env.NODE_ENV !== 'production' && - checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex]) - ) { - continue - } - activePostFlushCbs[postFlushIndex](); - } - activePostFlushCbs = null; - postFlushIndex = 0; - } -} -const getId = (job) => (job.id == null ? Infinity : job.id); -function flushJobs(seen) { - isFlushPending = false; - isFlushing = true; - if (process.env.NODE_ENV !== 'production') { - seen = seen || new Map(); - } - flushPreFlushCbs(seen); - // Sort queue before flush. - // This ensures that: - // 1. Components are updated from parent to child. (because parent is always - // created before the child so its render effect will have smaller - // priority number) - // 2. If a component is unmounted during a parent component's update, - // its update can be skipped. - queue.sort((a, b) => getId(a) - getId(b)); - try { - for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job && job.active !== false) { - if ( - process.env.NODE_ENV !== 'production' && - checkRecursiveUpdates(seen, job) - ) { - continue - } - callWithErrorHandling(job, null, 14 /* SCHEDULER */); - } - } - } finally { - flushIndex = 0; - queue.length = 0; - flushPostFlushCbs(seen); - isFlushing = false; - currentFlushPromise = null; - // some postFlushCb queued jobs! - // keep flushing until it drains. - if ( - queue.length || - pendingPreFlushCbs.length || - pendingPostFlushCbs.length - ) { - flushJobs(seen); - } - } -} -function checkRecursiveUpdates(seen, fn) { - if (!seen.has(fn)) { - seen.set(fn, 1); - } else { - const count = seen.get(fn); - if (count > RECURSION_LIMIT) { - const instance = fn.ownerInstance; - const componentName = instance && getComponentName(instance.type); - warn( - `Maximum recursive updates exceeded${ - componentName ? ` in component <${componentName}>` : `` - }. ` + - `This means you have a reactive effect that is mutating its own ` + - `dependencies and thus recursively triggering itself. Possible sources ` + - `include component template, render function, updated hook or ` + - `watcher source function.` - ); - return true - } else { - seen.set(fn, count + 1); + return res; + } else if (isObject(value)) { + return value; } } -} -/* eslint-disable no-restricted-globals */ -let isHmrUpdating = false; -const hmrDirtyComponents = new Set(); -// Expose the HMR runtime on the window 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. -if (process.env.NODE_ENV !== 'production') { - const globalObject = - typeof window !== 'undefined' - ? window - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : {}; - globalObject.__VUE_HMR_RUNTIME__ = { - createRecord: tryWrap(createRecord), - rerender: tryWrap(rerender), - reload: tryWrap(reload), - }; -} -const map = new Map(); -function registerHMR(instance) { - const id = instance.type.__hmrId; - let 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, component) { - if (!component) { - warn( - `HMR API usage is out of date.\n` + - `Please upgrade vue-loader/vite/rollup-plugin-vue or other relevant ` + - `dependency that handles Vue SFC compilation.` - ); - component = {}; - } - if (map.has(id)) { - return false - } - map.set(id, { - component: isClassComponent(component) ? component.__vccOpts : component, - instances: new Set(), - }); - return true -} -function rerender(id, newRender) { - const record = map.get(id); - if (!record) return - if (newRender) record.component.render = newRender; - // Array.from creates a snapshot which avoids the set being mutated during - // updates - Array.from(record.instances).forEach((instance) => { - if (newRender) { - instance.render = newRender; - } - instance.renderCache = []; - // this flag forces child components with slot content to update - isHmrUpdating = true; - instance.update(); - isHmrUpdating = false; - }); -} -function reload(id, newComp) { - const record = map.get(id); - if (!record) return - // Array.from creates a snapshot which avoids the set being mutated during - // updates - const { component, instances } = record; - if (!hmrDirtyComponents.has(component)) { - // 1. Update existing comp definition to match new one - newComp = isClassComponent(newComp) ? newComp.__vccOpts : newComp; - extend(component, newComp); - for (const key in component) { - if (key !== '__file' && !(key in newComp)) { - delete component[key]; - } - } - // 2. Mark component dirty. This forces the renderer to replace the component - // on patch. - hmrDirtyComponents.add(component); - // 3. Make sure to unmark the component after the reload. - queuePostFlushCb(() => { - hmrDirtyComponents.delete(component); + var listDelimiterRE = /;(?![^(]*\))/g; + var propertyDelimiterRE = /:(.+)/; + + function parseStringStyle(cssText) { + var ret = {}; + cssText.split(listDelimiterRE).forEach(function (item) { + if (item) { + var tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } }); + return ret; } - Array.from(instances).forEach((instance) => { - 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); - } 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.' - ); - } - }); -} -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.` - ); - } - } -} -let devtools; -function setDevtoolsHook(hook) { - devtools = hook; -} -function devtoolsInitApp(app, version) { - // TODO queue if devtools is undefined - if (!devtools) return - devtools.emit('app:init' /* APP_INIT */, app, version, { - Fragment, - Text, - Comment: Comment$1, - Static, - }); -} -function devtoolsUnmountApp(app) { - if (!devtools) return - devtools.emit('app:unmount' /* APP_UNMOUNT */, app); -} -const devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook( - 'component:added' /* COMPONENT_ADDED */ -); -const devtoolsComponentUpdated = /*#__PURE__*/ createDevtoolsComponentHook( - 'component:updated' /* COMPONENT_UPDATED */ -); -const devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( - 'component:removed' /* COMPONENT_REMOVED */ -); -function createDevtoolsComponentHook(hook) { - return (component) => { - if (!devtools) return - devtools.emit( - hook, - component.appContext.app, - component.uid, - component.parent ? component.parent.uid : undefined, - component - ); - } -} -const devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook( - 'perf:start' /* PERFORMANCE_START */ -); -const devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook( - 'perf:end' /* PERFORMANCE_END */ -); -function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - if (!devtools) return - devtools.emit( - hook, - component.appContext.app, - component.uid, - component, - type, - time - ); - } -} -function devtoolsComponentEmit(component, event, params) { - if (!devtools) return - devtools.emit( - 'component:emit' /* COMPONENT_EMIT */, - component.appContext.app, - component, - event, - params - ); -} -const globalCompatConfig = { - MODE: 2, -}; -function getCompatConfigForKey(key, instance) { - const instanceConfig = instance && instance.type.compatConfig; - if (instanceConfig && key in instanceConfig) { - return instanceConfig[key] - } - return globalCompatConfig[key] -} -function isCompatEnabled(key, instance, enableForBuiltIn = false) { - // skip compat for built-in components - if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) { - return false - } - const rawMode = getCompatConfigForKey('MODE', instance) || 2; - const val = getCompatConfigForKey(key, instance); - const mode = isFunction(rawMode) - ? rawMode(instance && instance.type) - : rawMode; - if (mode === 2) { - return val !== false - } else { - return val === true || val === 'suppress-warning' - } -} + function normalizeClass(value) { + var res = ''; -function emit(instance, event, ...rawArgs) { - const props = instance.vnode.props || EMPTY_OBJ; - if (process.env.NODE_ENV !== 'production') { - const { - emitsOptions, - propsOptions: [propsOptions], - } = instance; - if (emitsOptions) { - if (!(event in emitsOptions) && !false) { - if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { - warn( - `Component emitted event "${event}" but it is neither declared in ` + - `the emits option nor as an "${toHandlerKey(event)}" prop.` - ); + 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 { - const validator = emitsOptions[event]; - if (isFunction(validator)) { - const isValid = validator(...rawArgs); - if (!isValid) { - warn( - `Invalid event arguments: event validation failed for event "${event}".` - ); - } + } + } else if (isObject(value)) { + for (var name in value) { + if (value[name]) { + res += name + ' '; } } } - } - let args = rawArgs; - const isModelListener = event.startsWith('update:'); - // for v-model update:xxx events, apply modifiers on args - const modelArg = isModelListener && event.slice(7); - if (modelArg && modelArg in props) { - const modifiersKey = `${ - modelArg === 'modelValue' ? 'model' : modelArg - }Modifiers`; - const { number, trim } = props[modifiersKey] || EMPTY_OBJ; - if (trim) { - args = rawArgs.map((a) => a.trim()); - } else if (number) { - args = rawArgs.map(toNumber); - } - } - if (process.env.NODE_ENV !== 'production' || false) { - devtoolsComponentEmit(instance, event, args); - } - if (process.env.NODE_ENV !== 'production') { - const lowerCaseEvent = event.toLowerCase(); - if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { - warn( - `Event "${lowerCaseEvent}" is emitted in component ` + - `${formatComponentName( - instance, - instance.type - )} but the handler is registered for "${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 "${hyphenate(event)}" instead of "${event}".` - ); + + return res.trim(); + } // 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,hgroup,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,rtc,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 = function toDisplayString(val) { + return val == null ? '' : isObject(val) ? JSON.stringify(val, replacer, 2) : String(val); + }; + + var replacer = function replacer(_key, val) { + if (isMap(val)) { + return { + ["Map(".concat(val.size, ")")]: _toConsumableArray(val.entries()).reduce(function (entries, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + val = _ref2[1]; + + entries["".concat(key, " =>")] = val; + return entries; + }, {}) + }; + } else if (isSet(val)) { + return { + ["Set(".concat(val.size, ")")]: _toConsumableArray(val.values()) + }; + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val); + } + + return val; + }; + + var EMPTY_OBJ = process.env.NODE_ENV !== 'production' ? Object.freeze({}) : {}; + var EMPTY_ARR = process.env.NODE_ENV !== 'production' ? Object.freeze([]) : []; + + var NOOP = function NOOP() {}; + /** + * Always return false. + */ + + + var NO = function NO() { + return false; + }; + + var onRE = /^on[^a-z]/; + + var isOn = function isOn(key) { + return onRE.test(key); + }; + + var isModelListener = function isModelListener(key) { + return key.startsWith('onUpdate:'); + }; + + var extend = Object.assign; + + var remove = function remove(arr, el) { + var i = arr.indexOf(el); + + if (i > -1) { + arr.splice(i, 1); + } + }; + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + var hasOwn = function hasOwn(val, key) { + return hasOwnProperty.call(val, key); + }; + + var isArray = Array.isArray; + + var isMap = function isMap(val) { + return toTypeString(val) === '[object Map]'; + }; + + var isSet = function isSet(val) { + return toTypeString(val) === '[object Set]'; + }; + + var isFunction = function isFunction(val) { + return typeof val === 'function'; + }; + + var isString = function isString(val) { + return typeof val === 'string'; + }; + + var isSymbol = function isSymbol(val) { + return typeof val === 'symbol'; + }; + + var isObject = function isObject(val) { + return val !== null && typeof val === 'object'; + }; + + var isPromise = function isPromise(val) { + return isObject(val) && isFunction(val.then) && isFunction(val.catch); + }; + + var objectToString = Object.prototype.toString; + + var toTypeString = function toTypeString(value) { + return objectToString.call(value); + }; + + var toRawType = function toRawType(value) { + // extract "RawType" from strings like "[object RawType]" + return toTypeString(value).slice(8, -1); + }; + + var isPlainObject = function isPlainObject(val) { + return toTypeString(val) === '[object Object]'; + }; + + var isIntegerKey = function isIntegerKey(key) { + return isString(key) && key !== 'NaN' && key[0] !== '-' && '' + parseInt(key, 10) === key; + }; + + var isReservedProp = /*#__PURE__*/makeMap( // the leading comma is intentional so empty string "" is also included + ',key,ref,' + 'onVnodeBeforeMount,onVnodeMounted,' + 'onVnodeBeforeUpdate,onVnodeUpdated,' + 'onVnodeBeforeUnmount,onVnodeUnmounted'); + + var cacheStringFunction = function cacheStringFunction(fn) { + var cache = Object.create(null); + return function (str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; + }; + + var camelizeRE = /-(\w)/g; + /** + * @private + */ + + var camelize = cacheStringFunction(function (str) { + return str.replace(camelizeRE, function (_, c) { + return c ? c.toUpperCase() : ''; + }); + }); + var hyphenateRE = /\B([A-Z])/g; + /** + * @private + */ + + var hyphenate = cacheStringFunction(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase(); + }); + /** + * @private + */ + + var capitalize = cacheStringFunction(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); + }); + /** + * @private + */ + + var toHandlerKey = cacheStringFunction(function (str) { + return str ? "on".concat(capitalize(str)) : ""; + }); // compare whether a value has changed, accounting for NaN. + + var hasChanged = function hasChanged(value, oldValue) { + return value !== oldValue && (value === value || oldValue === oldValue); + }; + + var invokeArrayFns = function invokeArrayFns(fns, arg) { + for (var i = 0; i < fns.length; i++) { + fns[i](arg); } + }; + + var def = function def(obj, key, value) { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + value + }); + }; + + var toNumber = function toNumber(val) { + var n = parseFloat(val); + return isNaN(n) ? val : n; + }; + + var _globalThis; + + var getGlobalThis = function getGlobalThis() { + return _globalThis || (_globalThis = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof window !== 'undefined' ? window : {}); + }; + + var targetMap = new WeakMap(); + var effectStack = []; + var activeEffect; + var ITERATE_KEY = Symbol(process.env.NODE_ENV !== 'production' ? 'iterate' : ''); + var MAP_KEY_ITERATE_KEY = Symbol(process.env.NODE_ENV !== 'production' ? 'Map key iterate' : ''); + + function isEffect(fn) { + return fn && fn._isEffect === true; } - let handlerName; - let 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 - ); + + function effect(fn) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_OBJ; + + if (isEffect(fn)) { + fn = fn.raw; + } + + var effect = createReactiveEffect(fn, options); + + if (!options.lazy) { + effect(); + } + + return effect; } - const onceHandler = props[handlerName + `Once`]; - if (onceHandler) { - if (!instance.emitted) { - instance.emitted = {}; - } else if (instance.emitted[handlerName]) { - return - } - instance.emitted[handlerName] = true; - callWithAsyncErrorHandling( - onceHandler, - instance, - 6 /* COMPONENT_EVENT_HANDLER */, - args - ); + + function stop(effect) { + if (effect.active) { + cleanup(effect); + + if (effect.options.onStop) { + effect.options.onStop(); + } + + effect.active = false; + } } -} -function normalizeEmitsOptions(comp, appContext, asMixin = false) { - const cache = appContext.emitsCache; - const cached = cache.get(comp); - if (cached !== undefined) { - return cached - } - const raw = comp.emits; - let normalized = {}; - // apply mixin/extends props - let hasExtends = false; - if (!isFunction(comp)) { - const extendEmits = (raw) => { - const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true); - if (normalizedFromExtend) { - hasExtends = true; - extend(normalized, normalizedFromExtend); + + var uid = 0; + + function createReactiveEffect(fn, options) { + var effect = function reactiveEffect() { + if (!effect.active) { + return fn(); + } + + if (!effectStack.includes(effect)) { + cleanup(effect); + + try { + enableTracking(); + effectStack.push(effect); + activeEffect = effect; + return fn(); + } finally { + effectStack.pop(); + resetTracking(); + activeEffect = effectStack[effectStack.length - 1]; + } } }; - if (!asMixin && appContext.mixins.length) { - appContext.mixins.forEach(extendEmits); - } - if (comp.extends) { - extendEmits(comp.extends); - } - if (comp.mixins) { - comp.mixins.forEach(extendEmits); + + effect.id = uid++; + effect.allowRecurse = !!options.allowRecurse; + effect._isEffect = true; + effect.active = true; + effect.raw = fn; + effect.deps = []; + effect.options = options; + return effect; + } + + function cleanup(effect) { + var deps = effect.deps; + + if (deps.length) { + for (var i = 0; i < deps.length; i++) { + deps[i].delete(effect); + } + + deps.length = 0; } } - if (!raw && !hasExtends) { - cache.set(comp, null); - return null + + var shouldTrack = true; + var trackStack = []; + + function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; } - if (isArray(raw)) { - raw.forEach((key) => (normalized[key] = null)); - } else { - extend(normalized, raw); + + function enableTracking() { + trackStack.push(shouldTrack); + shouldTrack = true; } - 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 - */ -let currentRenderingInstance = null; -let 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) { - const 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 - */ -const withScopeId = (_id) => withCtx; -/** - * Wrap a slot function to memoize current rendering instance - * @private compiler helper - */ -function withCtx( - fn, - ctx = currentRenderingInstance, - isNonScopedSlot // false only -) { - if (!ctx) return fn - // already normalized - if (fn._n) { - return fn - } - const renderFnWithContext = (...args) => { - // 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); - } - const prevInstance = setCurrentRenderingInstance(ctx); - const res = fn(...args); - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); + function resetTracking() { + var last = trackStack.pop(); + shouldTrack = last === undefined ? true : last; + } + + function track(target, type, key) { + if (!shouldTrack || activeEffect === undefined) { + return; } - if (process.env.NODE_ENV !== 'production' || false) { - devtoolsComponentUpdated(ctx); + + var depsMap = targetMap.get(target); + + if (!depsMap) { + targetMap.set(target, depsMap = new Map()); } - 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. - */ -let accessedAttrs = false; -function markAttrsAccessed() { - accessedAttrs = true; -} -function renderComponentRoot(instance) { - const { - type: Component, - vnode, - proxy, - withProxy, - props, - propsOptions: [propsOptions], - slots, - attrs, - emit, - render, - renderCache, - data, - setupState, - ctx, - inheritAttrs, - } = instance; - let result; - const prev = setCurrentRenderingInstance(instance); - if (process.env.NODE_ENV !== 'production') { - accessedAttrs = false; - } - try { - let fallthroughAttrs; - if (vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */) { - // withProxy is a proxy with a different `has` trap only for - // runtime-compiled render functions using `with` block. - const proxyToUse = withProxy || proxy; - result = normalizeVNode( - render.call( - proxyToUse, - proxyToUse, - renderCache, - props, - setupState, - data, - ctx - ) - ); - fallthroughAttrs = attrs; - } else { - // functional - const render = Component; - // in dev, mark attrs accessed if optional props (attrs === props) - if (process.env.NODE_ENV !== 'production' && attrs === props) { - markAttrsAccessed(); - } - result = normalizeVNode( - render.length > 1 - ? render( - props, - process.env.NODE_ENV !== '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); - } - // 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 - let root = result; - let setRoot = undefined; - if ( - process.env.NODE_ENV !== 'production' && - result.patchFlag > 0 && - result.patchFlag & 2048 /* DEV_ROOT_FRAGMENT */ - ) { - ;[root, setRoot] = getChildRoot(result); - } - if (fallthroughAttrs && inheritAttrs !== false) { - const keys = Object.keys(fallthroughAttrs); - const { shapeFlag } = root; - if (keys.length) { - if (shapeFlag & 1 /* ELEMENT */ || shapeFlag & 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 - ); + var dep = depsMap.get(key); + + if (!dep) { + depsMap.set(key, dep = new Set()); + } + + if (!dep.has(activeEffect)) { + dep.add(activeEffect); + activeEffect.deps.push(dep); + + if (process.env.NODE_ENV !== 'production' && activeEffect.options.onTrack) { + activeEffect.options.onTrack({ + effect: activeEffect, + target, + type, + key + }); + } + } + } + + function trigger(target, type, key, newValue, oldValue, oldTarget) { + var depsMap = targetMap.get(target); + + if (!depsMap) { + // never been tracked + return; + } + + var effects = new Set(); + + var add = function add(effectsToAdd) { + if (effectsToAdd) { + effectsToAdd.forEach(function (effect) { + if (effect !== activeEffect || effect.allowRecurse) { + effects.add(effect); } - root = cloneVNode(root, fallthroughAttrs); - } else if ( - process.env.NODE_ENV !== 'production' && - !accessedAttrs && - root.type !== Comment$1 - ) { - const allAttrs = Object.keys(attrs); - const eventAttrs = []; - const extraAttrs = []; - for (let i = 0, l = allAttrs.length; i < l; i++) { - const 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 (type === 'clear' + /* CLEAR */ + ) { + // collection being cleared + // trigger all effects for target + depsMap.forEach(add); + } else if (key === 'length' && isArray(target)) { + depsMap.forEach(function (dep, key) { + if (key === 'length' || key >= newValue) { + add(dep); + } + }); + } else { + // schedule runs for SET | ADD | DELETE + if (key !== void 0) { + add(depsMap.get(key)); + } // also run for iteration key on ADD | DELETE | Map.SET + + + switch (type) { + case 'add' + /* ADD */ + : + if (!isArray(target)) { + add(depsMap.get(ITERATE_KEY)); + + if (isMap(target)) { + add(depsMap.get(MAP_KEY_ITERATE_KEY)); } + } else if (isIntegerKey(key)) { + // new index added to array -> length changes + add(depsMap.get('length')); } - if (extraAttrs.length) { - warn( - `Extraneous non-props attributes (` + - `${extraAttrs.join(', ')}) ` + - `were passed to component but could not be automatically inherited ` + - `because component renders fragment or text root nodes.` - ); + + break; + + case 'delete' + /* DELETE */ + : + if (!isArray(target)) { + add(depsMap.get(ITERATE_KEY)); + + if (isMap(target)) { + add(depsMap.get(MAP_KEY_ITERATE_KEY)); + } } - if (eventAttrs.length) { - warn( - `Extraneous non-emits event listeners (` + - `${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.` - ); + + break; + + case 'set' + /* SET */ + : + if (isMap(target)) { + add(depsMap.get(ITERATE_KEY)); } - } + + break; } } - if ( - false && - isCompatEnabled( - 'INSTANCE_ATTRS_CLASS_STYLE' /* INSTANCE_ATTRS_CLASS_STYLE */, - instance - ) && - vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ && - (root.shapeFlag & 1 /* ELEMENT */ || root.shapeFlag & 6) /* COMPONENT */ - ); - // inherit directives - if (vnode.dirs) { - if (process.env.NODE_ENV !== 'production' && !isElementRoot(root)) { - warn( - `Runtime directive used on component with non-element root node. ` + - `The directives will not function as intended.` - ); + + var run = function run(effect) { + if (process.env.NODE_ENV !== 'production' && effect.options.onTrigger) { + effect.options.onTrigger({ + effect, + target, + key, + type, + newValue, + oldValue, + oldTarget + }); } - root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; - } - // inherit transition data - if (vnode.transition) { - if (process.env.NODE_ENV !== 'production' && !isElementRoot(root)) { - warn( - `Component inside renders non-element root node ` + - `that cannot be animated.` - ); + + if (effect.options.scheduler) { + effect.options.scheduler(effect); + } else { + effect(); } - root.transition = vnode.transition; - } - if (process.env.NODE_ENV !== 'production' && setRoot) { - setRoot(root); - } else { - result = root; - } - } catch (err) { - blockStack.length = 0; - handleError(err, instance, 1 /* RENDER_FUNCTION */); - result = createVNode(Comment$1); + }; + + effects.forEach(run); } - 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. - */ -const getChildRoot = (vnode) => { - const rawChildren = vnode.children; - const dynamicChildren = vnode.dynamicChildren; - const childRoot = filterSingleRoot(rawChildren); - if (!childRoot) { - return [vnode, undefined] - } - const index = rawChildren.indexOf(childRoot); - const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; - const setRoot = (updatedRoot) => { - rawChildren[index] = updatedRoot; - if (dynamicChildren) { - if (dynamicIndex > -1) { - dynamicChildren[dynamicIndex] = updatedRoot; - } else if (updatedRoot.patchFlag > 0) { - vnode.dynamicChildren = [...dynamicChildren, updatedRoot]; + + var isNonTrackableKeys = /*#__PURE__*/makeMap("__proto__,__v_isRef,__isVue"); + var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map(function (key) { + return 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 = {}; + ['includes', 'indexOf', 'lastIndexOf'].forEach(function (key) { + var method = Array.prototype[key]; + + arrayInstrumentations[key] = function () { + var arr = toRaw(this); + + for (var i = 0, l = this.length; i < l; i++) { + track(arr, 'get' + /* GET */ + , i + ''); + } // we run the method using the original args first (which may be reactive) + + + for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) { + args[_key2] = arguments[_key2]; } - } - }; - return [normalizeVNode(childRoot), setRoot] -}; -function filterSingleRoot(children) { - let singleRoot; - for (let i = 0; i < children.length; i++) { - const child = children[i]; - if (isVNode(child)) { - // ignore user comment - if (child.type !== Comment$1 || child.children === 'v-if') { - if (singleRoot) { - // has more than 1 non-comment child, return now - return - } else { - singleRoot = child; - } + + var res = method.apply(arr, args); + + if (res === -1 || res === false) { + // if that didn't work, run it again using raw values. + return method.apply(arr, args.map(toRaw)); + } else { + return res; } - } else { - return - } - } - return singleRoot -} -const getFunctionalFallthrough = (attrs) => { - let res; - for (const key in attrs) { - if (key === 'class' || key === 'style' || isOn(key)) { -(res || (res = {}))[key] = attrs[key]; - } - } - return res -}; -const filterModelListeners = (attrs, props) => { - const res = {}; - for (const key in attrs) { - if (!isModelListener(key) || !(key.slice(9) in props)) { - res[key] = attrs[key]; - } - } - return res -}; -const isElementRoot = (vnode) => { - return ( - vnode.shapeFlag & 6 /* COMPONENT */ || - vnode.shapeFlag & 1 /* ELEMENT */ || - vnode.type === Comment$1 // potential v-if branch switch - ) -}; -function shouldUpdateComponent(prevVNode, nextVNode, optimized) { - const { props: prevProps, children: prevChildren, component } = prevVNode; - const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; - const 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 ( - process.env.NODE_ENV !== 'production' && - (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 + }; + }); + ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(function (key) { + var method = Array.prototype[key]; + + arrayInstrumentations[key] = function () { + pauseTracking(); + + for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) { + args[_key3] = arguments[_key3]; } - // presence of this flag indicates props are always non-null - return hasPropsChanged(prevProps, nextProps, emits) - } else if (patchFlag & 8 /* PROPS */) { - const dynamicProps = nextVNode.dynamicProps; - for (let i = 0; i < dynamicProps.length; i++) { - const key = dynamicProps[i]; - if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { - return true - } + + var res = method.apply(this, args); + resetTracking(); + return res; + }; + }); + + 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; } - } - } 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 + + var targetIsArray = isArray(target); + + if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); } - } - if (prevProps === nextProps) { - return false - } - if (!prevProps) { - return !!nextProps - } - if (!nextProps) { - return true - } - return hasPropsChanged(prevProps, nextProps, emits) - } - return false -} -function hasPropsChanged(prevProps, nextProps, emitsOptions) { - const nextKeys = Object.keys(nextProps); - if (nextKeys.length !== Object.keys(prevProps).length) { - return true - } - for (let i = 0; i < nextKeys.length; i++) { - const key = nextKeys[i]; - if ( - nextProps[key] !== prevProps[key] && - !isEmitListener(emitsOptions, key) - ) { - return true - } - } - return false -} -function updateHOCHostEl( - { vnode, parent }, - el // HostNode -) { - while (parent && parent.subTree === vnode) { -(vnode = parent.vnode).el = el; - parent = parent.parent; - } -} -const 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. -const SuspenseImpl = { - name: 'Suspense', - // In order to make Suspense tree-shakable, we need to avoid importing it - // directly in the renderer. The renderer checks for the __isSuspense flag - // on a 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 -const Suspense = SuspenseImpl; -function triggerEvent(vnode, name) { - const eventListener = vnode.props && vnode.props[name]; - if (isFunction(eventListener)) { - eventListener(); - } -} -function mountSuspense( - vnode, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized, - rendererInternals -) { - const { - p: patch, - o: { createElement }, - } = rendererInternals; - const hiddenContainer = createElement('div', container); // fixed by xxxxxx - const 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, - { p: patch, um: unmount, o: { createElement } } -) { - const suspense = (n2.suspense = n1.suspense); - suspense.vnode = n2; - n2.el = n1.el; - const newBranch = n2.ssContent; - const newFallback = n2.ssFallback; - const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; - if (pendingBranch) { - suspense.pendingBranch = newBranch; - if (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); + var res = Reflect.get(target, key, receiver); + + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; } - } 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(); + + 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) { + value = toRaw(value); + oldValue = toRaw(oldValue); + + if (!isArray(target) && isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; } } - } - } 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 { - const { timeout, pendingId } = suspense; - if (timeout > 0) { - setTimeout(() => { - if (suspense.pendingId === pendingId) { - suspense.fallback(newFallback); - } - }, timeout); - } else if (timeout === 0) { - suspense.fallback(newFallback); + + 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; } -} -let hasWarned = false; -function createSuspenseBoundary( - vnode, - parent, - parentComponent, - container, - hiddenContainer, - anchor, - isSVG, - slotScopeIds, - optimized, - rendererInternals, - isHydrating = false -) { - /* istanbul ignore if */ - if (process.env.NODE_ENV !== 'production' && !false && !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.` - ); + + 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); } - const { - p: patch, - m: move, - um: unmount, - n: next, - o: { parentNode, remove }, - } = rendererInternals; - const timeout = toNumber(vnode.props && vnode.props.timeout); - const 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(resume = false) { + + var mutableHandlers = { + get, + set, + deleteProperty, + has, + ownKeys + }; + var readonlyHandlers = { + get: readonlyGet, + + set(target, key) { if (process.env.NODE_ENV !== 'production') { - 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.` - ) - } - } - const { - vnode, - activeBranch, - pendingBranch, - pendingId, - effects, - parentComponent, - container, - } = suspense; - if (suspense.isHydrating) { - suspense.isHydrating = false; - } else if (!resume) { - const 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 - let { 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 - let parent = suspense.parent; - let 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 - } - const { vnode, activeBranch, parentComponent, container, isSVG } = - suspense; - // invoke @fallback event - triggerEvent(vnode, 'onFallback'); - const anchor = next(activeBranch); - const 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); - }; - const 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(); + console.warn("Set operation on key \"".concat(String(key), "\" failed: target is readonly."), target); } + + return true; }, - 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) { - const isInPendingSuspense = !!suspense.pendingBranch; - if (isInPendingSuspense) { - suspense.deps++; - } - const 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; - const { vnode } = instance; - if (process.env.NODE_ENV !== 'production') { - 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; - } - const 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); - if (process.env.NODE_ENV !== 'production') { - 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 - ); + + deleteProperty(target, key) { + if (process.env.NODE_ENV !== 'production') { + console.warn("Delete operation on key \"".concat(String(key), "\" failed: target is readonly."), target); } - }, + + return true; + } + }; - return suspense -} -function hydrateSuspense( - node, - vnode, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized, - rendererInternals, - hydrateNode -) { - /* eslint-disable no-restricted-globals */ - const 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 - const 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) { - const { shapeFlag, children } = vnode; - const isSlotChildren = shapeFlag & 32; /* SLOTS_CHILDREN */ - vnode.ssContent = normalizeSuspenseSlot( - isSlotChildren ? children.default : children - ); - vnode.ssFallback = isSlotChildren - ? normalizeSuspenseSlot(children.fallback) - : createVNode(Comment); -} -function normalizeSuspenseSlot(s) { - let block; - if (isFunction(s)) { - const isCompiledSlot = s._c; - if (isCompiledSlot) { - // disableTracking: false - // allow block tracking for compiled slots - // (see ./componentRenderContext.ts) - s._d = false; - openBlock(); - } - s = s(); - if (isCompiledSlot) { - s._d = true; - block = currentBlock; - closeBlock(); - } - } - if (isArray(s)) { - const singleChild = filterSingleRoot(s); - if (process.env.NODE_ENV !== 'production' && !singleChild) { - warn(` slots expect a single root node.`); - } - s = singleChild; - } - s = normalizeVNode(s); - if (block) { - 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); + var shallowReactiveHandlers = 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 = extend({}, readonlyHandlers, { + get: shallowReadonlyGet + }); + + var toReactive = function toReactive(value) { + return isObject(value) ? reactive(value) : value; + }; + + var toReadonly = function toReadonly(value) { + return isObject(value) ? readonly(value) : value; + }; + + var toShallow = function toShallow(value) { + return value; + }; + + var getProto = function getProto(v) { + return 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); } - } else { - queuePostFlushCb(fn); - } -} -function setActiveBranch(suspense, branch) { - suspense.activeBranch = branch; - const { vnode, parentComponent } = suspense; - const 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) { - if (process.env.NODE_ENV !== 'production') { - warn(`provide() can only be used inside setup().`); - } - } else { - let 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. - const 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, treatDefaultAsFactory = false) { - // fallback to `currentRenderingInstance` so that this can be called in - // a functional component - const instance = currentInstance || currentRenderingInstance; - if (instance) { - // #2400 - // to support `app.use` plugins, - // fallback to appContext's `provides` if the intance is at root - const 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 if (process.env.NODE_ENV !== 'production') { - warn(`injection "${String(key)}" not found.`); + !isReadonly && track(rawTarget, 'get' + /* GET */ + , rawKey); + + var _getProto = getProto(rawTarget), + has = _getProto.has; + + 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); } - } else if (process.env.NODE_ENV !== 'production') { - warn(`inject() can only be used inside setup() or functional components.`); } -} -// Simple effect. -function watchEffect(effect, options) { - return doWatch(effect, null, options) -} -// initial value for watchers to trigger on undefined initial values -const INITIAL_WATCHER_VALUE = {}; -// implementation -function watch(source, cb, options) { - if (process.env.NODE_ENV !== 'production' && !isFunction(cb)) { - warn( - `\`watch(fn, options?)\` signature has been moved to a separate API. ` + - `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` + - `supports \`watch(source, cb, options?) signature.` - ); - } - return doWatch(source, cb, options) -} -function doWatch( - source, - cb, - { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ, - instance = currentInstance -) { - if (process.env.NODE_ENV !== 'production' && !cb) { - if (immediate !== undefined) { - warn( - `watch() "immediate" option is only respected when using the ` + - `watch(source, callback, options?) signature.` - ); - } - if (deep !== undefined) { - warn( - `watch() "deep" option is only respected when using the ` + - `watch(source, callback, options?) signature.` - ); + 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); } - const warnInvalidSource = (s) => { - warn( - `Invalid watch source: `, - s, - `A watch source can only be a getter/effect function, a ref, ` + - `a reactive object, or an array of these types.` - ); - }; - let getter; - let forceTrigger = false; - let isMultiSource = false; - if (isRef(source)) { - getter = () => source.value; - forceTrigger = !!source._shallow; - } else if (isReactive(source)) { - getter = () => source; - deep = true; - } else if (isArray(source)) { - isMultiSource = true; - forceTrigger = source.some(isReactive); - getter = () => - source.map((s) => { - if (isRef(s)) { - return s.value - } else if (isReactive(s)) { - return traverse(s) - } else if (isFunction(s)) { - return callWithErrorHandling(s, instance, 2 /* WATCH_GETTER */) - } else { - process.env.NODE_ENV !== 'production' && warnInvalidSource(s); - } - }); - } else if (isFunction(source)) { - if (cb) { - // getter with cb - getter = () => - callWithErrorHandling(source, instance, 2 /* WATCH_GETTER */); - } else { - // no cb -> simple effect - getter = () => { - if (instance && instance.isUnmounted) { - return - } - if (cleanup) { - cleanup(); - } - return callWithAsyncErrorHandling( - source, - instance, - 3 /* WATCH_CALLBACK */, - [onInvalidate] - ) - }; - } - } else { - getter = NOOP; - process.env.NODE_ENV !== 'production' && warnInvalidSource(source); + + 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); } - if (cb && deep) { - const baseGetter = getter; - getter = () => traverse(baseGetter()); + + 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; } - let cleanup; - let onInvalidate = (fn) => { - cleanup = runner.options.onStop = () => { - callWithErrorHandling(fn, instance, 4 /* WATCH_CLEANUP */); - }; - }; - let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; - const job = () => { - if (!runner.active) { - return + + function set$1(key, value) { + value = toRaw(value); + var target = toRaw(this); + + var _getProto2 = getProto(target), + has = _getProto2.has, + get = _getProto2.get; + + var hadKey = has.call(target, key); + + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } else if (process.env.NODE_ENV !== 'production') { + checkIdentityKeys(target, has, key); } - if (cb) { - // watch(source, cb) - const newValue = runner(); - if ( - deep || - forceTrigger || - (isMultiSource - ? newValue.some((v, i) => hasChanged(v, oldValue[i])) - : hasChanged(newValue, oldValue)) || - false - ) { - // cleanup before running cb again - if (cleanup) { - cleanup(); - } - callWithAsyncErrorHandling(cb, instance, 3 /* WATCH_CALLBACK */, [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, - onInvalidate, - ]); - oldValue = newValue; - } - } else { - // watchEffect - runner(); + + 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); } - }; - // important: mark the job as a watcher callback so that scheduler knows - // it is allowed to self-trigger (#1727) - job.allowRecurse = !!cb; - let scheduler; - if (flush === 'sync') { - scheduler = job; // the scheduler function gets called directly - } else if (flush === 'post') { - scheduler = () => queuePostRenderEffect(job, instance && instance.suspense); - } else { - // default: 'pre' - scheduler = () => { - if (!instance || instance.isMounted) { - queuePreFlushCb(job); - } else { - // with 'pre' option, the first call must happen before - // the component is mounted so it is called synchronously. - job(); - } - }; + + return this; } - const runner = effect(getter, { - lazy: true, - onTrack, - onTrigger, - scheduler, - }); - recordInstanceBoundEffect(runner, instance); - // initial run - if (cb) { - if (immediate) { - job(); - } else { - oldValue = runner(); + + function deleteEntry(key) { + var target = toRaw(this); + + var _getProto3 = getProto(target), + has = _getProto3.has, + get = _getProto3.get; + + var hadKey = has.call(target, key); + + if (!hadKey) { + key = toRaw(key); + hadKey = has.call(target, key); + } else if (process.env.NODE_ENV !== 'production') { + checkIdentityKeys(target, has, key); } - } else if (flush === 'post') { - queuePostRenderEffect(runner, instance && instance.suspense); - } else { - runner(); - } - return () => { - stop(runner); - if (instance) { - remove(instance.effects, runner); + + 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; } -} -// this.$watch -function instanceWatch(source, value, options) { - const publicThis = this.proxy; - const getter = isString(source) - ? source.includes('.') - ? createPathGetter(publicThis, source) - : () => publicThis[source] - : source.bind(publicThis, publicThis); - let cb; - if (isFunction(value)) { - cb = value; - } else { - cb = value.handler; - options = value; - } - return doWatch(getter, cb.bind(publicThis), options, this) -} -function createPathGetter(ctx, path) { - const segments = path.split('.'); - return () => { - let cur = ctx; - for (let i = 0; i < segments.length && cur; i++) { - cur = cur[segments[i]]; + + function clear() { + var target = toRaw(this); + var hadItems = target.size !== 0; + var oldTarget = process.env.NODE_ENV !== 'production' ? isMap(target) ? new Map(target) : new Set(target) : undefined; // forward the operation before queueing reactions + + var result = target.clear(); + + if (hadItems) { + trigger(target, 'clear' + /* CLEAR */ + , undefined, undefined, oldTarget); } - return cur + + return result; } -} -function traverse(value, seen = new Set()) { - if (!isObject(value) || seen.has(value) || value['__v_skip' /* SKIP */]) { - return value - } - seen.add(value); - if (isRef(value)) { - traverse(value.value, seen); - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - traverse(value[i], seen); - } - } else if (isSet(value) || isMap(value)) { - value.forEach((v) => { - traverse(v, seen); - }); - } else if (isPlainObject(value)) { - for (const key in value) { - traverse(value[key], seen); - } + + 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(function (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); + }); + }; } - return value -} -function useTransitionState() { - const state = { - isMounted: false, - isLeaving: false, - isUnmounting: false, - leavingVNodes: new Map(), - }; - onMounted(() => { - state.isMounted = true; - }); - onBeforeUnmount(() => { - state.isUnmounting = true; - }); - return state -} -const TransitionHookValidator = [Function, Array]; -const 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, { slots }) { - const instance = getCurrentInstance(); - const state = useTransitionState(); - let prevTransitionKey; - return () => { - const children = - slots.default && getTransitionRawChildren(slots.default(), true); - if (!children || !children.length) { - return - } - // warn multiple elements - if (process.env.NODE_ENV !== 'production' && children.length > 1) { - warn( - ' 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 - const rawProps = toRaw(props); - const { mode } = rawProps; - // check mode - if ( - process.env.NODE_ENV !== 'production' && - mode && - !['in-out', 'out-in', 'default'].includes(mode) - ) { - warn(`invalid mode: ${mode}`); - } - // at this point children has a guaranteed length of 1. - const child = children[0]; - if (state.isLeaving) { - return emptyPlaceholder(child) - } - // in the case of , we need to - // compare the type of the kept-alive children. - const innerChild = getKeepAliveChild(child); - if (!innerChild) { - return emptyPlaceholder(child) - } - const enterHooks = resolveTransitionHooks( - innerChild, - rawProps, - state, - instance - ); - setTransitionHooks(innerChild, enterHooks); - const oldChild = instance.subTree; - const oldInnerChild = oldChild && getKeepAliveChild(oldChild); - let transitionKeyChanged = false; - const { getTransitionKey } = innerChild.type; - if (getTransitionKey) { - const key = getTransitionKey(); - if (prevTransitionKey === undefined) { - prevTransitionKey = key; - } else if (key !== prevTransitionKey) { - prevTransitionKey = key; - transitionKeyChanged = true; - } - } - // handle mode - if ( - oldInnerChild && - oldInnerChild.type !== Comment$1 && - (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged) - ) { - const 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$1) { - leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { - const leavingVNodesCache = getLeavingNodesForType( - state, - oldInnerChild - ); - leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; - // early removal callback - el._leaveCb = () => { - earlyRemove(); - el._leaveCb = undefined; - delete enterHooks.delayedLeave; - }; - enterHooks.delayedLeave = delayedLeave; + 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].apply(target, 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 _innerIterator$next = innerIterator.next(), + value = _innerIterator$next.value, + done = _innerIterator$next.done; + + return done ? { + value, + done + } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done }; + }, + + // iterable protocol + [Symbol.iterator]() { + return this; } - } - return child - } - }, -}; -// export the public type for h/tsx inference -// also to avoid inline import() in generated d.ts files -const BaseTransition = BaseTransitionImpl; -function getLeavingNodesForType(state, vnode) { - const { leavingVNodes } = state; - let 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) { - const { - appear, - mode, - persisted = false, - onBeforeEnter, - onEnter, - onAfterEnter, - onEnterCancelled, - onBeforeLeave, - onLeave, - onAfterLeave, - onLeaveCancelled, - onBeforeAppear, - onAppear, - onAfterAppear, - onAppearCancelled, - } = props; - const key = String(vnode.key); - const leavingVNodesCache = getLeavingNodesForType(state, vnode); - const callHook = (hook, args) => { - hook && - callWithAsyncErrorHandling(hook, instance, 9 /* TRANSITION_HOOK */, args); - }; - const hooks = { - mode, - persisted, - beforeEnter(el) { - let 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) - const leavingVNode = leavingVNodesCache[key]; - if ( - leavingVNode && - isSameVNodeType(vnode, leavingVNode) && - leavingVNode.el._leaveCb - ) { - // force early removal (not cancelled) - leavingVNode.el._leaveCb(); + + function createReadonlyMethod(type) { + return function () { + if (process.env.NODE_ENV !== 'production') { + 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)); } - callHook(hook, [el]); + + return type === 'delete' + /* DELETE */ + ? false : this; + }; + } + + var mutableInstrumentations = { + get(key) { + return get$1(this, key); }, - enter(el) { - let hook = onEnter; - let afterHook = onAfterEnter; - let cancelHook = onEnterCancelled; - if (!state.isMounted) { - if (appear) { - hook = onAppear || onEnter; - afterHook = onAfterAppear || onAfterEnter; - cancelHook = onAppearCancelled || onEnterCancelled; - } else { - return - } - } - let called = false; - const done = (el._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(); - } + + get size() { + return size(this); }, - leave(el, remove) { - const key = String(vnode.key); - if (el._enterCb) { - el._enterCb(true /* cancelled */); - } - if (state.isUnmounting) { - return remove() - } - callHook(onBeforeLeave, [el]); - let called = false; - const 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(); - } + + 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); }, - clone(vnode) { - return resolveTransitionHooks(vnode, props, state, instance) + + get size() { + return size(this); }, + + has: has$1, + add, + set: set$1, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) }; - 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, keepComment = false) { - let ret = []; - let keyedFragmentCount = 0; - for (let i = 0; i < children.length; i++) { - const 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$1) { - 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 (let i = 0; i < ret.length; i++) { - ret[i].patchFlag = -2; /* BAIL */ - } - } - return ret -} + var readonlyInstrumentations = { + get(key) { + return get$1(this, key, true); + }, -// implementation, close to no-op -function defineComponent(options) { - return isFunction(options) ? { setup: options, name: options.name } : options -} + get size() { + return size(this, true); + }, -const isAsyncWrapper = (i) => !!i.type.__asyncLoader; -function defineAsyncComponent(source) { - if (isFunction(source)) { - source = { loader: source }; - } - const { - loader, - loadingComponent, - errorComponent, - delay = 200, - timeout, // undefined = never times out - suspensible = true, - onError: userOnError, - } = source; - let pendingRequest = null; - let resolvedComp; - let retries = 0; - const retry = () => { - retries++; - pendingRequest = null; - return load() - }; - const load = () => { - let thisRequest; - return ( - pendingRequest || - (thisRequest = pendingRequest = - loader() - .catch((err) => { - err = err instanceof Error ? err : new Error(String(err)); - if (userOnError) { - return new Promise((resolve, reject) => { - const userRetry = () => resolve(retry()); - const userFail = () => reject(err); - userOnError(err, userRetry, userFail, retries + 1); - }) - } else { - throw err - } - }) - .then((comp) => { - if (thisRequest !== pendingRequest && pendingRequest) { - return pendingRequest - } - if (process.env.NODE_ENV !== 'production' && !comp) { - warn( - `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 ( - process.env.NODE_ENV !== 'production' && - comp && - !isObject(comp) && - !isFunction(comp) - ) { - throw new Error(`Invalid async component load result: ${comp}`) - } - resolvedComp = comp; - return comp - })) - ) + 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) }; - return defineComponent({ - name: 'AsyncComponentWrapper', - __asyncLoader: load, - get __asyncResolved() { - return resolvedComp + var shallowReadonlyInstrumentations = { + get(key) { + return get$1(this, key, true, true); }, - setup() { - const instance = currentInstance; - // already resolved - if (resolvedComp) { - return () => createInnerComp(resolvedComp, instance) - } - const 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) || false) { - return load() - .then((comp) => { - return () => createInnerComp(comp, instance) - }) - .catch((err) => { - onError(err); - return () => - errorComponent - ? createVNode(errorComponent, { - error: err, - }) - : null - }) - } - const loaded = ref(false); - const error = ref(); - const delayed = ref(!!delay); - if (delay) { - setTimeout(() => { - delayed.value = false; - }, delay); - } - if (timeout != null) { - setTimeout(() => { - if (!loaded.value && !error.value) { - const err = new Error( - `Async component timed out after ${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) - } - } + + get size() { + return size(this, true); }, - }) -} -function createInnerComp(comp, { vnode: { ref, props, children } }) { - const vnode = createVNode(comp, props, children); - // ensure inner component inherits the async wrapper's ref owner - vnode.ref = ref; - return vnode -} -const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; -const 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, { slots }) { - const 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. - const 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 - } - const cache = new Map(); - const keys = new Set(); - let current = null; - if (process.env.NODE_ENV !== 'production' || false) { - instance.__v_cache = cache; - } - const parentSuspense = instance.suspense; - const { - renderer: { - p: patch, - m: move, - um: _unmount, - o: { createElement }, - }, - } = sharedContext; - const storageContainer = createElement('div', null); // fixed by xxxxx - sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => { - const 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); - } - const vnodeHook = vnode.props && vnode.props.onVnodeMounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance.parent, vnode); + 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(function (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); + }); + + function createInstrumentationGetter(isReadonly, shallow) { + var instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations; + return function (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; } - }, parentSuspense); - if (process.env.NODE_ENV !== 'production' || false) { - // Update components tree - devtoolsComponentAdded(instance); - } - }; - sharedContext.deactivate = (vnode) => { - const instance = vnode.component; - move(vnode, storageContainer, null, 1 /* LEAVE */, parentSuspense); - queuePostRenderEffect(() => { - if (instance.da) { - invokeArrayFns(instance.da); - } - const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance.parent, vnode); - } - instance.isDeactivated = true; - }, parentSuspense); - if (process.env.NODE_ENV !== 'production' || false) { - // Update components tree - devtoolsComponentAdded(instance); - } + + return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver); }; - 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) => { - const name = getComponentName(vnode.type); - if (name && (!filter || !filter(name))) { - pruneCacheEntry(key); - } - }); + } + + var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) + }; + var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) + }; + var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) + }; + var shallowReadonlyCollectionHandlers = { + get: 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."); } - function pruneCacheEntry(key) { - const 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], - ([include, exclude]) => { - 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 - let pendingCacheKey = null; - const 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) => { - const { subTree, suspense } = instance; - const 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 - const da = vnode.component.da; - da && queuePostRenderEffect(da, suspense); - return - } - unmount(cached); - }); - }); - return () => { - pendingCacheKey = null; - if (!slots.default) { - return null - } - const children = slots.default(); - const rawVNode = children[0]; - if (children.length > 1) { - if (process.env.NODE_ENV !== 'production') { - warn(`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 - } - let vnode = getInnerChild(rawVNode); - const comp = vnode.type; - // for async components, name check should be based in its loaded - // inner component if available - const name = getComponentName( - isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp - ); - const { include, exclude, max } = props; - if ( - (include && (!name || !matches(include, name))) || - (exclude && name && matches(exclude, name)) - ) { - current = vnode; - return rawVNode - } - const key = vnode.key == null ? comp : vnode.key; - const 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 -const 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, target = 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". - const wrappedHook = - hook.__wdc || - (hook.__wdc = () => { - // only fire the hook if the target instance is NOT in a deactivated branch. - let current = target; - while (current) { - if (current.isDeactivated) { - return - } - current = current.parent; - } - 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) { - let current = target.parent; - while (current && current.parent) { - if (isKeepAlive(current.parent.vnode)) { - injectToKeepAliveRoot(wrappedHook, type, target, current); - } - current = current.parent; + + 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 injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { - // injectHook wraps the original for error handling, so make sure to remove - // the wrapped version. - const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); -} -function resetShapeFlag(vnode) { - let shapeFlag = vnode.shapeFlag; - if (shapeFlag & 256 /* COMPONENT_SHOULD_KEEP_ALIVE */) { - shapeFlag -= 256; /* COMPONENT_SHOULD_KEEP_ALIVE */ + + function getTargetType(value) { + return value['__v_skip' + /* SKIP */ + ] || !Object.isExtensible(value) ? 0 + /* INVALID */ + : targetTypeMap(toRawType(value)); } - if (shapeFlag & 512 /* COMPONENT_KEPT_ALIVE */) { - shapeFlag -= 512; /* COMPONENT_KEPT_ALIVE */ + + 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); } - vnode.shapeFlag = shapeFlag; -} -function getInnerChild(vnode) { - return vnode.shapeFlag & 128 /* SUSPENSE */ ? vnode.ssContent : vnode -} + /** + * 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 injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const 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". - const wrappedHook = - hook.__weh || - (hook.__weh = (...args) => { - 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); - const res = callWithAsyncErrorHandling(hook, target, type, args); - setCurrentInstance(null); - resetTracking(); - return res - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook - } else if (process.env.NODE_ENV !== 'production') { - const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, '')); - warn( - `${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.`) - ); + + function shallowReactive(target) { + return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap); } -} -const createHook = - (lifecycle) => - (hook, target = currentInstance) => - // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) - (!isInSSRComponentSetup || lifecycle === 'sp') /* SERVER_PREFETCH */ && - injectHook(lifecycle, hook, target); -const onBeforeMount = createHook('bm' /* BEFORE_MOUNT */); -const onMounted = createHook('m' /* MOUNTED */); -const onBeforeUpdate = createHook('bu' /* BEFORE_UPDATE */); -const onUpdated = createHook('u' /* UPDATED */); -const onBeforeUnmount = createHook('bum' /* BEFORE_UNMOUNT */); -const onUnmounted = createHook('um' /* UNMOUNTED */); -const onServerPrefetch = createHook('sp' /* SERVER_PREFETCH */); -const onRenderTriggered = createHook('rtg' /* RENDER_TRIGGERED */); -const onRenderTracked = createHook('rtc' /* RENDER_TRACKED */); -function onErrorCaptured(hook, target = currentInstance) { - injectHook('ec' /* ERROR_CAPTURED */, hook, target); -} + /** + * 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 createDuplicateChecker() { - const cache = Object.create(null); - return (type, key) => { - if (cache[key]) { - warn(`${type} property "${key}" is already defined in ${cache[key]}.`); - } else { - cache[key] = type; - } + + function readonly(target) { + return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap); } -} -let shouldCacheAccess = true; -function applyOptions(instance) { - const options = resolveMergedOptions(instance); - const publicThis = instance.proxy; - const ctx = instance.ctx; - // fixed by xxxxxx - const customApplyOptions = - instance.appContext.config.globalProperties.$applyOptions; - if (customApplyOptions) { - customApplyOptions(options, instance, publicThis); - } - // 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 */); - } - const { - // 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; - const checkDuplicateProperties = - process.env.NODE_ENV !== 'production' ? createDuplicateChecker() : null; - if (process.env.NODE_ENV !== 'production') { - const [propsOptions] = instance.propsOptions; - if (propsOptions) { - for (const 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); - } - if (methods) { - for (const key in methods) { - const methodHandler = methods[key]; - if (isFunction(methodHandler)) { - // In dev mode, we use the `createRenderContext` function to define methods to the proxy target, - // and those are read-only but reconfigurable, so it needs to be redefined here - if (process.env.NODE_ENV !== 'production') { - Object.defineProperty(ctx, key, { - value: methodHandler.bind(publicThis), - configurable: true, - enumerable: true, - writable: true, - }); - } else { - ctx[key] = methodHandler.bind(publicThis); - } - if (process.env.NODE_ENV !== 'production') { - checkDuplicateProperties('Methods' /* METHODS */, key); - } - } else if (process.env.NODE_ENV !== 'production') { - warn( - `Method "${key}" has type "${typeof methodHandler}" in the component definition. ` + - `Did you reference the function correctly?` - ); - } - } + /** + * 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); } - if (dataOptions) { - if (process.env.NODE_ENV !== 'production' && !isFunction(dataOptions)) { - warn( - `The data option must be a function. ` + - `Plain object usage is no longer supported.` - ); - } - const data = dataOptions.call(publicThis, publicThis); - if (process.env.NODE_ENV !== 'production' && isPromise(data)) { - warn( - `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)) { - process.env.NODE_ENV !== 'production' && - warn(`data() should return an object.`); - } else { - instance.data = reactive(data); + + function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject(target)) { if (process.env.NODE_ENV !== 'production') { - for (const key in data) { - checkDuplicateProperties('Data' /* DATA */, key); - // expose data on ctx during dev - if (key[0] !== '$' && key[0] !== '_') { - Object.defineProperty(ctx, key, { - configurable: true, - enumerable: true, - get: () => data[key], - set: NOOP, - }); - } - } - } - } - } - // state initialization complete at this point - start caching access - shouldCacheAccess = true; - if (computedOptions) { - for (const key in computedOptions) { - const opt = computedOptions[key]; - const get = isFunction(opt) - ? opt.bind(publicThis, publicThis) - : isFunction(opt.get) - ? opt.get.bind(publicThis, publicThis) - : NOOP; - if (process.env.NODE_ENV !== 'production' && get === NOOP) { - warn(`Computed property "${key}" has no getter.`); + console.warn("value cannot be made reactive: ".concat(String(target))); } - const set = - !isFunction(opt) && isFunction(opt.set) - ? opt.set.bind(publicThis) - : process.env.NODE_ENV !== 'production' - ? () => { - warn( - `Write operation failed: computed property "${key}" is readonly.` - ); - } - : NOOP; - const c = computed$1({ - get, - set, - }); - Object.defineProperty(ctx, key, { - enumerable: true, - configurable: true, - get: () => c.value, - set: (v) => (c.value = v), - }); - if (process.env.NODE_ENV !== 'production') { - checkDuplicateProperties('Computed' /* COMPUTED */, key); + + 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; } - if (watchOptions) { - for (const key in watchOptions) { - createWatcher(watchOptions[key], ctx, publicThis, key); + + function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value['__v_raw' + /* RAW */ + ]); } + + return !!(value && value['__v_isReactive' + /* IS_REACTIVE */ + ]); } - if (provideOptions) { - const provides = isFunction(provideOptions) - ? provideOptions.call(publicThis) - : provideOptions; - Reflect.ownKeys(provides).forEach((key) => { - provide(key, provides[key]); - }); + + function isReadonly(value) { + return !!(value && value['__v_isReadonly' + /* IS_READONLY */ + ]); } - if (created) { - callHook(created, instance, 'c' /* CREATED */); + + function isProxy(value) { + return isReactive(value) || isReadonly(value); } - 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) { - const 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 = {}; - } + + function toRaw(observed) { + return observed && toRaw(observed['__v_raw' + /* RAW */ + ]) || observed; } - // options that are handled when creating the instance but also need to be - // applied from mixins - if (render && instance.render === NOOP) { - instance.render = render; + + function markRaw(value) { + def(value, '__v_skip' + /* SKIP */ + , true); + return value; } - if (inheritAttrs != null) { - instance.inheritAttrs = inheritAttrs; + + var convert = function convert(val) { + return isObject(val) ? reactive(val) : val; + }; + + function isRef(r) { + return Boolean(r && r.__v_isRef === true); } - // asset options. - if (components) instance.components = components; - if (directives) instance.directives = directives; -} -function resolveInjections( - injectOptions, - ctx, - checkDuplicateProperties = NOOP -) { - if (isArray(injectOptions)) { - injectOptions = normalizeInject(injectOptions); - } - for (const key in injectOptions) { - const opt = injectOptions[key]; - if (isObject(opt)) { - if ('default' in opt) { - ctx[key] = inject( - opt.from || key, - opt.default, - true /* treat default function as factory */ - ); - } else { - ctx[key] = inject(opt.from || key); - } - } else { - ctx[key] = inject(opt); - } - if (process.env.NODE_ENV !== 'production') { - checkDuplicateProperties('Inject' /* INJECT */, key); - } + + function ref(value) { + return createRef(value); } -} -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) { - const getter = key.includes('.') - ? createPathGetter(publicThis, key) - : () => publicThis[key]; - if (isString(raw)) { - const handler = ctx[raw]; - if (isFunction(handler)) { - watch(getter, handler); - } else if (process.env.NODE_ENV !== 'production') { - warn(`Invalid watch handler specified by key "${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 { - const handler = isFunction(raw.handler) - ? raw.handler.bind(publicThis) - : ctx[raw.handler]; - if (isFunction(handler)) { - watch(getter, handler, raw); - } else if (process.env.NODE_ENV !== 'production') { - warn(`Invalid watch handler specified by key "${raw.handler}"`, handler); - } - } - } else if (process.env.NODE_ENV !== 'production') { - warn(`Invalid watch option: "${key}"`, raw); + + function shallowRef(value) { + return createRef(value, true); } -} -/** - * 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) { - const base = instance.type; - const { mixins, extends: extendsOptions } = base; - const { - mixins: globalMixins, - optionsCache: cache, - config: { optionMergeStrategies }, - } = instance.appContext; - const cached = cache.get(base); - let resolved; - if (cached) { - resolved = cached; - } else if (!globalMixins.length && !mixins && !extendsOptions) { - { - resolved = base; + + var RefImpl = /*#__PURE__*/function () { + function RefImpl(_rawValue, _shallow) { + _classCallCheck(this, RefImpl); + + this._rawValue = _rawValue; + this._shallow = _shallow; + this.__v_isRef = true; + this._value = _shallow ? _rawValue : convert(_rawValue); } - } else { - resolved = {}; - if (globalMixins.length) { - globalMixins.forEach((m) => - mergeOptions(resolved, m, optionMergeStrategies, true) - ); + + _createClass(RefImpl, [{ + key: "value", + get: function get() { + track(toRaw(this), 'get' + /* GET */ + , 'value'); + return this._value; + }, + set: function set(newVal) { + if (hasChanged(toRaw(newVal), this._rawValue)) { + this._rawValue = newVal; + this._value = this._shallow ? newVal : convert(newVal); + trigger(toRaw(this), 'set' + /* SET */ + , 'value', newVal); + } + } + }]); + + return RefImpl; + }(); + + function createRef(rawValue) { + var shallow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (isRef(rawValue)) { + return rawValue; } - mergeOptions(resolved, base, optionMergeStrategies); + + return new RefImpl(rawValue, shallow); } - cache.set(base, resolved); - return resolved -} -function mergeOptions(to, from, strats, asMixin = false) { - const { mixins, extends: extendsOptions } = from; - if (extendsOptions) { - mergeOptions(to, extendsOptions, strats, true); - } - if (mixins) { - mixins.forEach((m) => mergeOptions(to, m, strats, true)); - } - for (const key in from) { - if (asMixin && key === 'expose') { - process.env.NODE_ENV !== 'production' && - warn( - `"expose" option is ignored when declared in mixins or extends. ` + - `It should only be declared in the base component itself.` - ); - } else { - const strat = internalOptionMergeStrats[key] || (strats && strats[key]); - to[key] = strat ? strat(to[key], from[key]) : from[key]; - } + + function triggerRef(ref) { + trigger(toRaw(ref), 'set' + /* SET */ + , 'value', process.env.NODE_ENV !== 'production' ? ref.value : void 0); } - return to -} -const 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, - destroyed: 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 unref(ref) { + return isRef(ref) ? ref.value : ref; } -} -function mergeInject(to, from) { - return mergeObjectOptions(normalizeInject(to), normalizeInject(from)) -} -function normalizeInject(raw) { - if (isArray(raw)) { - const res = {}; - for (let i = 0; i < raw.length; i++) { - res[raw[i]] = raw[i]; + + var shallowUnwrapHandlers = { + get: function get(target, key, receiver) { + return unref(Reflect.get(target, key, receiver)); + }, + set: function 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); + } } - return res + }; + + function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); } - 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 - const merged = extend(Object.create(null), to); - for (const key in from) { - merged[key] = mergeAsArray(to[key], from[key]); - } - return merged -} -function initProps( - instance, - rawProps, - isStateful, // result of bitwise flag comparison - isSSR = false -) { - const props = {}; - const attrs = {}; - def(attrs, InternalObjectKey, 1); - instance.propsDefaults = Object.create(null); - setFullProps(instance, rawProps, props, attrs); - // ensure all declared prop keys are present - for (const key in instance.propsOptions[0]) { - if (!(key in props)) { - props[key] = undefined; - } - } - // validation - if (process.env.NODE_ENV !== 'production') { - 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; + var CustomRefImpl = /*#__PURE__*/function () { + function CustomRefImpl(factory) { + var _this7 = this; + + _classCallCheck(this, CustomRefImpl); + + this.__v_isRef = true; + + var _factory = factory(function () { + return track(_this7, 'get' + /* GET */ + , + /* GET */ + 'value'); + }, function () { + return trigger(_this7, 'set' + /* SET */ + , + /* SET */ + 'value'); + }), + get = _factory.get, + set = _factory.set; + + this._get = get; + this._set = set; } - } - instance.attrs = attrs; -} -function updateProps(instance, rawProps, rawPrevProps, optimized) { - const { - props, - attrs, - vnode: { patchFlag }, - } = instance; - const rawCurrentProps = toRaw(props); - const [options] = instance.propsOptions; - let 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 - !( - process.env.NODE_ENV !== 'production' && - (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. - const propsToUpdate = instance.vnode.dynamicProps; - for (let i = 0; i < propsToUpdate.length; i++) { - let key = propsToUpdate[i]; - // PROPS flag guarantees rawProps to be non-null - const 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 { - const camelizedKey = camelize(key); - props[camelizedKey] = resolvePropValue( - options, - rawCurrentProps, - camelizedKey, - value, - instance, - false /* isAbsent */ - ); - } - } else { - if (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } + + _createClass(CustomRefImpl, [{ + key: "value", + get: function get() { + return this._get(); + }, + set: function set(newVal) { + this._set(newVal); } + }]); + + return CustomRefImpl; + }(); + + function customRef(factory) { + return new CustomRefImpl(factory); + } + + function toRefs(object) { + if (process.env.NODE_ENV !== 'production' && !isProxy(object)) { + console.warn("toRefs() expects a reactive object but received a plain one."); } - } else { - // full props update. - if (setFullProps(instance, rawProps, props, attrs)) { - hasAttrsChanged = true; + + var ret = isArray(object) ? new Array(object.length) : {}; + + for (var key in object) { + ret[key] = toRef(object, key); } - // in case of dynamic props, check if we need to delete keys from - // the props object - let kebabKey; - for (const key in rawCurrentProps) { - if ( - !rawProps || - // for camelCase - (!hasOwn(rawProps, key) && - // it's possible the original props was passed in as kebab-case - // and converted to camelCase (#955) - ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) - ) { - if (options) { - if ( - rawPrevProps && - // for camelCase - (rawPrevProps[key] !== undefined || - // for kebab-case - rawPrevProps[kebabKey] !== undefined) - ) { - props[key] = resolvePropValue( - options, - rawCurrentProps, - key, - undefined, - instance, - true /* isAbsent */ - ); + + return ret; + } + + var ObjectRefImpl = /*#__PURE__*/function () { + function ObjectRefImpl(_object, _key) { + _classCallCheck(this, ObjectRefImpl); + + this._object = _object; + this._key = _key; + this.__v_isRef = true; + } + + _createClass(ObjectRefImpl, [{ + key: "value", + get: function get() { + return this._object[this._key]; + }, + set: function set(newVal) { + this._object[this._key] = newVal; + } + }]); + + return ObjectRefImpl; + }(); + + function toRef(object, key) { + return isRef(object[key]) ? object[key] : new ObjectRefImpl(object, key); + } + + var ComputedRefImpl = /*#__PURE__*/function () { + function ComputedRefImpl(getter, _setter, isReadonly) { + var _this8 = this; + + _classCallCheck(this, ComputedRefImpl); + + this._setter = _setter; + this._dirty = true; + this.__v_isRef = true; + this.effect = effect(getter, { + lazy: true, + scheduler: function scheduler() { + if (!_this8._dirty) { + _this8._dirty = true; + trigger(toRaw(_this8), 'set' + /* SET */ + , 'value'); } - } else { - delete props[key]; } - } + }); + this['__v_isReadonly' + /* IS_READONLY */ + ] = isReadonly; } - // 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 (const key in attrs) { - if (!rawProps || !hasOwn(rawProps, key)) { - delete attrs[key]; - hasAttrsChanged = true; + + _createClass(ComputedRefImpl, [{ + key: "value", + get: function get() { + // the computed ref may get wrapped by other proxies e.g. readonly() #3376 + var self = toRaw(this); + + if (self._dirty) { + self._value = this.effect(); + self._dirty = false; } + + track(self, 'get' + /* GET */ + , 'value'); + return self._value; + }, + set: function set(newValue) { + this._setter(newValue); } + }]); + + return ComputedRefImpl; + }(); + + function computed(getterOrOptions) { + var getter; + var setter; + + if (isFunction(getterOrOptions)) { + getter = getterOrOptions; + setter = process.env.NODE_ENV !== 'production' ? function () { + console.warn('Write operation failed: computed value is readonly'); + } : NOOP; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; } + + return new ComputedRefImpl(getter, setter, isFunction(getterOrOptions) || !getterOrOptions.set); } - // trigger updates for $attrs in case it's used in component slots - if (hasAttrsChanged) { - trigger(instance, 'set' /* SET */, '$attrs'); + + var stack = []; + + function pushWarningContext(vnode) { + stack.push(vnode); } - if (process.env.NODE_ENV !== 'production') { - validateProps(rawProps || {}, props, instance); + + function popWarningContext() { + stack.pop(); } -} -function setFullProps(instance, rawProps, props, attrs) { - const [options, needCastKeys] = instance.propsOptions; - let hasAttrsChanged = false; - let rawCastValues; - if (rawProps) { - for (let key in rawProps) { - // key, ref are reserved and never passed down - if (isReservedProp(key)) { - continue - } - const value = rawProps[key]; - // prop option names are camelized during normalization, so to support - // kebab -> camel conversion here we need to camelize the key. - let camelKey; - 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 (value !== attrs[key]) { - attrs[key] = value; - hasAttrsChanged = true; - } - } + + function warn(msg) { + // avoid props formatting or warn handler tracking deps that might be mutated + // during patch, leading to infinite recursion. + pauseTracking(); + var instance = stack.length ? stack[stack.length - 1].component : null; + var appWarnHandler = instance && instance.appContext.config.warnHandler; + var trace = getComponentTrace(); + + for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key4 = 1; _key4 < _len3; _key4++) { + args[_key4 - 1] = arguments[_key4]; } - } - if (needCastKeys) { - const rawCurrentProps = toRaw(props); - const castValues = rawCastValues || EMPTY_OBJ; - for (let i = 0; i < needCastKeys.length; i++) { - const key = needCastKeys[i]; - props[key] = resolvePropValue( - options, - rawCurrentProps, - key, - castValues[key], - instance, - !hasOwn(castValues, key) - ); + + if (appWarnHandler) { + callWithErrorHandling(appWarnHandler, instance, 11 + /* APP_WARN_HANDLER */ + , [msg + args.join(''), instance && instance.proxy, trace.map(function (_ref3) { + var vnode = _ref3.vnode; + return "at <".concat(formatComponentName(instance, vnode.type), ">"); + }).join('\n'), trace]); + } else { + var _console; + + var warnArgs = ["[Vue warn]: ".concat(msg)].concat(args); + /* istanbul ignore if */ + + if (trace.length && // avoid spamming console during tests + !false) { + warnArgs.push.apply(warnArgs, ["\n"].concat(_toConsumableArray(formatTrace(trace)))); + } + + (_console = console).warn.apply(_console, _toConsumableArray(warnArgs)); } + + resetTracking(); } - return hasAttrsChanged -} -function resolvePropValue(options, props, key, value, instance, isAbsent) { - const opt = options[key]; - if (opt != null) { - const hasDefault = hasOwn(opt, 'default'); - // default values - if (hasDefault && value === undefined) { - const defaultValue = opt.default; - if (opt.type !== Function && isFunction(defaultValue)) { - const { propsDefaults } = instance; - if (key in propsDefaults) { - value = propsDefaults[key]; - } else { - setCurrentInstance(instance); - value = propsDefaults[key] = defaultValue.call(null, props); - setCurrentInstance(null); - } + + function getComponentTrace() { + var currentVNode = stack[stack.length - 1]; + + if (!currentVNode) { + return []; + } // we can't just use the stack because it will be incomplete during updates + // that did not start from the root. Re-construct the parent chain using + // instance parent pointers. + + + var normalizedStack = []; + + while (currentVNode) { + var last = normalizedStack[0]; + + if (last && last.vnode === currentVNode) { + last.recurseCount++; } 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; + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); } + + var parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; } + + return normalizedStack; } - return value -} -function normalizePropsOptions(comp, appContext, asMixin = false) { - const cache = appContext.propsCache; - const cached = cache.get(comp); - if (cached) { - return cached - } - const raw = comp.props; - const normalized = {}; - const needCastKeys = []; - // apply mixin/extends props - let hasExtends = false; - if (!isFunction(comp)) { - const extendProps = (raw) => { - hasExtends = true; - const [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); + /* istanbul ignore next */ + + + function formatTrace(trace) { + var logs = []; + trace.forEach(function (entry, i) { + logs.push.apply(logs, _toConsumableArray(i === 0 ? [] : ["\n"]).concat(_toConsumableArray(formatTraceEntry(entry)))); + }); + return logs; + } + + function formatTraceEntry(_ref4) { + var vnode = _ref4.vnode, + recurseCount = _ref4.recurseCount; + var postfix = recurseCount > 0 ? "... (".concat(recurseCount, " recursive calls)") : ""; + var isRoot = vnode.component ? vnode.component.parent == null : false; + var open = " at <".concat(formatComponentName(vnode.component, vnode.type, isRoot)); + var close = ">" + postfix; + return vnode.props ? [open].concat(_toConsumableArray(formatProps(vnode.props)), [close]) : [open + close]; + } + /* istanbul ignore next */ + + + function formatProps(props) { + var res = []; + var keys = Object.keys(props); + keys.slice(0, 3).forEach(function (key) { + res.push.apply(res, _toConsumableArray(formatProp(key, props[key]))); + }); + + if (keys.length > 3) { + res.push(" ..."); } - if (comp.mixins) { - comp.mixins.forEach(extendProps); + + return res; + } + /* istanbul ignore next */ + + + function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value); + return raw ? value : ["".concat(key, "=").concat(value)]; + } else if (typeof value === 'number' || typeof value === 'boolean' || value == null) { + return raw ? value : ["".concat(key, "=").concat(value)]; + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : ["".concat(key, "=Ref<"), value, ">"]; + } else if (isFunction(value)) { + return ["".concat(key, "=fn").concat(value.name ? "<".concat(value.name, ">") : "")]; + } else { + value = toRaw(value); + return raw ? value : ["".concat(key, "="), value]; } } - if (!raw && !hasExtends) { - cache.set(comp, EMPTY_ARR); - return EMPTY_ARR + + var ErrorTypeStrings = { + ['bc' + /* BEFORE_CREATE */ + ]: 'beforeCreate hook', + ['c' + /* CREATED */ + ]: 'created hook', + ['bm' + /* BEFORE_MOUNT */ + ]: 'beforeMount hook', + ['m' + /* MOUNTED */ + ]: 'mounted hook', + ['bu' + /* BEFORE_UPDATE */ + ]: 'beforeUpdate hook', + ['u' + /* UPDATED */ + ]: 'updated', + ['bum' + /* BEFORE_UNMOUNT */ + ]: 'beforeUnmount hook', + ['um' + /* UNMOUNTED */ + ]: 'unmounted hook', + ['a' + /* ACTIVATED */ + ]: 'activated hook', + ['da' + /* DEACTIVATED */ + ]: 'deactivated hook', + ['ec' + /* ERROR_CAPTURED */ + ]: 'errorCaptured hook', + ['rtc' + /* RENDER_TRACKED */ + ]: 'renderTracked hook', + ['rtg' + /* RENDER_TRIGGERED */ + ]: 'renderTriggered hook', + [0 + /* SETUP_FUNCTION */ + ]: 'setup function', + [1 + /* RENDER_FUNCTION */ + ]: 'render function', + [2 + /* WATCH_GETTER */ + ]: 'watcher getter', + [3 + /* WATCH_CALLBACK */ + ]: 'watcher callback', + [4 + /* WATCH_CLEANUP */ + ]: 'watcher cleanup function', + [5 + /* NATIVE_EVENT_HANDLER */ + ]: 'native event handler', + [6 + /* COMPONENT_EVENT_HANDLER */ + ]: 'component event handler', + [7 + /* VNODE_HOOK */ + ]: 'vnode hook', + [8 + /* DIRECTIVE_HOOK */ + ]: 'directive hook', + [9 + /* TRANSITION_HOOK */ + ]: 'transition hook', + [10 + /* APP_ERROR_HANDLER */ + ]: 'app errorHandler', + [11 + /* APP_WARN_HANDLER */ + ]: 'app warnHandler', + [12 + /* FUNCTION_REF */ + ]: 'ref function', + [13 + /* ASYNC_COMPONENT_LOADER */ + ]: 'async component loader', + [14 + /* SCHEDULER */ + ]: 'scheduler flush. This is likely a Vue internals bug. ' + 'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/vue-next' + }; + + function callWithErrorHandling(fn, instance, type, args) { + var res; + + try { + res = args ? fn.apply(void 0, _toConsumableArray(args)) : fn(); + } catch (err) { + handleError(err, instance, type); + } + + return res; } - if (isArray(raw)) { - for (let i = 0; i < raw.length; i++) { - if (process.env.NODE_ENV !== 'production' && !isString(raw[i])) { - warn(`props must be strings when using array syntax.`, raw[i]); - } - const normalizedKey = camelize(raw[i]); - if (validatePropName(normalizedKey)) { - normalized[normalizedKey] = EMPTY_OBJ; + + function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + var res = callWithErrorHandling(fn, instance, type, args); + + if (res && isPromise(res)) { + res.catch(function (err) { + handleError(err, instance, type); + }); } + + return res; } - } else if (raw) { - if (process.env.NODE_ENV !== 'production' && !isObject(raw)) { - warn(`invalid props options`, raw); + + var values = []; + + for (var i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); } - for (const key in raw) { - const normalizedKey = camelize(key); - if (validatePropName(normalizedKey)) { - const opt = raw[key]; - const prop = (normalized[normalizedKey] = - isArray(opt) || isFunction(opt) ? { type: opt } : opt); - if (prop) { - const booleanIndex = getTypeIndex(Boolean, prop.type); - const 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); + + return values; + } + + function handleError(err, instance, type) { + var throwInDev = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var contextVNode = instance ? instance.vnode : null; + + if (instance) { + var cur = instance.parent; // the exposed instance is the render proxy to keep it consistent with 2.x + + var exposedInstance = instance.proxy; // in production the hook receives only the error code + + var errorInfo = process.env.NODE_ENV !== 'production' ? ErrorTypeStrings[type] : type; + + while (cur) { + var errorCapturedHooks = cur.ec; + + if (errorCapturedHooks) { + for (var i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } } } + + cur = cur.parent; + } // app-level handling + + + var appErrorHandler = instance.appContext.config.errorHandler; + + if (appErrorHandler) { + callWithErrorHandling(appErrorHandler, null, 10 + /* APP_ERROR_HANDLER */ + , [err, exposedInstance, errorInfo]); + return; } } + + logError(err, type, contextVNode, throwInDev); } - const res = [normalized, needCastKeys]; - cache.set(comp, res); - return res -} -function validatePropName(key) { - if (key[0] !== '$') { - return true - } else if (process.env.NODE_ENV !== 'production') { - warn(`Invalid prop name: "${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) { - const match = ctor && ctor.toString().match(/^\s*function (\w+)/); - return match ? match[1] : '' -} -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) { - const resolvedValues = toRaw(props); - const options = instance.propsOptions[0]; - for (const key in options) { - let 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) { - const { type, required, validator } = prop; - // required! - if (required && isAbsent) { - warn('Missing required prop: "' + name + '"'); - return - } - // missing but optional - if (value == null && !prop.required) { - return - } - // type check - if (type != null && type !== true) { - let isValid = false; - const types = isArray(type) ? type : [type]; - const expectedTypes = []; - // value is valid as long as one of the specified types match - for (let i = 0; i < types.length && !isValid; i++) { - const { valid, expectedType } = assertType(value, types[i]); - expectedTypes.push(expectedType || ''); - isValid = valid; - } - if (!isValid) { - warn(getInvalidTypeMessage(name, value, expectedTypes)); - return - } - } - // custom validator - if (validator && !validator(value)) { - warn('Invalid prop: custom validator check failed for prop "' + name + '".'); - } -} -const isSimpleType = /*#__PURE__*/ makeMap( - 'String,Number,Boolean,Function,Symbol,BigInt' -); -/** - * dev only - */ -function assertType(value, type) { - let valid; - const expectedType = getType(type); - if (isSimpleType(expectedType)) { - const 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 { - valid = value instanceof type; - } - return { - valid, - expectedType, - } -} -/** - * dev only - */ -function getInvalidTypeMessage(name, value, expectedTypes) { - let message = - `Invalid prop: type check failed for prop "${name}".` + - ` Expected ${expectedTypes.map(capitalize).join(', ')}`; - const expectedType = expectedTypes[0]; - const receivedType = toRawType(value); - const expectedValue = styleValue(value, expectedType); - const receivedValue = styleValue(value, receivedType); - // check if we need to specify expected value - if ( - expectedTypes.length === 1 && - isExplicable(expectedType) && - !isBoolean(expectedType, receivedType) - ) { - message += ` with value ${expectedValue}`; - } - message += `, got ${receivedType} `; - // check if we need to specify received value - if (isExplicable(receivedType)) { - message += `with value ${receivedValue}.`; - } - return message -} -/** - * dev only - */ -function styleValue(value, type) { - if (type === 'String') { - return `"${value}"` - } else if (type === 'Number') { - return `${Number(value)}` - } else { - return `${value}` - } -} -/** - * dev only - */ -function isExplicable(type) { - const explicitTypes = ['string', 'number', 'boolean']; - return explicitTypes.some((elem) => type.toLowerCase() === elem) -} -/** - * dev only - */ -function isBoolean(...args) { - return args.some((elem) => elem.toLowerCase() === 'boolean') -} -const isInternalKey = (key) => key[0] === '_' || key === '$stable'; -const normalizeSlotValue = (value) => - isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)]; -const normalizeSlot = (key, rawSlot, ctx) => { - const normalized = withCtx((props) => { - if (process.env.NODE_ENV !== 'production' && currentInstance) { - warn( - `Slot "${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(props)) - }, ctx); - normalized._c = false; - return normalized -}; -const normalizeObjectSlots = (rawSlots, slots, instance) => { - const ctx = rawSlots._ctx; - for (const key in rawSlots) { - if (isInternalKey(key)) continue - const value = rawSlots[key]; - if (isFunction(value)) { - slots[key] = normalizeSlot(key, value, ctx); - } else if (value != null) { - if (process.env.NODE_ENV !== 'production' && !false) { - warn( - `Non-function value encountered for slot "${key}". ` + - `Prefer function slots for better performance.` - ); + function logError(err, type, contextVNode) { + var throwInDev = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + + if (process.env.NODE_ENV !== 'production') { + var info = ErrorTypeStrings[type]; + + if (contextVNode) { + pushWarningContext(contextVNode); + } + + warn("Unhandled error".concat(info ? " during execution of ".concat(info) : "")); + + if (contextVNode) { + popWarningContext(); + } // crash in dev by default so it's more noticeable + + + if (throwInDev) { + throw err; + } else { + console.error(err); } - const normalized = normalizeSlotValue(value); - slots[key] = () => normalized; - } - } -}; -const normalizeVNodeSlots = (instance, children) => { - if ( - process.env.NODE_ENV !== 'production' && - !isKeepAlive(instance.vnode) && - !false - ) { - warn( - `Non-function value encountered for default slot. ` + - `Prefer function slots for better performance.` - ); - } - const normalized = normalizeSlotValue(children); - instance.slots.default = () => normalized; -}; -const initSlots = (instance, children) => { - if (instance.vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) { - const 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 = {})); + // recover in prod to reduce the impact on end-user + console.error(err); } - } else { - instance.slots = {}; - if (children) { - normalizeVNodeSlots(instance, children); + } + + var isFlushing = false; + var isFlushPending = false; + var queue = []; + var flushIndex = 0; + var pendingPreFlushCbs = []; + var activePreFlushCbs = null; + var preFlushIndex = 0; + var pendingPostFlushCbs = []; + var activePostFlushCbs = null; + var postFlushIndex = 0; + var resolvedPromise = Promise.resolve(); + var currentFlushPromise = null; + var currentPreFlushParentJob = null; + var RECURSION_LIMIT = 100; + + function nextTick(fn) { + var p = currentFlushPromise || resolvedPromise; + return fn ? p.then(this ? fn.bind(this) : fn) : p; + } // #2768 + // Use binary-search to find a suitable position in the queue, + // so that the queue maintains the increasing order of job's id, + // which can prevent the job from being skipped and also can avoid repeated patching. + + + function findInsertionIndex(job) { + // the start index should be `flushIndex + 1` + var start = flushIndex + 1; + var end = queue.length; + var jobId = getId(job); + + while (start < end) { + var middle = start + end >>> 1; + var middleJobId = getId(queue[middle]); + middleJobId < jobId ? start = middle + 1 : end = middle; } + + return start; } - def(instance.slots, InternalObjectKey, 1); -}; -const updateSlots = (instance, children, optimized) => { - const { vnode, slots } = instance; - let needDeletionCheck = true; - let deletionComparisonTarget = EMPTY_OBJ; - if (vnode.shapeFlag & 32 /* SLOTS_CHILDREN */) { - const type = children._; - if (type) { - // compiled slots. - if (process.env.NODE_ENV !== 'production' && 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; + + function queueJob(job) { + // the dedupe search uses the startIndex argument of Array.includes() + // by default the search index includes the current job that is being run + // so it cannot recursively trigger itself again. + // if the job is a watch() callback, the search will start with a +1 index to + // allow it recursively trigger itself - it is the user's responsibility to + // ensure it doesn't end up in an infinite loop. + if ((!queue.length || !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) && job !== currentPreFlushParentJob) { + var pos = findInsertionIndex(job); + + if (pos > -1) { + queue.splice(pos, 0, job); } 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._; - } + queue.push(job); } - } else { - needDeletionCheck = !children.$stable; - normalizeObjectSlots(children, slots); + + queueFlush(); } - 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 (const key in slots) { - if (!isInternalKey(key) && !(key in deletionComparisonTarget)) { - delete slots[key]; - } + + function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true; + currentFlushPromise = resolvedPromise.then(flushJobs); } } -}; -/** -Runtime helper for applying directives to a vnode. Example usage: + function invalidateJob(job) { + var i = queue.indexOf(job); -const comp = resolveComponent('comp') -const foo = resolveDirective('foo') -const bar = resolveDirective('bar') - -return withDirectives(h(comp), [ - [foo, this.x], - [bar, this.y] -]) -*/ -const isBuiltInDirective = /*#__PURE__*/ makeMap( - 'bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text' -); -function validateDirectiveName(name) { - if (isBuiltInDirective(name)) { - warn('Do not use built-in directive ids as custom directive id: ' + name); + if (i > flushIndex) { + queue.splice(i, 1); + } } -} -/** - * Adds directives to a VNode. - */ -function withDirectives(vnode, directives) { - const internalInstance = currentRenderingInstance; - if (internalInstance === null) { - process.env.NODE_ENV !== 'production' && - warn(`withDirectives can only be used inside render functions.`); - return vnode - } - const instance = internalInstance.proxy; - const bindings = vnode.dirs || (vnode.dirs = []); - for (let i = 0; i < directives.length; i++) { - let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; - if (isFunction(dir)) { - dir = { - mounted: dir, - updated: dir, - }; - } - bindings.push({ - dir, - instance, - value, - oldValue: void 0, - arg, - modifiers, - }); - } - return vnode -} -function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; - } - let hook = binding.dir[name]; - if (hook) { - // 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 queueCb(cb, activeQueue, pendingQueue, index) { + if (!isArray(cb)) { + if (!activeQueue || !activeQueue.includes(cb, cb.allowRecurse ? index + 1 : index)) { + pendingQueue.push(cb); + } + } else { + // if cb is an array, it is a component lifecycle hook which can only be + // triggered by a job, which is already deduped in the main queue, so + // we can skip duplicate check here to improve perf + pendingQueue.push.apply(pendingQueue, _toConsumableArray(cb)); } + + queueFlush(); } -} -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(), + function queuePreFlushCb(cb) { + queueCb(cb, activePreFlushCbs, pendingPreFlushCbs, preFlushIndex); } -} -let uid$1 = 0; -function createAppAPI(render, hydrate) { - return function createApp(rootComponent, rootProps = null) { - if (rootProps != null && !isObject(rootProps)) { - process.env.NODE_ENV !== 'production' && - warn(`root props passed to app.mount() must be an object.`); - rootProps = null; - } - const context = createAppContext(); - const installedPlugins = new Set(); - let isMounted = false; - const app = (context.app = { - _uid: uid$1++, - _component: rootComponent, - _props: rootProps, - _container: null, - _context: context, - _instance: null, - version, - get config() { - return context.config - }, - set config(v) { - if (process.env.NODE_ENV !== 'production') { - warn( - `app.config cannot be replaced. Modify individual options instead.` - ); - } - }, - use(plugin, ...options) { - if (installedPlugins.has(plugin)) { - process.env.NODE_ENV !== 'production' && - warn(`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 if (process.env.NODE_ENV !== 'production') { - warn( - `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 if (process.env.NODE_ENV !== 'production') { - warn( - 'Mixin has already been applied to target app' + - (mixin.name ? `: ${mixin.name}` : '') - ); - } - } - return app - }, - component(name, component) { - if (process.env.NODE_ENV !== 'production') { - validateComponentName(name, context.config); - } - if (!component) { - return context.components[name] - } - if (process.env.NODE_ENV !== 'production' && context.components[name]) { - warn(`Component "${name}" has already been registered in target app.`); - } - context.components[name] = component; - return app - }, - directive(name, directive) { - if (process.env.NODE_ENV !== 'production') { - validateDirectiveName(name); - } - if (!directive) { - return context.directives[name] - } - if (process.env.NODE_ENV !== 'production' && context.directives[name]) { - warn(`Directive "${name}" has already been registered in target app.`); - } - context.directives[name] = directive; - return app - }, - mount(rootContainer, isHydrate, isSVG) { - if (!isMounted) { - const 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 - if (process.env.NODE_ENV !== 'production') { - 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; - if (process.env.NODE_ENV !== 'production' || false) { - app._instance = vnode.component; - devtoolsInitApp(app, version); - } - return vnode.component.proxy - } else if (process.env.NODE_ENV !== 'production') { - warn( - `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); - if (process.env.NODE_ENV !== 'production' || false) { - app._instance = null; - devtoolsUnmountApp(app); - } - delete app._container.__vue_app__; - } else if (process.env.NODE_ENV !== 'production') { - warn(`Cannot unmount an app that is not mounted.`); - } - }, - provide(key, value) { - if (process.env.NODE_ENV !== 'production' && key in context.provides) { - warn( - `App already provides property with key "${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 queuePostFlushCb(cb) { + queueCb(cb, activePostFlushCbs, pendingPostFlushCbs, postFlushIndex); } -} -let hasMismatch = false; -const isSVGContainer = (container) => - /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject'; -const 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) { - const { - mt: mountComponent, - p: patch, - o: { patchProp, nextSibling, parentNode, remove, insert, createComment }, - } = rendererInternals; - const hydrate = (vnode, container) => { - if (process.env.NODE_ENV !== 'production' && !container.hasChildNodes()) { - warn( - `Attempting to hydrate existing markup but container is empty. ` + - `Performing full mount instead.` - ); - patch(null, vnode, container); - 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.`); - } - }; - const hydrateNode = ( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized = false - ) => { - const isFragmentStart = isComment(node) && node.data === '['; - const onMismatch = () => - handleMismatch( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - isFragmentStart - ); - const { type, ref, shapeFlag } = vnode; - const domType = node.nodeType; - vnode.el = node; - let nextNode = null; - switch (type) { - case Text: - if (domType !== 3 /* TEXT */) { - nextNode = onMismatch(); - } else { - if (node.data !== vnode.children) { - hasMismatch = true; - process.env.NODE_ENV !== 'production' && - warn( - `Hydration text mismatch:` + - `\n- Client: ${JSON.stringify(node.data)}` + - `\n- Server: ${JSON.stringify(vnode.children)}` - ); - node.data = vnode.children; - } - nextNode = nextSibling(node); - } - break - case Comment$1: - 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. - const needToAdoptContent = !vnode.children.length; - for (let 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; - const 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)) { - let subTree; - if (isFragmentStart) { - subTree = createVNode(Fragment); - subTree.anchor = nextNode - ? nextNode.previousSibling - : container.lastChild; - } else { - subTree = - node.nodeType === 3 ? createTextVNode('') : createVNode('div'); - } - subTree.el = node; - vnode.component.subTree = subTree; - } - } else if (shapeFlag & 64 /* TELEPORT */) { - if (domType !== 8 /* COMMENT */) { - nextNode = onMismatch(); - } else { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized, - rendererInternals, - hydrateChildren - ); - } - } else if (shapeFlag & 128 /* SUSPENSE */) { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - isSVGContainer(parentNode(node)), - slotScopeIds, - optimized, - rendererInternals, - hydrateNode - ); - } else if (process.env.NODE_ENV !== 'production') { - warn('Invalid HostVNode type:', type, `(${typeof type})`); - } - } - if (ref != null) { - setRef(ref, null, parentSuspense, vnode); - } - return nextNode - }; - const hydrateElement = ( - el, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ) => { - optimized = optimized || !!vnode.dynamicChildren; - const { props, patchFlag, shapeFlag, dirs } = vnode; - // skip props & children if this is hoisted static nodes - if (patchFlag !== -1 /* HOISTED */) { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, 'created'); - } - // props - if (props) { - if ( - !optimized || - patchFlag & 16 /* FULL_PROPS */ || - patchFlag & 32 /* HYDRATE_EVENTS */ - ) { - for (const key in props) { - if (!isReservedProp(key) && isOn(key)) { - patchProp(el, key, null, props[key]); - } - } - } else if (props.onClick) { - // Fast path for click listeners (which is most often) to avoid - // iterating through props. - patchProp(el, 'onClick', null, props.onClick); - } + function flushPreFlushCbs(seen) { + var parentJob = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (pendingPreFlushCbs.length) { + currentPreFlushParentJob = parentJob; + activePreFlushCbs = _toConsumableArray(new Set(pendingPreFlushCbs)); + pendingPreFlushCbs.length = 0; + + if (process.env.NODE_ENV !== 'production') { + seen = seen || new Map(); } - // vnode / directive hooks - let vnodeHooks; - if ((vnodeHooks = props && props.onVnodeBeforeMount)) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); + + for (preFlushIndex = 0; preFlushIndex < activePreFlushCbs.length; preFlushIndex++) { + if (process.env.NODE_ENV !== 'production' && checkRecursiveUpdates(seen, activePreFlushCbs[preFlushIndex])) { + continue; + } + + activePreFlushCbs[preFlushIndex](); } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount'); + + activePreFlushCbs = null; + preFlushIndex = 0; + currentPreFlushParentJob = null; // recursively flush until it drains + + flushPreFlushCbs(seen, parentJob); + } + } + + function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + var deduped = _toConsumableArray(new Set(pendingPostFlushCbs)); + + pendingPostFlushCbs.length = 0; // #1947 already has active queue, nested flushPostFlushCbs call + + if (activePostFlushCbs) { + var _activePostFlushCbs; + + (_activePostFlushCbs = activePostFlushCbs).push.apply(_activePostFlushCbs, _toConsumableArray(deduped)); + + return; } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted'); - }, parentSuspense); + + activePostFlushCbs = deduped; + + if (process.env.NODE_ENV !== 'production') { + seen = seen || new Map(); } - // children - if ( - shapeFlag & 16 /* ARRAY_CHILDREN */ && - // skip if element has innerHTML / textContent - !(props && (props.innerHTML || props.textContent)) - ) { - let next = hydrateChildren( - el.firstChild, - vnode, - el, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - let hasWarned = false; - while (next) { - hasMismatch = true; - if (process.env.NODE_ENV !== 'production' && !hasWarned) { - warn( - `Hydration children mismatch in <${vnode.type}>: ` + - `server rendered element contains more child nodes than client vdom.` - ); - hasWarned = true; - } - // The SSRed DOM contains more nodes than it should. Remove them. - const cur = next; - next = next.nextSibling; - remove(cur); - } - } else if (shapeFlag & 8 /* TEXT_CHILDREN */) { - if (el.textContent !== vnode.children) { - hasMismatch = true; - process.env.NODE_ENV !== 'production' && - warn( - `Hydration text content mismatch in <${vnode.type}>:\n` + - `- Client: ${el.textContent}\n` + - `- Server: ${vnode.children}` - ); - el.textContent = vnode.children; + + activePostFlushCbs.sort(function (a, b) { + return getId(a) - getId(b); + }); + + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + if (process.env.NODE_ENV !== 'production' && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) { + continue; } + + activePostFlushCbs[postFlushIndex](); } + + activePostFlushCbs = null; + postFlushIndex = 0; } - return el.nextSibling + } + + var getId = function getId(job) { + return job.id == null ? Infinity : job.id; }; - const hydrateChildren = ( - node, - parentVNode, - container, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned = false; - for (let i = 0; i < l; i++) { - const vnode = optimized - ? children[i] - : (children[i] = normalizeVNode(children[i])); - if (node) { - node = hydrateNode( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } else if (vnode.type === Text && !vnode.children) { - continue - } else { - hasMismatch = true; - if (process.env.NODE_ENV !== 'production' && !hasWarned) { - warn( - `Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` + - `server rendered element contains fewer child nodes than client vdom.` + + function flushJobs(seen) { + isFlushPending = false; + isFlushing = true; + + if (process.env.NODE_ENV !== 'production') { + seen = seen || new Map(); + } + + flushPreFlushCbs(seen); // Sort queue before flush. + // This ensures that: + // 1. Components are updated from parent to child. (because parent is always + // created before the child so its render effect will have smaller + // priority number) + // 2. If a component is unmounted during a parent component's update, + // its update can be skipped. + + queue.sort(function (a, b) { + return getId(a) - getId(b); + }); + + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + var job = queue[flushIndex]; + + if (job && job.active !== false) { + if (process.env.NODE_ENV !== 'production' && checkRecursiveUpdates(seen, job)) { + continue; + } + + callWithErrorHandling(job, null, 14 + /* SCHEDULER */ ); - hasWarned = true; - } - // the SSRed DOM didn't contain enough nodes. Mount the missing ones. - patch( - null, - vnode, - container, - null, - parentComponent, - parentSuspense, - isSVGContainer(container), - slotScopeIds - ); + } + } + } finally { + flushIndex = 0; + queue.length = 0; + flushPostFlushCbs(seen); + isFlushing = false; + currentFlushPromise = null; // some postFlushCb queued jobs! + // keep flushing until it drains. + + if (queue.length || pendingPreFlushCbs.length || pendingPostFlushCbs.length) { + flushJobs(seen); } } - return node - }; - const hydrateFragment = ( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds - ? slotScopeIds.concat(fragmentSlotScopeIds) - : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren( - nextSibling(node), - vnode, - container, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - if (next && isComment(next) && next.data === ']') { - return nextSibling((vnode.anchor = next)) + } + + function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1); } else { - // fragment didn't hydrate successfully, since we didn't get a end anchor - // back. This should have led to node/children mismatch warnings. - hasMismatch = true; - // since the anchor is missing, we need to create one and insert it - insert((vnode.anchor = createComment(`]`, container)), container, next); // fixed by xxxxxx - return next - } - }; - const handleMismatch = ( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - isFragment - ) => { - hasMismatch = true; - process.env.NODE_ENV !== 'production' && - warn( - `Hydration node mismatch:\n- Client vnode:`, - vnode.type, - `\n- Server rendered DOM:`, - node, - node.nodeType === 3 /* TEXT */ - ? `(text)` - : isComment(node) && node.data === '[' - ? `(start of fragment)` - : `` - ); - vnode.el = null; - if (isFragment) { - // remove excessive fragment nodes - const end = locateClosingAsyncAnchor(node); - while (true) { - const next = nextSibling(node); - if (next && next !== end) { - remove(next); - } else { - break - } + var count = seen.get(fn); + + if (count > RECURSION_LIMIT) { + var instance = fn.ownerInstance; + var componentName = instance && getComponentName(instance.type); + warn("Maximum recursive updates exceeded".concat(componentName ? " in component <".concat(componentName, ">") : "", ". ") + "This means you have a reactive effect that is mutating its own " + "dependencies and thus recursively triggering itself. Possible sources " + "include component template, render function, updated hook or " + "watcher source function."); + return true; + } else { + seen.set(fn, count + 1); } } - const next = nextSibling(node); - const container = parentNode(node); - remove(node); - patch( - null, - vnode, - container, - next, - parentComponent, - parentSuspense, - isSVGContainer(container), - slotScopeIds - ); - return next - }; - const locateClosingAsyncAnchor = (node) => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === '[') match++; - if (node.data === ']') { - if (match === 0) { - return nextSibling(node) - } else { - match--; - } - } - } + } + /* eslint-disable no-restricted-globals */ + + + var isHmrUpdating = false; + var hmrDirtyComponents = new Set(); // Expose the HMR runtime on the window 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. + + if (process.env.NODE_ENV !== 'production') { + var globalObject = typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {}; + globalObject.__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); } - return node - }; - return [hydrate, hydrateNode] -} -let supported; -let perf; -function startMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - perf.mark(`vue-${type}-${instance.uid}`); + record.instances.add(instance); } - if (process.env.NODE_ENV !== 'production' || false) { - devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now()); + + function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); } -} -function endMeasure(instance, type) { - if (instance.appContext.config.performance && isSupported()) { - const startTag = `vue-${type}-${instance.uid}`; - const endTag = startTag + `:end`; - perf.mark(endTag); - perf.measure( - `<${formatComponentName(instance, instance.type)}> ${type}`, - startTag, - endTag - ); - perf.clearMarks(startTag); - perf.clearMarks(endTag); + + function createRecord(id, component) { + if (!component) { + warn("HMR API usage is out of date.\n" + "Please upgrade vue-loader/vite/rollup-plugin-vue or other relevant " + "dependency that handles Vue SFC compilation."); + component = {}; + } + + if (map.has(id)) { + return false; + } + + map.set(id, { + component: isClassComponent(component) ? component.__vccOpts : component, + instances: new Set() + }); + return true; } - if (process.env.NODE_ENV !== 'production' || false) { - devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now()); + + function rerender(id, newRender) { + var record = map.get(id); + if (!record) return; + if (newRender) record.component.render = newRender; // Array.from creates a snapshot which avoids the set being mutated during + // updates + + Array.from(record.instances).forEach(function (instance) { + if (newRender) { + instance.render = newRender; + } + + instance.renderCache = []; // this flag forces child components with slot content to update + + isHmrUpdating = true; + instance.update(); + isHmrUpdating = false; + }); } -} -function isSupported() { - if (supported !== undefined) { - return supported + + function reload(id, newComp) { + var record = map.get(id); + if (!record) return; // Array.from creates a snapshot which avoids the set being mutated during + // updates + + var component = record.component, + instances = record.instances; + + if (!hmrDirtyComponents.has(component)) { + // 1. Update existing comp definition to match new one + newComp = isClassComponent(newComp) ? newComp.__vccOpts : newComp; + extend(component, newComp); + + for (var key in component) { + if (key !== '__file' && !(key in newComp)) { + delete component[key]; + } + } // 2. Mark component dirty. This forces the renderer to replace the component + // on patch. + + + hmrDirtyComponents.add(component); // 3. Make sure to unmark the component after the reload. + + queuePostFlushCb(function () { + hmrDirtyComponents.delete(component); + }); + } + + Array.from(instances).forEach(function (instance) { + 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); + } 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.'); + } + }); } - /* eslint-disable no-restricted-globals */ - if (typeof window !== 'undefined' && window.performance) { - supported = true; - perf = window.performance; - } else { - supported = false; - } - /* eslint-enable no-restricted-globals */ - return supported -} -/** - * This is only called in esm-bundler builds. - * It is called when a renderer is created, in `baseCreateRenderer` so that - * importing runtime-core is side-effects free. - * - * istanbul-ignore-next - */ -function initFeatureFlags() { - let needWarn = false; - if (process.env.NODE_ENV !== 'production' && needWarn) { - console.warn( - `You are running the esm-bundler build of Vue. It is recommended to ` + - `configure your bundler to explicitly replace feature flag globals ` + - `with boolean literals to get proper tree-shaking in the final bundle. ` + - `See http://link.vuejs.org/feature-flags for more details.` - ); + function tryWrap(fn) { + return function (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."); + } + }; } -} -const prodEffectOptions = { - scheduler: queueJob, - // #1801, #2043 component render effects should allow recursive updates - allowRecurse: true, -}; -function createDevEffectOptions(instance) { - return { - scheduler: queueJob, - allowRecurse: true, - onTrack: instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0, - onTrigger: instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0, + var devtools; + + function setDevtoolsHook(hook) { + devtools = hook; } -} -const queuePostRenderEffect = queueEffectWithSuspense; -const setRef = ( - rawRef, - oldRawRef, - parentSuspense, - vnode, - isUnmount = 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 - } - const refValue = - vnode.shapeFlag & 4 /* STATEFUL_COMPONENT */ - ? getExposeProxy(vnode.component) || vnode.component.proxy - : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref } = rawRef; - if (process.env.NODE_ENV !== 'production' && !owner) { - warn( - `Missing ref owner context. ref cannot be used on hoisted vnodes. ` + - `A vnode with ref must be created inside the render function.` - ); - return + + function devtoolsInitApp(app, version) { + // TODO queue if devtools is undefined + if (!devtools) return; + devtools.emit('app:init' + /* APP_INIT */ + , app, version, { + Fragment, + Text, + Comment: Comment$1, + Static + }); } - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs; - const 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; - } + + function devtoolsUnmountApp(app) { + if (!devtools) return; + devtools.emit('app:unmount' + /* APP_UNMOUNT */ + , app); } - if (isString(ref)) { - const doSet = () => { - { - refs[ref] = value; - } - if (hasOwn(setupState, ref)) { - setupState[ref] = value; - } - }; - // #1789: for non-null values, set them after render - // null values means this is unmount and it should not overwrite another - // ref with the same key - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (isRef(ref)) { - const doSet = () => { - ref.value = value; + + 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 function (component) { + if (!devtools) return; + devtools.emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component); }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else if (isFunction(ref)) { - callWithErrorHandling(ref, owner, 12 /* FUNCTION_REF */, [value, refs]); - } else if (process.env.NODE_ENV !== 'production') { - warn('Invalid template ref type:', value, `(${typeof value})`); - } -}; -/** - * The createRenderer function accepts two generic arguments: - * HostNode and HostElement, corresponding to Node and Element types in the - * host environment. For example, for runtime-dom, HostNode would be the DOM - * `Node` interface and HostElement would be the DOM `Element` interface. - * - * Custom renderers can pass in the platform specific types like this: - * - * ``` js - * const { render, createApp } = createRenderer({ - * patchProp, - * ...nodeOps - * }) - * ``` - */ -function createRenderer(options) { - return baseCreateRenderer(options) -} -// Separate API for creating hydration-enabled renderer. -// Hydration logic is only used when calling this function, making it -// tree-shakable. -function createHydrationRenderer(options) { - return baseCreateRenderer(options, createHydrationFunctions) -} -// implementation -function baseCreateRenderer(options, createHydrationFns) { - // compile-time feature flags check - { - initFeatureFlags(); - } - if (process.env.NODE_ENV !== 'production' || false) { - const target = getGlobalThis(); - target.__VUE__ = true; - setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__); - } - const { - insert: hostInsert, - remove: hostRemove, - patchProp: hostPatchProp, - forcePatchProp: hostForcePatchProp, - createElement: hostCreateElement, - createText: hostCreateText, - createComment: hostCreateComment, - setText: hostSetText, - setElementText: hostSetElementText, - parentNode: hostParentNode, - nextSibling: hostNextSibling, - setScopeId: hostSetScopeId = NOOP, - cloneNode: hostCloneNode, - insertStaticContent: hostInsertStaticContent, - } = options; - // Note: functions inside this closure should use `const xxx = () => {}` - // style in order to prevent being inlined by minifiers. - const patch = ( - n1, - n2, - container, - anchor = null, - parentComponent = null, - parentSuspense = null, - isSVG = false, - slotScopeIds = null, - optimized = false - ) => { - // patching & not same type, unmount old tree - if (n1 && !isSameVNodeType(n1, n2)) { - anchor = getNextHostNode(n1); - unmount(n1, parentComponent, parentSuspense, true); - n1 = null; - } - if (n2.patchFlag === -2 /* BAIL */) { - optimized = false; - n2.dynamicChildren = null; - } - const { type, ref, shapeFlag } = n2; - switch (type) { - case Text: - processText(n1, n2, container, anchor); - break - case Comment$1: - processCommentNode(n1, n2, container, anchor); - break - case Static: - if (n1 == null) { - mountStaticNode(n2, container, anchor, isSVG); - } else if (process.env.NODE_ENV !== 'production') { - patchStaticNode(n1, n2, container, isSVG); - } - break - case Fragment: - processFragment( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ); - break - default: - if (shapeFlag & 1 /* ELEMENT */) { - processElement( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ); - } else if (shapeFlag & 6 /* COMPONENT */) { - processComponent( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ); - } else if (shapeFlag & 64 /* TELEPORT */) { - type.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized, - internals - ); - } else if (shapeFlag & 128 /* SUSPENSE */) { - type.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized, - internals - ); - } else if (process.env.NODE_ENV !== 'production') { - warn('Invalid VNode type:', type, `(${typeof type})`); - } - } - // set ref - if (ref != null && parentComponent) { - setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2); - } + } + + var devtoolsPerfStart = /*#__PURE__*/createDevtoolsPerformanceHook('perf:start' + /* PERFORMANCE_START */ + ); + var devtoolsPerfEnd = /*#__PURE__*/createDevtoolsPerformanceHook('perf:end' + /* PERFORMANCE_END */ + ); + + function createDevtoolsPerformanceHook(hook) { + return function (component, type, time) { + if (!devtools) return; + devtools.emit(hook, component.appContext.app, component.uid, component, type, time); + }; + } + + function devtoolsComponentEmit(component, event, params) { + if (!devtools) return; + devtools.emit('component:emit' + /* COMPONENT_EMIT */ + , component.appContext.app, component, event, params); + } + + var globalCompatConfig = { + MODE: 2 }; - const processText = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert( - (n2.el = hostCreateText(n2.children, container)), // fixed by xxxxxx - container, - anchor - ); - } else { - const el = (n2.el = n1.el); - if (n2.children !== n1.children) { - hostSetText(el, n2.children); - } + + function getCompatConfigForKey(key, instance) { + var instanceConfig = instance && instance.type.compatConfig; + + if (instanceConfig && key in instanceConfig) { + return instanceConfig[key]; } - }; - const processCommentNode = (n1, n2, container, anchor) => { - if (n1 == null) { - hostInsert( - (n2.el = hostCreateComment(n2.children || '', container)), // fixed by xxxxxx - container, - anchor - ); - } else { - // there's no support for dynamic comments - n2.el = n1.el; + + return globalCompatConfig[key]; + } + + function isCompatEnabled(key, instance) { + var enableForBuiltIn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + // skip compat for built-in components + if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) { + return false; } - }; - const mountStaticNode = (n2, container, anchor, isSVG) => { -[n2.el, n2.anchor] = hostInsertStaticContent( - n2.children, - container, - anchor, - isSVG, - // pass cached nodes if the static node is being mounted multiple times - // so that runtime-dom can simply cloneNode() instead of inserting new - // HTML - n2.el && [n2.el, n2.anchor] - ); - }; - /** - * Dev / HMR only - */ - const patchStaticNode = (n1, n2, container, isSVG) => { - // static nodes are only patched during dev for HMR - if (n2.children !== n1.children) { - const anchor = hostNextSibling(n1.anchor); - // remove existing - removeStaticNode(n1) - ;[n2.el, n2.anchor] = hostInsertStaticContent( - n2.children, - container, - anchor, - isSVG - ); + + var rawMode = getCompatConfigForKey('MODE', instance) || 2; + var val = getCompatConfigForKey(key, instance); + var mode = isFunction(rawMode) ? rawMode(instance && instance.type) : rawMode; + + if (mode === 2) { + return val !== false; } else { - n2.el = n1.el; - n2.anchor = n1.anchor; + return val === true || val === 'suppress-warning'; } - }; - const moveStaticNode = ({ el, anchor }, container, nextSibling) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostInsert(el, container, nextSibling); - el = next; - } - hostInsert(anchor, container, nextSibling); - }; - const removeStaticNode = ({ el, anchor }) => { - let next; - while (el && el !== anchor) { - next = hostNextSibling(el); - hostRemove(el); - el = next; - } - hostRemove(anchor); - }; - const processElement = ( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ) => { - isSVG = isSVG || n2.type === 'svg'; - if (n1 == null) { - mountElement( - n2, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ); - } else { - patchElement( - n1, - n2, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ); + } + + function emit(instance, event) { + var props = instance.vnode.props || EMPTY_OBJ; + + for (var _len4 = arguments.length, rawArgs = new Array(_len4 > 2 ? _len4 - 2 : 0), _key5 = 2; _key5 < _len4; _key5++) { + rawArgs[_key5 - 2] = arguments[_key5]; } - }; - const mountElement = ( - vnode, - container, - anchor, - parentComponent, - parentSuspense, - isSVG, - slotScopeIds, - optimized - ) => { - let el; - let vnodeHook; - const { type, props, shapeFlag, transition, patchFlag, dirs } = vnode; - if ( - !(process.env.NODE_ENV !== 'production') && - vnode.el && - hostCloneNode !== undefined && - patchFlag === -1 /* HOISTED */ - ) { - // If a vnode has non-null el, it means it's being reused. - // Only static vnodes can be reused, so its mounted DOM nodes should be - // exactly the same, and we can simply do a clone here. - // only do this in production since cloned trees cannot be HMR updated. - el = vnode.el = hostCloneNode(vnode.el); - } else { - el = vnode.el = hostCreateElement( - // fixed by xxxxxx - vnode.type, - container - ); - // mount children first, since some props may rely on child content - // being already rendered, e.g. `