From fa3fe6ab4177bf3a689d29b76812d7115b44fc4e Mon Sep 17 00:00:00 2001 From: wuxp <673254877@qq.com> Date: Fri, 27 May 2022 17:24:27 +0800 Subject: [PATCH] =?UTF-8?q?vue=E4=BD=9C=E4=B8=9A=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E5=94=AF=E5=93=81=E4=BC=9A=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitee/ISSUE_TEMPLATE.zh-CN.md | 26 +- .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 22 +- README.en.md | 72 +- README.md | 74 +- .../0413/1.jpeg" | Bin 0 -> 15753 bytes .../0413/2.jpeg" | Bin 0 -> 31648 bytes .../0413/shop.html" | 58 + .../0413/vue.js" | 12014 ++++++++++ .../0414/1.jpeg" | Bin 0 -> 42977 bytes .../0414/2.jpeg" | Bin 0 -> 6801 bytes .../0414/shopping copy.html" | 99 + .../0414/shopping.html" | 72 + .../0421/.gitignore" | 23 + .../0421/README.md" | 24 + .../0421/babel.config.js" | 5 + .../0421/jsconfig.json" | 19 + .../0421/package-lock.json" | 18835 ++++++++++++++++ .../0421/package.json" | 44 + .../0421/public/favicon.ico" | Bin 0 -> 4286 bytes .../0421/public/index.html" | 17 + .../0421/src/App.vue" | 33 + .../0421/src/assets/logo.png" | Bin 0 -> 6849 bytes .../0421/src/components/Top.vue" | 116 + .../0421/src/main.js" | 12 + .../0421/src/page/Page1.vue" | 48 + .../0421/src/page/Page2.vue" | 59 + .../0421/src/page/Page3.vue" | 73 + .../0421/src/page/Vlu.vue" | 82 + .../0421/src/router/index.js" | 35 + .../0421/vue.config.js" | 4 + .../0428/.gitignore" | 23 + .../0428/README.md" | 24 + .../0428/babel.config.js" | 5 + .../0428/jsconfig.json" | 19 + .../0428/package-lock.json" | 18835 ++++++++++++++++ .../0428/package.json" | 44 + .../0428/public/favicon.ico" | Bin 0 -> 4286 bytes .../0428/public/icon/gouwuchekong.svg" | 1 + .../0428/public/icon/kefu.svg" | 1 + .../0428/public/index.html" | 17 + .../0428/src/App.vue" | 33 + .../0428/src/assets/logo.png" | Bin 0 -> 6849 bytes .../0428/src/components/CartItem.vue" | 86 + .../0428/src/components/Top.vue" | 123 + .../0428/src/data/product.js" | 49 + .../0428/src/ing/CartList.vue" | 37 + .../0428/src/ing/In1.vue" | 182 + .../0428/src/main.js" | 12 + .../0428/src/page/Page1.vue" | 48 + .../0428/src/page/Page2.vue" | 59 + .../0428/src/page/Page3.vue" | 73 + .../0428/src/page/Vlu.vue" | 149 + .../0428/src/router/index.js" | 49 + .../0428/vue.config.js" | 4 + .../0516/boot.html" | 80 + .../0516/bootstrap.html" | 97 + 56 files changed, 51819 insertions(+), 97 deletions(-) create mode 100644 "\345\220\264\351\246\231\350\220\215/0413/1.jpeg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0413/2.jpeg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0413/shop.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0413/vue.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0414/1.jpeg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0414/2.jpeg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0414/shopping copy.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0414/shopping.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/.gitignore" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/README.md" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/babel.config.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/jsconfig.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/package-lock.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/package.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/public/favicon.ico" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/public/index.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/App.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/assets/logo.png" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/components/Top.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/main.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/page/Page1.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/page/Page2.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/page/Page3.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/page/Vlu.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/src/router/index.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0421/vue.config.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/.gitignore" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/README.md" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/babel.config.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/jsconfig.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/package-lock.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/package.json" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/public/favicon.ico" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/public/icon/gouwuchekong.svg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/public/icon/kefu.svg" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/public/index.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/App.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/assets/logo.png" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/components/CartItem.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/components/Top.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/data/product.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/ing/CartList.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/ing/In1.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/main.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/page/Page1.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/page/Page2.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/page/Page3.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/page/Vlu.vue" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/src/router/index.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0428/vue.config.js" create mode 100644 "\345\220\264\351\246\231\350\220\215/0516/boot.html" create mode 100644 "\345\220\264\351\246\231\350\220\215/0516/bootstrap.html" diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md index f09d98dd..0992470d 100644 --- a/.gitee/ISSUE_TEMPLATE.zh-CN.md +++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md @@ -1,13 +1,13 @@ -### 该问题是怎么引起的? - - - -### 重现步骤 - - - -### 报错信息 - - - - +### 该问题是怎么引起的? + + + +### 重现步骤 + + + +### 报错信息 + + + + diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md index d470fe28..07e3c6d1 100644 --- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md +++ b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -1,11 +1,11 @@ -### 相关的Issue - - -### 原因(目的、解决的问题等) - - -### 描述(做了什么,变更了什么) - - -### 测试用例(新增、改动、可能影响的功能) - +### 相关的Issue + + +### 原因(目的、解决的问题等) + + +### 描述(做了什么,变更了什么) + + +### 测试用例(新增、改动、可能影响的功能) + diff --git a/README.en.md b/README.en.md index 6083944d..c0cd7265 100644 --- a/README.en.md +++ b/README.en.md @@ -1,36 +1,36 @@ -# 8班vue作业 - -#### Description -vue作业 - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +# 8班vue作业 + +#### Description +vue作业 + +#### Software Architecture +Software architecture description + +#### Installation + +1. xxxx +2. xxxx +3. xxxx + +#### Instructions + +1. xxxx +2. xxxx +3. xxxx + +#### Contribution + +1. Fork the repository +2. Create Feat_xxx branch +3. Commit your code +4. Create Pull Request + + +#### Gitee Feature + +1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md +2. Gitee blog [blog.gitee.com](https://blog.gitee.com) +3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) +4. The most valuable open source project [GVP](https://gitee.com/gvp) +5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) +6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index 1b82e01c..76d161da 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,37 @@ -# 8班vue作业 - -#### 介绍 -vue作业 - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +# 8班vue作业 + +#### 介绍 +vue作业 + +#### 软件架构 +软件架构说明 + + +#### 安装教程 + +1. xxxx +2. xxxx +3. xxxx + +#### 使用说明 + +1. xxxx +2. xxxx +3. xxxx + +#### 参与贡献 + +1. Fork 本仓库 +2. 新建 Feat_xxx 分支 +3. 提交代码 +4. 新建 Pull Request + + +#### 特技 + +1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md +2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) +3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 +4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 +5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) +6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git "a/\345\220\264\351\246\231\350\220\215/0413/1.jpeg" "b/\345\220\264\351\246\231\350\220\215/0413/1.jpeg" new file mode 100644 index 0000000000000000000000000000000000000000..1fd3afb9db9c4516edec0a8682e38ae89ef9c51c GIT binary patch literal 15753 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 V7U04K!2h`U-!=Z<&(9tW{$Kik{|*2E literal 0 HcmV?d00001 diff --git "a/\345\220\264\351\246\231\350\220\215/0413/2.jpeg" "b/\345\220\264\351\246\231\350\220\215/0413/2.jpeg" new file mode 100644 index 0000000000000000000000000000000000000000..3bd40b4e9fff00efb355fe2c748ae9c470dbe5f7 GIT binary patch literal 31648 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 literal 0 HcmV?d00001 diff --git "a/\345\220\264\351\246\231\350\220\215/0413/shop.html" "b/\345\220\264\351\246\231\350\220\215/0413/shop.html" new file mode 100644 index 00000000..e8fcfd3e --- /dev/null +++ "b/\345\220\264\351\246\231\350\220\215/0413/shop.html" @@ -0,0 +1,58 @@ + + + + + + 商品列表 + + + + +
+ +
+ + + + diff --git "a/\345\220\264\351\246\231\350\220\215/0413/vue.js" "b/\345\220\264\351\246\231\350\220\215/0413/vue.js" new file mode 100644 index 00000000..d800532a --- /dev/null +++ "b/\345\220\264\351\246\231\350\220\215/0413/vue.js" @@ -0,0 +1,12014 @@ +/*! + * Vue.js v2.6.14 + * (c) 2014-2021 Evan You + * Released under the MIT License. + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.Vue = factory()); +}(this, function () { 'use strict'; + + /* */ + + var emptyObject = Object.freeze({}); + + // These helpers produce better VM code in JS engines due to their + // explicitness and function inlining. + function isUndef (v) { + return v === undefined || v === null + } + + function isDef (v) { + return v !== undefined && v !== null + } + + function isTrue (v) { + return v === true + } + + function isFalse (v) { + return v === false + } + + /** + * Check if value is primitive. + */ + function isPrimitive (value) { + return ( + typeof value === 'string' || + typeof value === 'number' || + // $flow-disable-line + typeof value === 'symbol' || + typeof value === 'boolean' + ) + } + + /** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + */ + function isObject (obj) { + return obj !== null && typeof obj === 'object' + } + + /** + * Get the raw type string of a value, e.g., [object Object]. + */ + var _toString = Object.prototype.toString; + + function toRawType (value) { + return _toString.call(value).slice(8, -1) + } + + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + function isPlainObject (obj) { + return _toString.call(obj) === '[object Object]' + } + + function isRegExp (v) { + return _toString.call(v) === '[object RegExp]' + } + + /** + * Check if val is a valid array index. + */ + function isValidArrayIndex (val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val) + } + + function isPromise (val) { + return ( + isDef(val) && + typeof val.then === 'function' && + typeof val.catch === 'function' + ) + } + + /** + * Convert a value to a string that is actually rendered. + */ + function toString (val) { + return val == null + ? '' + : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) + ? JSON.stringify(val, null, 2) + : String(val) + } + + /** + * Convert an input value to a number for persistence. + * If the conversion fails, return original string. + */ + function toNumber (val) { + var n = parseFloat(val); + return isNaN(n) ? val : n + } + + /** + * Make a map and return a function for checking if a key + * is in that map. + */ + function makeMap ( + str, + expectsLowerCase + ) { + var map = Object.create(null); + var list = str.split(','); + for (var i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase + ? function (val) { return map[val.toLowerCase()]; } + : function (val) { return map[val]; } + } + + /** + * Check if a tag is a built-in tag. + */ + var isBuiltInTag = makeMap('slot,component', true); + + /** + * Check if an attribute is a reserved attribute. + */ + var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); + + /** + * Remove an item from an array. + */ + function remove (arr, item) { + if (arr.length) { + var index = arr.indexOf(item); + if (index > -1) { + return arr.splice(index, 1) + } + } + } + + /** + * Check whether an object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasOwn (obj, key) { + return hasOwnProperty.call(obj, key) + } + + /** + * Create a cached version of a pure function. + */ + function cached (fn) { + var cache = Object.create(null); + return (function cachedFn (str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)) + }) + } + + /** + * Camelize a hyphen-delimited string. + */ + var camelizeRE = /-(\w)/g; + var camelize = cached(function (str) { + return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }) + }); + + /** + * Capitalize a string. + */ + var capitalize = cached(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1) + }); + + /** + * Hyphenate a camelCase string. + */ + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = cached(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase() + }); + + /** + * Simple bind polyfill for environments that do not support it, + * e.g., PhantomJS 1.x. Technically, we don't need this anymore + * since native bind is now performant enough in most browsers. + * But removing it would mean breaking code that was able to run in + * PhantomJS 1.x, so this must be kept for backward compatibility. + */ + + /* istanbul ignore next */ + function polyfillBind (fn, ctx) { + function boundFn (a) { + var l = arguments.length; + return l + ? l > 1 + ? fn.apply(ctx, arguments) + : fn.call(ctx, a) + : fn.call(ctx) + } + + boundFn._length = fn.length; + return boundFn + } + + function nativeBind (fn, ctx) { + return fn.bind(ctx) + } + + var bind = Function.prototype.bind + ? nativeBind + : polyfillBind; + + /** + * Convert an Array-like object to a real Array. + */ + function toArray (list, start) { + start = start || 0; + var i = list.length - start; + var ret = new Array(i); + while (i--) { + ret[i] = list[i + start]; + } + return ret + } + + /** + * Mix properties into target object. + */ + function extend (to, _from) { + for (var key in _from) { + to[key] = _from[key]; + } + return to + } + + /** + * Merge an Array of Objects into a single Object. + */ + function toObject (arr) { + var res = {}; + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + extend(res, arr[i]); + } + } + return res + } + + /* eslint-disable no-unused-vars */ + + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). + */ + function noop (a, b, c) {} + + /** + * Always return false. + */ + var no = function (a, b, c) { return false; }; + + /* eslint-enable no-unused-vars */ + + /** + * Return the same value. + */ + var identity = function (_) { return _; }; + + /** + * Generate a string containing static keys from compiler modules. + */ + function genStaticKeys (modules) { + return modules.reduce(function (keys, m) { + return keys.concat(m.staticKeys || []) + }, []).join(',') + } + + /** + * Check if two values are loosely equal - that is, + * if they are plain objects, do they have the same shape? + */ + function looseEqual (a, b) { + if (a === b) { return true } + var isObjectA = isObject(a); + var isObjectB = isObject(b); + if (isObjectA && isObjectB) { + try { + var isArrayA = Array.isArray(a); + var isArrayB = Array.isArray(b); + if (isArrayA && isArrayB) { + return a.length === b.length && a.every(function (e, i) { + return looseEqual(e, b[i]) + }) + } else if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime() + } else if (!isArrayA && !isArrayB) { + var keysA = Object.keys(a); + var keysB = Object.keys(b); + return keysA.length === keysB.length && keysA.every(function (key) { + return looseEqual(a[key], b[key]) + }) + } else { + /* istanbul ignore next */ + return false + } + } catch (e) { + /* istanbul ignore next */ + return false + } + } else if (!isObjectA && !isObjectB) { + return String(a) === String(b) + } else { + return false + } + } + + /** + * Return the first index at which a loosely equal value can be + * found in the array (if value is a plain object, the array must + * contain an object of the same shape), or -1 if it is not present. + */ + function looseIndexOf (arr, val) { + for (var i = 0; i < arr.length; i++) { + if (looseEqual(arr[i], val)) { return i } + } + return -1 + } + + /** + * Ensure a function is called only once. + */ + function once (fn) { + var called = false; + return function () { + if (!called) { + called = true; + fn.apply(this, arguments); + } + } + } + + var SSR_ATTR = 'data-server-rendered'; + + var ASSET_TYPES = [ + 'component', + 'directive', + 'filter' + ]; + + var LIFECYCLE_HOOKS = [ + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeUpdate', + 'updated', + 'beforeDestroy', + 'destroyed', + 'activated', + 'deactivated', + 'errorCaptured', + 'serverPrefetch' + ]; + + /* */ + + + + var config = ({ + /** + * Option merge strategies (used in core/util/options) + */ + // $flow-disable-line + optionMergeStrategies: Object.create(null), + + /** + * Whether to suppress warnings. + */ + silent: false, + + /** + * Show production mode tip message on boot? + */ + productionTip: "development" !== 'production', + + /** + * Whether to enable devtools + */ + devtools: "development" !== 'production', + + /** + * Whether to record perf + */ + performance: false, + + /** + * Error handler for watcher errors + */ + errorHandler: null, + + /** + * Warn handler for watcher warns + */ + warnHandler: null, + + /** + * Ignore certain custom elements + */ + ignoredElements: [], + + /** + * Custom user key aliases for v-on + */ + // $flow-disable-line + keyCodes: Object.create(null), + + /** + * Check if a tag is reserved so that it cannot be registered as a + * component. This is platform-dependent and may be overwritten. + */ + isReservedTag: no, + + /** + * Check if an attribute is reserved so that it cannot be used as a component + * prop. This is platform-dependent and may be overwritten. + */ + isReservedAttr: no, + + /** + * Check if a tag is an unknown element. + * Platform-dependent. + */ + isUnknownElement: no, + + /** + * Get the namespace of an element + */ + getTagNamespace: noop, + + /** + * Parse the real tag name for the specific platform. + */ + parsePlatformTagName: identity, + + /** + * Check if an attribute must be bound using property, e.g. value + * Platform-dependent. + */ + mustUseProp: no, + + /** + * Perform updates asynchronously. Intended to be used by Vue Test Utils + * This will significantly reduce performance if set to false. + */ + async: true, + + /** + * Exposed for legacy reasons + */ + _lifecycleHooks: LIFECYCLE_HOOKS + }); + + /* */ + + /** + * unicode letters used for parsing html tags, component names and property paths. + * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname + * skipping \u10000-\uEFFFF due to it freezing up PhantomJS + */ + var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; + + /** + * Check if a string starts with $ or _ + */ + function isReserved (str) { + var c = (str + '').charCodeAt(0); + return c === 0x24 || c === 0x5F + } + + /** + * Define a property. + */ + function def (obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); + } + + /** + * Parse simple path. + */ + var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]")); + function parsePath (path) { + if (bailRE.test(path)) { + return + } + var segments = path.split('.'); + return function (obj) { + for (var i = 0; i < segments.length; i++) { + if (!obj) { return } + obj = obj[segments[i]]; + } + return obj + } + } + + /* */ + + // can we use __proto__? + var hasProto = '__proto__' in {}; + + // Browser environment sniffing + var inBrowser = typeof window !== 'undefined'; + var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; + var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); + var UA = inBrowser && window.navigator.userAgent.toLowerCase(); + var isIE = UA && /msie|trident/.test(UA); + var isIE9 = UA && UA.indexOf('msie 9.0') > 0; + var isEdge = UA && UA.indexOf('edge/') > 0; + var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); + var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); + var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; + var isPhantomJS = UA && /phantomjs/.test(UA); + var isFF = UA && UA.match(/firefox\/(\d+)/); + + // Firefox has a "watch" function on Object.prototype... + var nativeWatch = ({}).watch; + + var supportsPassive = false; + if (inBrowser) { + try { + var opts = {}; + Object.defineProperty(opts, 'passive', ({ + get: function get () { + /* istanbul ignore next */ + supportsPassive = true; + } + })); // https://github.com/facebook/flow/issues/285 + window.addEventListener('test-passive', null, opts); + } catch (e) {} + } + + // this needs to be lazy-evaled because vue may be required before + // vue-server-renderer can set VUE_ENV + var _isServer; + var isServerRendering = function () { + if (_isServer === undefined) { + /* istanbul ignore if */ + if (!inBrowser && !inWeex && typeof global !== 'undefined') { + // detect presence of vue-server-renderer and avoid + // Webpack shimming the process + _isServer = global['process'] && global['process'].env.VUE_ENV === 'server'; + } else { + _isServer = false; + } + } + return _isServer + }; + + // detect devtools + var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + + /* istanbul ignore next */ + function isNative (Ctor) { + return typeof Ctor === 'function' && /native code/.test(Ctor.toString()) + } + + var hasSymbol = + typeof Symbol !== 'undefined' && isNative(Symbol) && + typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); + + var _Set; + /* istanbul ignore if */ // $flow-disable-line + if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; + } else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = /*@__PURE__*/(function () { + function Set () { + this.set = Object.create(null); + } + Set.prototype.has = function has (key) { + return this.set[key] === true + }; + Set.prototype.add = function add (key) { + this.set[key] = true; + }; + Set.prototype.clear = function clear () { + this.set = Object.create(null); + }; + + return Set; + }()); + } + + /* */ + + var warn = noop; + var tip = noop; + var generateComponentTrace = (noop); // work around flow check + var formatComponentName = (noop); + + { + var hasConsole = typeof console !== 'undefined'; + var classifyRE = /(?:^|[-_])(\w)/g; + var classify = function (str) { return str + .replace(classifyRE, function (c) { return c.toUpperCase(); }) + .replace(/[-_]/g, ''); }; + + warn = function (msg, vm) { + var trace = vm ? generateComponentTrace(vm) : ''; + + if (config.warnHandler) { + config.warnHandler.call(null, msg, vm, trace); + } else if (hasConsole && (!config.silent)) { + console.error(("[Vue warn]: " + msg + trace)); + } + }; + + tip = function (msg, vm) { + if (hasConsole && (!config.silent)) { + console.warn("[Vue tip]: " + msg + ( + vm ? generateComponentTrace(vm) : '' + )); + } + }; + + formatComponentName = function (vm, includeFile) { + if (vm.$root === vm) { + return '' + } + var options = typeof vm === 'function' && vm.cid != null + ? vm.options + : vm._isVue + ? vm.$options || vm.constructor.options + : vm; + var name = options.name || options._componentTag; + var file = options.__file; + if (!name && file) { + var match = file.match(/([^/\\]+)\.vue$/); + name = match && match[1]; + } + + return ( + (name ? ("<" + (classify(name)) + ">") : "") + + (file && includeFile !== false ? (" at " + file) : '') + ) + }; + + var repeat = function (str, n) { + var res = ''; + while (n) { + if (n % 2 === 1) { res += str; } + if (n > 1) { str += str; } + n >>= 1; + } + return res + }; + + generateComponentTrace = function (vm) { + if (vm._isVue && vm.$parent) { + var tree = []; + var currentRecursiveSequence = 0; + while (vm) { + if (tree.length > 0) { + var last = tree[tree.length - 1]; + if (last.constructor === vm.constructor) { + currentRecursiveSequence++; + vm = vm.$parent; + continue + } else if (currentRecursiveSequence > 0) { + tree[tree.length - 1] = [last, currentRecursiveSequence]; + currentRecursiveSequence = 0; + } + } + tree.push(vm); + vm = vm.$parent; + } + return '\n\nfound in\n\n' + tree + .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm) + ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)") + : formatComponentName(vm))); }) + .join('\n') + } else { + return ("\n\n(found in " + (formatComponentName(vm)) + ")") + } + }; + } + + /* */ + + var uid = 0; + + /** + * A dep is an observable that can have multiple + * directives subscribing to it. + */ + var Dep = function Dep () { + this.id = uid++; + this.subs = []; + }; + + Dep.prototype.addSub = function addSub (sub) { + this.subs.push(sub); + }; + + Dep.prototype.removeSub = function removeSub (sub) { + remove(this.subs, sub); + }; + + Dep.prototype.depend = function depend () { + if (Dep.target) { + Dep.target.addDep(this); + } + }; + + Dep.prototype.notify = function notify () { + // stabilize the subscriber list first + var subs = this.subs.slice(); + if (!config.async) { + // subs aren't sorted in scheduler if not running async + // we need to sort them now to make sure they fire in correct + // order + subs.sort(function (a, b) { return a.id - b.id; }); + } + for (var i = 0, l = subs.length; i < l; i++) { + subs[i].update(); + } + }; + + // The current target watcher being evaluated. + // This is globally unique because only one watcher + // can be evaluated at a time. + Dep.target = null; + var targetStack = []; + + function pushTarget (target) { + targetStack.push(target); + Dep.target = target; + } + + function popTarget () { + targetStack.pop(); + Dep.target = targetStack[targetStack.length - 1]; + } + + /* */ + + var VNode = function VNode ( + tag, + data, + children, + text, + elm, + context, + componentOptions, + asyncFactory + ) { + this.tag = tag; + this.data = data; + this.children = children; + this.text = text; + this.elm = elm; + this.ns = undefined; + this.context = context; + this.fnContext = undefined; + this.fnOptions = undefined; + this.fnScopeId = undefined; + this.key = data && data.key; + this.componentOptions = componentOptions; + this.componentInstance = undefined; + this.parent = undefined; + this.raw = false; + this.isStatic = false; + this.isRootInsert = true; + this.isComment = false; + this.isCloned = false; + this.isOnce = false; + this.asyncFactory = asyncFactory; + this.asyncMeta = undefined; + this.isAsyncPlaceholder = false; + }; + + var prototypeAccessors = { child: { configurable: true } }; + + // DEPRECATED: alias for componentInstance for backwards compat. + /* istanbul ignore next */ + prototypeAccessors.child.get = function () { + return this.componentInstance + }; + + Object.defineProperties( VNode.prototype, prototypeAccessors ); + + var createEmptyVNode = function (text) { + if ( text === void 0 ) text = ''; + + var node = new VNode(); + node.text = text; + node.isComment = true; + return node + }; + + function createTextVNode (val) { + return new VNode(undefined, undefined, undefined, String(val)) + } + + // optimized shallow clone + // used for static nodes and slot nodes because they may be reused across + // multiple renders, cloning them avoids errors when DOM manipulations rely + // on their elm reference. + function cloneVNode (vnode) { + var cloned = new VNode( + vnode.tag, + vnode.data, + // #7975 + // clone children array to avoid mutating original in case of cloning + // a child. + vnode.children && vnode.children.slice(), + vnode.text, + vnode.elm, + vnode.context, + vnode.componentOptions, + vnode.asyncFactory + ); + cloned.ns = vnode.ns; + cloned.isStatic = vnode.isStatic; + cloned.key = vnode.key; + cloned.isComment = vnode.isComment; + cloned.fnContext = vnode.fnContext; + cloned.fnOptions = vnode.fnOptions; + cloned.fnScopeId = vnode.fnScopeId; + cloned.asyncMeta = vnode.asyncMeta; + cloned.isCloned = true; + return cloned + } + + /* + * not type checking this file because flow doesn't play well with + * dynamically accessing methods on Array prototype + */ + + var arrayProto = Array.prototype; + var arrayMethods = Object.create(arrayProto); + + var methodsToPatch = [ + 'push', + 'pop', + 'shift', + 'unshift', + 'splice', + 'sort', + 'reverse' + ]; + + /** + * Intercept mutating methods and emit events + */ + methodsToPatch.forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + case 'unshift': + inserted = args; + break + case 'splice': + inserted = args.slice(2); + break + } + if (inserted) { ob.observeArray(inserted); } + // notify change + ob.dep.notify(); + return result + }); + }); + + /* */ + + var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + + /** + * In some cases we may want to disable observation inside a component's + * update computation. + */ + var shouldObserve = true; + + function toggleObserving (value) { + shouldObserve = value; + } + + /** + * Observer class that is attached to each observed + * object. Once attached, the observer converts the target + * object's property keys into getter/setters that + * collect dependencies and dispatch updates. + */ + var Observer = function Observer (value) { + this.value = value; + this.dep = new Dep(); + this.vmCount = 0; + def(value, '__ob__', this); + if (Array.isArray(value)) { + if (hasProto) { + protoAugment(value, arrayMethods); + } else { + copyAugment(value, arrayMethods, arrayKeys); + } + this.observeArray(value); + } else { + this.walk(value); + } + }; + + /** + * Walk through all properties and convert them into + * getter/setters. This method should only be called when + * value type is Object. + */ + Observer.prototype.walk = function walk (obj) { + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + defineReactive$$1(obj, keys[i]); + } + }; + + /** + * Observe a list of Array items. + */ + Observer.prototype.observeArray = function observeArray (items) { + for (var i = 0, l = items.length; i < l; i++) { + observe(items[i]); + } + }; + + // helpers + + /** + * Augment a target Object or Array by intercepting + * the prototype chain using __proto__ + */ + function protoAugment (target, src) { + /* eslint-disable no-proto */ + target.__proto__ = src; + /* eslint-enable no-proto */ + } + + /** + * Augment a target Object or Array by defining + * hidden properties. + */ + /* istanbul ignore next */ + function copyAugment (target, src, keys) { + for (var i = 0, l = keys.length; i < l; i++) { + var key = keys[i]; + def(target, key, src[key]); + } + } + + /** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + */ + function observe (value, asRootData) { + if (!isObject(value) || value instanceof VNode) { + return + } + var ob; + if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + ob = value.__ob__; + } else if ( + shouldObserve && + !isServerRendering() && + (Array.isArray(value) || isPlainObject(value)) && + Object.isExtensible(value) && + !value._isVue + ) { + ob = new Observer(value); + } + if (asRootData && ob) { + ob.vmCount++; + } + return ob + } + + /** + * Define a reactive property on an Object. + */ + function defineReactive$$1 ( + obj, + key, + val, + customSetter, + shallow + ) { + var dep = new Dep(); + + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return + } + + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + if ((!getter || setter) && arguments.length === 2) { + val = obj[key]; + } + + var childOb = !shallow && observe(val); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter () { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + dep.depend(); + if (childOb) { + childOb.dep.depend(); + if (Array.isArray(value)) { + dependArray(value); + } + } + } + return value + }, + set: function reactiveSetter (newVal) { + var value = getter ? getter.call(obj) : val; + /* eslint-disable no-self-compare */ + if (newVal === value || (newVal !== newVal && value !== value)) { + return + } + /* eslint-enable no-self-compare */ + if (customSetter) { + customSetter(); + } + // #7981: for accessor properties without setter + if (getter && !setter) { return } + if (setter) { + setter.call(obj, newVal); + } else { + val = newVal; + } + childOb = !shallow && observe(newVal); + dep.notify(); + } + }); + } + + /** + * Set a property on an object. Adds the new property and + * triggers change notification if the property doesn't + * already exist. + */ + function set (target, key, val) { + if (isUndef(target) || isPrimitive(target) + ) { + warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target)))); + } + if (Array.isArray(target) && isValidArrayIndex(key)) { + target.length = Math.max(target.length, key); + target.splice(key, 1, val); + return val + } + if (key in target && !(key in Object.prototype)) { + target[key] = val; + return val + } + var ob = (target).__ob__; + if (target._isVue || (ob && ob.vmCount)) { + warn( + 'Avoid adding reactive properties to a Vue instance or its root $data ' + + 'at runtime - declare it upfront in the data option.' + ); + return val + } + if (!ob) { + target[key] = val; + return val + } + defineReactive$$1(ob.value, key, val); + ob.dep.notify(); + return val + } + + /** + * Delete a property and trigger change if necessary. + */ + function del (target, key) { + if (isUndef(target) || isPrimitive(target) + ) { + warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target)))); + } + if (Array.isArray(target) && isValidArrayIndex(key)) { + target.splice(key, 1); + return + } + var ob = (target).__ob__; + if (target._isVue || (ob && ob.vmCount)) { + warn( + 'Avoid deleting properties on a Vue instance or its root $data ' + + '- just set it to null.' + ); + return + } + if (!hasOwn(target, key)) { + return + } + delete target[key]; + if (!ob) { + return + } + ob.dep.notify(); + } + + /** + * Collect dependencies on array elements when the array is touched, since + * we cannot intercept array element access like property getters. + */ + function dependArray (value) { + for (var e = (void 0), i = 0, l = value.length; i < l; i++) { + e = value[i]; + e && e.__ob__ && e.__ob__.dep.depend(); + if (Array.isArray(e)) { + dependArray(e); + } + } + } + + /* */ + + /** + * Option overwriting strategies are functions that handle + * how to merge a parent option value and a child option + * value into the final value. + */ + var strats = config.optionMergeStrategies; + + /** + * Options with restrictions + */ + { + strats.el = strats.propsData = function (parent, child, vm, key) { + if (!vm) { + warn( + "option \"" + key + "\" can only be used during instance " + + 'creation with the `new` keyword.' + ); + } + return defaultStrat(parent, child) + }; + } + + /** + * Helper that recursively merges two data objects together. + */ + function mergeData (to, from) { + if (!from) { return to } + var key, toVal, fromVal; + + var keys = hasSymbol + ? Reflect.ownKeys(from) + : Object.keys(from); + + for (var i = 0; i < keys.length; i++) { + key = keys[i]; + // in case the object is already observed... + if (key === '__ob__') { continue } + toVal = to[key]; + fromVal = from[key]; + if (!hasOwn(to, key)) { + set(to, key, fromVal); + } else if ( + toVal !== fromVal && + isPlainObject(toVal) && + isPlainObject(fromVal) + ) { + mergeData(toVal, fromVal); + } + } + return to + } + + /** + * Data + */ + function mergeDataOrFn ( + parentVal, + childVal, + vm + ) { + if (!vm) { + // in a Vue.extend merge, both should be functions + if (!childVal) { + return parentVal + } + if (!parentVal) { + return childVal + } + // when parentVal & childVal are both present, + // we need to return a function that returns the + // merged result of both functions... no need to + // check if parentVal is a function here because + // it has to be a function to pass previous merges. + return function mergedDataFn () { + return mergeData( + typeof childVal === 'function' ? childVal.call(this, this) : childVal, + typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal + ) + } + } else { + return function mergedInstanceDataFn () { + // instance merge + var instanceData = typeof childVal === 'function' + ? childVal.call(vm, vm) + : childVal; + var defaultData = typeof parentVal === 'function' + ? parentVal.call(vm, vm) + : parentVal; + if (instanceData) { + return mergeData(instanceData, defaultData) + } else { + return defaultData + } + } + } + } + + strats.data = function ( + parentVal, + childVal, + vm + ) { + if (!vm) { + if (childVal && typeof childVal !== 'function') { + warn( + 'The "data" option should be a function ' + + 'that returns a per-instance value in component ' + + 'definitions.', + vm + ); + + return parentVal + } + return mergeDataOrFn(parentVal, childVal) + } + + return mergeDataOrFn(parentVal, childVal, vm) + }; + + /** + * Hooks and props are merged as arrays. + */ + function mergeHook ( + parentVal, + childVal + ) { + var res = childVal + ? parentVal + ? parentVal.concat(childVal) + : Array.isArray(childVal) + ? childVal + : [childVal] + : parentVal; + return res + ? dedupeHooks(res) + : res + } + + function dedupeHooks (hooks) { + var res = []; + for (var i = 0; i < hooks.length; i++) { + if (res.indexOf(hooks[i]) === -1) { + res.push(hooks[i]); + } + } + return res + } + + LIFECYCLE_HOOKS.forEach(function (hook) { + strats[hook] = mergeHook; + }); + + /** + * Assets + * + * When a vm is present (instance creation), we need to do + * a three-way merge between constructor options, instance + * options and parent options. + */ + function mergeAssets ( + parentVal, + childVal, + vm, + key + ) { + var res = Object.create(parentVal || null); + if (childVal) { + assertObjectType(key, childVal, vm); + return extend(res, childVal) + } else { + return res + } + } + + ASSET_TYPES.forEach(function (type) { + strats[type + 's'] = mergeAssets; + }); + + /** + * Watchers. + * + * Watchers hashes should not overwrite one + * another, so we merge them as arrays. + */ + strats.watch = function ( + parentVal, + childVal, + vm, + key + ) { + // work around Firefox's Object.prototype.watch... + if (parentVal === nativeWatch) { parentVal = undefined; } + if (childVal === nativeWatch) { childVal = undefined; } + /* istanbul ignore if */ + if (!childVal) { return Object.create(parentVal || null) } + { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = {}; + extend(ret, parentVal); + for (var key$1 in childVal) { + var parent = ret[key$1]; + var child = childVal[key$1]; + if (parent && !Array.isArray(parent)) { + parent = [parent]; + } + ret[key$1] = parent + ? parent.concat(child) + : Array.isArray(child) ? child : [child]; + } + return ret + }; + + /** + * Other object hashes. + */ + strats.props = + strats.methods = + strats.inject = + strats.computed = function ( + parentVal, + childVal, + vm, + key + ) { + if (childVal && "development" !== 'production') { + assertObjectType(key, childVal, vm); + } + if (!parentVal) { return childVal } + var ret = Object.create(null); + extend(ret, parentVal); + if (childVal) { extend(ret, childVal); } + return ret + }; + strats.provide = mergeDataOrFn; + + /** + * Default strategy. + */ + var defaultStrat = function (parentVal, childVal) { + return childVal === undefined + ? parentVal + : childVal + }; + + /** + * Validate component names + */ + function checkComponents (options) { + for (var key in options.components) { + validateComponentName(key); + } + } + + function validateComponentName (name) { + if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) { + warn( + 'Invalid component name: "' + name + '". Component names ' + + 'should conform to valid custom element name in html5 specification.' + ); + } + if (isBuiltInTag(name) || config.isReservedTag(name)) { + warn( + 'Do not use built-in or reserved HTML elements as component ' + + 'id: ' + name + ); + } + } + + /** + * Ensure all props option syntax are normalized into the + * Object-based format. + */ + function normalizeProps (options, vm) { + var props = options.props; + if (!props) { return } + var res = {}; + var i, val, name; + if (Array.isArray(props)) { + i = props.length; + while (i--) { + val = props[i]; + if (typeof val === 'string') { + name = camelize(val); + res[name] = { type: null }; + } else { + warn('props must be strings when using array syntax.'); + } + } + } else if (isPlainObject(props)) { + for (var key in props) { + val = props[key]; + name = camelize(key); + res[name] = isPlainObject(val) + ? val + : { type: val }; + } + } else { + warn( + "Invalid value for option \"props\": expected an Array or an Object, " + + "but got " + (toRawType(props)) + ".", + vm + ); + } + options.props = res; + } + + /** + * Normalize all injections into Object-based format + */ + function normalizeInject (options, vm) { + var inject = options.inject; + if (!inject) { return } + var normalized = options.inject = {}; + if (Array.isArray(inject)) { + for (var i = 0; i < inject.length; i++) { + normalized[inject[i]] = { from: inject[i] }; + } + } else if (isPlainObject(inject)) { + for (var key in inject) { + var val = inject[key]; + normalized[key] = isPlainObject(val) + ? extend({ from: key }, val) + : { from: val }; + } + } else { + warn( + "Invalid value for option \"inject\": expected an Array or an Object, " + + "but got " + (toRawType(inject)) + ".", + vm + ); + } + } + + /** + * Normalize raw function directives into object format. + */ + function normalizeDirectives (options) { + var dirs = options.directives; + if (dirs) { + for (var key in dirs) { + var def$$1 = dirs[key]; + if (typeof def$$1 === 'function') { + dirs[key] = { bind: def$$1, update: def$$1 }; + } + } + } + } + + function assertObjectType (name, value, vm) { + if (!isPlainObject(value)) { + warn( + "Invalid value for option \"" + name + "\": expected an Object, " + + "but got " + (toRawType(value)) + ".", + vm + ); + } + } + + /** + * Merge two option objects into a new one. + * Core utility used in both instantiation and inheritance. + */ + function mergeOptions ( + parent, + child, + vm + ) { + { + checkComponents(child); + } + + if (typeof child === 'function') { + child = child.options; + } + + normalizeProps(child, vm); + normalizeInject(child, vm); + normalizeDirectives(child); + + // Apply extends and mixins on the child options, + // but only if it is a raw options object that isn't + // the result of another mergeOptions call. + // Only merged options has the _base property. + if (!child._base) { + if (child.extends) { + parent = mergeOptions(parent, child.extends, vm); + } + if (child.mixins) { + for (var i = 0, l = child.mixins.length; i < l; i++) { + parent = mergeOptions(parent, child.mixins[i], vm); + } + } + } + + var options = {}; + var key; + for (key in parent) { + mergeField(key); + } + for (key in child) { + if (!hasOwn(parent, key)) { + mergeField(key); + } + } + function mergeField (key) { + var strat = strats[key] || defaultStrat; + options[key] = strat(parent[key], child[key], vm, key); + } + return options + } + + /** + * Resolve an asset. + * This function is used because child instances need access + * to assets defined in its ancestor chain. + */ + function resolveAsset ( + options, + type, + id, + warnMissing + ) { + /* istanbul ignore if */ + if (typeof id !== 'string') { + return + } + var assets = options[type]; + // check local registration variations first + if (hasOwn(assets, id)) { return assets[id] } + var camelizedId = camelize(id); + if (hasOwn(assets, camelizedId)) { return assets[camelizedId] } + var PascalCaseId = capitalize(camelizedId); + if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] } + // fallback to prototype chain + var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; + if (warnMissing && !res) { + warn( + 'Failed to resolve ' + type.slice(0, -1) + ': ' + id, + options + ); + } + return res + } + + /* */ + + + + function validateProp ( + key, + propOptions, + propsData, + vm + ) { + var prop = propOptions[key]; + var absent = !hasOwn(propsData, key); + var value = propsData[key]; + // boolean casting + var booleanIndex = getTypeIndex(Boolean, prop.type); + if (booleanIndex > -1) { + if (absent && !hasOwn(prop, 'default')) { + value = false; + } else if (value === '' || value === hyphenate(key)) { + // only cast empty string / same name to boolean if + // boolean has higher priority + var stringIndex = getTypeIndex(String, prop.type); + if (stringIndex < 0 || booleanIndex < stringIndex) { + value = true; + } + } + } + // check default value + if (value === undefined) { + value = getPropDefaultValue(vm, prop, key); + // since the default value is a fresh copy, + // make sure to observe it. + var prevShouldObserve = shouldObserve; + toggleObserving(true); + observe(value); + toggleObserving(prevShouldObserve); + } + { + assertProp(prop, key, value, vm, absent); + } + return value + } + + /** + * Get the default value of a prop. + */ + function getPropDefaultValue (vm, prop, key) { + // no default, return undefined + if (!hasOwn(prop, 'default')) { + return undefined + } + var def = prop.default; + // warn against non-factory defaults for Object & Array + if (isObject(def)) { + warn( + 'Invalid default value for prop "' + key + '": ' + + 'Props with type Object/Array must use a factory function ' + + 'to return the default value.', + vm + ); + } + // the raw prop value was also undefined from previous render, + // return previous default value to avoid unnecessary watcher trigger + if (vm && vm.$options.propsData && + vm.$options.propsData[key] === undefined && + vm._props[key] !== undefined + ) { + return vm._props[key] + } + // call factory function for non-Function types + // a value is Function if its prototype is function even across different execution context + return typeof def === 'function' && getType(prop.type) !== 'Function' + ? def.call(vm) + : def + } + + /** + * Assert whether a prop is valid. + */ + function assertProp ( + prop, + name, + value, + vm, + absent + ) { + if (prop.required && absent) { + warn( + 'Missing required prop: "' + name + '"', + vm + ); + return + } + if (value == null && !prop.required) { + return + } + var type = prop.type; + var valid = !type || type === true; + var expectedTypes = []; + if (type) { + if (!Array.isArray(type)) { + type = [type]; + } + for (var i = 0; i < type.length && !valid; i++) { + var assertedType = assertType(value, type[i], vm); + expectedTypes.push(assertedType.expectedType || ''); + valid = assertedType.valid; + } + } + + var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); + if (!valid && haveExpectedTypes) { + warn( + getInvalidTypeMessage(name, value, expectedTypes), + vm + ); + return + } + var validator = prop.validator; + if (validator) { + if (!validator(value)) { + warn( + 'Invalid prop: custom validator check failed for prop "' + name + '".', + vm + ); + } + } + } + + var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; + + function assertType (value, type, vm) { + var valid; + var expectedType = getType(type); + if (simpleCheckRE.test(expectedType)) { + var t = typeof value; + valid = t === expectedType.toLowerCase(); + // for primitive wrapper objects + if (!valid && t === 'object') { + valid = value instanceof type; + } + } else if (expectedType === 'Object') { + valid = isPlainObject(value); + } else if (expectedType === 'Array') { + valid = Array.isArray(value); + } else { + try { + valid = value instanceof type; + } catch (e) { + warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm); + valid = false; + } + } + return { + valid: valid, + expectedType: expectedType + } + } + + var functionTypeCheckRE = /^\s*function (\w+)/; + + /** + * Use function string name to check built-in types, + * because a simple equality check will fail when running + * across different vms / iframes. + */ + function getType (fn) { + var match = fn && fn.toString().match(functionTypeCheckRE); + return match ? match[1] : '' + } + + function isSameType (a, b) { + return getType(a) === getType(b) + } + + function getTypeIndex (type, expectedTypes) { + if (!Array.isArray(expectedTypes)) { + return isSameType(expectedTypes, type) ? 0 : -1 + } + for (var i = 0, len = expectedTypes.length; i < len; i++) { + if (isSameType(expectedTypes[i], type)) { + return i + } + } + return -1 + } + + function getInvalidTypeMessage (name, value, expectedTypes) { + var message = "Invalid prop: type check failed for prop \"" + name + "\"." + + " Expected " + (expectedTypes.map(capitalize).join(', ')); + var expectedType = expectedTypes[0]; + var receivedType = toRawType(value); + // check if we need to specify expected value + if ( + expectedTypes.length === 1 && + isExplicable(expectedType) && + isExplicable(typeof value) && + !isBoolean(expectedType, receivedType) + ) { + message += " with value " + (styleValue(value, expectedType)); + } + message += ", got " + receivedType + " "; + // check if we need to specify received value + if (isExplicable(receivedType)) { + message += "with value " + (styleValue(value, receivedType)) + "."; + } + return message + } + + function styleValue (value, type) { + if (type === 'String') { + return ("\"" + value + "\"") + } else if (type === 'Number') { + return ("" + (Number(value))) + } else { + return ("" + value) + } + } + + var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; + function isExplicable (value) { + return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }) + } + + function isBoolean () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }) + } + + /* */ + + function handleError (err, vm, info) { + // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. + // See: https://github.com/vuejs/vuex/issues/1505 + pushTarget(); + try { + if (vm) { + var cur = vm; + while ((cur = cur.$parent)) { + var hooks = cur.$options.errorCaptured; + if (hooks) { + for (var i = 0; i < hooks.length; i++) { + try { + var capture = hooks[i].call(cur, err, vm, info) === false; + if (capture) { return } + } catch (e) { + globalHandleError(e, cur, 'errorCaptured hook'); + } + } + } + } + } + globalHandleError(err, vm, info); + } finally { + popTarget(); + } + } + + function invokeWithErrorHandling ( + handler, + context, + args, + vm, + info + ) { + var res; + try { + res = args ? handler.apply(context, args) : handler.call(context); + if (res && !res._isVue && isPromise(res) && !res._handled) { + res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); + // issue #9511 + // avoid catch triggering multiple times when nested calls + res._handled = true; + } + } catch (e) { + handleError(e, vm, info); + } + return res + } + + function globalHandleError (err, vm, info) { + if (config.errorHandler) { + try { + return config.errorHandler.call(null, err, vm, info) + } catch (e) { + // if the user intentionally throws the original error in the handler, + // do not log it twice + if (e !== err) { + logError(e, null, 'config.errorHandler'); + } + } + } + logError(err, vm, info); + } + + function logError (err, vm, info) { + { + warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm); + } + /* istanbul ignore else */ + if ((inBrowser || inWeex) && typeof console !== 'undefined') { + console.error(err); + } else { + throw err + } + } + + /* */ + + var isUsingMicroTask = false; + + var callbacks = []; + var pending = false; + + function flushCallbacks () { + pending = false; + var copies = callbacks.slice(0); + callbacks.length = 0; + for (var i = 0; i < copies.length; i++) { + copies[i](); + } + } + + // Here we have async deferring wrappers using microtasks. + // In 2.5 we used (macro) tasks (in combination with microtasks). + // However, it has subtle problems when state is changed right before repaint + // (e.g. #6813, out-in transitions). + // Also, using (macro) tasks in event handler would cause some weird behaviors + // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). + // So we now use microtasks everywhere, again. + // A major drawback of this tradeoff is that there are some scenarios + // where microtasks have too high a priority and fire in between supposedly + // sequential events (e.g. #4521, #6690, which have workarounds) + // or even between bubbling of the same event (#6566). + var timerFunc; + + // The nextTick behavior leverages the microtask queue, which can be accessed + // via either native Promise.then or MutationObserver. + // MutationObserver has wider support, however it is seriously bugged in + // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It + // completely stops working after triggering a few times... so, if native + // Promise is available, we will use it: + /* istanbul ignore next, $flow-disable-line */ + if (typeof Promise !== 'undefined' && isNative(Promise)) { + var p = Promise.resolve(); + timerFunc = function () { + p.then(flushCallbacks); + // In problematic UIWebViews, Promise.then doesn't completely break, but + // it can get stuck in a weird state where callbacks are pushed into the + // microtask queue but the queue isn't being flushed, until the browser + // needs to do some other work, e.g. handle a timer. Therefore we can + // "force" the microtask queue to be flushed by adding an empty timer. + if (isIOS) { setTimeout(noop); } + }; + isUsingMicroTask = true; + } else if (!isIE && typeof MutationObserver !== 'undefined' && ( + isNative(MutationObserver) || + // PhantomJS and iOS 7.x + MutationObserver.toString() === '[object MutationObserverConstructor]' + )) { + // Use MutationObserver where native Promise is not available, + // e.g. PhantomJS, iOS7, Android 4.4 + // (#6466 MutationObserver is unreliable in IE11) + var counter = 1; + var observer = new MutationObserver(flushCallbacks); + var textNode = document.createTextNode(String(counter)); + observer.observe(textNode, { + characterData: true + }); + timerFunc = function () { + counter = (counter + 1) % 2; + textNode.data = String(counter); + }; + isUsingMicroTask = true; + } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { + // Fallback to setImmediate. + // Technically it leverages the (macro) task queue, + // but it is still a better choice than setTimeout. + timerFunc = function () { + setImmediate(flushCallbacks); + }; + } else { + // Fallback to setTimeout. + timerFunc = function () { + setTimeout(flushCallbacks, 0); + }; + } + + function nextTick (cb, ctx) { + var _resolve; + callbacks.push(function () { + if (cb) { + try { + cb.call(ctx); + } catch (e) { + handleError(e, ctx, 'nextTick'); + } + } else if (_resolve) { + _resolve(ctx); + } + }); + if (!pending) { + pending = true; + timerFunc(); + } + // $flow-disable-line + if (!cb && typeof Promise !== 'undefined') { + return new Promise(function (resolve) { + _resolve = resolve; + }) + } + } + + /* */ + + var mark; + var measure; + + { + var perf = inBrowser && window.performance; + /* istanbul ignore if */ + if ( + perf && + perf.mark && + perf.measure && + perf.clearMarks && + perf.clearMeasures + ) { + mark = function (tag) { return perf.mark(tag); }; + measure = function (name, startTag, endTag) { + perf.measure(name, startTag, endTag); + perf.clearMarks(startTag); + perf.clearMarks(endTag); + // perf.clearMeasures(name) + }; + } + } + + /* not type checking this file because flow doesn't play well with Proxy */ + + var initProxy; + + { + var allowedGlobals = makeMap( + 'Infinity,undefined,NaN,isFinite,isNaN,' + + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + + 'require' // for Webpack/Browserify + ); + + var warnNonPresent = function (target, key) { + warn( + "Property or method \"" + key + "\" is not defined on the instance but " + + 'referenced during render. Make sure that this property is reactive, ' + + 'either in the data option, or for class-based components, by ' + + 'initializing the property. ' + + 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', + target + ); + }; + + var warnReservedPrefix = function (target, key) { + warn( + "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + + 'prevent conflicts with Vue internals. ' + + 'See: https://vuejs.org/v2/api/#data', + target + ); + }; + + var hasProxy = + typeof Proxy !== 'undefined' && isNative(Proxy); + + if (hasProxy) { + var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); + config.keyCodes = new Proxy(config.keyCodes, { + set: function set (target, key, value) { + if (isBuiltInModifier(key)) { + warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key)); + return false + } else { + target[key] = value; + return true + } + } + }); + } + + var hasHandler = { + has: function has (target, key) { + var has = key in target; + var isAllowed = allowedGlobals(key) || + (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data)); + if (!has && !isAllowed) { + if (key in target.$data) { warnReservedPrefix(target, key); } + else { warnNonPresent(target, key); } + } + return has || !isAllowed + } + }; + + var getHandler = { + get: function get (target, key) { + if (typeof key === 'string' && !(key in target)) { + if (key in target.$data) { warnReservedPrefix(target, key); } + else { warnNonPresent(target, key); } + } + return target[key] + } + }; + + initProxy = function initProxy (vm) { + if (hasProxy) { + // determine which proxy handler to use + var options = vm.$options; + var handlers = options.render && options.render._withStripped + ? getHandler + : hasHandler; + vm._renderProxy = new Proxy(vm, handlers); + } else { + vm._renderProxy = vm; + } + }; + } + + /* */ + + var seenObjects = new _Set(); + + /** + * Recursively traverse an object to evoke all converted + * getters, so that every nested property inside the object + * is collected as a "deep" dependency. + */ + function traverse (val) { + _traverse(val, seenObjects); + seenObjects.clear(); + } + + function _traverse (val, seen) { + var i, keys; + var isA = Array.isArray(val); + if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) { + return + } + if (val.__ob__) { + var depId = val.__ob__.dep.id; + if (seen.has(depId)) { + return + } + seen.add(depId); + } + if (isA) { + i = val.length; + while (i--) { _traverse(val[i], seen); } + } else { + keys = Object.keys(val); + i = keys.length; + while (i--) { _traverse(val[keys[i]], seen); } + } + } + + /* */ + + var normalizeEvent = cached(function (name) { + var passive = name.charAt(0) === '&'; + name = passive ? name.slice(1) : name; + var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first + name = once$$1 ? name.slice(1) : name; + var capture = name.charAt(0) === '!'; + name = capture ? name.slice(1) : name; + return { + name: name, + once: once$$1, + capture: capture, + passive: passive + } + }); + + function createFnInvoker (fns, vm) { + function invoker () { + var arguments$1 = arguments; + + var fns = invoker.fns; + if (Array.isArray(fns)) { + var cloned = fns.slice(); + for (var i = 0; i < cloned.length; i++) { + invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler"); + } + } else { + // return handler return value for single handlers + return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler") + } + } + invoker.fns = fns; + return invoker + } + + function updateListeners ( + on, + oldOn, + add, + remove$$1, + createOnceHandler, + vm + ) { + var name, def$$1, cur, old, event; + for (name in on) { + def$$1 = cur = on[name]; + old = oldOn[name]; + event = normalizeEvent(name); + if (isUndef(cur)) { + warn( + "Invalid handler for event \"" + (event.name) + "\": got " + String(cur), + vm + ); + } else if (isUndef(old)) { + if (isUndef(cur.fns)) { + cur = on[name] = createFnInvoker(cur, vm); + } + if (isTrue(event.once)) { + cur = on[name] = createOnceHandler(event.name, cur, event.capture); + } + add(event.name, cur, event.capture, event.passive, event.params); + } else if (cur !== old) { + old.fns = cur; + on[name] = old; + } + } + for (name in oldOn) { + if (isUndef(on[name])) { + event = normalizeEvent(name); + remove$$1(event.name, oldOn[name], event.capture); + } + } + } + + /* */ + + function mergeVNodeHook (def, hookKey, hook) { + if (def instanceof VNode) { + def = def.data.hook || (def.data.hook = {}); + } + var invoker; + var oldHook = def[hookKey]; + + function wrappedHook () { + hook.apply(this, arguments); + // important: remove merged hook to ensure it's called only once + // and prevent memory leak + remove(invoker.fns, wrappedHook); + } + + if (isUndef(oldHook)) { + // no existing hook + invoker = createFnInvoker([wrappedHook]); + } else { + /* istanbul ignore if */ + if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { + // already a merged invoker + invoker = oldHook; + invoker.fns.push(wrappedHook); + } else { + // existing plain hook + invoker = createFnInvoker([oldHook, wrappedHook]); + } + } + + invoker.merged = true; + def[hookKey] = invoker; + } + + /* */ + + function extractPropsFromVNodeData ( + data, + Ctor, + tag + ) { + // we are only extracting raw values here. + // validation and default values are handled in the child + // component itself. + var propOptions = Ctor.options.props; + if (isUndef(propOptions)) { + return + } + var res = {}; + var attrs = data.attrs; + var props = data.props; + if (isDef(attrs) || isDef(props)) { + for (var key in propOptions) { + var altKey = hyphenate(key); + { + var keyInLowerCase = key.toLowerCase(); + if ( + key !== keyInLowerCase && + attrs && hasOwn(attrs, keyInLowerCase) + ) { + tip( + "Prop \"" + keyInLowerCase + "\" is passed to component " + + (formatComponentName(tag || Ctor)) + ", but the declared prop name is" + + " \"" + key + "\". " + + "Note that HTML attributes are case-insensitive and camelCased " + + "props need to use their kebab-case equivalents when using in-DOM " + + "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"." + ); + } + } + checkProp(res, props, key, altKey, true) || + checkProp(res, attrs, key, altKey, false); + } + } + return res + } + + function checkProp ( + res, + hash, + key, + altKey, + preserve + ) { + if (isDef(hash)) { + if (hasOwn(hash, key)) { + res[key] = hash[key]; + if (!preserve) { + delete hash[key]; + } + return true + } else if (hasOwn(hash, altKey)) { + res[key] = hash[altKey]; + if (!preserve) { + delete hash[altKey]; + } + return true + } + } + return false + } + + /* */ + + // The template compiler attempts to minimize the need for normalization by + // statically analyzing the template at compile time. + // + // For plain HTML markup, normalization can be completely skipped because the + // generated render function is guaranteed to return Array. There are + // two cases where extra normalization is needed: + + // 1. When the children contains components - because a functional component + // may return an Array instead of a single root. In this case, just a simple + // normalization is needed - if any child is an Array, we flatten the whole + // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep + // because functional components already normalize their own children. + function simpleNormalizeChildren (children) { + for (var i = 0; i < children.length; i++) { + if (Array.isArray(children[i])) { + return Array.prototype.concat.apply([], children) + } + } + return children + } + + // 2. When the children contains constructs that always generated nested Arrays, + // e.g.