vuejs-rails 2.2.1 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * vue-router v2.5.2
3
+ * (c) 2017 Evan You
4
+ * @license MIT
5
+ */
6
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.VueRouter=e()}(this,function(){"use strict";function t(t,e){}function e(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}function n(t,e,n){void 0===e&&(e={});var o,i=n||r;try{o=i(t||"")}catch(t){o={}}for(var a in e){var u=e[a];o[a]=Array.isArray(u)?u.slice():u}return o}function r(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=$t(n.shift()),o=n.length>0?$t(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function o(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return _t(e);if(Array.isArray(n)){var r=[];return n.slice().forEach(function(t){void 0!==t&&(null===t?r.push(_t(e)):r.push(_t(e)+"="+_t(t)))}),r.join("&")}return _t(e)+"="+_t(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}function i(t,e,n,r){var o=r&&r.options.stringifyQuery,i={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:e.query||{},params:e.params||{},fullPath:u(e,o),matched:t?a(t):[]};return n&&(i.redirectedFrom=u(n,o)),Object.freeze(i)}function a(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function u(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var i=t.hash;void 0===i&&(i="");var a=e||o;return(n||"/")+a(r)+i}function c(t,e){return e===qt?t===e:!!e&&(t.path&&e.path?t.path.replace(St,"")===e.path.replace(St,"")&&t.hash===e.hash&&s(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&s(t.query,e.query)&&s(t.params,e.params)))}function s(t,e){void 0===t&&(t={}),void 0===e&&(e={});var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){return String(t[n])===String(e[n])})}function p(t,e){return 0===t.path.replace(St,"/").indexOf(e.path.replace(St,"/"))&&(!e.hash||t.hash===e.hash)&&f(t.query,e.query)}function f(t,e){for(var n in e)if(!(n in t))return!1;return!0}function h(t){if(!(t.metaKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function l(t){if(t)for(var e,n=0;n<t.length;n++){if(e=t[n],"a"===e.tag)return e;if(e.children&&(e=l(e.children)))return e}}function d(t){if(!d.installed){d.installed=!0,Rt=t,Object.defineProperty(t.prototype,"$router",{get:function(){return this.$root._router}}),Object.defineProperty(t.prototype,"$route",{get:function(){return this.$root._route}});var e=function(t){return void 0!==t},n=function(t,n){var r=t.$options._parentVnode;e(r)&&e(r=r.data)&&e(r=r.registerRouteInstance)&&r(t,n)};t.mixin({beforeCreate:function(){e(this.$options.router)&&(this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,"_route",this._router.history.current)),n(this,this)},destroyed:function(){n(this)}}),t.component("router-view",Ct),t.component("router-link",Ut);var r=t.config.optionMergeStrategies;r.beforeRouteEnter=r.beforeRouteLeave=r.created}}function y(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a<i.length;a++){var u=i[a];".."===u?o.pop():"."!==u&&o.push(u)}return""!==o[0]&&o.unshift(""),o.join("/")}function v(t){var e="",n="",r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function m(t){return t.replace(/\/\//g,"/")}function g(t,e){for(var n,r=[],o=0,i=0,a="",u=e&&e.delimiter||"/";null!=(n=Kt.exec(t));){var c=n[0],s=n[1],p=n.index;if(a+=t.slice(i,p),i=p+c.length,s)a+=s[1];else{var f=t[i],h=n[2],l=n[3],d=n[4],y=n[5],v=n[6],m=n[7];a&&(r.push(a),a="");var g=null!=h&&null!=f&&f!==h,w="+"===v||"*"===v,b="?"===v||"*"===v,x=n[2]||u,k=d||y;r.push({name:l||o++,prefix:h||"",delimiter:x,optional:b,repeat:w,partial:g,asterisk:!!m,pattern:k?O(k):m?".*":"[^"+E(x)+"]+?"})}}return i<t.length&&(a+=t.substr(i)),a&&r.push(a),r}function w(t,e){return k(g(t,e))}function b(t){return encodeURI(t).replace(/[\/?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function x(t){return encodeURI(t).replace(/[?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function k(t){for(var e=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(e[n]=new RegExp("^(?:"+t[n].pattern+")$"));return function(n,r){for(var o="",i=n||{},a=r||{},u=a.pretty?b:encodeURIComponent,c=0;c<t.length;c++){var s=t[c];if("string"!=typeof s){var p,f=i[s.name];if(null==f){if(s.optional){s.partial&&(o+=s.prefix);continue}throw new TypeError('Expected "'+s.name+'" to be defined')}if(Vt(f)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var h=0;h<f.length;h++){if(p=u(f[h]),!e[c].test(p))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received `'+JSON.stringify(p)+"`");o+=(0===h?s.prefix:s.delimiter)+p}}else{if(p=s.asterisk?x(f):u(f),!e[c].test(p))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+p+'"');o+=s.prefix+p}}else o+=s}return o}}function E(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function O(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function R(t,e){return t.keys=e,t}function C(t){return t.sensitive?"":"i"}function A(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return R(t,e)}function j(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push($(t[o],e,n).source);var i=new RegExp("(?:"+r.join("|")+")",C(n));return R(i,e)}function T(t,e,n){return _(g(t,n),e,n)}function _(t,e,n){Vt(e)||(n=e||n,e=[]),n=n||{};for(var r=n.strict,o=n.end!==!1,i="",a=0;a<t.length;a++){var u=t[a];if("string"==typeof u)i+=E(u);else{var c=E(u.prefix),s="(?:"+u.pattern+")";e.push(u),u.repeat&&(s+="(?:"+c+s+")*"),s=u.optional?u.partial?c+"("+s+")?":"(?:"+c+"("+s+"))?":c+"("+s+")",i+=s}}var p=E(n.delimiter||"/"),f=i.slice(-p.length)===p;return r||(i=(f?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":r&&f?"":"(?="+p+"|$)",R(new RegExp("^"+i,C(n)),e)}function $(t,e,n){return Vt(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?A(t,e):Vt(t)?j(t,e,n):T(t,e,n)}function S(t,e,n){try{var r=Jt[t]||(Jt[t]=zt.compile(t));return r(e||{},{pretty:!0})}catch(t){return""}}function q(t,e,n,r){var o=e||[],i=n||Object.create(null),a=r||Object.create(null);t.forEach(function(t){L(o,i,a,t)});for(var u=0,c=o.length;u<c;u++)"*"===o[u]&&(o.push(o.splice(u,1)[0]),c--,u--);return{pathList:o,pathMap:i,nameMap:a}}function L(t,e,n,r,o,i){var a=r.path,u=r.name,c=U(a,o),s={path:c,regex:P(c),components:r.components||{default:r.component},instances:{},name:u,parent:o,matchAs:i,redirect:r.redirect,beforeEnter:r.beforeEnter,meta:r.meta||{},props:null==r.props?{}:r.components?r.props:{default:r.props}};if(r.children&&r.children.forEach(function(r){var o=i?m(i+"/"+r.path):void 0;L(t,e,n,r,s,o)}),void 0!==r.alias)if(Array.isArray(r.alias))r.alias.forEach(function(i){var a={path:i,children:r.children};L(t,e,n,a,o,s.path)});else{var p={path:r.alias,children:r.children};L(t,e,n,p,o,s.path)}e[s.path]||(t.push(s.path),e[s.path]=s),u&&(n[u]||(n[u]=s))}function P(t){var e=zt(t);return e}function U(t,e){return t=t.replace(/\/$/,""),"/"===t[0]?t:null==e?t:m(e.path+"/"+t)}function H(t,e,r,o){var i="string"==typeof t?{path:t}:t;if(i.name||i._normalized)return i;if(!i.path&&i.params&&e){i=I({},i),i._normalized=!0;var a=I(I({},e.params),i.params);if(e.name)i.name=e.name,i.params=a;else if(e.matched){var u=e.matched[e.matched.length-1].path;i.path=S(u,a,"path "+e.path)}return i}var c=v(i.path||""),s=e&&e.path||"/",p=c.path?y(c.path,s,r||i.append):s,f=n(c.query,i.query,o&&o.options.parseQuery),h=i.hash||c.hash;return h&&"#"!==h.charAt(0)&&(h="#"+h),{_normalized:!0,path:p,query:f,hash:h}}function I(t,e){for(var n in e)t[n]=e[n];return t}function V(t,e){function n(t){q(t,s,p,f)}function r(t,n,r){var o=H(t,n,!1,e),i=o.name;if(i){var a=f[i],c=a.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if("object"!=typeof o.params&&(o.params={}),n&&"object"==typeof n.params)for(var h in n.params)!(h in o.params)&&c.indexOf(h)>-1&&(o.params[h]=n.params[h]);if(a)return o.path=S(a.path,o.params,'named route "'+i+'"'),u(a,o,r)}else if(o.path){o.params={};for(var l=0;l<s.length;l++){var d=s[l],y=p[d];if(z(y.regex,o.path,o.params))return u(y,o,r)}}return u(null,o)}function o(t,n){var o=t.redirect,a="function"==typeof o?o(i(t,n,null,e)):o;if("string"==typeof a&&(a={path:a}),!a||"object"!=typeof a)return u(null,n);var c=a,s=c.name,p=c.path,h=n.query,l=n.hash,d=n.params;if(h=c.hasOwnProperty("query")?c.query:h,l=c.hasOwnProperty("hash")?c.hash:l,d=c.hasOwnProperty("params")?c.params:d,s){f[s];return r({_normalized:!0,name:s,query:h,hash:l,params:d},void 0,n)}if(p){var y=M(p,t),v=S(y,d,'redirect route with path "'+y+'"');return r({_normalized:!0,path:v,query:h,hash:l},void 0,n)}return u(null,n)}function a(t,e,n){var o=S(n,e.params,'aliased route with path "'+n+'"'),i=r({_normalized:!0,path:o});if(i){var a=i.matched,c=a[a.length-1];return e.params=i.params,u(c,e)}return u(null,e)}function u(t,n,r){return t&&t.redirect?o(t,r||n):t&&t.matchAs?a(t,n,t.matchAs):i(t,n,r,e)}var c=q(t),s=c.pathList,p=c.pathMap,f=c.nameMap;return{match:r,addRoutes:n}}function z(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(var o=1,i=r.length;o<i;++o){var a=t.keys[o-1],u="string"==typeof r[o]?decodeURIComponent(r[o]):r[o];a&&(n[a.name]=u)}return!0}function M(t,e){return y(t,e.parent?e.parent.path:"/",!0)}function B(){window.addEventListener("popstate",function(t){D(),t.state&&t.state.key&&G(t.state.key)})}function F(t,e,n,r){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick(function(){var t=K(),i=o(e,n,r?t:null);if(i){var a="object"==typeof i;if(a&&"string"==typeof i.selector){var u=document.querySelector(i.selector);u?t=J(u):N(i)&&(t=Q(i))}else a&&N(i)&&(t=Q(i));t&&window.scrollTo(t.x,t.y)}})}}function D(){var t=W();t&&(Nt[t]={x:window.pageXOffset,y:window.pageYOffset})}function K(){var t=W();if(t)return Nt[t]}function J(t){var e=document.documentElement,n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-n.left,y:r.top-n.top}}function N(t){return X(t.x)||X(t.y)}function Q(t){return{x:X(t.x)?t.x:window.pageXOffset,y:X(t.y)?t.y:window.pageYOffset}}function X(t){return"number"==typeof t}function Y(){return Xt.now().toFixed(3)}function W(){return Yt}function G(t){Yt=t}function Z(t,e){D();var n=window.history;try{e?n.replaceState({key:Yt},"",t):(Yt=Y(),n.pushState({key:Yt},"",t))}catch(n){window.location[e?"replace":"assign"](t)}}function tt(t){Z(t,!0)}function et(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function nt(t){if(!t)if(Ht){var e=document.querySelector("base");t=e&&e.getAttribute("href")||"/"}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}function rt(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n<r&&t[n]===e[n];n++);return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}function ot(t,e,n,r){var o=lt(t,function(t,r,o,i){var a=it(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return dt(r?o.reverse():o)}function it(t,e){return"function"!=typeof t&&(t=Rt.extend(t)),t.options[e]}function at(t){return ot(t,"beforeRouteLeave",ct,!0)}function ut(t){return ot(t,"beforeRouteUpdate",ct)}function ct(t,e){if(e)return function(){return t.apply(e,arguments)}}function st(t,e,n){return ot(t,"beforeRouteEnter",function(t,r,o,i){return pt(t,o,i,e,n)})}function pt(t,e,n,r,o){return function(i,a,u){return t(i,a,function(t){u(t),"function"==typeof t&&r.push(function(){ft(t,e.instances,n,o)})})}}function ft(t,e,n,r){e[n]?t(e[n]):r()&&setTimeout(function(){ft(t,e,n,r)},16)}function ht(t){return function(e,n,r){var o=!1,i=0,a=null;lt(t,function(t,e,n,u){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,s=yt(function(e){t.resolved="function"==typeof e?e:Rt.extend(e),n.components[u]=e,i--,i<=0&&r()}),p=yt(function(t){var e="Failed to resolve async component "+u+": "+t;a||(a=vt(t)?t:new Error(e),r(a))});try{c=t(s,p)}catch(t){p(t)}if(c)if("function"==typeof c.then)c.then(s,p);else{var f=c.component;f&&"function"==typeof f.then&&f.then(s,p)}}}),o||r()}}function lt(t,e){return dt(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function dt(t){return Array.prototype.concat.apply([],t)}function yt(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}function vt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function mt(t){var e=window.location.pathname;return t&&0===e.indexOf(t)&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}function gt(t){var e=mt(t);if(!/^\/#/.test(e))return window.location.replace(m(t+"/#"+e)),!0}function wt(){var t=bt();return"/"===t.charAt(0)||(kt("/"+t),!1)}function bt(){var t=window.location.href,e=t.indexOf("#");return e===-1?"":t.slice(e+1)}function xt(t){window.location.hash=t}function kt(t){var e=window.location.href.indexOf("#");window.location.replace(window.location.href.slice(0,e>=0?e:0)+"#"+t)}function Et(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function Ot(t,e,n){var r="hash"===n?"#"+e:e;return t?m(t+"/"+r):r}var Rt,Ct={name:"router-view",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,n){var r=n.props,o=n.children,i=n.parent,a=n.data;a.routerView=!0;for(var u=i.$createElement,c=r.name,s=i.$route,p=i._routerViewCache||(i._routerViewCache={}),f=0,h=!1;i;)i.$vnode&&i.$vnode.data.routerView&&f++,i._inactive&&(h=!0),i=i.$parent;if(a.routerViewDepth=f,h)return u(p[c],a,o);var l=s.matched[f];if(!l)return p[c]=null,u();var d=p[c]=l.components[c];return a.registerRouteInstance=function(t,e){l.instances[c]!==t&&(l.instances[c]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){l.instances[c]=e.componentInstance},a.props=e(s,l.props&&l.props[c]),u(d,a,o)}},At=/[!'()*]/g,jt=function(t){return"%"+t.charCodeAt(0).toString(16)},Tt=/%2C/g,_t=function(t){return encodeURIComponent(t).replace(At,jt).replace(Tt,",")},$t=decodeURIComponent,St=/\/?$/,qt=i(null,{path:"/"}),Lt=[String,Object],Pt=[String,Array],Ut={name:"router-link",props:{to:{type:Lt,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:Pt,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),a=o.location,u=o.route,s=o.href,f={},d=n.options.linkActiveClass,y=n.options.linkExactActiveClass,v=null==d?"router-link-active":d,m=null==y?"router-link-exact-active":y,g=null==this.activeClass?v:this.activeClass,w=null==this.exactActiveClass?m:this.exactActiveClass,b=a.path?i(null,a,null,n):u;f[w]=c(r,b),f[g]=this.exact?f[w]:p(r,b);var x=function(t){h(t)&&(e.replace?n.replace(a):n.push(a))},k={click:h};Array.isArray(this.event)?this.event.forEach(function(t){k[t]=x}):k[this.event]=x;var E={class:f};if("a"===this.tag)E.on=k,E.attrs={href:s};else{var O=l(this.$slots.default);if(O){O.isStatic=!1;var R=Rt.util.extend,C=O.data=R({},O.data);C.on=k;var A=O.data.attrs=R({},O.data.attrs);A.href=s}else E.on=k}return t(this.tag,E,this.$slots.default)}},Ht="undefined"!=typeof window,It=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},Vt=It,zt=$,Mt=g,Bt=w,Ft=k,Dt=_,Kt=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");zt.parse=Mt,zt.compile=Bt,zt.tokensToFunction=Ft,zt.tokensToRegExp=Dt;var Jt=Object.create(null),Nt=Object.create(null),Qt=Ht&&function(){var t=window.navigator.userAgent;return(t.indexOf("Android 2.")===-1&&t.indexOf("Android 4.0")===-1||t.indexOf("Mobile Safari")===-1||t.indexOf("Chrome")!==-1||t.indexOf("Windows Phone")!==-1)&&(window.history&&"pushState"in window.history)}(),Xt=Ht&&window.performance&&window.performance.now?window.performance:Date,Yt=Y(),Wt=function(t,e){this.router=t,this.base=nt(e),this.current=qt,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};Wt.prototype.listen=function(t){this.cb=t},Wt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Wt.prototype.onError=function(t){this.errorCbs.push(t)},Wt.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},Wt.prototype.confirmTransition=function(e,n,r){var o=this,i=this.current,a=function(e){vt(e)&&(o.errorCbs.length?o.errorCbs.forEach(function(t){t(e)}):(t(!1,"uncaught error during route navigation:"),console.error(e))),r&&r(e)};if(c(e,i)&&e.matched.length===i.matched.length)return this.ensureURL(),a();var u=rt(this.current.matched,e.matched),s=u.updated,p=u.deactivated,f=u.activated,h=[].concat(at(p),this.router.beforeHooks,ut(s),f.map(function(t){return t.beforeEnter}),ht(f));this.pending=e;var l=function(t,n){if(o.pending!==e)return a();try{t(e,i,function(t){t===!1||vt(t)?(o.ensureURL(!0),a(t)):"string"==typeof t||"object"==typeof t&&("string"==typeof t.path||"string"==typeof t.name)?(a(),"object"==typeof t&&t.replace?o.replace(t):o.push(t)):n(t)})}catch(t){a(t)}};et(h,l,function(){var t=[],r=function(){return o.current===e},i=st(f,t,r),u=i.concat(o.router.resolveHooks);et(u,l,function(){return o.pending!==e?a():(o.pending=null,n(e),void(o.router.app&&o.router.app.$nextTick(function(){t.forEach(function(t){t()})})))})})},Wt.prototype.updateRoute=function(t){var e=this.current;this.current=t,this.cb&&this.cb(t),this.router.afterHooks.forEach(function(n){n&&n(t,e)})};var Gt=function(t){function e(e,n){var r=this;t.call(this,e,n);var o=e.options.scrollBehavior;o&&B(),window.addEventListener("popstate",function(t){r.transitionTo(mt(r.base),function(t){o&&F(e,t,r.current,!0)})})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){Z(m(r.base+t.fullPath)),F(r.router,t,i,!1),e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){tt(m(r.base+t.fullPath)),F(r.router,t,i,!1),e&&e(t)},n)},e.prototype.ensureURL=function(t){if(mt(this.base)!==this.current.fullPath){var e=m(this.base+this.current.fullPath);t?Z(e):tt(e)}},e.prototype.getCurrentLocation=function(){return mt(this.base)},e}(Wt),Zt=function(t){function e(e,n,r){t.call(this,e,n),r&&gt(this.base)||wt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;window.addEventListener("hashchange",function(){wt()&&t.transitionTo(bt(),function(t){kt(t.fullPath)})})},e.prototype.push=function(t,e,n){this.transitionTo(t,function(t){xt(t.fullPath),e&&e(t)},n)},e.prototype.replace=function(t,e,n){this.transitionTo(t,function(t){kt(t.fullPath),e&&e(t)},n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;bt()!==e&&(t?xt(e):kt(e))},e.prototype.getCurrentLocation=function(){return bt()},e}(Wt),te=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Wt),ee=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=V(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Qt,this.fallback&&(e="hash"),Ht||(e="abstract"),this.mode=e,e){case"history":this.history=new Gt(this,t.base);break;case"hash":this.history=new Zt(this,t.base,this.fallback);break;case"abstract":this.history=new te(this,t.base)}},ne={currentRoute:{}};return ee.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},ne.currentRoute.get=function(){return this.history&&this.history.current},ee.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof Gt)n.transitionTo(n.getCurrentLocation());else if(n instanceof Zt){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},ee.prototype.beforeEach=function(t){return Et(this.beforeHooks,t)},ee.prototype.beforeResolve=function(t){return Et(this.resolveHooks,t)},ee.prototype.afterEach=function(t){return Et(this.afterHooks,t)},ee.prototype.onReady=function(t,e){this.history.onReady(t,e)},ee.prototype.onError=function(t){this.history.onError(t)},ee.prototype.push=function(t,e,n){this.history.push(t,e,n)},ee.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},ee.prototype.go=function(t){this.history.go(t)},ee.prototype.back=function(){this.go(-1)},ee.prototype.forward=function(){this.go(1)},ee.prototype.getMatchedComponents=function(t){var e=t?this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},ee.prototype.resolve=function(t,e,n){var r=H(t,e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath,a=this.history.base,u=Ot(a,i,this.mode);return{location:r,route:o,href:u,normalizedTo:r,resolved:o}},ee.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==qt&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(ee.prototype,ne),ee.install=d,ee.version="2.5.2",Ht&&window.Vue&&window.Vue.use(ee),ee});
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vue.js v2.2.1
2
+ * Vue.js v2.3.2
3
3
  * (c) 2014-2017 Evan You
4
4
  * Released under the MIT License.
5
5
  */
@@ -11,10 +11,54 @@
11
11
 
12
12
  /* */
13
13
 
14
+ // these helpers produces better vm code in JS engines due to their
15
+ // explicitness and function inlining
16
+ function isUndef (v) {
17
+ return v === undefined || v === null
18
+ }
19
+
20
+ function isDef (v) {
21
+ return v !== undefined && v !== null
22
+ }
23
+
24
+ function isTrue (v) {
25
+ return v === true
26
+ }
27
+
28
+ /**
29
+ * Check if value is primitive
30
+ */
31
+ function isPrimitive (value) {
32
+ return typeof value === 'string' || typeof value === 'number'
33
+ }
34
+
35
+ /**
36
+ * Quick object check - this is primarily used to tell
37
+ * Objects from primitive values when we know the value
38
+ * is a JSON-compliant type.
39
+ */
40
+ function isObject (obj) {
41
+ return obj !== null && typeof obj === 'object'
42
+ }
43
+
44
+ var _toString = Object.prototype.toString;
45
+
46
+ /**
47
+ * Strict object type check. Only returns true
48
+ * for plain JavaScript objects.
49
+ */
50
+ function isPlainObject (obj) {
51
+ return _toString.call(obj) === '[object Object]'
52
+ }
53
+
54
+ function isRegExp (v) {
55
+ return _toString.call(v) === '[object RegExp]'
56
+ }
57
+
14
58
  /**
15
59
  * Convert a value to a string that is actually rendered.
16
60
  */
17
- function _toString (val) {
61
+ function toString (val) {
18
62
  return val == null
19
63
  ? ''
20
64
  : typeof val === 'object'
@@ -74,13 +118,6 @@ function hasOwn (obj, key) {
74
118
  return hasOwnProperty.call(obj, key)
75
119
  }
76
120
 
77
- /**
78
- * Check if value is primitive
79
- */
80
- function isPrimitive (value) {
81
- return typeof value === 'string' || typeof value === 'number'
82
- }
83
-
84
121
  /**
85
122
  * Create a cached version of a pure function.
86
123
  */
@@ -158,25 +195,6 @@ function extend (to, _from) {
158
195
  return to
159
196
  }
160
197
 
161
- /**
162
- * Quick object check - this is primarily used to tell
163
- * Objects from primitive values when we know the value
164
- * is a JSON-compliant type.
165
- */
166
- function isObject (obj) {
167
- return obj !== null && typeof obj === 'object'
168
- }
169
-
170
- /**
171
- * Strict object type check. Only returns true
172
- * for plain JavaScript objects.
173
- */
174
- var toString = Object.prototype.toString;
175
- var OBJECT_STRING = '[object Object]';
176
- function isPlainObject (obj) {
177
- return toString.call(obj) === OBJECT_STRING
178
- }
179
-
180
198
  /**
181
199
  * Merge an Array of Objects into a single Object.
182
200
  */
@@ -222,7 +240,12 @@ function looseEqual (a, b) {
222
240
  var isObjectA = isObject(a);
223
241
  var isObjectB = isObject(b);
224
242
  if (isObjectA && isObjectB) {
225
- return JSON.stringify(a) === JSON.stringify(b)
243
+ try {
244
+ return JSON.stringify(a) === JSON.stringify(b)
245
+ } catch (e) {
246
+ // possible circular reference
247
+ return a === b
248
+ }
226
249
  } else if (!isObjectA && !isObjectB) {
227
250
  return String(a) === String(b)
228
251
  } else {
@@ -245,14 +268,35 @@ function once (fn) {
245
268
  return function () {
246
269
  if (!called) {
247
270
  called = true;
248
- fn();
271
+ fn.apply(this, arguments);
249
272
  }
250
273
  }
251
274
  }
252
275
 
276
+ var SSR_ATTR = 'data-server-rendered';
277
+
278
+ var ASSET_TYPES = [
279
+ 'component',
280
+ 'directive',
281
+ 'filter'
282
+ ];
283
+
284
+ var LIFECYCLE_HOOKS = [
285
+ 'beforeCreate',
286
+ 'created',
287
+ 'beforeMount',
288
+ 'mounted',
289
+ 'beforeUpdate',
290
+ 'updated',
291
+ 'beforeDestroy',
292
+ 'destroyed',
293
+ 'activated',
294
+ 'deactivated'
295
+ ];
296
+
253
297
  /* */
254
298
 
255
- var config = {
299
+ var config = ({
256
300
  /**
257
301
  * Option merge strategies (used in core/util/options)
258
302
  */
@@ -276,7 +320,7 @@ var config = {
276
320
  /**
277
321
  * Whether to record perf
278
322
  */
279
- performance: "development" !== 'production',
323
+ performance: false,
280
324
 
281
325
  /**
282
326
  * Error handler for watcher errors
@@ -299,6 +343,12 @@ var config = {
299
343
  */
300
344
  isReservedTag: no,
301
345
 
346
+ /**
347
+ * Check if an attribute is reserved so that it cannot be used as a component
348
+ * prop. This is platform-dependent and may be overwritten.
349
+ */
350
+ isReservedAttr: no,
351
+
302
352
  /**
303
353
  * Check if a tag is an unknown element.
304
354
  * Platform-dependent.
@@ -322,35 +372,163 @@ var config = {
322
372
  mustUseProp: no,
323
373
 
324
374
  /**
325
- * List of asset types that a component can own.
375
+ * Exposed for legacy reasons
326
376
  */
327
- _assetTypes: [
328
- 'component',
329
- 'directive',
330
- 'filter'
331
- ],
377
+ _lifecycleHooks: LIFECYCLE_HOOKS
378
+ });
332
379
 
333
- /**
334
- * List of lifecycle hooks.
335
- */
336
- _lifecycleHooks: [
337
- 'beforeCreate',
338
- 'created',
339
- 'beforeMount',
340
- 'mounted',
341
- 'beforeUpdate',
342
- 'updated',
343
- 'beforeDestroy',
344
- 'destroyed',
345
- 'activated',
346
- 'deactivated'
347
- ],
380
+ /* */
348
381
 
349
- /**
350
- * Max circular updates allowed in a scheduler flush cycle.
351
- */
352
- _maxUpdateCount: 100
353
- };
382
+ var emptyObject = Object.freeze({});
383
+
384
+ /**
385
+ * Check if a string starts with $ or _
386
+ */
387
+ function isReserved (str) {
388
+ var c = (str + '').charCodeAt(0);
389
+ return c === 0x24 || c === 0x5F
390
+ }
391
+
392
+ /**
393
+ * Define a property.
394
+ */
395
+ function def (obj, key, val, enumerable) {
396
+ Object.defineProperty(obj, key, {
397
+ value: val,
398
+ enumerable: !!enumerable,
399
+ writable: true,
400
+ configurable: true
401
+ });
402
+ }
403
+
404
+ /**
405
+ * Parse simple path.
406
+ */
407
+ var bailRE = /[^\w.$]/;
408
+ function parsePath (path) {
409
+ if (bailRE.test(path)) {
410
+ return
411
+ }
412
+ var segments = path.split('.');
413
+ return function (obj) {
414
+ for (var i = 0; i < segments.length; i++) {
415
+ if (!obj) { return }
416
+ obj = obj[segments[i]];
417
+ }
418
+ return obj
419
+ }
420
+ }
421
+
422
+ /* */
423
+
424
+ var warn = noop;
425
+ var tip = noop;
426
+ var formatComponentName = (null); // work around flow check
427
+
428
+ {
429
+ var hasConsole = typeof console !== 'undefined';
430
+ var classifyRE = /(?:^|[-_])(\w)/g;
431
+ var classify = function (str) { return str
432
+ .replace(classifyRE, function (c) { return c.toUpperCase(); })
433
+ .replace(/[-_]/g, ''); };
434
+
435
+ warn = function (msg, vm) {
436
+ if (hasConsole && (!config.silent)) {
437
+ console.error("[Vue warn]: " + msg + (
438
+ vm ? generateComponentTrace(vm) : ''
439
+ ));
440
+ }
441
+ };
442
+
443
+ tip = function (msg, vm) {
444
+ if (hasConsole && (!config.silent)) {
445
+ console.warn("[Vue tip]: " + msg + (
446
+ vm ? generateComponentTrace(vm) : ''
447
+ ));
448
+ }
449
+ };
450
+
451
+ formatComponentName = function (vm, includeFile) {
452
+ if (vm.$root === vm) {
453
+ return '<Root>'
454
+ }
455
+ var name = typeof vm === 'string'
456
+ ? vm
457
+ : typeof vm === 'function' && vm.options
458
+ ? vm.options.name
459
+ : vm._isVue
460
+ ? vm.$options.name || vm.$options._componentTag
461
+ : vm.name;
462
+
463
+ var file = vm._isVue && vm.$options.__file;
464
+ if (!name && file) {
465
+ var match = file.match(/([^/\\]+)\.vue$/);
466
+ name = match && match[1];
467
+ }
468
+
469
+ return (
470
+ (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
471
+ (file && includeFile !== false ? (" at " + file) : '')
472
+ )
473
+ };
474
+
475
+ var repeat = function (str, n) {
476
+ var res = '';
477
+ while (n) {
478
+ if (n % 2 === 1) { res += str; }
479
+ if (n > 1) { str += str; }
480
+ n >>= 1;
481
+ }
482
+ return res
483
+ };
484
+
485
+ var generateComponentTrace = function (vm) {
486
+ if (vm._isVue && vm.$parent) {
487
+ var tree = [];
488
+ var currentRecursiveSequence = 0;
489
+ while (vm) {
490
+ if (tree.length > 0) {
491
+ var last = tree[tree.length - 1];
492
+ if (last.constructor === vm.constructor) {
493
+ currentRecursiveSequence++;
494
+ vm = vm.$parent;
495
+ continue
496
+ } else if (currentRecursiveSequence > 0) {
497
+ tree[tree.length - 1] = [last, currentRecursiveSequence];
498
+ currentRecursiveSequence = 0;
499
+ }
500
+ }
501
+ tree.push(vm);
502
+ vm = vm.$parent;
503
+ }
504
+ return '\n\nfound in\n\n' + tree
505
+ .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
506
+ ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
507
+ : formatComponentName(vm))); })
508
+ .join('\n')
509
+ } else {
510
+ return ("\n\n(found in " + (formatComponentName(vm)) + ")")
511
+ }
512
+ };
513
+ }
514
+
515
+ /* */
516
+
517
+ function handleError (err, vm, info) {
518
+ if (config.errorHandler) {
519
+ config.errorHandler.call(null, err, vm, info);
520
+ } else {
521
+ {
522
+ warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
523
+ }
524
+ /* istanbul ignore else */
525
+ if (inBrowser && typeof console !== 'undefined') {
526
+ console.error(err);
527
+ } else {
528
+ throw err
529
+ }
530
+ }
531
+ }
354
532
 
355
533
  /* */
356
534
  /* globals MutationObserver */
@@ -368,6 +546,20 @@ var isAndroid = UA && UA.indexOf('android') > 0;
368
546
  var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
369
547
  var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
370
548
 
549
+ var supportsPassive = false;
550
+ if (inBrowser) {
551
+ try {
552
+ var opts = {};
553
+ Object.defineProperty(opts, 'passive', ({
554
+ get: function get () {
555
+ /* istanbul ignore next */
556
+ supportsPassive = true;
557
+ }
558
+ } )); // https://github.com/facebook/flow/issues/285
559
+ window.addEventListener('test-passive', null, opts);
560
+ } catch (e) {}
561
+ }
562
+
371
563
  // this needs to be lazy-evaled because vue may be required before
372
564
  // vue-server-renderer can set VUE_ENV
373
565
  var _isServer;
@@ -390,7 +582,7 @@ var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
390
582
 
391
583
  /* istanbul ignore next */
392
584
  function isNative (Ctor) {
393
- return /native code/.test(Ctor.toString())
585
+ return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
394
586
  }
395
587
 
396
588
  var hasSymbol =
@@ -461,15 +653,22 @@ var nextTick = (function () {
461
653
  return function queueNextTick (cb, ctx) {
462
654
  var _resolve;
463
655
  callbacks.push(function () {
464
- if (cb) { cb.call(ctx); }
465
- if (_resolve) { _resolve(ctx); }
656
+ if (cb) {
657
+ try {
658
+ cb.call(ctx);
659
+ } catch (e) {
660
+ handleError(e, ctx, 'nextTick');
661
+ }
662
+ } else if (_resolve) {
663
+ _resolve(ctx);
664
+ }
466
665
  });
467
666
  if (!pending) {
468
667
  pending = true;
469
668
  timerFunc();
470
669
  }
471
670
  if (!cb && typeof Promise !== 'undefined') {
472
- return new Promise(function (resolve) {
671
+ return new Promise(function (resolve, reject) {
473
672
  _resolve = resolve;
474
673
  })
475
674
  }
@@ -501,124 +700,17 @@ if (typeof Set !== 'undefined' && isNative(Set)) {
501
700
  }());
502
701
  }
503
702
 
504
- var perf;
505
-
506
- {
507
- perf = inBrowser && window.performance;
508
- if (perf && (!perf.mark || !perf.measure)) {
509
- perf = undefined;
510
- }
511
- }
512
-
513
703
  /* */
514
704
 
515
- var emptyObject = Object.freeze({});
516
-
517
- /**
518
- * Check if a string starts with $ or _
519
- */
520
- function isReserved (str) {
521
- var c = (str + '').charCodeAt(0);
522
- return c === 0x24 || c === 0x5F
523
- }
524
-
525
- /**
526
- * Define a property.
527
- */
528
- function def (obj, key, val, enumerable) {
529
- Object.defineProperty(obj, key, {
530
- value: val,
531
- enumerable: !!enumerable,
532
- writable: true,
533
- configurable: true
534
- });
535
- }
536
705
 
537
- /**
538
- * Parse simple path.
539
- */
540
- var bailRE = /[^\w.$]/;
541
- function parsePath (path) {
542
- if (bailRE.test(path)) {
543
- return
544
- } else {
545
- var segments = path.split('.');
546
- return function (obj) {
547
- for (var i = 0; i < segments.length; i++) {
548
- if (!obj) { return }
549
- obj = obj[segments[i]];
550
- }
551
- return obj
552
- }
553
- }
554
- }
555
-
556
- var warn = noop;
557
- var tip = noop;
558
- var formatComponentName;
559
-
560
- {
561
- var hasConsole = typeof console !== 'undefined';
562
- var classifyRE = /(?:^|[-_])(\w)/g;
563
- var classify = function (str) { return str
564
- .replace(classifyRE, function (c) { return c.toUpperCase(); })
565
- .replace(/[-_]/g, ''); };
566
-
567
- warn = function (msg, vm) {
568
- if (hasConsole && (!config.silent)) {
569
- console.error("[Vue warn]: " + msg + " " + (
570
- vm ? formatLocation(formatComponentName(vm)) : ''
571
- ));
572
- }
573
- };
574
-
575
- tip = function (msg, vm) {
576
- if (hasConsole && (!config.silent)) {
577
- console.warn("[Vue tip]: " + msg + " " + (
578
- vm ? formatLocation(formatComponentName(vm)) : ''
579
- ));
580
- }
581
- };
582
-
583
- formatComponentName = function (vm, includeFile) {
584
- if (vm.$root === vm) {
585
- return '<Root>'
586
- }
587
- var name = vm._isVue
588
- ? vm.$options.name || vm.$options._componentTag
589
- : vm.name;
590
-
591
- var file = vm._isVue && vm.$options.__file;
592
- if (!name && file) {
593
- var match = file.match(/([^/\\]+)\.vue$/);
594
- name = match && match[1];
595
- }
596
-
597
- return (
598
- (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
599
- (file && includeFile !== false ? (" at " + file) : '')
600
- )
601
- };
602
-
603
- var formatLocation = function (str) {
604
- if (str === "<Anonymous>") {
605
- str += " - use the \"name\" option for better debugging messages.";
606
- }
607
- return ("\n(found in " + str + ")")
608
- };
609
- }
610
-
611
- /* */
612
-
613
-
614
- var uid$1 = 0;
706
+ var uid = 0;
615
707
 
616
708
  /**
617
709
  * A dep is an observable that can have multiple
618
710
  * directives subscribing to it.
619
711
  */
620
712
  var Dep = function Dep () {
621
- this.id = uid$1++;
713
+ this.id = uid++;
622
714
  this.subs = [];
623
715
  };
624
716
 
@@ -637,7 +729,7 @@ Dep.prototype.depend = function depend () {
637
729
  };
638
730
 
639
731
  Dep.prototype.notify = function notify () {
640
- // stablize the subscriber list first
732
+ // stabilize the subscriber list first
641
733
  var subs = this.subs.slice();
642
734
  for (var i = 0, l = subs.length; i < l; i++) {
643
735
  subs[i].update();
@@ -880,27 +972,27 @@ function defineReactive$$1 (
880
972
  * triggers change notification if the property doesn't
881
973
  * already exist.
882
974
  */
883
- function set (obj, key, val) {
884
- if (Array.isArray(obj)) {
885
- obj.length = Math.max(obj.length, key);
886
- obj.splice(key, 1, val);
975
+ function set (target, key, val) {
976
+ if (Array.isArray(target) && typeof key === 'number') {
977
+ target.length = Math.max(target.length, key);
978
+ target.splice(key, 1, val);
887
979
  return val
888
980
  }
889
- if (hasOwn(obj, key)) {
890
- obj[key] = val;
891
- return
981
+ if (hasOwn(target, key)) {
982
+ target[key] = val;
983
+ return val
892
984
  }
893
- var ob = obj.__ob__;
894
- if (obj._isVue || (ob && ob.vmCount)) {
985
+ var ob = (target ).__ob__;
986
+ if (target._isVue || (ob && ob.vmCount)) {
895
987
  "development" !== 'production' && warn(
896
988
  'Avoid adding reactive properties to a Vue instance or its root $data ' +
897
989
  'at runtime - declare it upfront in the data option.'
898
990
  );
899
- return
991
+ return val
900
992
  }
901
993
  if (!ob) {
902
- obj[key] = val;
903
- return
994
+ target[key] = val;
995
+ return val
904
996
  }
905
997
  defineReactive$$1(ob.value, key, val);
906
998
  ob.dep.notify();
@@ -910,23 +1002,23 @@ function set (obj, key, val) {
910
1002
  /**
911
1003
  * Delete a property and trigger change if necessary.
912
1004
  */
913
- function del (obj, key) {
914
- if (Array.isArray(obj)) {
915
- obj.splice(key, 1);
1005
+ function del (target, key) {
1006
+ if (Array.isArray(target) && typeof key === 'number') {
1007
+ target.splice(key, 1);
916
1008
  return
917
1009
  }
918
- var ob = obj.__ob__;
919
- if (obj._isVue || (ob && ob.vmCount)) {
1010
+ var ob = (target ).__ob__;
1011
+ if (target._isVue || (ob && ob.vmCount)) {
920
1012
  "development" !== 'production' && warn(
921
1013
  'Avoid deleting properties on a Vue instance or its root $data ' +
922
1014
  '- just set it to null.'
923
1015
  );
924
1016
  return
925
1017
  }
926
- if (!hasOwn(obj, key)) {
1018
+ if (!hasOwn(target, key)) {
927
1019
  return
928
1020
  }
929
- delete obj[key];
1021
+ delete target[key];
930
1022
  if (!ob) {
931
1023
  return
932
1024
  }
@@ -1061,7 +1153,7 @@ function mergeHook (
1061
1153
  : parentVal
1062
1154
  }
1063
1155
 
1064
- config._lifecycleHooks.forEach(function (hook) {
1156
+ LIFECYCLE_HOOKS.forEach(function (hook) {
1065
1157
  strats[hook] = mergeHook;
1066
1158
  });
1067
1159
 
@@ -1079,7 +1171,7 @@ function mergeAssets (parentVal, childVal) {
1079
1171
  : res
1080
1172
  }
1081
1173
 
1082
- config._assetTypes.forEach(function (type) {
1174
+ ASSET_TYPES.forEach(function (type) {
1083
1175
  strats[type + 's'] = mergeAssets;
1084
1176
  });
1085
1177
 
@@ -1205,21 +1297,20 @@ function mergeOptions (
1205
1297
  {
1206
1298
  checkComponents(child);
1207
1299
  }
1300
+
1301
+ if (typeof child === 'function') {
1302
+ child = child.options;
1303
+ }
1304
+
1208
1305
  normalizeProps(child);
1209
1306
  normalizeDirectives(child);
1210
1307
  var extendsFrom = child.extends;
1211
1308
  if (extendsFrom) {
1212
- parent = typeof extendsFrom === 'function'
1213
- ? mergeOptions(parent, extendsFrom.options, vm)
1214
- : mergeOptions(parent, extendsFrom, vm);
1309
+ parent = mergeOptions(parent, extendsFrom, vm);
1215
1310
  }
1216
1311
  if (child.mixins) {
1217
1312
  for (var i = 0, l = child.mixins.length; i < l; i++) {
1218
- var mixin = child.mixins[i];
1219
- if (mixin.prototype instanceof Vue$3) {
1220
- mixin = mixin.options;
1221
- }
1222
- parent = mergeOptions(parent, mixin, vm);
1313
+ parent = mergeOptions(parent, child.mixins[i], vm);
1223
1314
  }
1224
1315
  }
1225
1316
  var options = {};
@@ -1392,20 +1483,13 @@ function assertProp (
1392
1483
  }
1393
1484
  }
1394
1485
 
1395
- /**
1396
- * Assert the type of a value
1397
- */
1486
+ var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
1487
+
1398
1488
  function assertType (value, type) {
1399
1489
  var valid;
1400
1490
  var expectedType = getType(type);
1401
- if (expectedType === 'String') {
1402
- valid = typeof value === (expectedType = 'string');
1403
- } else if (expectedType === 'Number') {
1404
- valid = typeof value === (expectedType = 'number');
1405
- } else if (expectedType === 'Boolean') {
1406
- valid = typeof value === (expectedType = 'boolean');
1407
- } else if (expectedType === 'Function') {
1408
- valid = typeof value === (expectedType = 'function');
1491
+ if (simpleCheckRE.test(expectedType)) {
1492
+ valid = typeof value === expectedType.toLowerCase();
1409
1493
  } else if (expectedType === 'Object') {
1410
1494
  valid = isPlainObject(value);
1411
1495
  } else if (expectedType === 'Array') {
@@ -1426,7 +1510,7 @@ function assertType (value, type) {
1426
1510
  */
1427
1511
  function getType (fn) {
1428
1512
  var match = fn && fn.toString().match(/^\s*function (\w+)/);
1429
- return match && match[1]
1513
+ return match ? match[1] : ''
1430
1514
  }
1431
1515
 
1432
1516
  function isType (type, fn) {
@@ -1442,19 +1526,28 @@ function isType (type, fn) {
1442
1526
  return false
1443
1527
  }
1444
1528
 
1445
- function handleError (err, vm, type) {
1446
- if (config.errorHandler) {
1447
- config.errorHandler.call(null, err, vm, type);
1448
- } else {
1449
- {
1450
- warn(("Error in " + type + ":"), vm);
1451
- }
1452
- /* istanbul ignore else */
1453
- if (inBrowser && typeof console !== 'undefined') {
1454
- console.error(err);
1455
- } else {
1456
- throw err
1457
- }
1529
+ /* */
1530
+
1531
+ var mark;
1532
+ var measure;
1533
+
1534
+ {
1535
+ var perf = inBrowser && window.performance;
1536
+ /* istanbul ignore if */
1537
+ if (
1538
+ perf &&
1539
+ perf.mark &&
1540
+ perf.measure &&
1541
+ perf.clearMarks &&
1542
+ perf.clearMeasures
1543
+ ) {
1544
+ mark = function (tag) { return perf.mark(tag); };
1545
+ measure = function (name, startTag, endTag) {
1546
+ perf.measure(name, startTag, endTag);
1547
+ perf.clearMarks(startTag);
1548
+ perf.clearMarks(endTag);
1549
+ perf.clearMeasures(name);
1550
+ };
1458
1551
  }
1459
1552
  }
1460
1553
 
@@ -1606,8 +1699,9 @@ function cloneVNode (vnode) {
1606
1699
  }
1607
1700
 
1608
1701
  function cloneVNodes (vnodes) {
1609
- var res = new Array(vnodes.length);
1610
- for (var i = 0; i < vnodes.length; i++) {
1702
+ var len = vnodes.length;
1703
+ var res = new Array(len);
1704
+ for (var i = 0; i < len; i++) {
1611
1705
  res[i] = cloneVNode(vnodes[i]);
1612
1706
  }
1613
1707
  return res
@@ -1616,6 +1710,8 @@ function cloneVNodes (vnodes) {
1616
1710
  /* */
1617
1711
 
1618
1712
  var normalizeEvent = cached(function (name) {
1713
+ var passive = name.charAt(0) === '&';
1714
+ name = passive ? name.slice(1) : name;
1619
1715
  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
1620
1716
  name = once$$1 ? name.slice(1) : name;
1621
1717
  var capture = name.charAt(0) === '!';
@@ -1623,7 +1719,8 @@ var normalizeEvent = cached(function (name) {
1623
1719
  return {
1624
1720
  name: name,
1625
1721
  once: once$$1,
1626
- capture: capture
1722
+ capture: capture,
1723
+ passive: passive
1627
1724
  }
1628
1725
  });
1629
1726
 
@@ -1657,23 +1754,23 @@ function updateListeners (
1657
1754
  cur = on[name];
1658
1755
  old = oldOn[name];
1659
1756
  event = normalizeEvent(name);
1660
- if (!cur) {
1757
+ if (isUndef(cur)) {
1661
1758
  "development" !== 'production' && warn(
1662
1759
  "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
1663
1760
  vm
1664
1761
  );
1665
- } else if (!old) {
1666
- if (!cur.fns) {
1762
+ } else if (isUndef(old)) {
1763
+ if (isUndef(cur.fns)) {
1667
1764
  cur = on[name] = createFnInvoker(cur);
1668
1765
  }
1669
- add(event.name, cur, event.once, event.capture);
1766
+ add(event.name, cur, event.once, event.capture, event.passive);
1670
1767
  } else if (cur !== old) {
1671
1768
  old.fns = cur;
1672
1769
  on[name] = old;
1673
1770
  }
1674
1771
  }
1675
1772
  for (name in oldOn) {
1676
- if (!on[name]) {
1773
+ if (isUndef(on[name])) {
1677
1774
  event = normalizeEvent(name);
1678
1775
  remove$$1(event.name, oldOn[name], event.capture);
1679
1776
  }
@@ -1693,12 +1790,12 @@ function mergeVNodeHook (def, hookKey, hook) {
1693
1790
  remove(invoker.fns, wrappedHook);
1694
1791
  }
1695
1792
 
1696
- if (!oldHook) {
1793
+ if (isUndef(oldHook)) {
1697
1794
  // no existing hook
1698
1795
  invoker = createFnInvoker([wrappedHook]);
1699
1796
  } else {
1700
1797
  /* istanbul ignore if */
1701
- if (oldHook.fns && oldHook.merged) {
1798
+ if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
1702
1799
  // already a merged invoker
1703
1800
  invoker = oldHook;
1704
1801
  invoker.fns.push(wrappedHook);
@@ -1714,6 +1811,74 @@ function mergeVNodeHook (def, hookKey, hook) {
1714
1811
 
1715
1812
  /* */
1716
1813
 
1814
+ function extractPropsFromVNodeData (
1815
+ data,
1816
+ Ctor,
1817
+ tag
1818
+ ) {
1819
+ // we are only extracting raw values here.
1820
+ // validation and default values are handled in the child
1821
+ // component itself.
1822
+ var propOptions = Ctor.options.props;
1823
+ if (isUndef(propOptions)) {
1824
+ return
1825
+ }
1826
+ var res = {};
1827
+ var attrs = data.attrs;
1828
+ var props = data.props;
1829
+ if (isDef(attrs) || isDef(props)) {
1830
+ for (var key in propOptions) {
1831
+ var altKey = hyphenate(key);
1832
+ {
1833
+ var keyInLowerCase = key.toLowerCase();
1834
+ if (
1835
+ key !== keyInLowerCase &&
1836
+ attrs && hasOwn(attrs, keyInLowerCase)
1837
+ ) {
1838
+ tip(
1839
+ "Prop \"" + keyInLowerCase + "\" is passed to component " +
1840
+ (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
1841
+ " \"" + key + "\". " +
1842
+ "Note that HTML attributes are case-insensitive and camelCased " +
1843
+ "props need to use their kebab-case equivalents when using in-DOM " +
1844
+ "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
1845
+ );
1846
+ }
1847
+ }
1848
+ checkProp(res, props, key, altKey, true) ||
1849
+ checkProp(res, attrs, key, altKey, false);
1850
+ }
1851
+ }
1852
+ return res
1853
+ }
1854
+
1855
+ function checkProp (
1856
+ res,
1857
+ hash,
1858
+ key,
1859
+ altKey,
1860
+ preserve
1861
+ ) {
1862
+ if (isDef(hash)) {
1863
+ if (hasOwn(hash, key)) {
1864
+ res[key] = hash[key];
1865
+ if (!preserve) {
1866
+ delete hash[key];
1867
+ }
1868
+ return true
1869
+ } else if (hasOwn(hash, altKey)) {
1870
+ res[key] = hash[altKey];
1871
+ if (!preserve) {
1872
+ delete hash[altKey];
1873
+ }
1874
+ return true
1875
+ }
1876
+ }
1877
+ return false
1878
+ }
1879
+
1880
+ /* */
1881
+
1717
1882
  // The template compiler attempts to minimize the need for normalization by
1718
1883
  // statically analyzing the template at compile time.
1719
1884
  //
@@ -1735,7 +1900,7 @@ function simpleNormalizeChildren (children) {
1735
1900
  return children
1736
1901
  }
1737
1902
 
1738
- // 2. When the children contains constrcuts that always generated nested Arrays,
1903
+ // 2. When the children contains constructs that always generated nested Arrays,
1739
1904
  // e.g. <template>, <slot>, v-for, or when the children is provided by user
1740
1905
  // with hand-written render functions / JSX. In such cases a full normalization
1741
1906
  // is needed to cater to all possible types of children values.
@@ -1752,24 +1917,24 @@ function normalizeArrayChildren (children, nestedIndex) {
1752
1917
  var i, c, last;
1753
1918
  for (i = 0; i < children.length; i++) {
1754
1919
  c = children[i];
1755
- if (c == null || typeof c === 'boolean') { continue }
1920
+ if (isUndef(c) || typeof c === 'boolean') { continue }
1756
1921
  last = res[res.length - 1];
1757
1922
  // nested
1758
1923
  if (Array.isArray(c)) {
1759
1924
  res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
1760
1925
  } else if (isPrimitive(c)) {
1761
- if (last && last.text) {
1926
+ if (isDef(last) && isDef(last.text)) {
1762
1927
  last.text += String(c);
1763
1928
  } else if (c !== '') {
1764
1929
  // convert primitive to vnode
1765
1930
  res.push(createTextVNode(c));
1766
1931
  }
1767
1932
  } else {
1768
- if (c.text && last && last.text) {
1933
+ if (isDef(c.text) && isDef(last) && isDef(last.text)) {
1769
1934
  res[res.length - 1] = createTextVNode(last.text + c.text);
1770
1935
  } else {
1771
1936
  // default key for nested array children (likely generated by v-for)
1772
- if (c.tag && c.key == null && nestedIndex != null) {
1937
+ if (isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex)) {
1773
1938
  c.key = "__vlist" + nestedIndex + "_" + i + "__";
1774
1939
  }
1775
1940
  res.push(c);
@@ -1781,12 +1946,127 @@ function normalizeArrayChildren (children, nestedIndex) {
1781
1946
 
1782
1947
  /* */
1783
1948
 
1949
+ function ensureCtor (comp, base) {
1950
+ return isObject(comp)
1951
+ ? base.extend(comp)
1952
+ : comp
1953
+ }
1954
+
1955
+ function resolveAsyncComponent (
1956
+ factory,
1957
+ baseCtor,
1958
+ context
1959
+ ) {
1960
+ if (isTrue(factory.error) && isDef(factory.errorComp)) {
1961
+ return factory.errorComp
1962
+ }
1963
+
1964
+ if (isDef(factory.resolved)) {
1965
+ return factory.resolved
1966
+ }
1967
+
1968
+ if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
1969
+ return factory.loadingComp
1970
+ }
1971
+
1972
+ if (isDef(factory.contexts)) {
1973
+ // already pending
1974
+ factory.contexts.push(context);
1975
+ } else {
1976
+ var contexts = factory.contexts = [context];
1977
+ var sync = true;
1978
+
1979
+ var forceRender = function () {
1980
+ for (var i = 0, l = contexts.length; i < l; i++) {
1981
+ contexts[i].$forceUpdate();
1982
+ }
1983
+ };
1984
+
1985
+ var resolve = once(function (res) {
1986
+ // cache resolved
1987
+ factory.resolved = ensureCtor(res, baseCtor);
1988
+ // invoke callbacks only if this is not a synchronous resolve
1989
+ // (async resolves are shimmed as synchronous during SSR)
1990
+ if (!sync) {
1991
+ forceRender();
1992
+ }
1993
+ });
1994
+
1995
+ var reject = once(function (reason) {
1996
+ "development" !== 'production' && warn(
1997
+ "Failed to resolve async component: " + (String(factory)) +
1998
+ (reason ? ("\nReason: " + reason) : '')
1999
+ );
2000
+ if (isDef(factory.errorComp)) {
2001
+ factory.error = true;
2002
+ forceRender();
2003
+ }
2004
+ });
2005
+
2006
+ var res = factory(resolve, reject);
2007
+
2008
+ if (isObject(res)) {
2009
+ if (typeof res.then === 'function') {
2010
+ // () => Promise
2011
+ if (isUndef(factory.resolved)) {
2012
+ res.then(resolve, reject);
2013
+ }
2014
+ } else if (isDef(res.component) && typeof res.component.then === 'function') {
2015
+ res.component.then(resolve, reject);
2016
+
2017
+ if (isDef(res.error)) {
2018
+ factory.errorComp = ensureCtor(res.error, baseCtor);
2019
+ }
2020
+
2021
+ if (isDef(res.loading)) {
2022
+ factory.loadingComp = ensureCtor(res.loading, baseCtor);
2023
+ if (res.delay === 0) {
2024
+ factory.loading = true;
2025
+ } else {
2026
+ setTimeout(function () {
2027
+ if (isUndef(factory.resolved) && isUndef(factory.error)) {
2028
+ factory.loading = true;
2029
+ forceRender();
2030
+ }
2031
+ }, res.delay || 200);
2032
+ }
2033
+ }
2034
+
2035
+ if (isDef(res.timeout)) {
2036
+ setTimeout(function () {
2037
+ reject(
2038
+ "timeout (" + (res.timeout) + "ms)"
2039
+ );
2040
+ }, res.timeout);
2041
+ }
2042
+ }
2043
+ }
2044
+
2045
+ sync = false;
2046
+ // return in case resolved synchronously
2047
+ return factory.loading
2048
+ ? factory.loadingComp
2049
+ : factory.resolved
2050
+ }
2051
+ }
2052
+
2053
+ /* */
2054
+
1784
2055
  function getFirstComponentChild (children) {
1785
- return children && children.filter(function (c) { return c && c.componentOptions; })[0]
2056
+ if (Array.isArray(children)) {
2057
+ for (var i = 0; i < children.length; i++) {
2058
+ var c = children[i];
2059
+ if (isDef(c) && isDef(c.componentOptions)) {
2060
+ return c
2061
+ }
2062
+ }
2063
+ }
1786
2064
  }
1787
2065
 
1788
2066
  /* */
1789
2067
 
2068
+ /* */
2069
+
1790
2070
  function initEvents (vm) {
1791
2071
  vm._events = Object.create(null);
1792
2072
  vm._hasHookEvent = false;
@@ -1853,12 +2133,21 @@ function eventsMixin (Vue) {
1853
2133
  };
1854
2134
 
1855
2135
  Vue.prototype.$off = function (event, fn) {
2136
+ var this$1 = this;
2137
+
1856
2138
  var vm = this;
1857
2139
  // all
1858
2140
  if (!arguments.length) {
1859
2141
  vm._events = Object.create(null);
1860
2142
  return vm
1861
2143
  }
2144
+ // array of events
2145
+ if (Array.isArray(event)) {
2146
+ for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
2147
+ this$1.$off(event[i$1], fn);
2148
+ }
2149
+ return vm
2150
+ }
1862
2151
  // specific event
1863
2152
  var cbs = vm._events[event];
1864
2153
  if (!cbs) {
@@ -1883,6 +2172,18 @@ function eventsMixin (Vue) {
1883
2172
 
1884
2173
  Vue.prototype.$emit = function (event) {
1885
2174
  var vm = this;
2175
+ {
2176
+ var lowerCaseEvent = event.toLowerCase();
2177
+ if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
2178
+ tip(
2179
+ "Event \"" + lowerCaseEvent + "\" is emitted in component " +
2180
+ (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
2181
+ "Note that HTML attributes are case-insensitive and you cannot use " +
2182
+ "v-on to listen to camelCase events when using in-DOM templates. " +
2183
+ "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
2184
+ );
2185
+ }
2186
+ }
1886
2187
  var cbs = vm._events[event];
1887
2188
  if (cbs) {
1888
2189
  cbs = cbs.length > 1 ? toArray(cbs) : cbs;
@@ -1909,13 +2210,13 @@ function resolveSlots (
1909
2210
  return slots
1910
2211
  }
1911
2212
  var defaultSlot = [];
1912
- var name, child;
1913
2213
  for (var i = 0, l = children.length; i < l; i++) {
1914
- child = children[i];
2214
+ var child = children[i];
1915
2215
  // named slots should only be respected if the vnode was rendered in the
1916
2216
  // same context.
1917
2217
  if ((child.context === context || child.functionalContext === context) &&
1918
- child.data && (name = child.data.slot)) {
2218
+ child.data && child.data.slot != null) {
2219
+ var name = child.data.slot;
1919
2220
  var slot = (slots[name] || (slots[name] = []));
1920
2221
  if (child.tag === 'template') {
1921
2222
  slot.push.apply(slot, child.children);
@@ -1926,16 +2227,17 @@ function resolveSlots (
1926
2227
  defaultSlot.push(child);
1927
2228
  }
1928
2229
  }
1929
- // ignore single whitespace
1930
- if (defaultSlot.length && !(
1931
- defaultSlot.length === 1 &&
1932
- (defaultSlot[0].text === ' ' || defaultSlot[0].isComment)
1933
- )) {
2230
+ // ignore whitespace
2231
+ if (!defaultSlot.every(isWhitespace)) {
1934
2232
  slots.default = defaultSlot;
1935
2233
  }
1936
2234
  return slots
1937
2235
  }
1938
2236
 
2237
+ function isWhitespace (node) {
2238
+ return node.isComment || node.text === ' '
2239
+ }
2240
+
1939
2241
  function resolveScopedSlots (
1940
2242
  fns
1941
2243
  ) {
@@ -2050,6 +2352,9 @@ function lifecycleMixin (Vue) {
2050
2352
  }
2051
2353
  // call the last hook...
2052
2354
  vm._isDestroyed = true;
2355
+ // invoke destroy hooks on current rendered tree
2356
+ vm.__patch__(vm._vnode, null);
2357
+ // fire destroyed hook
2053
2358
  callHook(vm, 'destroyed');
2054
2359
  // turn off all instance listeners.
2055
2360
  vm.$off();
@@ -2057,8 +2362,8 @@ function lifecycleMixin (Vue) {
2057
2362
  if (vm.$el) {
2058
2363
  vm.$el.__vue__ = null;
2059
2364
  }
2060
- // invoke destroy hooks on current rendered tree
2061
- vm.__patch__(vm._vnode, null);
2365
+ // remove reference to DOM nodes (prevents leak)
2366
+ vm.$options._parentElm = vm.$options._refElm = null;
2062
2367
  };
2063
2368
  }
2064
2369
 
@@ -2072,10 +2377,11 @@ function mountComponent (
2072
2377
  vm.$options.render = createEmptyVNode;
2073
2378
  {
2074
2379
  /* istanbul ignore if */
2075
- if (vm.$options.template && vm.$options.template.charAt(0) !== '#') {
2380
+ if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
2381
+ vm.$options.el || el) {
2076
2382
  warn(
2077
2383
  'You are using the runtime-only build of Vue where the template ' +
2078
- 'option is not available. Either pre-compile the templates into ' +
2384
+ 'compiler is not available. Either pre-compile the templates into ' +
2079
2385
  'render functions, or use the compiler-included build.',
2080
2386
  vm
2081
2387
  );
@@ -2091,19 +2397,22 @@ function mountComponent (
2091
2397
 
2092
2398
  var updateComponent;
2093
2399
  /* istanbul ignore if */
2094
- if ("development" !== 'production' && config.performance && perf) {
2400
+ if ("development" !== 'production' && config.performance && mark) {
2095
2401
  updateComponent = function () {
2096
2402
  var name = vm._name;
2097
- var startTag = "start " + name;
2098
- var endTag = "end " + name;
2099
- perf.mark(startTag);
2403
+ var id = vm._uid;
2404
+ var startTag = "vue-perf-start:" + id;
2405
+ var endTag = "vue-perf-end:" + id;
2406
+
2407
+ mark(startTag);
2100
2408
  var vnode = vm._render();
2101
- perf.mark(endTag);
2102
- perf.measure((name + " render"), startTag, endTag);
2103
- perf.mark(startTag);
2409
+ mark(endTag);
2410
+ measure((name + " render"), startTag, endTag);
2411
+
2412
+ mark(startTag);
2104
2413
  vm._update(vnode, hydrating);
2105
- perf.mark(endTag);
2106
- perf.measure((name + " patch"), startTag, endTag);
2414
+ mark(endTag);
2415
+ measure((name + " patch"), startTag, endTag);
2107
2416
  };
2108
2417
  } else {
2109
2418
  updateComponent = function () {
@@ -2194,7 +2503,7 @@ function activateChildComponent (vm, direct) {
2194
2503
  } else if (vm._directInactive) {
2195
2504
  return
2196
2505
  }
2197
- if (vm._inactive || vm._inactive == null) {
2506
+ if (vm._inactive || vm._inactive === null) {
2198
2507
  vm._inactive = false;
2199
2508
  for (var i = 0; i < vm.$children.length; i++) {
2200
2509
  activateChildComponent(vm.$children[i]);
@@ -2238,7 +2547,10 @@ function callHook (vm, hook) {
2238
2547
  /* */
2239
2548
 
2240
2549
 
2550
+ var MAX_UPDATE_COUNT = 100;
2551
+
2241
2552
  var queue = [];
2553
+ var activatedChildren = [];
2242
2554
  var has = {};
2243
2555
  var circular = {};
2244
2556
  var waiting = false;
@@ -2249,7 +2561,7 @@ var index = 0;
2249
2561
  * Reset the scheduler's state.
2250
2562
  */
2251
2563
  function resetSchedulerState () {
2252
- queue.length = 0;
2564
+ queue.length = activatedChildren.length = 0;
2253
2565
  has = {};
2254
2566
  {
2255
2567
  circular = {};
@@ -2262,7 +2574,7 @@ function resetSchedulerState () {
2262
2574
  */
2263
2575
  function flushSchedulerQueue () {
2264
2576
  flushing = true;
2265
- var watcher, id, vm;
2577
+ var watcher, id;
2266
2578
 
2267
2579
  // Sort queue before flush.
2268
2580
  // This ensures that:
@@ -2284,7 +2596,7 @@ function flushSchedulerQueue () {
2284
2596
  // in dev build, check and stop circular updates.
2285
2597
  if ("development" !== 'production' && has[id] != null) {
2286
2598
  circular[id] = (circular[id] || 0) + 1;
2287
- if (circular[id] > config._maxUpdateCount) {
2599
+ if (circular[id] > MAX_UPDATE_COUNT) {
2288
2600
  warn(
2289
2601
  'You may have an infinite update loop ' + (
2290
2602
  watcher.user
@@ -2298,23 +2610,50 @@ function flushSchedulerQueue () {
2298
2610
  }
2299
2611
  }
2300
2612
 
2301
- // call updated hooks
2302
- index = queue.length;
2303
- while (index--) {
2304
- watcher = queue[index];
2305
- vm = watcher.vm;
2306
- if (vm._watcher === watcher && vm._isMounted) {
2307
- callHook(vm, 'updated');
2308
- }
2309
- }
2613
+ // keep copies of post queues before resetting state
2614
+ var activatedQueue = activatedChildren.slice();
2615
+ var updatedQueue = queue.slice();
2616
+
2617
+ resetSchedulerState();
2618
+
2619
+ // call component updated and activated hooks
2620
+ callActivatedHooks(activatedQueue);
2621
+ callUpdateHooks(updatedQueue);
2310
2622
 
2311
2623
  // devtool hook
2312
2624
  /* istanbul ignore if */
2313
2625
  if (devtools && config.devtools) {
2314
2626
  devtools.emit('flush');
2315
2627
  }
2628
+ }
2316
2629
 
2317
- resetSchedulerState();
2630
+ function callUpdateHooks (queue) {
2631
+ var i = queue.length;
2632
+ while (i--) {
2633
+ var watcher = queue[i];
2634
+ var vm = watcher.vm;
2635
+ if (vm._watcher === watcher && vm._isMounted) {
2636
+ callHook(vm, 'updated');
2637
+ }
2638
+ }
2639
+ }
2640
+
2641
+ /**
2642
+ * Queue a kept-alive component that was activated during patch.
2643
+ * The queue will be processed after the entire tree has been patched.
2644
+ */
2645
+ function queueActivatedComponent (vm) {
2646
+ // setting _inactive to false here so that a render function can
2647
+ // rely on checking whether it's in an inactive tree (e.g. router-view)
2648
+ vm._inactive = false;
2649
+ activatedChildren.push(vm);
2650
+ }
2651
+
2652
+ function callActivatedHooks (queue) {
2653
+ for (var i = 0; i < queue.length; i++) {
2654
+ queue[i]._inactive = true;
2655
+ activateChildComponent(queue[i], true /* true */);
2656
+ }
2318
2657
  }
2319
2658
 
2320
2659
  /**
@@ -2618,7 +2957,11 @@ function initState (vm) {
2618
2957
  if (opts.watch) { initWatch(vm, opts.watch); }
2619
2958
  }
2620
2959
 
2621
- var isReservedProp = { key: 1, ref: 1, slot: 1 };
2960
+ var isReservedProp = {
2961
+ key: 1,
2962
+ ref: 1,
2963
+ slot: 1
2964
+ };
2622
2965
 
2623
2966
  function initProps (vm, propsOptions) {
2624
2967
  var propsData = vm.$options.propsData || {};
@@ -2634,7 +2977,7 @@ function initProps (vm, propsOptions) {
2634
2977
  var value = validateProp(key, propsOptions, propsData, vm);
2635
2978
  /* istanbul ignore else */
2636
2979
  {
2637
- if (isReservedProp[key]) {
2980
+ if (isReservedProp[key] || config.isReservedAttr(key)) {
2638
2981
  warn(
2639
2982
  ("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
2640
2983
  vm
@@ -2667,7 +3010,7 @@ function initProps (vm, propsOptions) {
2667
3010
  function initData (vm) {
2668
3011
  var data = vm.$options.data;
2669
3012
  data = vm._data = typeof data === 'function'
2670
- ? data.call(vm)
3013
+ ? getData(data, vm)
2671
3014
  : data || {};
2672
3015
  if (!isPlainObject(data)) {
2673
3016
  data = {};
@@ -2696,6 +3039,15 @@ function initData (vm) {
2696
3039
  observe(data, true /* asRootData */);
2697
3040
  }
2698
3041
 
3042
+ function getData (data, vm) {
3043
+ try {
3044
+ return data.call(vm)
3045
+ } catch (e) {
3046
+ handleError(e, vm, "data()");
3047
+ return {}
3048
+ }
3049
+ }
3050
+
2699
3051
  var computedWatcherOptions = { lazy: true };
2700
3052
 
2701
3053
  function initComputed (vm, computed) {
@@ -2704,6 +3056,15 @@ function initComputed (vm, computed) {
2704
3056
  for (var key in computed) {
2705
3057
  var userDef = computed[key];
2706
3058
  var getter = typeof userDef === 'function' ? userDef : userDef.get;
3059
+ {
3060
+ if (getter === undefined) {
3061
+ warn(
3062
+ ("No getter function has been defined for computed property \"" + key + "\"."),
3063
+ vm
3064
+ );
3065
+ getter = noop;
3066
+ }
3067
+ }
2707
3068
  // create internal watcher for the computed property.
2708
3069
  watchers[key] = new Watcher(vm, getter, noop, computedWatcherOptions);
2709
3070
 
@@ -2712,6 +3073,12 @@ function initComputed (vm, computed) {
2712
3073
  // at instantiation here.
2713
3074
  if (!(key in vm)) {
2714
3075
  defineComputed(vm, key, userDef);
3076
+ } else {
3077
+ if (key in vm.$data) {
3078
+ warn(("The computed property \"" + key + "\" is already defined in data."), vm);
3079
+ } else if (vm.$options.props && key in vm.$options.props) {
3080
+ warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
3081
+ }
2715
3082
  }
2716
3083
  }
2717
3084
  }
@@ -2841,94 +3208,64 @@ function stateMixin (Vue) {
2841
3208
 
2842
3209
  /* */
2843
3210
 
2844
- var hooks = { init: init, prepatch: prepatch, insert: insert, destroy: destroy };
2845
- var hooksToMerge = Object.keys(hooks);
2846
-
2847
- function createComponent (
2848
- Ctor,
2849
- data,
2850
- context,
2851
- children,
2852
- tag
2853
- ) {
2854
- if (!Ctor) {
2855
- return
3211
+ function initProvide (vm) {
3212
+ var provide = vm.$options.provide;
3213
+ if (provide) {
3214
+ vm._provided = typeof provide === 'function'
3215
+ ? provide.call(vm)
3216
+ : provide;
2856
3217
  }
3218
+ }
2857
3219
 
2858
- var baseCtor = context.$options._base;
2859
- if (isObject(Ctor)) {
2860
- Ctor = baseCtor.extend(Ctor);
3220
+ function initInjections (vm) {
3221
+ var result = resolveInject(vm.$options.inject, vm);
3222
+ if (result) {
3223
+ Object.keys(result).forEach(function (key) {
3224
+ /* istanbul ignore else */
3225
+ {
3226
+ defineReactive$$1(vm, key, result[key], function () {
3227
+ warn(
3228
+ "Avoid mutating an injected value directly since the changes will be " +
3229
+ "overwritten whenever the provided component re-renders. " +
3230
+ "injection being mutated: \"" + key + "\"",
3231
+ vm
3232
+ );
3233
+ });
3234
+ }
3235
+ });
2861
3236
  }
3237
+ }
2862
3238
 
2863
- if (typeof Ctor !== 'function') {
2864
- {
2865
- warn(("Invalid Component definition: " + (String(Ctor))), context);
2866
- }
2867
- return
2868
- }
3239
+ function resolveInject (inject, vm) {
3240
+ if (inject) {
3241
+ // inject is :any because flow is not smart enough to figure out cached
3242
+ // isArray here
3243
+ var isArray = Array.isArray(inject);
3244
+ var result = Object.create(null);
3245
+ var keys = isArray
3246
+ ? inject
3247
+ : hasSymbol
3248
+ ? Reflect.ownKeys(inject)
3249
+ : Object.keys(inject);
2869
3250
 
2870
- // async component
2871
- if (!Ctor.cid) {
2872
- if (Ctor.resolved) {
2873
- Ctor = Ctor.resolved;
2874
- } else {
2875
- Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {
2876
- // it's ok to queue this on every render because
2877
- // $forceUpdate is buffered by the scheduler.
2878
- context.$forceUpdate();
2879
- });
2880
- if (!Ctor) {
2881
- // return nothing if this is indeed an async component
2882
- // wait for the callback to trigger parent update.
2883
- return
3251
+ for (var i = 0; i < keys.length; i++) {
3252
+ var key = keys[i];
3253
+ var provideKey = isArray ? key : inject[key];
3254
+ var source = vm;
3255
+ while (source) {
3256
+ if (source._provided && provideKey in source._provided) {
3257
+ result[key] = source._provided[provideKey];
3258
+ break
3259
+ }
3260
+ source = source.$parent;
2884
3261
  }
2885
3262
  }
3263
+ return result
2886
3264
  }
2887
-
2888
- // resolve constructor options in case global mixins are applied after
2889
- // component constructor creation
2890
- resolveConstructorOptions(Ctor);
2891
-
2892
- data = data || {};
2893
-
2894
- // transform component v-model data into props & events
2895
- if (data.model) {
2896
- transformModel(Ctor.options, data);
2897
- }
2898
-
2899
- // extract props
2900
- var propsData = extractProps(data, Ctor);
2901
-
2902
- // functional component
2903
- if (Ctor.options.functional) {
2904
- return createFunctionalComponent(Ctor, propsData, data, context, children)
2905
- }
2906
-
2907
- // extract listeners, since these needs to be treated as
2908
- // child component listeners instead of DOM listeners
2909
- var listeners = data.on;
2910
- // replace with listeners with .native modifier
2911
- data.on = data.nativeOn;
2912
-
2913
- if (Ctor.options.abstract) {
2914
- // abstract components do not keep anything
2915
- // other than props & listeners
2916
- data = {};
2917
- }
2918
-
2919
- // merge component management hooks onto the placeholder node
2920
- mergeHooks(data);
2921
-
2922
- // return a placeholder vnode
2923
- var name = Ctor.options.name || tag;
2924
- var vnode = new VNode(
2925
- ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
2926
- data, undefined, undefined, undefined, context,
2927
- { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
2928
- );
2929
- return vnode
2930
3265
  }
2931
3266
 
3267
+ /* */
3268
+
2932
3269
  function createFunctionalComponent (
2933
3270
  Ctor,
2934
3271
  propsData,
@@ -2938,24 +3275,30 @@ function createFunctionalComponent (
2938
3275
  ) {
2939
3276
  var props = {};
2940
3277
  var propOptions = Ctor.options.props;
2941
- if (propOptions) {
3278
+ if (isDef(propOptions)) {
2942
3279
  for (var key in propOptions) {
2943
- props[key] = validateProp(key, propOptions, propsData);
3280
+ props[key] = validateProp(key, propOptions, propsData || {});
2944
3281
  }
3282
+ } else {
3283
+ if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
3284
+ if (isDef(data.props)) { mergeProps(props, data.props); }
2945
3285
  }
2946
3286
  // ensure the createElement function in functional components
2947
3287
  // gets a unique context - this is necessary for correct named slot check
2948
3288
  var _context = Object.create(context);
2949
3289
  var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
2950
3290
  var vnode = Ctor.options.render.call(null, h, {
2951
- props: props,
2952
3291
  data: data,
2953
- parent: context,
3292
+ props: props,
2954
3293
  children: children,
3294
+ parent: context,
3295
+ listeners: data.on || {},
3296
+ injections: resolveInject(Ctor.options.inject, context),
2955
3297
  slots: function () { return resolveSlots(children, context); }
2956
3298
  });
2957
3299
  if (vnode instanceof VNode) {
2958
3300
  vnode.functionalContext = context;
3301
+ vnode.functionalOptions = Ctor.options;
2959
3302
  if (data.slot) {
2960
3303
  (vnode.data || (vnode.data = {})).slot = data.slot;
2961
3304
  }
@@ -2963,183 +3306,190 @@ function createFunctionalComponent (
2963
3306
  return vnode
2964
3307
  }
2965
3308
 
2966
- function createComponentInstanceForVnode (
2967
- vnode, // we know it's MountedComponentVNode but flow doesn't
2968
- parent, // activeInstance in lifecycle state
2969
- parentElm,
2970
- refElm
2971
- ) {
2972
- var vnodeComponentOptions = vnode.componentOptions;
2973
- var options = {
2974
- _isComponent: true,
2975
- parent: parent,
2976
- propsData: vnodeComponentOptions.propsData,
2977
- _componentTag: vnodeComponentOptions.tag,
2978
- _parentVnode: vnode,
2979
- _parentListeners: vnodeComponentOptions.listeners,
2980
- _renderChildren: vnodeComponentOptions.children,
2981
- _parentElm: parentElm || null,
2982
- _refElm: refElm || null
2983
- };
2984
- // check inline-template render functions
2985
- var inlineTemplate = vnode.data.inlineTemplate;
2986
- if (inlineTemplate) {
2987
- options.render = inlineTemplate.render;
2988
- options.staticRenderFns = inlineTemplate.staticRenderFns;
3309
+ function mergeProps (to, from) {
3310
+ for (var key in from) {
3311
+ to[camelize(key)] = from[key];
2989
3312
  }
2990
- return new vnodeComponentOptions.Ctor(options)
2991
3313
  }
2992
3314
 
2993
- function init (
2994
- vnode,
2995
- hydrating,
2996
- parentElm,
2997
- refElm
2998
- ) {
2999
- if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {
3000
- var child = vnode.componentInstance = createComponentInstanceForVnode(
3001
- vnode,
3002
- activeInstance,
3003
- parentElm,
3004
- refElm
3315
+ /* */
3316
+
3317
+ // hooks to be invoked on component VNodes during patch
3318
+ var componentVNodeHooks = {
3319
+ init: function init (
3320
+ vnode,
3321
+ hydrating,
3322
+ parentElm,
3323
+ refElm
3324
+ ) {
3325
+ if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {
3326
+ var child = vnode.componentInstance = createComponentInstanceForVnode(
3327
+ vnode,
3328
+ activeInstance,
3329
+ parentElm,
3330
+ refElm
3331
+ );
3332
+ child.$mount(hydrating ? vnode.elm : undefined, hydrating);
3333
+ } else if (vnode.data.keepAlive) {
3334
+ // kept-alive components, treat as a patch
3335
+ var mountedNode = vnode; // work around flow
3336
+ componentVNodeHooks.prepatch(mountedNode, mountedNode);
3337
+ }
3338
+ },
3339
+
3340
+ prepatch: function prepatch (oldVnode, vnode) {
3341
+ var options = vnode.componentOptions;
3342
+ var child = vnode.componentInstance = oldVnode.componentInstance;
3343
+ updateChildComponent(
3344
+ child,
3345
+ options.propsData, // updated props
3346
+ options.listeners, // updated listeners
3347
+ vnode, // new parent vnode
3348
+ options.children // new children
3005
3349
  );
3006
- child.$mount(hydrating ? vnode.elm : undefined, hydrating);
3007
- } else if (vnode.data.keepAlive) {
3008
- // kept-alive components, treat as a patch
3009
- var mountedNode = vnode; // work around flow
3010
- prepatch(mountedNode, mountedNode);
3350
+ },
3351
+
3352
+ insert: function insert (vnode) {
3353
+ var context = vnode.context;
3354
+ var componentInstance = vnode.componentInstance;
3355
+ if (!componentInstance._isMounted) {
3356
+ componentInstance._isMounted = true;
3357
+ callHook(componentInstance, 'mounted');
3358
+ }
3359
+ if (vnode.data.keepAlive) {
3360
+ if (context._isMounted) {
3361
+ // vue-router#1212
3362
+ // During updates, a kept-alive component's child components may
3363
+ // change, so directly walking the tree here may call activated hooks
3364
+ // on incorrect children. Instead we push them into a queue which will
3365
+ // be processed after the whole patch process ended.
3366
+ queueActivatedComponent(componentInstance);
3367
+ } else {
3368
+ activateChildComponent(componentInstance, true /* direct */);
3369
+ }
3370
+ }
3371
+ },
3372
+
3373
+ destroy: function destroy (vnode) {
3374
+ var componentInstance = vnode.componentInstance;
3375
+ if (!componentInstance._isDestroyed) {
3376
+ if (!vnode.data.keepAlive) {
3377
+ componentInstance.$destroy();
3378
+ } else {
3379
+ deactivateChildComponent(componentInstance, true /* direct */);
3380
+ }
3381
+ }
3011
3382
  }
3012
- }
3383
+ };
3013
3384
 
3014
- function prepatch (
3015
- oldVnode,
3016
- vnode
3017
- ) {
3018
- var options = vnode.componentOptions;
3019
- var child = vnode.componentInstance = oldVnode.componentInstance;
3020
- updateChildComponent(
3021
- child,
3022
- options.propsData, // updated props
3023
- options.listeners, // updated listeners
3024
- vnode, // new parent vnode
3025
- options.children // new children
3026
- );
3027
- }
3385
+ var hooksToMerge = Object.keys(componentVNodeHooks);
3028
3386
 
3029
- function insert (vnode) {
3030
- if (!vnode.componentInstance._isMounted) {
3031
- vnode.componentInstance._isMounted = true;
3032
- callHook(vnode.componentInstance, 'mounted');
3387
+ function createComponent (
3388
+ Ctor,
3389
+ data,
3390
+ context,
3391
+ children,
3392
+ tag
3393
+ ) {
3394
+ if (isUndef(Ctor)) {
3395
+ return
3033
3396
  }
3034
- if (vnode.data.keepAlive) {
3035
- activateChildComponent(vnode.componentInstance, true /* direct */);
3397
+
3398
+ var baseCtor = context.$options._base;
3399
+
3400
+ // plain options object: turn it into a constructor
3401
+ if (isObject(Ctor)) {
3402
+ Ctor = baseCtor.extend(Ctor);
3036
3403
  }
3037
- }
3038
3404
 
3039
- function destroy (vnode) {
3040
- if (!vnode.componentInstance._isDestroyed) {
3041
- if (!vnode.data.keepAlive) {
3042
- vnode.componentInstance.$destroy();
3043
- } else {
3044
- deactivateChildComponent(vnode.componentInstance, true /* direct */);
3405
+ // if at this stage it's not a constructor or an async component factory,
3406
+ // reject.
3407
+ if (typeof Ctor !== 'function') {
3408
+ {
3409
+ warn(("Invalid Component definition: " + (String(Ctor))), context);
3045
3410
  }
3411
+ return
3046
3412
  }
3047
- }
3048
-
3049
- function resolveAsyncComponent (
3050
- factory,
3051
- baseCtor,
3052
- cb
3053
- ) {
3054
- if (factory.requested) {
3055
- // pool callbacks
3056
- factory.pendingCallbacks.push(cb);
3057
- } else {
3058
- factory.requested = true;
3059
- var cbs = factory.pendingCallbacks = [cb];
3060
- var sync = true;
3061
-
3062
- var resolve = function (res) {
3063
- if (isObject(res)) {
3064
- res = baseCtor.extend(res);
3065
- }
3066
- // cache resolved
3067
- factory.resolved = res;
3068
- // invoke callbacks only if this is not a synchronous resolve
3069
- // (async resolves are shimmed as synchronous during SSR)
3070
- if (!sync) {
3071
- for (var i = 0, l = cbs.length; i < l; i++) {
3072
- cbs[i](res);
3073
- }
3074
- }
3075
- };
3076
3413
 
3077
- var reject = function (reason) {
3078
- "development" !== 'production' && warn(
3079
- "Failed to resolve async component: " + (String(factory)) +
3080
- (reason ? ("\nReason: " + reason) : '')
3081
- );
3082
- };
3414
+ // async component
3415
+ if (isUndef(Ctor.cid)) {
3416
+ Ctor = resolveAsyncComponent(Ctor, baseCtor, context);
3417
+ if (Ctor === undefined) {
3418
+ // return nothing if this is indeed an async component
3419
+ // wait for the callback to trigger parent update.
3420
+ return
3421
+ }
3422
+ }
3083
3423
 
3084
- var res = factory(resolve, reject);
3424
+ // resolve constructor options in case global mixins are applied after
3425
+ // component constructor creation
3426
+ resolveConstructorOptions(Ctor);
3085
3427
 
3086
- // handle promise
3087
- if (res && typeof res.then === 'function' && !factory.resolved) {
3088
- res.then(resolve, reject);
3089
- }
3428
+ data = data || {};
3090
3429
 
3091
- sync = false;
3092
- // return in case resolved synchronously
3093
- return factory.resolved
3430
+ // transform component v-model data into props & events
3431
+ if (isDef(data.model)) {
3432
+ transformModel(Ctor.options, data);
3094
3433
  }
3095
- }
3096
3434
 
3097
- function extractProps (data, Ctor) {
3098
- // we are only extracting raw values here.
3099
- // validation and default values are handled in the child
3100
- // component itself.
3101
- var propOptions = Ctor.options.props;
3102
- if (!propOptions) {
3103
- return
3435
+ // extract props
3436
+ var propsData = extractPropsFromVNodeData(data, Ctor, tag);
3437
+
3438
+ // functional component
3439
+ if (isTrue(Ctor.options.functional)) {
3440
+ return createFunctionalComponent(Ctor, propsData, data, context, children)
3104
3441
  }
3105
- var res = {};
3106
- var attrs = data.attrs;
3107
- var props = data.props;
3108
- var domProps = data.domProps;
3109
- if (attrs || props || domProps) {
3110
- for (var key in propOptions) {
3111
- var altKey = hyphenate(key);
3112
- checkProp(res, props, key, altKey, true) ||
3113
- checkProp(res, attrs, key, altKey) ||
3114
- checkProp(res, domProps, key, altKey);
3115
- }
3442
+
3443
+ // extract listeners, since these needs to be treated as
3444
+ // child component listeners instead of DOM listeners
3445
+ var listeners = data.on;
3446
+ // replace with listeners with .native modifier
3447
+ data.on = data.nativeOn;
3448
+
3449
+ if (isTrue(Ctor.options.abstract)) {
3450
+ // abstract components do not keep anything
3451
+ // other than props & listeners
3452
+ data = {};
3116
3453
  }
3117
- return res
3454
+
3455
+ // merge component management hooks onto the placeholder node
3456
+ mergeHooks(data);
3457
+
3458
+ // return a placeholder vnode
3459
+ var name = Ctor.options.name || tag;
3460
+ var vnode = new VNode(
3461
+ ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
3462
+ data, undefined, undefined, undefined, context,
3463
+ { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }
3464
+ );
3465
+ return vnode
3118
3466
  }
3119
3467
 
3120
- function checkProp (
3121
- res,
3122
- hash,
3123
- key,
3124
- altKey,
3125
- preserve
3468
+ function createComponentInstanceForVnode (
3469
+ vnode, // we know it's MountedComponentVNode but flow doesn't
3470
+ parent, // activeInstance in lifecycle state
3471
+ parentElm,
3472
+ refElm
3126
3473
  ) {
3127
- if (hash) {
3128
- if (hasOwn(hash, key)) {
3129
- res[key] = hash[key];
3130
- if (!preserve) {
3131
- delete hash[key];
3132
- }
3133
- return true
3134
- } else if (hasOwn(hash, altKey)) {
3135
- res[key] = hash[altKey];
3136
- if (!preserve) {
3137
- delete hash[altKey];
3138
- }
3139
- return true
3140
- }
3474
+ var vnodeComponentOptions = vnode.componentOptions;
3475
+ var options = {
3476
+ _isComponent: true,
3477
+ parent: parent,
3478
+ propsData: vnodeComponentOptions.propsData,
3479
+ _componentTag: vnodeComponentOptions.tag,
3480
+ _parentVnode: vnode,
3481
+ _parentListeners: vnodeComponentOptions.listeners,
3482
+ _renderChildren: vnodeComponentOptions.children,
3483
+ _parentElm: parentElm || null,
3484
+ _refElm: refElm || null
3485
+ };
3486
+ // check inline-template render functions
3487
+ var inlineTemplate = vnode.data.inlineTemplate;
3488
+ if (isDef(inlineTemplate)) {
3489
+ options.render = inlineTemplate.render;
3490
+ options.staticRenderFns = inlineTemplate.staticRenderFns;
3141
3491
  }
3142
- return false
3492
+ return new vnodeComponentOptions.Ctor(options)
3143
3493
  }
3144
3494
 
3145
3495
  function mergeHooks (data) {
@@ -3149,7 +3499,7 @@ function mergeHooks (data) {
3149
3499
  for (var i = 0; i < hooksToMerge.length; i++) {
3150
3500
  var key = hooksToMerge[i];
3151
3501
  var fromParent = data.hook[key];
3152
- var ours = hooks[key];
3502
+ var ours = componentVNodeHooks[key];
3153
3503
  data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
3154
3504
  }
3155
3505
  }
@@ -3167,7 +3517,7 @@ function transformModel (options, data) {
3167
3517
  var prop = (options.model && options.model.prop) || 'value';
3168
3518
  var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;
3169
3519
  var on = data.on || (data.on = {});
3170
- if (on[event]) {
3520
+ if (isDef(on[event])) {
3171
3521
  on[event] = [data.model.callback].concat(on[event]);
3172
3522
  } else {
3173
3523
  on[event] = data.model.callback;
@@ -3194,7 +3544,9 @@ function createElement (
3194
3544
  children = data;
3195
3545
  data = undefined;
3196
3546
  }
3197
- if (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
3547
+ if (isTrue(alwaysNormalize)) {
3548
+ normalizationType = ALWAYS_NORMALIZE;
3549
+ }
3198
3550
  return _createElement(context, tag, data, children, normalizationType)
3199
3551
  }
3200
3552
 
@@ -3205,7 +3557,7 @@ function _createElement (
3205
3557
  children,
3206
3558
  normalizationType
3207
3559
  ) {
3208
- if (data && data.__ob__) {
3560
+ if (isDef(data) && isDef((data).__ob__)) {
3209
3561
  "development" !== 'production' && warn(
3210
3562
  "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
3211
3563
  'Always create fresh vnode data objects in each render!',
@@ -3239,7 +3591,7 @@ function _createElement (
3239
3591
  config.parsePlatformTagName(tag), data, children,
3240
3592
  undefined, undefined, context
3241
3593
  );
3242
- } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
3594
+ } else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
3243
3595
  // component
3244
3596
  vnode = createComponent(Ctor, data, context, children, tag);
3245
3597
  } else {
@@ -3255,7 +3607,7 @@ function _createElement (
3255
3607
  // direct component options / constructor
3256
3608
  vnode = createComponent(tag, data, context, children);
3257
3609
  }
3258
- if (vnode) {
3610
+ if (isDef(vnode)) {
3259
3611
  if (ns) { applyNS(vnode, ns); }
3260
3612
  return vnode
3261
3613
  } else {
@@ -3269,10 +3621,10 @@ function applyNS (vnode, ns) {
3269
3621
  // use default namespace inside foreignObject
3270
3622
  return
3271
3623
  }
3272
- if (vnode.children) {
3624
+ if (isDef(vnode.children)) {
3273
3625
  for (var i = 0, l = vnode.children.length; i < l; i++) {
3274
3626
  var child = vnode.children[i];
3275
- if (child.tag && !child.ns) {
3627
+ if (isDef(child.tag) && isUndef(child.ns)) {
3276
3628
  applyNS(child, ns);
3277
3629
  }
3278
3630
  }
@@ -3391,14 +3743,17 @@ function bindObjectProps (
3391
3743
  if (Array.isArray(value)) {
3392
3744
  value = toObject(value);
3393
3745
  }
3746
+ var hash;
3394
3747
  for (var key in value) {
3395
3748
  if (key === 'class' || key === 'style') {
3396
- data[key] = value[key];
3749
+ hash = data;
3397
3750
  } else {
3398
3751
  var type = data.attrs && data.attrs.type;
3399
- var hash = asProp || config.mustUseProp(tag, type, key)
3752
+ hash = asProp || config.mustUseProp(tag, type, key)
3400
3753
  ? data.domProps || (data.domProps = {})
3401
3754
  : data.attrs || (data.attrs = {});
3755
+ }
3756
+ if (!(key in hash)) {
3402
3757
  hash[key] = value[key];
3403
3758
  }
3404
3759
  }
@@ -3469,10 +3824,9 @@ function markStaticNode (node, key, isOnce) {
3469
3824
  /* */
3470
3825
 
3471
3826
  function initRender (vm) {
3472
- vm.$vnode = null; // the placeholder node in parent tree
3473
3827
  vm._vnode = null; // the root of the child tree
3474
3828
  vm._staticTrees = null;
3475
- var parentVnode = vm.$options._parentVnode;
3829
+ var parentVnode = vm.$vnode = vm.$options._parentVnode; // the placeholder node in parent tree
3476
3830
  var renderContext = parentVnode && parentVnode.context;
3477
3831
  vm.$slots = resolveSlots(vm.$options._renderChildren, renderContext);
3478
3832
  vm.$scopedSlots = emptyObject;
@@ -3549,7 +3903,7 @@ function renderMixin (Vue) {
3549
3903
  // code size.
3550
3904
  Vue.prototype._o = markOnce;
3551
3905
  Vue.prototype._n = toNumber;
3552
- Vue.prototype._s = _toString;
3906
+ Vue.prototype._s = toString;
3553
3907
  Vue.prototype._l = renderList;
3554
3908
  Vue.prototype._t = renderSlot;
3555
3909
  Vue.prototype._q = looseEqual;
@@ -3565,53 +3919,22 @@ function renderMixin (Vue) {
3565
3919
 
3566
3920
  /* */
3567
3921
 
3568
- function initInjections (vm) {
3569
- var provide = vm.$options.provide;
3570
- var inject = vm.$options.inject;
3571
- if (provide) {
3572
- vm._provided = typeof provide === 'function'
3573
- ? provide.call(vm)
3574
- : provide;
3575
- }
3576
- if (inject) {
3577
- // inject is :any because flow is not smart enough to figure out cached
3578
- // isArray here
3579
- var isArray = Array.isArray(inject);
3580
- var keys = isArray
3581
- ? inject
3582
- : hasSymbol
3583
- ? Reflect.ownKeys(inject)
3584
- : Object.keys(inject);
3585
-
3586
- for (var i = 0; i < keys.length; i++) {
3587
- var key = keys[i];
3588
- var provideKey = isArray ? key : inject[key];
3589
- var source = vm;
3590
- while (source) {
3591
- if (source._provided && source._provided[provideKey]) {
3592
- vm[key] = source._provided[provideKey];
3593
- break
3594
- }
3595
- source = source.$parent;
3596
- }
3597
- }
3598
- }
3599
- }
3600
-
3601
- /* */
3602
-
3603
- var uid = 0;
3922
+ var uid$1 = 0;
3604
3923
 
3605
3924
  function initMixin (Vue) {
3606
3925
  Vue.prototype._init = function (options) {
3926
+ var vm = this;
3927
+ // a uid
3928
+ vm._uid = uid$1++;
3929
+
3930
+ var startTag, endTag;
3607
3931
  /* istanbul ignore if */
3608
- if ("development" !== 'production' && config.performance && perf) {
3609
- perf.mark('init');
3932
+ if ("development" !== 'production' && config.performance && mark) {
3933
+ startTag = "vue-perf-init:" + (vm._uid);
3934
+ endTag = "vue-perf-end:" + (vm._uid);
3935
+ mark(startTag);
3610
3936
  }
3611
3937
 
3612
- var vm = this;
3613
- // a uid
3614
- vm._uid = uid++;
3615
3938
  // a flag to avoid this being observed
3616
3939
  vm._isVue = true;
3617
3940
  // merge options
@@ -3637,15 +3960,16 @@ function initMixin (Vue) {
3637
3960
  initEvents(vm);
3638
3961
  initRender(vm);
3639
3962
  callHook(vm, 'beforeCreate');
3963
+ initInjections(vm); // resolve injections before data/props
3640
3964
  initState(vm);
3641
- initInjections(vm);
3965
+ initProvide(vm); // resolve provide after data/props
3642
3966
  callHook(vm, 'created');
3643
3967
 
3644
3968
  /* istanbul ignore if */
3645
- if ("development" !== 'production' && config.performance && perf) {
3969
+ if ("development" !== 'production' && config.performance && mark) {
3646
3970
  vm._name = formatComponentName(vm, false);
3647
- perf.mark('init end');
3648
- perf.measure(((vm._name) + " init"), 'init', 'init end');
3971
+ mark(endTag);
3972
+ measure(((vm._name) + " init"), startTag, endTag);
3649
3973
  }
3650
3974
 
3651
3975
  if (vm.$options.el) {
@@ -3698,24 +4022,27 @@ function resolveConstructorOptions (Ctor) {
3698
4022
  function resolveModifiedOptions (Ctor) {
3699
4023
  var modified;
3700
4024
  var latest = Ctor.options;
4025
+ var extended = Ctor.extendOptions;
3701
4026
  var sealed = Ctor.sealedOptions;
3702
4027
  for (var key in latest) {
3703
4028
  if (latest[key] !== sealed[key]) {
3704
4029
  if (!modified) { modified = {}; }
3705
- modified[key] = dedupe(latest[key], sealed[key]);
4030
+ modified[key] = dedupe(latest[key], extended[key], sealed[key]);
3706
4031
  }
3707
4032
  }
3708
4033
  return modified
3709
4034
  }
3710
4035
 
3711
- function dedupe (latest, sealed) {
4036
+ function dedupe (latest, extended, sealed) {
3712
4037
  // compare latest and sealed to ensure lifecycle hooks won't be duplicated
3713
4038
  // between merges
3714
4039
  if (Array.isArray(latest)) {
3715
4040
  var res = [];
3716
4041
  sealed = Array.isArray(sealed) ? sealed : [sealed];
4042
+ extended = Array.isArray(extended) ? extended : [extended];
3717
4043
  for (var i = 0; i < latest.length; i++) {
3718
- if (sealed.indexOf(latest[i]) < 0) {
4044
+ // push original options and not sealed options to exclude duplicated options
4045
+ if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {
3719
4046
  res.push(latest[i]);
3720
4047
  }
3721
4048
  }
@@ -3831,7 +4158,7 @@ function initExtend (Vue) {
3831
4158
 
3832
4159
  // create asset registers, so extended classes
3833
4160
  // can have their private assets too.
3834
- config._assetTypes.forEach(function (type) {
4161
+ ASSET_TYPES.forEach(function (type) {
3835
4162
  Sub[type] = Super[type];
3836
4163
  });
3837
4164
  // enable recursive self-lookup
@@ -3872,7 +4199,7 @@ function initAssetRegisters (Vue) {
3872
4199
  /**
3873
4200
  * Create asset registration methods.
3874
4201
  */
3875
- config._assetTypes.forEach(function (type) {
4202
+ ASSET_TYPES.forEach(function (type) {
3876
4203
  Vue[type] = function (
3877
4204
  id,
3878
4205
  definition
@@ -3914,20 +4241,22 @@ function getComponentName (opts) {
3914
4241
  function matches (pattern, name) {
3915
4242
  if (typeof pattern === 'string') {
3916
4243
  return pattern.split(',').indexOf(name) > -1
3917
- } else if (pattern instanceof RegExp) {
4244
+ } else if (isRegExp(pattern)) {
3918
4245
  return pattern.test(name)
3919
4246
  }
3920
4247
  /* istanbul ignore next */
3921
4248
  return false
3922
4249
  }
3923
4250
 
3924
- function pruneCache (cache, filter) {
4251
+ function pruneCache (cache, current, filter) {
3925
4252
  for (var key in cache) {
3926
4253
  var cachedNode = cache[key];
3927
4254
  if (cachedNode) {
3928
4255
  var name = getComponentName(cachedNode.componentOptions);
3929
4256
  if (name && !filter(name)) {
3930
- pruneCacheEntry(cachedNode);
4257
+ if (cachedNode !== current) {
4258
+ pruneCacheEntry(cachedNode);
4259
+ }
3931
4260
  cache[key] = null;
3932
4261
  }
3933
4262
  }
@@ -3936,9 +4265,6 @@ function pruneCache (cache, filter) {
3936
4265
 
3937
4266
  function pruneCacheEntry (vnode) {
3938
4267
  if (vnode) {
3939
- if (!vnode.componentInstance._inactive) {
3940
- callHook(vnode.componentInstance, 'deactivated');
3941
- }
3942
4268
  vnode.componentInstance.$destroy();
3943
4269
  }
3944
4270
  }
@@ -3966,10 +4292,10 @@ var KeepAlive = {
3966
4292
 
3967
4293
  watch: {
3968
4294
  include: function include (val) {
3969
- pruneCache(this.cache, function (name) { return matches(val, name); });
4295
+ pruneCache(this.cache, this._vnode, function (name) { return matches(val, name); });
3970
4296
  },
3971
4297
  exclude: function exclude (val) {
3972
- pruneCache(this.cache, function (name) { return !matches(val, name); });
4298
+ pruneCache(this.cache, this._vnode, function (name) { return !matches(val, name); });
3973
4299
  }
3974
4300
  },
3975
4301
 
@@ -4035,7 +4361,7 @@ function initGlobalAPI (Vue) {
4035
4361
  Vue.nextTick = nextTick;
4036
4362
 
4037
4363
  Vue.options = Object.create(null);
4038
- config._assetTypes.forEach(function (type) {
4364
+ ASSET_TYPES.forEach(function (type) {
4039
4365
  Vue.options[type + 's'] = Object.create(null);
4040
4366
  });
4041
4367
 
@@ -4057,10 +4383,20 @@ Object.defineProperty(Vue$3.prototype, '$isServer', {
4057
4383
  get: isServerRendering
4058
4384
  });
4059
4385
 
4060
- Vue$3.version = '2.2.1';
4386
+ Object.defineProperty(Vue$3.prototype, '$ssrContext', {
4387
+ get: function get () {
4388
+ return this.$vnode.ssrContext
4389
+ }
4390
+ });
4391
+
4392
+ Vue$3.version = '2.3.2';
4061
4393
 
4062
4394
  /* */
4063
4395
 
4396
+ // these are reserved for web because they are directly compiled away
4397
+ // during template compilation
4398
+ var isReservedAttr = makeMap('style,class');
4399
+
4064
4400
  // attributes that should be using props for binding
4065
4401
  var acceptValue = makeMap('input,textarea,option,select');
4066
4402
  var mustUseProp = function (tag, type, attr) {
@@ -4103,13 +4439,13 @@ function genClassForVnode (vnode) {
4103
4439
  var data = vnode.data;
4104
4440
  var parentNode = vnode;
4105
4441
  var childNode = vnode;
4106
- while (childNode.componentInstance) {
4442
+ while (isDef(childNode.componentInstance)) {
4107
4443
  childNode = childNode.componentInstance._vnode;
4108
4444
  if (childNode.data) {
4109
4445
  data = mergeClassData(childNode.data, data);
4110
4446
  }
4111
4447
  }
4112
- while ((parentNode = parentNode.parent)) {
4448
+ while (isDef(parentNode = parentNode.parent)) {
4113
4449
  if (parentNode.data) {
4114
4450
  data = mergeClassData(data, parentNode.data);
4115
4451
  }
@@ -4120,7 +4456,7 @@ function genClassForVnode (vnode) {
4120
4456
  function mergeClassData (child, parent) {
4121
4457
  return {
4122
4458
  staticClass: concat(child.staticClass, parent.staticClass),
4123
- class: child.class
4459
+ class: isDef(child.class)
4124
4460
  ? [child.class, parent.class]
4125
4461
  : parent.class
4126
4462
  }
@@ -4129,7 +4465,7 @@ function mergeClassData (child, parent) {
4129
4465
  function genClassFromData (data) {
4130
4466
  var dynamicClass = data.class;
4131
4467
  var staticClass = data.staticClass;
4132
- if (staticClass || dynamicClass) {
4468
+ if (isDef(staticClass) || isDef(dynamicClass)) {
4133
4469
  return concat(staticClass, stringifyClass(dynamicClass))
4134
4470
  }
4135
4471
  /* istanbul ignore next */
@@ -4141,18 +4477,18 @@ function concat (a, b) {
4141
4477
  }
4142
4478
 
4143
4479
  function stringifyClass (value) {
4144
- var res = '';
4145
- if (!value) {
4146
- return res
4480
+ if (isUndef(value)) {
4481
+ return ''
4147
4482
  }
4148
4483
  if (typeof value === 'string') {
4149
4484
  return value
4150
4485
  }
4486
+ var res = '';
4151
4487
  if (Array.isArray(value)) {
4152
4488
  var stringified;
4153
4489
  for (var i = 0, l = value.length; i < l; i++) {
4154
- if (value[i]) {
4155
- if ((stringified = stringifyClass(value[i]))) {
4490
+ if (isDef(value[i])) {
4491
+ if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
4156
4492
  res += stringified + ' ';
4157
4493
  }
4158
4494
  }
@@ -4395,25 +4731,28 @@ function registerRef (vnode, isRemoval) {
4395
4731
 
4396
4732
  var emptyNode = new VNode('', {}, []);
4397
4733
 
4398
- var hooks$1 = ['create', 'activate', 'update', 'remove', 'destroy'];
4399
-
4400
- function isUndef (s) {
4401
- return s == null
4402
- }
4403
-
4404
- function isDef (s) {
4405
- return s != null
4406
- }
4734
+ var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
4407
4735
 
4408
- function sameVnode (vnode1, vnode2) {
4736
+ function sameVnode (a, b) {
4409
4737
  return (
4410
- vnode1.key === vnode2.key &&
4411
- vnode1.tag === vnode2.tag &&
4412
- vnode1.isComment === vnode2.isComment &&
4413
- !vnode1.data === !vnode2.data
4738
+ a.key === b.key &&
4739
+ a.tag === b.tag &&
4740
+ a.isComment === b.isComment &&
4741
+ isDef(a.data) === isDef(b.data) &&
4742
+ sameInputType(a, b)
4414
4743
  )
4415
4744
  }
4416
4745
 
4746
+ // Some browsers do not support dynamically changing type for <input>
4747
+ // so they need to be treated as different nodes
4748
+ function sameInputType (a, b) {
4749
+ if (a.tag !== 'input') { return true }
4750
+ var i;
4751
+ var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
4752
+ var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
4753
+ return typeA === typeB
4754
+ }
4755
+
4417
4756
  function createKeyToOldIdx (children, beginIdx, endIdx) {
4418
4757
  var i, key;
4419
4758
  var map = {};
@@ -4431,10 +4770,12 @@ function createPatchFunction (backend) {
4431
4770
  var modules = backend.modules;
4432
4771
  var nodeOps = backend.nodeOps;
4433
4772
 
4434
- for (i = 0; i < hooks$1.length; ++i) {
4435
- cbs[hooks$1[i]] = [];
4773
+ for (i = 0; i < hooks.length; ++i) {
4774
+ cbs[hooks[i]] = [];
4436
4775
  for (j = 0; j < modules.length; ++j) {
4437
- if (modules[j][hooks$1[i]] !== undefined) { cbs[hooks$1[i]].push(modules[j][hooks$1[i]]); }
4776
+ if (isDef(modules[j][hooks[i]])) {
4777
+ cbs[hooks[i]].push(modules[j][hooks[i]]);
4778
+ }
4438
4779
  }
4439
4780
  }
4440
4781
 
@@ -4455,7 +4796,7 @@ function createPatchFunction (backend) {
4455
4796
  function removeNode (el) {
4456
4797
  var parent = nodeOps.parentNode(el);
4457
4798
  // element may have already been removed due to v-html / v-text
4458
- if (parent) {
4799
+ if (isDef(parent)) {
4459
4800
  nodeOps.removeChild(parent, el);
4460
4801
  }
4461
4802
  }
@@ -4506,7 +4847,7 @@ function createPatchFunction (backend) {
4506
4847
  if ("development" !== 'production' && data && data.pre) {
4507
4848
  inPre--;
4508
4849
  }
4509
- } else if (vnode.isComment) {
4850
+ } else if (isTrue(vnode.isComment)) {
4510
4851
  vnode.elm = nodeOps.createComment(vnode.text);
4511
4852
  insert(parentElm, vnode.elm, refElm);
4512
4853
  } else {
@@ -4528,7 +4869,7 @@ function createPatchFunction (backend) {
4528
4869
  // in that case we can just return the element and be done.
4529
4870
  if (isDef(vnode.componentInstance)) {
4530
4871
  initComponent(vnode, insertedVnodeQueue);
4531
- if (isReactivated) {
4872
+ if (isTrue(isReactivated)) {
4532
4873
  reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
4533
4874
  }
4534
4875
  return true
@@ -4537,7 +4878,7 @@ function createPatchFunction (backend) {
4537
4878
  }
4538
4879
 
4539
4880
  function initComponent (vnode, insertedVnodeQueue) {
4540
- if (vnode.data.pendingInsert) {
4881
+ if (isDef(vnode.data.pendingInsert)) {
4541
4882
  insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
4542
4883
  }
4543
4884
  vnode.elm = vnode.componentInstance.$el;
@@ -4576,9 +4917,11 @@ function createPatchFunction (backend) {
4576
4917
  }
4577
4918
 
4578
4919
  function insert (parent, elm, ref) {
4579
- if (parent) {
4580
- if (ref) {
4581
- nodeOps.insertBefore(parent, elm, ref);
4920
+ if (isDef(parent)) {
4921
+ if (isDef(ref)) {
4922
+ if (ref.parentNode === parent) {
4923
+ nodeOps.insertBefore(parent, elm, ref);
4924
+ }
4582
4925
  } else {
4583
4926
  nodeOps.appendChild(parent, elm);
4584
4927
  }
@@ -4608,8 +4951,8 @@ function createPatchFunction (backend) {
4608
4951
  }
4609
4952
  i = vnode.data.hook; // Reuse variable
4610
4953
  if (isDef(i)) {
4611
- if (i.create) { i.create(emptyNode, vnode); }
4612
- if (i.insert) { insertedVnodeQueue.push(vnode); }
4954
+ if (isDef(i.create)) { i.create(emptyNode, vnode); }
4955
+ if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }
4613
4956
  }
4614
4957
  }
4615
4958
 
@@ -4668,15 +5011,16 @@ function createPatchFunction (backend) {
4668
5011
  }
4669
5012
 
4670
5013
  function removeAndInvokeRemoveHook (vnode, rm) {
4671
- if (rm || isDef(vnode.data)) {
5014
+ if (isDef(rm) || isDef(vnode.data)) {
5015
+ var i;
4672
5016
  var listeners = cbs.remove.length + 1;
4673
- if (!rm) {
4674
- // directly removing
4675
- rm = createRmCb(vnode.elm, listeners);
4676
- } else {
5017
+ if (isDef(rm)) {
4677
5018
  // we have a recursively passed down rm callback
4678
5019
  // increase the listeners count
4679
5020
  rm.listeners += listeners;
5021
+ } else {
5022
+ // directly removing
5023
+ rm = createRmCb(vnode.elm, listeners);
4680
5024
  }
4681
5025
  // recursively invoke hooks on child component root node
4682
5026
  if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {
@@ -4778,24 +5122,23 @@ function createPatchFunction (backend) {
4778
5122
  // note we only do this if the vnode is cloned -
4779
5123
  // if the new node is not cloned it means the render functions have been
4780
5124
  // reset by the hot-reload-api and we need to do a proper re-render.
4781
- if (vnode.isStatic &&
4782
- oldVnode.isStatic &&
5125
+ if (isTrue(vnode.isStatic) &&
5126
+ isTrue(oldVnode.isStatic) &&
4783
5127
  vnode.key === oldVnode.key &&
4784
- (vnode.isCloned || vnode.isOnce)) {
5128
+ (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
4785
5129
  vnode.elm = oldVnode.elm;
4786
5130
  vnode.componentInstance = oldVnode.componentInstance;
4787
5131
  return
4788
5132
  }
4789
5133
  var i;
4790
5134
  var data = vnode.data;
4791
- var hasData = isDef(data);
4792
- if (hasData && isDef(i = data.hook) && isDef(i = i.prepatch)) {
5135
+ if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
4793
5136
  i(oldVnode, vnode);
4794
5137
  }
4795
5138
  var elm = vnode.elm = oldVnode.elm;
4796
5139
  var oldCh = oldVnode.children;
4797
5140
  var ch = vnode.children;
4798
- if (hasData && isPatchable(vnode)) {
5141
+ if (isDef(data) && isPatchable(vnode)) {
4799
5142
  for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
4800
5143
  if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
4801
5144
  }
@@ -4813,7 +5156,7 @@ function createPatchFunction (backend) {
4813
5156
  } else if (oldVnode.text !== vnode.text) {
4814
5157
  nodeOps.setTextContent(elm, vnode.text);
4815
5158
  }
4816
- if (hasData) {
5159
+ if (isDef(data)) {
4817
5160
  if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
4818
5161
  }
4819
5162
  }
@@ -4821,7 +5164,7 @@ function createPatchFunction (backend) {
4821
5164
  function invokeInsertHook (vnode, queue, initial) {
4822
5165
  // delay insert hooks for component root nodes, invoke them after the
4823
5166
  // element is really inserted
4824
- if (initial && vnode.parent) {
5167
+ if (isTrue(initial) && isDef(vnode.parent)) {
4825
5168
  vnode.parent.data.pendingInsert = queue;
4826
5169
  } else {
4827
5170
  for (var i = 0; i < queue.length; ++i) {
@@ -4898,7 +5241,7 @@ function createPatchFunction (backend) {
4898
5241
  }
4899
5242
 
4900
5243
  function assertNodeMatch (node, vnode) {
4901
- if (vnode.tag) {
5244
+ if (isDef(vnode.tag)) {
4902
5245
  return (
4903
5246
  vnode.tag.indexOf('vue-component') === 0 ||
4904
5247
  vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
@@ -4909,15 +5252,15 @@ function createPatchFunction (backend) {
4909
5252
  }
4910
5253
 
4911
5254
  return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
4912
- if (!vnode) {
4913
- if (oldVnode) { invokeDestroyHook(oldVnode); }
5255
+ if (isUndef(vnode)) {
5256
+ if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }
4914
5257
  return
4915
5258
  }
4916
5259
 
4917
5260
  var isInitialPatch = false;
4918
5261
  var insertedVnodeQueue = [];
4919
5262
 
4920
- if (!oldVnode) {
5263
+ if (isUndef(oldVnode)) {
4921
5264
  // empty mount (likely as component), create new root element
4922
5265
  isInitialPatch = true;
4923
5266
  createElm(vnode, insertedVnodeQueue, parentElm, refElm);
@@ -4931,11 +5274,11 @@ function createPatchFunction (backend) {
4931
5274
  // mounting to a real element
4932
5275
  // check if this is server-rendered content and if we can perform
4933
5276
  // a successful hydration.
4934
- if (oldVnode.nodeType === 1 && oldVnode.hasAttribute('server-rendered')) {
4935
- oldVnode.removeAttribute('server-rendered');
5277
+ if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
5278
+ oldVnode.removeAttribute(SSR_ATTR);
4936
5279
  hydrating = true;
4937
5280
  }
4938
- if (hydrating) {
5281
+ if (isTrue(hydrating)) {
4939
5282
  if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
4940
5283
  invokeInsertHook(vnode, insertedVnodeQueue, true);
4941
5284
  return oldVnode
@@ -4966,7 +5309,7 @@ function createPatchFunction (backend) {
4966
5309
  nodeOps.nextSibling(oldElm)
4967
5310
  );
4968
5311
 
4969
- if (vnode.parent) {
5312
+ if (isDef(vnode.parent)) {
4970
5313
  // component root element replaced.
4971
5314
  // update parent placeholder node element, recursively
4972
5315
  var ancestor = vnode.parent;
@@ -4981,7 +5324,7 @@ function createPatchFunction (backend) {
4981
5324
  }
4982
5325
  }
4983
5326
 
4984
- if (parentElm$1 !== null) {
5327
+ if (isDef(parentElm$1)) {
4985
5328
  removeVnodes(parentElm$1, [oldVnode], 0, 0);
4986
5329
  } else if (isDef(oldVnode.tag)) {
4987
5330
  invokeDestroyHook(oldVnode);
@@ -5099,7 +5442,11 @@ function getRawDirName (dir) {
5099
5442
  function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
5100
5443
  var fn = dir.def && dir.def[hook];
5101
5444
  if (fn) {
5102
- fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
5445
+ try {
5446
+ fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
5447
+ } catch (e) {
5448
+ handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook"));
5449
+ }
5103
5450
  }
5104
5451
  }
5105
5452
 
@@ -5111,7 +5458,7 @@ var baseModules = [
5111
5458
  /* */
5112
5459
 
5113
5460
  function updateAttrs (oldVnode, vnode) {
5114
- if (!oldVnode.data.attrs && !vnode.data.attrs) {
5461
+ if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
5115
5462
  return
5116
5463
  }
5117
5464
  var key, cur, old;
@@ -5119,7 +5466,7 @@ function updateAttrs (oldVnode, vnode) {
5119
5466
  var oldAttrs = oldVnode.data.attrs || {};
5120
5467
  var attrs = vnode.data.attrs || {};
5121
5468
  // clone observed objects, as the user probably wants to mutate it
5122
- if (attrs.__ob__) {
5469
+ if (isDef(attrs.__ob__)) {
5123
5470
  attrs = vnode.data.attrs = extend({}, attrs);
5124
5471
  }
5125
5472
 
@@ -5136,7 +5483,7 @@ function updateAttrs (oldVnode, vnode) {
5136
5483
  setAttr(elm, 'value', attrs.value);
5137
5484
  }
5138
5485
  for (key in oldAttrs) {
5139
- if (attrs[key] == null) {
5486
+ if (isUndef(attrs[key])) {
5140
5487
  if (isXlink(key)) {
5141
5488
  elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
5142
5489
  } else if (!isEnumeratedAttr(key)) {
@@ -5183,8 +5530,15 @@ function updateClass (oldVnode, vnode) {
5183
5530
  var el = vnode.elm;
5184
5531
  var data = vnode.data;
5185
5532
  var oldData = oldVnode.data;
5186
- if (!data.staticClass && !data.class &&
5187
- (!oldData || (!oldData.staticClass && !oldData.class))) {
5533
+ if (
5534
+ isUndef(data.staticClass) &&
5535
+ isUndef(data.class) && (
5536
+ isUndef(oldData) || (
5537
+ isUndef(oldData.staticClass) &&
5538
+ isUndef(oldData.class)
5539
+ )
5540
+ )
5541
+ ) {
5188
5542
  return
5189
5543
  }
5190
5544
 
@@ -5192,7 +5546,7 @@ function updateClass (oldVnode, vnode) {
5192
5546
 
5193
5547
  // handle transition classes
5194
5548
  var transitionClass = el._transitionClasses;
5195
- if (transitionClass) {
5549
+ if (isDef(transitionClass)) {
5196
5550
  cls = concat(cls, stringifyClass(transitionClass));
5197
5551
  }
5198
5552
 
@@ -5345,8 +5699,20 @@ function addHandler (
5345
5699
  name,
5346
5700
  value,
5347
5701
  modifiers,
5348
- important
5702
+ important,
5703
+ warn
5349
5704
  ) {
5705
+ // warn prevent and passive modifier
5706
+ /* istanbul ignore if */
5707
+ if (
5708
+ "development" !== 'production' && warn &&
5709
+ modifiers && modifiers.prevent && modifiers.passive
5710
+ ) {
5711
+ warn(
5712
+ 'passive and prevent can\'t be used together. ' +
5713
+ 'Passive handler can\'t prevent default event.'
5714
+ );
5715
+ }
5350
5716
  // check capture modifier
5351
5717
  if (modifiers && modifiers.capture) {
5352
5718
  delete modifiers.capture;
@@ -5356,6 +5722,11 @@ function addHandler (
5356
5722
  delete modifiers.once;
5357
5723
  name = '~' + name; // mark the event as once
5358
5724
  }
5725
+ /* istanbul ignore if */
5726
+ if (modifiers && modifiers.passive) {
5727
+ delete modifiers.passive;
5728
+ name = '&' + name; // mark the event as passive
5729
+ }
5359
5730
  var events;
5360
5731
  if (modifiers && modifiers.native) {
5361
5732
  delete modifiers.native;
@@ -5436,6 +5807,7 @@ function genComponentModel (
5436
5807
 
5437
5808
  el.model = {
5438
5809
  value: ("(" + value + ")"),
5810
+ expression: ("\"" + value + "\""),
5439
5811
  callback: ("function (" + baseValueExpression + ") {" + assignment + "}")
5440
5812
  };
5441
5813
  }
@@ -5615,14 +5987,6 @@ function genCheckboxModel (
5615
5987
  value,
5616
5988
  modifiers
5617
5989
  ) {
5618
- if ("development" !== 'production' &&
5619
- el.attrsMap.checked != null) {
5620
- warn$1(
5621
- "<" + (el.tag) + " v-model=\"" + value + "\" checked>:\n" +
5622
- "inline checked attributes will be ignored when using v-model. " +
5623
- 'Declare initial values in the component\'s data option instead.'
5624
- );
5625
- }
5626
5990
  var number = modifiers && modifiers.number;
5627
5991
  var valueBinding = getBindingAttr(el, 'value') || 'null';
5628
5992
  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
@@ -5644,7 +6008,7 @@ function genCheckboxModel (
5644
6008
  '$$i=_i($$a,$$v);' +
5645
6009
  "if($$c){$$i<0&&(" + value + "=$$a.concat($$v))}" +
5646
6010
  "else{$$i>-1&&(" + value + "=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}" +
5647
- "}else{" + value + "=$$c}",
6011
+ "}else{" + (genAssignmentCode(value, '$$c')) + "}",
5648
6012
  null, true
5649
6013
  );
5650
6014
  }
@@ -5654,14 +6018,6 @@ function genRadioModel (
5654
6018
  value,
5655
6019
  modifiers
5656
6020
  ) {
5657
- if ("development" !== 'production' &&
5658
- el.attrsMap.checked != null) {
5659
- warn$1(
5660
- "<" + (el.tag) + " v-model=\"" + value + "\" checked>:\n" +
5661
- "inline checked attributes will be ignored when using v-model. " +
5662
- 'Declare initial values in the component\'s data option instead.'
5663
- );
5664
- }
5665
6021
  var number = modifiers && modifiers.number;
5666
6022
  var valueBinding = getBindingAttr(el, 'value') || 'null';
5667
6023
  valueBinding = number ? ("_n(" + valueBinding + ")") : valueBinding;
@@ -5674,10 +6030,6 @@ function genSelect (
5674
6030
  value,
5675
6031
  modifiers
5676
6032
  ) {
5677
- {
5678
- el.children.some(checkOptionWarning);
5679
- }
5680
-
5681
6033
  var number = modifiers && modifiers.number;
5682
6034
  var selectedVal = "Array.prototype.filter" +
5683
6035
  ".call($event.target.options,function(o){return o.selected})" +
@@ -5690,20 +6042,6 @@ function genSelect (
5690
6042
  addHandler(el, 'change', code, null, true);
5691
6043
  }
5692
6044
 
5693
- function checkOptionWarning (option) {
5694
- if (option.type === 1 &&
5695
- option.tag === 'option' &&
5696
- option.attrsMap.selected != null) {
5697
- warn$1(
5698
- "<select v-model=\"" + (option.parent.attrsMap['v-model']) + "\">:\n" +
5699
- 'inline selected attributes on <option> will be ignored when using v-model. ' +
5700
- 'Declare initial values in the component\'s data option instead.'
5701
- );
5702
- return true
5703
- }
5704
- return false
5705
- }
5706
-
5707
6045
  function genDefaultModel (
5708
6046
  el,
5709
6047
  value,
@@ -5750,13 +6088,13 @@ function genDefaultModel (
5750
6088
  function normalizeEvents (on) {
5751
6089
  var event;
5752
6090
  /* istanbul ignore if */
5753
- if (on[RANGE_TOKEN]) {
6091
+ if (isDef(on[RANGE_TOKEN])) {
5754
6092
  // IE input[type=range] only supports `change` event
5755
6093
  event = isIE ? 'change' : 'input';
5756
6094
  on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
5757
6095
  delete on[RANGE_TOKEN];
5758
6096
  }
5759
- if (on[CHECKBOX_RADIO_TOKEN]) {
6097
+ if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
5760
6098
  // Chrome fires microtasks in between click/change, leads to #4521
5761
6099
  event = isChrome ? 'click' : 'change';
5762
6100
  on[event] = [].concat(on[CHECKBOX_RADIO_TOKEN], on[event] || []);
@@ -5769,10 +6107,11 @@ var target$1;
5769
6107
  function add$1 (
5770
6108
  event,
5771
6109
  handler,
5772
- once,
5773
- capture
6110
+ once$$1,
6111
+ capture,
6112
+ passive
5774
6113
  ) {
5775
- if (once) {
6114
+ if (once$$1) {
5776
6115
  var oldHandler = handler;
5777
6116
  var _target = target$1; // save current target element in closure
5778
6117
  handler = function (ev) {
@@ -5784,7 +6123,13 @@ function add$1 (
5784
6123
  }
5785
6124
  };
5786
6125
  }
5787
- target$1.addEventListener(event, handler, capture);
6126
+ target$1.addEventListener(
6127
+ event,
6128
+ handler,
6129
+ supportsPassive
6130
+ ? { capture: capture, passive: passive }
6131
+ : capture
6132
+ );
5788
6133
  }
5789
6134
 
5790
6135
  function remove$2 (
@@ -5797,7 +6142,7 @@ function remove$2 (
5797
6142
  }
5798
6143
 
5799
6144
  function updateDOMListeners (oldVnode, vnode) {
5800
- if (!oldVnode.data.on && !vnode.data.on) {
6145
+ if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
5801
6146
  return
5802
6147
  }
5803
6148
  var on = vnode.data.on || {};
@@ -5815,7 +6160,7 @@ var events = {
5815
6160
  /* */
5816
6161
 
5817
6162
  function updateDOMProps (oldVnode, vnode) {
5818
- if (!oldVnode.data.domProps && !vnode.data.domProps) {
6163
+ if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
5819
6164
  return
5820
6165
  }
5821
6166
  var key, cur;
@@ -5823,12 +6168,12 @@ function updateDOMProps (oldVnode, vnode) {
5823
6168
  var oldProps = oldVnode.data.domProps || {};
5824
6169
  var props = vnode.data.domProps || {};
5825
6170
  // clone observed objects, as the user probably wants to mutate it
5826
- if (props.__ob__) {
6171
+ if (isDef(props.__ob__)) {
5827
6172
  props = vnode.data.domProps = extend({}, props);
5828
6173
  }
5829
6174
 
5830
6175
  for (key in oldProps) {
5831
- if (props[key] == null) {
6176
+ if (isUndef(props[key])) {
5832
6177
  elm[key] = '';
5833
6178
  }
5834
6179
  }
@@ -5847,7 +6192,7 @@ function updateDOMProps (oldVnode, vnode) {
5847
6192
  // non-string values will be stringified
5848
6193
  elm._value = cur;
5849
6194
  // avoid resetting cursor position when value is the same
5850
- var strCur = cur == null ? '' : String(cur);
6195
+ var strCur = isUndef(cur) ? '' : String(cur);
5851
6196
  if (shouldUpdateValue(elm, vnode, strCur)) {
5852
6197
  elm.value = strCur;
5853
6198
  }
@@ -5880,10 +6225,10 @@ function isDirty (elm, checkVal) {
5880
6225
  function isInputChanged (elm, newVal) {
5881
6226
  var value = elm.value;
5882
6227
  var modifiers = elm._vModifiers; // injected by v-model runtime
5883
- if ((modifiers && modifiers.number) || elm.type === 'number') {
6228
+ if ((isDef(modifiers) && modifiers.number) || elm.type === 'number') {
5884
6229
  return toNumber(value) !== toNumber(newVal)
5885
6230
  }
5886
- if (modifiers && modifiers.trim) {
6231
+ if (isDef(modifiers) && modifiers.trim) {
5887
6232
  return value.trim() !== newVal.trim()
5888
6233
  }
5889
6234
  return value !== newVal
@@ -5972,7 +6317,17 @@ var setProp = function (el, name, val) {
5972
6317
  } else if (importantRE.test(val)) {
5973
6318
  el.style.setProperty(name, val.replace(importantRE, ''), 'important');
5974
6319
  } else {
5975
- el.style[normalize(name)] = val;
6320
+ var normalizedName = normalize(name);
6321
+ if (Array.isArray(val)) {
6322
+ // Support values array created by autoprefixer, e.g.
6323
+ // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
6324
+ // Set them one by one, and the browser will only set those it can recognize
6325
+ for (var i = 0, len = val.length; i < len; i++) {
6326
+ el.style[normalizedName] = val[i];
6327
+ }
6328
+ } else {
6329
+ el.style[normalizedName] = val;
6330
+ }
5976
6331
  }
5977
6332
  };
5978
6333
 
@@ -5998,27 +6353,32 @@ function updateStyle (oldVnode, vnode) {
5998
6353
  var data = vnode.data;
5999
6354
  var oldData = oldVnode.data;
6000
6355
 
6001
- if (!data.staticStyle && !data.style &&
6002
- !oldData.staticStyle && !oldData.style) {
6356
+ if (isUndef(data.staticStyle) && isUndef(data.style) &&
6357
+ isUndef(oldData.staticStyle) && isUndef(oldData.style)) {
6003
6358
  return
6004
6359
  }
6005
6360
 
6006
6361
  var cur, name;
6007
6362
  var el = vnode.elm;
6008
- var oldStaticStyle = oldVnode.data.staticStyle;
6009
- var oldStyleBinding = oldVnode.data.style || {};
6363
+ var oldStaticStyle = oldData.staticStyle;
6364
+ var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
6010
6365
 
6011
6366
  // if static style exists, stylebinding already merged into it when doing normalizeStyleData
6012
6367
  var oldStyle = oldStaticStyle || oldStyleBinding;
6013
6368
 
6014
6369
  var style = normalizeStyleBinding(vnode.data.style) || {};
6015
6370
 
6016
- vnode.data.style = style.__ob__ ? extend({}, style) : style;
6371
+ // store normalized style under a different key for next diff
6372
+ // make sure to clone it if it's reactive, since the user likley wants
6373
+ // to mutate it.
6374
+ vnode.data.normalizedStyle = isDef(style.__ob__)
6375
+ ? extend({}, style)
6376
+ : style;
6017
6377
 
6018
6378
  var newStyle = getStyle(vnode, true);
6019
6379
 
6020
6380
  for (name in oldStyle) {
6021
- if (newStyle[name] == null) {
6381
+ if (isUndef(newStyle[name])) {
6022
6382
  setProp(el, name, '');
6023
6383
  }
6024
6384
  }
@@ -6201,9 +6561,9 @@ var transformRE = /\b(transform|all)(,|$)/;
6201
6561
 
6202
6562
  function getTransitionInfo (el, expectedType) {
6203
6563
  var styles = window.getComputedStyle(el);
6204
- var transitioneDelays = styles[transitionProp + 'Delay'].split(', ');
6564
+ var transitionDelays = styles[transitionProp + 'Delay'].split(', ');
6205
6565
  var transitionDurations = styles[transitionProp + 'Duration'].split(', ');
6206
- var transitionTimeout = getTimeout(transitioneDelays, transitionDurations);
6566
+ var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
6207
6567
  var animationDelays = styles[animationProp + 'Delay'].split(', ');
6208
6568
  var animationDurations = styles[animationProp + 'Duration'].split(', ');
6209
6569
  var animationTimeout = getTimeout(animationDelays, animationDurations);
@@ -6269,18 +6629,18 @@ function enter (vnode, toggleDisplay) {
6269
6629
  var el = vnode.elm;
6270
6630
 
6271
6631
  // call leave callback now
6272
- if (el._leaveCb) {
6632
+ if (isDef(el._leaveCb)) {
6273
6633
  el._leaveCb.cancelled = true;
6274
6634
  el._leaveCb();
6275
6635
  }
6276
6636
 
6277
6637
  var data = resolveTransition(vnode.data.transition);
6278
- if (!data) {
6638
+ if (isUndef(data)) {
6279
6639
  return
6280
6640
  }
6281
6641
 
6282
6642
  /* istanbul ignore if */
6283
- if (el._enterCb || el.nodeType !== 1) {
6643
+ if (isDef(el._enterCb) || el.nodeType !== 1) {
6284
6644
  return
6285
6645
  }
6286
6646
 
@@ -6353,7 +6713,7 @@ function enter (vnode, toggleDisplay) {
6353
6713
  }
6354
6714
 
6355
6715
  var expectsCSS = css !== false && !isIE9;
6356
- var userWantsControl = getHookAgumentsLength(enterHook);
6716
+ var userWantsControl = getHookArgumentsLength(enterHook);
6357
6717
 
6358
6718
  var cb = el._enterCb = once(function () {
6359
6719
  if (expectsCSS) {
@@ -6417,18 +6777,18 @@ function leave (vnode, rm) {
6417
6777
  var el = vnode.elm;
6418
6778
 
6419
6779
  // call enter callback now
6420
- if (el._enterCb) {
6780
+ if (isDef(el._enterCb)) {
6421
6781
  el._enterCb.cancelled = true;
6422
6782
  el._enterCb();
6423
6783
  }
6424
6784
 
6425
6785
  var data = resolveTransition(vnode.data.transition);
6426
- if (!data) {
6786
+ if (isUndef(data)) {
6427
6787
  return rm()
6428
6788
  }
6429
6789
 
6430
6790
  /* istanbul ignore if */
6431
- if (el._leaveCb || el.nodeType !== 1) {
6791
+ if (isDef(el._leaveCb) || el.nodeType !== 1) {
6432
6792
  return
6433
6793
  }
6434
6794
 
@@ -6445,7 +6805,7 @@ function leave (vnode, rm) {
6445
6805
  var duration = data.duration;
6446
6806
 
6447
6807
  var expectsCSS = css !== false && !isIE9;
6448
- var userWantsControl = getHookAgumentsLength(leave);
6808
+ var userWantsControl = getHookArgumentsLength(leave);
6449
6809
 
6450
6810
  var explicitLeaveDuration = toNumber(
6451
6811
  isObject(duration)
@@ -6453,7 +6813,7 @@ function leave (vnode, rm) {
6453
6813
  : duration
6454
6814
  );
6455
6815
 
6456
- if ("development" !== 'production' && explicitLeaveDuration != null) {
6816
+ if ("development" !== 'production' && isDef(explicitLeaveDuration)) {
6457
6817
  checkDuration(explicitLeaveDuration, 'leave', vnode);
6458
6818
  }
6459
6819
 
@@ -6490,7 +6850,7 @@ function leave (vnode, rm) {
6490
6850
  }
6491
6851
  // record leaving element
6492
6852
  if (!vnode.data.show) {
6493
- (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode;
6853
+ (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;
6494
6854
  }
6495
6855
  beforeLeave && beforeLeave(el);
6496
6856
  if (expectsCSS) {
@@ -6542,12 +6902,14 @@ function isValidDuration (val) {
6542
6902
  * - a wrapped component method (check ._length)
6543
6903
  * - a plain function (.length)
6544
6904
  */
6545
- function getHookAgumentsLength (fn) {
6546
- if (!fn) { return false }
6905
+ function getHookArgumentsLength (fn) {
6906
+ if (isUndef(fn)) {
6907
+ return false
6908
+ }
6547
6909
  var invokerFns = fn.fns;
6548
- if (invokerFns) {
6910
+ if (isDef(invokerFns)) {
6549
6911
  // invoker
6550
- return getHookAgumentsLength(
6912
+ return getHookArgumentsLength(
6551
6913
  Array.isArray(invokerFns)
6552
6914
  ? invokerFns[0]
6553
6915
  : invokerFns
@@ -6558,7 +6920,7 @@ function getHookAgumentsLength (fn) {
6558
6920
  }
6559
6921
 
6560
6922
  function _enter (_, vnode) {
6561
- if (!vnode.data.show) {
6923
+ if (vnode.data.show !== true) {
6562
6924
  enter(vnode);
6563
6925
  }
6564
6926
  }
@@ -6568,7 +6930,7 @@ var transition = inBrowser ? {
6568
6930
  activate: _enter,
6569
6931
  remove: function remove$$1 (vnode, rm) {
6570
6932
  /* istanbul ignore else */
6571
- if (!vnode.data.show) {
6933
+ if (vnode.data.show !== true) {
6572
6934
  leave(vnode, rm);
6573
6935
  } else {
6574
6936
  rm();
@@ -6620,9 +6982,14 @@ var model$1 = {
6620
6982
  if (isIE || isEdge) {
6621
6983
  setTimeout(cb, 0);
6622
6984
  }
6623
- } else if (vnode.tag === 'textarea' || el.type === 'text') {
6985
+ } else if (vnode.tag === 'textarea' || el.type === 'text' || el.type === 'password') {
6624
6986
  el._vModifiers = binding.modifiers;
6625
6987
  if (!binding.modifiers.lazy) {
6988
+ // Safari < 10.2 & UIWebView doesn't fire compositionend when
6989
+ // switching focus before confirming composition choice
6990
+ // this also fixes the issue where some browsers e.g. iOS Chrome
6991
+ // fires "change" instead of "input" on autocomplete.
6992
+ el.addEventListener('change', onCompositionEnd);
6626
6993
  if (!isAndroid) {
6627
6994
  el.addEventListener('compositionstart', onCompositionStart);
6628
6995
  el.addEventListener('compositionend', onCompositionEnd);
@@ -6834,9 +7201,11 @@ function extractTransitionData (comp) {
6834
7201
  }
6835
7202
 
6836
7203
  function placeholder (h, rawChild) {
6837
- return /\d-keep-alive$/.test(rawChild.tag)
6838
- ? h('keep-alive')
6839
- : null
7204
+ if (/\d-keep-alive$/.test(rawChild.tag)) {
7205
+ return h('keep-alive', {
7206
+ props: rawChild.componentOptions.propsData
7207
+ })
7208
+ }
6840
7209
  }
6841
7210
 
6842
7211
  function hasParentTransition (vnode) {
@@ -6967,7 +7336,7 @@ var Transition = {
6967
7336
  // we force transition-group to update its children into two passes:
6968
7337
  // in the first pass, we remove all nodes that need to be removed,
6969
7338
  // triggering their leaving transition; in the second pass, we insert/move
6970
- // into the final disired state. This way in the second pass removed
7339
+ // into the final desired state. This way in the second pass removed
6971
7340
  // nodes will remain where they should be.
6972
7341
 
6973
7342
  var props = extend({
@@ -7134,6 +7503,7 @@ var platformComponents = {
7134
7503
  // install platform specific utils
7135
7504
  Vue$3.config.mustUseProp = mustUseProp;
7136
7505
  Vue$3.config.isReservedTag = isReservedTag;
7506
+ Vue$3.config.isReservedAttr = isReservedAttr;
7137
7507
  Vue$3.config.getTagNamespace = getTagNamespace;
7138
7508
  Vue$3.config.isUnknownElement = isUnknownElement;
7139
7509
 
@@ -7194,15 +7564,13 @@ var shouldDecodeNewlines = inBrowser ? shouldDecode('\n', '&#10;') : false;
7194
7564
 
7195
7565
  var isUnaryTag = makeMap(
7196
7566
  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
7197
- 'link,meta,param,source,track,wbr',
7198
- true
7567
+ 'link,meta,param,source,track,wbr'
7199
7568
  );
7200
7569
 
7201
7570
  // Elements that you can, intentionally, leave open
7202
7571
  // (and which close themselves)
7203
7572
  var canBeLeftOpenTag = makeMap(
7204
- 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',
7205
- true
7573
+ 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
7206
7574
  );
7207
7575
 
7208
7576
  // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
@@ -7212,8 +7580,7 @@ var isNonPhrasingTag = makeMap(
7212
7580
  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
7213
7581
  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
7214
7582
  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
7215
- 'title,tr,track',
7216
- true
7583
+ 'title,tr,track'
7217
7584
  );
7218
7585
 
7219
7586
  /* */
@@ -7271,7 +7638,7 @@ var IS_REGEX_CAPTURING_BROKEN = false;
7271
7638
  });
7272
7639
 
7273
7640
  // Special Elements (can contain anything)
7274
- var isScriptOrStyle = makeMap('script,style', true);
7641
+ var isPlainTextElement = makeMap('script,style,textarea', true);
7275
7642
  var reCache = {};
7276
7643
 
7277
7644
  var decodingMap = {
@@ -7293,12 +7660,13 @@ function parseHTML (html, options) {
7293
7660
  var stack = [];
7294
7661
  var expectHTML = options.expectHTML;
7295
7662
  var isUnaryTag$$1 = options.isUnaryTag || no;
7663
+ var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;
7296
7664
  var index = 0;
7297
7665
  var last, lastTag;
7298
7666
  while (html) {
7299
7667
  last = html;
7300
- // Make sure we're not in a script or style element
7301
- if (!lastTag || !isScriptOrStyle(lastTag)) {
7668
+ // Make sure we're not in a plaintext content element like script/style
7669
+ if (!lastTag || !isPlainTextElement(lastTag)) {
7302
7670
  var textEnd = html.indexOf('<');
7303
7671
  if (textEnd === 0) {
7304
7672
  // Comment:
@@ -7378,7 +7746,7 @@ function parseHTML (html, options) {
7378
7746
  var endTagLength = 0;
7379
7747
  var rest = html.replace(reStackedTag, function (all, text, endTag) {
7380
7748
  endTagLength = endTag.length;
7381
- if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') {
7749
+ if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
7382
7750
  text = text
7383
7751
  .replace(/<!--([\s\S]*?)-->/g, '$1')
7384
7752
  .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
@@ -7441,7 +7809,7 @@ function parseHTML (html, options) {
7441
7809
  if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
7442
7810
  parseEndTag(lastTag);
7443
7811
  }
7444
- if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
7812
+ if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {
7445
7813
  parseEndTag(tagName);
7446
7814
  }
7447
7815
  }
@@ -7573,25 +7941,26 @@ function parseText (
7573
7941
 
7574
7942
  /* */
7575
7943
 
7944
+ var onRE = /^@|^v-on:/;
7576
7945
  var dirRE = /^v-|^@|^:/;
7577
7946
  var forAliasRE = /(.*?)\s+(?:in|of)\s+(.*)/;
7578
7947
  var forIteratorRE = /\((\{[^}]*\}|[^,]*),([^,]*)(?:,([^,]*))?\)/;
7579
- var bindRE = /^:|^v-bind:/;
7580
- var onRE = /^@|^v-on:/;
7948
+
7581
7949
  var argRE = /:(.*)$/;
7950
+ var bindRE = /^:|^v-bind:/;
7582
7951
  var modifierRE = /\.[^.]+/g;
7583
7952
 
7584
7953
  var decodeHTMLCached = cached(decode);
7585
7954
 
7586
7955
  // configurable state
7587
7956
  var warn$2;
7588
- var platformGetTagNamespace;
7589
- var platformMustUseProp;
7590
- var platformIsPreTag;
7591
- var preTransforms;
7957
+ var delimiters;
7592
7958
  var transforms;
7959
+ var preTransforms;
7593
7960
  var postTransforms;
7594
- var delimiters;
7961
+ var platformIsPreTag;
7962
+ var platformMustUseProp;
7963
+ var platformGetTagNamespace;
7595
7964
 
7596
7965
  /**
7597
7966
  * Convert HTML string to AST.
@@ -7617,6 +7986,13 @@ function parse (
7617
7986
  var inPre = false;
7618
7987
  var warned = false;
7619
7988
 
7989
+ function warnOnce (msg) {
7990
+ if (!warned) {
7991
+ warned = true;
7992
+ warn$2(msg);
7993
+ }
7994
+ }
7995
+
7620
7996
  function endPre (element) {
7621
7997
  // check pre state
7622
7998
  if (element.pre) {
@@ -7631,6 +8007,7 @@ function parse (
7631
8007
  warn: warn$2,
7632
8008
  expectHTML: options.expectHTML,
7633
8009
  isUnaryTag: options.isUnaryTag,
8010
+ canBeLeftOpenTag: options.canBeLeftOpenTag,
7634
8011
  shouldDecodeNewlines: options.shouldDecodeNewlines,
7635
8012
  start: function start (tag, attrs, unary) {
7636
8013
  // check namespace.
@@ -7700,17 +8077,15 @@ function parse (
7700
8077
  }
7701
8078
 
7702
8079
  function checkRootConstraints (el) {
7703
- if ("development" !== 'production' && !warned) {
8080
+ {
7704
8081
  if (el.tag === 'slot' || el.tag === 'template') {
7705
- warned = true;
7706
- warn$2(
8082
+ warnOnce(
7707
8083
  "Cannot use <" + (el.tag) + "> as component root element because it may " +
7708
8084
  'contain multiple nodes.'
7709
8085
  );
7710
8086
  }
7711
8087
  if (el.attrsMap.hasOwnProperty('v-for')) {
7712
- warned = true;
7713
- warn$2(
8088
+ warnOnce(
7714
8089
  'Cannot use v-for on stateful component root element because ' +
7715
8090
  'it renders multiple elements.'
7716
8091
  );
@@ -7730,9 +8105,8 @@ function parse (
7730
8105
  exp: element.elseif,
7731
8106
  block: element
7732
8107
  });
7733
- } else if ("development" !== 'production' && !warned) {
7734
- warned = true;
7735
- warn$2(
8108
+ } else {
8109
+ warnOnce(
7736
8110
  "Component template should contain exactly one root element. " +
7737
8111
  "If you are using v-if on multiple elements, " +
7738
8112
  "use v-else-if to chain them instead."
@@ -7777,11 +8151,16 @@ function parse (
7777
8151
 
7778
8152
  chars: function chars (text) {
7779
8153
  if (!currentParent) {
7780
- if ("development" !== 'production' && !warned && text === template) {
7781
- warned = true;
7782
- warn$2(
7783
- 'Component template requires a root element, rather than just text.'
7784
- );
8154
+ {
8155
+ if (text === template) {
8156
+ warnOnce(
8157
+ 'Component template requires a root element, rather than just text.'
8158
+ );
8159
+ } else if ((text = text.trim())) {
8160
+ warnOnce(
8161
+ ("text \"" + text + "\" outside root element will be ignored.")
8162
+ );
8163
+ }
7785
8164
  }
7786
8165
  return
7787
8166
  }
@@ -7794,7 +8173,7 @@ function parse (
7794
8173
  }
7795
8174
  var children = currentParent.children;
7796
8175
  text = inPre || text.trim()
7797
- ? decodeHTMLCached(text)
8176
+ ? isTextTag(currentParent) ? text : decodeHTMLCached(text)
7798
8177
  // only preserve whitespace if its not right after a starting tag
7799
8178
  : preserveWhitespace && children.length ? ' ' : '';
7800
8179
  if (text) {
@@ -7980,7 +8359,7 @@ function processComponent (el) {
7980
8359
 
7981
8360
  function processAttrs (el) {
7982
8361
  var list = el.attrsList;
7983
- var i, l, name, rawName, value, arg, modifiers, isProp;
8362
+ var i, l, name, rawName, value, modifiers, isProp;
7984
8363
  for (i = 0, l = list.length; i < l; i++) {
7985
8364
  name = rawName = list[i].name;
7986
8365
  value = list[i].value;
@@ -8005,6 +8384,13 @@ function processAttrs (el) {
8005
8384
  if (modifiers.camel) {
8006
8385
  name = camelize(name);
8007
8386
  }
8387
+ if (modifiers.sync) {
8388
+ addHandler(
8389
+ el,
8390
+ ("update:" + (camelize(name))),
8391
+ genAssignmentCode(value, "$event")
8392
+ );
8393
+ }
8008
8394
  }
8009
8395
  if (isProp || platformMustUseProp(el.tag, el.attrsMap.type, name)) {
8010
8396
  addProp(el, name, value);
@@ -8013,12 +8399,13 @@ function processAttrs (el) {
8013
8399
  }
8014
8400
  } else if (onRE.test(name)) { // v-on
8015
8401
  name = name.replace(onRE, '');
8016
- addHandler(el, name, value, modifiers);
8402
+ addHandler(el, name, value, modifiers, false, warn$2);
8017
8403
  } else { // normal directives
8018
8404
  name = name.replace(dirRE, '');
8019
8405
  // parse arg
8020
8406
  var argMatch = name.match(argRE);
8021
- if (argMatch && (arg = argMatch[1])) {
8407
+ var arg = argMatch && argMatch[1];
8408
+ if (arg) {
8022
8409
  name = name.slice(0, -(arg.length + 1));
8023
8410
  }
8024
8411
  addDirective(el, name, rawName, value, arg, modifiers);
@@ -8067,7 +8454,10 @@ function parseModifiers (name) {
8067
8454
  function makeAttrsMap (attrs) {
8068
8455
  var map = {};
8069
8456
  for (var i = 0, l = attrs.length; i < l; i++) {
8070
- if ("development" !== 'production' && map[attrs[i].name] && !isIE) {
8457
+ if (
8458
+ "development" !== 'production' &&
8459
+ map[attrs[i].name] && !isIE && !isEdge
8460
+ ) {
8071
8461
  warn$2('duplicate attribute: ' + attrs[i].name);
8072
8462
  }
8073
8463
  map[attrs[i].name] = attrs[i].value;
@@ -8075,6 +8465,11 @@ function makeAttrsMap (attrs) {
8075
8465
  return map
8076
8466
  }
8077
8467
 
8468
+ // for script (e.g. type="x/template") or style, do not decode content
8469
+ function isTextTag (el) {
8470
+ return el.tag === 'script' || el.tag === 'style'
8471
+ }
8472
+
8078
8473
  function isForbiddenTag (el) {
8079
8474
  return (
8080
8475
  el.tag === 'style' ||
@@ -8270,15 +8665,30 @@ var modifierCode = {
8270
8665
  shift: genGuard("!$event.shiftKey"),
8271
8666
  alt: genGuard("!$event.altKey"),
8272
8667
  meta: genGuard("!$event.metaKey"),
8273
- left: genGuard("$event.button !== 0"),
8274
- middle: genGuard("$event.button !== 1"),
8275
- right: genGuard("$event.button !== 2")
8668
+ left: genGuard("'button' in $event && $event.button !== 0"),
8669
+ middle: genGuard("'button' in $event && $event.button !== 1"),
8670
+ right: genGuard("'button' in $event && $event.button !== 2")
8276
8671
  };
8277
8672
 
8278
- function genHandlers (events, native) {
8673
+ function genHandlers (
8674
+ events,
8675
+ native,
8676
+ warn
8677
+ ) {
8279
8678
  var res = native ? 'nativeOn:{' : 'on:{';
8280
8679
  for (var name in events) {
8281
- res += "\"" + name + "\":" + (genHandler(name, events[name])) + ",";
8680
+ var handler = events[name];
8681
+ // #5330: warn click.right, since right clicks do not actually fire click events.
8682
+ if ("development" !== 'production' &&
8683
+ name === 'click' &&
8684
+ handler && handler.modifiers && handler.modifiers.right
8685
+ ) {
8686
+ warn(
8687
+ "Use \"contextmenu\" instead of \"click.right\" since right clicks " +
8688
+ "do not actually fire \"click\" events."
8689
+ );
8690
+ }
8691
+ res += "\"" + name + "\":" + (genHandler(name, handler)) + ",";
8282
8692
  }
8283
8693
  return res.slice(0, -1) + '}'
8284
8694
  }
@@ -8289,34 +8699,52 @@ function genHandler (
8289
8699
  ) {
8290
8700
  if (!handler) {
8291
8701
  return 'function(){}'
8292
- } else if (Array.isArray(handler)) {
8702
+ }
8703
+
8704
+ if (Array.isArray(handler)) {
8293
8705
  return ("[" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + "]")
8294
- } else if (!handler.modifiers) {
8295
- return fnExpRE.test(handler.value) || simplePathRE.test(handler.value)
8706
+ }
8707
+
8708
+ var isMethodPath = simplePathRE.test(handler.value);
8709
+ var isFunctionExpression = fnExpRE.test(handler.value);
8710
+
8711
+ if (!handler.modifiers) {
8712
+ return isMethodPath || isFunctionExpression
8296
8713
  ? handler.value
8297
- : ("function($event){" + (handler.value) + "}")
8714
+ : ("function($event){" + (handler.value) + "}") // inline statement
8298
8715
  } else {
8299
8716
  var code = '';
8717
+ var genModifierCode = '';
8300
8718
  var keys = [];
8301
8719
  for (var key in handler.modifiers) {
8302
8720
  if (modifierCode[key]) {
8303
- code += modifierCode[key];
8721
+ genModifierCode += modifierCode[key];
8722
+ // left/right
8723
+ if (keyCodes[key]) {
8724
+ keys.push(key);
8725
+ }
8304
8726
  } else {
8305
8727
  keys.push(key);
8306
8728
  }
8307
8729
  }
8308
8730
  if (keys.length) {
8309
- code = genKeyFilter(keys) + code;
8731
+ code += genKeyFilter(keys);
8310
8732
  }
8311
- var handlerCode = simplePathRE.test(handler.value)
8733
+ // Make sure modifiers like prevent and stop get executed after key filtering
8734
+ if (genModifierCode) {
8735
+ code += genModifierCode;
8736
+ }
8737
+ var handlerCode = isMethodPath
8312
8738
  ? handler.value + '($event)'
8313
- : handler.value;
8739
+ : isFunctionExpression
8740
+ ? ("(" + (handler.value) + ")($event)")
8741
+ : handler.value;
8314
8742
  return ("function($event){" + code + handlerCode + "}")
8315
8743
  }
8316
8744
  }
8317
8745
 
8318
8746
  function genKeyFilter (keys) {
8319
- return ("if(" + (keys.map(genFilterCode).join('&&')) + ")return null;")
8747
+ return ("if(!('button' in $event)&&" + (keys.map(genFilterCode).join('&&')) + ")return null;")
8320
8748
  }
8321
8749
 
8322
8750
  function genFilterCode (key) {
@@ -8534,10 +8962,10 @@ function genData (el) {
8534
8962
  }
8535
8963
  // event handlers
8536
8964
  if (el.events) {
8537
- data += (genHandlers(el.events)) + ",";
8965
+ data += (genHandlers(el.events, false, warn$3)) + ",";
8538
8966
  }
8539
8967
  if (el.nativeEvents) {
8540
- data += (genHandlers(el.nativeEvents, true)) + ",";
8968
+ data += (genHandlers(el.nativeEvents, true, warn$3)) + ",";
8541
8969
  }
8542
8970
  // slot target
8543
8971
  if (el.slotTarget) {
@@ -8549,7 +8977,7 @@ function genData (el) {
8549
8977
  }
8550
8978
  // component v-model
8551
8979
  if (el.model) {
8552
- data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + "},";
8980
+ data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + ",expression:" + (el.model.expression) + "},";
8553
8981
  }
8554
8982
  // inline-template
8555
8983
  if (el.inlineTemplate) {
@@ -8626,10 +9054,8 @@ function genChildren (el, checkSkip) {
8626
9054
  el$1.tag !== 'slot') {
8627
9055
  return genElement(el$1)
8628
9056
  }
8629
- var normalizationType = getNormalizationType(children);
8630
- return ("[" + (children.map(genNode).join(',')) + "]" + (checkSkip
8631
- ? normalizationType ? ("," + normalizationType) : ''
8632
- : ''))
9057
+ var normalizationType = checkSkip ? getNormalizationType(children) : 0;
9058
+ return ("[" + (children.map(genNode).join(',')) + "]" + (normalizationType ? ("," + normalizationType) : ''))
8633
9059
  }
8634
9060
  }
8635
9061
 
@@ -8721,14 +9147,22 @@ function transformSpecialNewlines (text) {
8721
9147
 
8722
9148
  /* */
8723
9149
 
8724
- // operators like typeof, instanceof and in are allowed
9150
+ // these keywords should not appear inside expressions, but operators like
9151
+ // typeof, instanceof and in are allowed
8725
9152
  var prohibitedKeywordRE = new RegExp('\\b' + (
8726
9153
  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
8727
9154
  'super,throw,while,yield,delete,export,import,return,switch,default,' +
8728
9155
  'extends,finally,continue,debugger,function,arguments'
8729
9156
  ).split(',').join('\\b|\\b') + '\\b');
9157
+
9158
+ // these unary operators should not be used as property/method names
9159
+ var unaryOperatorsRE = new RegExp('\\b' + (
9160
+ 'delete,typeof,void'
9161
+ ).split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)');
9162
+
8730
9163
  // check valid identifier for v-for
8731
9164
  var identRE = /[A-Za-z_$][\w$]*/;
9165
+
8732
9166
  // strip strings in expressions
8733
9167
  var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
8734
9168
 
@@ -8749,6 +9183,8 @@ function checkNode (node, errors) {
8749
9183
  if (value) {
8750
9184
  if (name === 'v-for') {
8751
9185
  checkFor(node, ("v-for=\"" + value + "\""), errors);
9186
+ } else if (onRE.test(name)) {
9187
+ checkEvent(value, (name + "=\"" + value + "\""), errors);
8752
9188
  } else {
8753
9189
  checkExpression(value, (name + "=\"" + value + "\""), errors);
8754
9190
  }
@@ -8765,6 +9201,18 @@ function checkNode (node, errors) {
8765
9201
  }
8766
9202
  }
8767
9203
 
9204
+ function checkEvent (exp, text, errors) {
9205
+ var stipped = exp.replace(stripStringRE, '');
9206
+ var keywordMatch = stipped.match(unaryOperatorsRE);
9207
+ if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {
9208
+ errors.push(
9209
+ "avoid using JavaScript unary operator as property name: " +
9210
+ "\"" + (keywordMatch[0]) + "\" in expression " + (text.trim())
9211
+ );
9212
+ }
9213
+ checkExpression(exp, text, errors);
9214
+ }
9215
+
8768
9216
  function checkFor (node, text, errors) {
8769
9217
  checkExpression(node.for || '', text, errors);
8770
9218
  checkIdentifier(node.alias, 'v-for alias', text, errors);
@@ -9072,6 +9520,7 @@ var baseOptions = {
9072
9520
  isPreTag: isPreTag,
9073
9521
  isUnaryTag: isUnaryTag,
9074
9522
  mustUseProp: mustUseProp,
9523
+ canBeLeftOpenTag: canBeLeftOpenTag,
9075
9524
  isReservedTag: isReservedTag,
9076
9525
  getTagNamespace: getTagNamespace,
9077
9526
  staticKeys: genStaticKeys(modules$1)
@@ -9131,8 +9580,8 @@ Vue$3.prototype.$mount = function (
9131
9580
  }
9132
9581
  if (template) {
9133
9582
  /* istanbul ignore if */
9134
- if ("development" !== 'production' && config.performance && perf) {
9135
- perf.mark('compile');
9583
+ if ("development" !== 'production' && config.performance && mark) {
9584
+ mark('compile');
9136
9585
  }
9137
9586
 
9138
9587
  var ref = compileToFunctions(template, {
@@ -9145,9 +9594,9 @@ Vue$3.prototype.$mount = function (
9145
9594
  options.staticRenderFns = staticRenderFns;
9146
9595
 
9147
9596
  /* istanbul ignore if */
9148
- if ("development" !== 'production' && config.performance && perf) {
9149
- perf.mark('compile end');
9150
- perf.measure(((this._name) + " compile"), 'compile', 'compile end');
9597
+ if ("development" !== 'production' && config.performance && mark) {
9598
+ mark('compile end');
9599
+ measure(((this._name) + " compile"), 'compile', 'compile end');
9151
9600
  }
9152
9601
  }
9153
9602
  }