vuejs-rails 2.2.1 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  }