diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e5825bc8..3ec6680c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+
+## [4.2.3](https://github.com/kazupon/vue-i18n/compare/v4.2.2...v4.2.3) (2016-08-23)
+
+
+### :chart_with_upwards_trend: Performance Fixes
+
+* improve re-rendering cost when change the lang ([0707338](https://github.com/kazupon/vue-i18n/commit/0707338))
+
+
+
## [4.2.2](https://github.com/kazupon/vue-i18n/compare/v4.2.1...v4.2.2) (2016-08-15)
diff --git a/README.md b/README.md
index a4e82b5b4..48a1cd894 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ Internationalization plugin of Vue.js
jsdelivr
```html
-
+
```
### NPM
diff --git a/dist/vue-i18n.common.js b/dist/vue-i18n.common.js
index ae638a5ce..1c448ad5e 100644
--- a/dist/vue-i18n.common.js
+++ b/dist/vue-i18n.common.js
@@ -1,5 +1,5 @@
/*!
- * vue-i18n v4.2.2
+ * vue-i18n v4.2.3
* (c) 2016 kazuya kawaguchi
* Released under the MIT License.
*/
@@ -124,49 +124,47 @@ function isPromise(p) {
return p && typeof p.then === 'function';
}
-function Override (Vue, langVM) {
+function Override (Vue, langVM, version) {
+ function update(vm) {
+ if (version > 1) {
+ vm.$forceUpdate();
+ } else {
+ var i = vm._watchers.length;
+ while (i--) {
+ vm._watchers[i].update(true); // shallow updates
+ }
+ }
+ }
+
// override _init
var init = Vue.prototype._init;
Vue.prototype._init = function (options) {
var _this = this;
- options = options || {};
- var root = options._parent || options.parent || this;
- var lang = root.$lang;
+ init.call(this, options);
- if (lang) {
- this.$lang = lang;
- } else {
+ if (!this.$parent) {
+ // root
this.$lang = langVM;
+ this._langUnwatch = this.$lang.$watch('lang', function (a, b) {
+ update(_this);
+ });
}
-
- this._langUnwatch = this.$lang.$watch('lang', function (a, b) {
- update(_this);
- });
-
- init.call(this, options);
};
// override _destroy
var destroy = Vue.prototype._destroy;
Vue.prototype._destroy = function () {
- if (this._langUnwatch) {
+ if (!this.$parent && this._langUnwatch) {
this._langUnwatch();
this._langUnwatch = null;
+ this.$lang = null;
}
- this.$lang = null;
destroy.apply(this, arguments);
};
}
-function update(vm) {
- var i = vm._watchers.length;
- while (i--) {
- vm._watchers[i].update(true); // shallow updates
- }
-}
-
/**
* Observer
*/
@@ -217,12 +215,8 @@ function Config (Vue, langVM, lang) {
});
return function computedGetter() {
- if (watcher.dirty) {
- watcher.evaluate();
- }
- if (Dep.target) {
- watcher.depend();
- }
+ watcher.dirty && watcher.evaluate();
+ Dep.target && watcher.depend();
return watcher.value;
};
}
@@ -844,10 +838,10 @@ function plugin(Vue) {
}
var lang = 'en';
-
setupLangVM(Vue, lang);
+
Asset(Vue);
- Override(Vue, langVM);
+ Override(Vue, langVM, version);
Config(Vue, langVM, lang);
Extend(Vue);
}
@@ -861,7 +855,7 @@ function setupLangVM(Vue, lang) {
Vue.config.silent = silent;
}
-plugin.version = '4.2.2';
+plugin.version = '4.2.3';
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(plugin);
diff --git a/dist/vue-i18n.js b/dist/vue-i18n.js
index 21903bfbd..744c7d3ee 100644
--- a/dist/vue-i18n.js
+++ b/dist/vue-i18n.js
@@ -1,5 +1,5 @@
/*!
- * vue-i18n v4.2.2
+ * vue-i18n v4.2.3
* (c) 2016 kazuya kawaguchi
* Released under the MIT License.
*/
@@ -128,49 +128,47 @@
return p && typeof p.then === 'function';
}
- function Override (Vue, langVM) {
+ function Override (Vue, langVM, version) {
+ function update(vm) {
+ if (version > 1) {
+ vm.$forceUpdate();
+ } else {
+ var i = vm._watchers.length;
+ while (i--) {
+ vm._watchers[i].update(true); // shallow updates
+ }
+ }
+ }
+
// override _init
var init = Vue.prototype._init;
Vue.prototype._init = function (options) {
var _this = this;
- options = options || {};
- var root = options._parent || options.parent || this;
- var lang = root.$lang;
+ init.call(this, options);
- if (lang) {
- this.$lang = lang;
- } else {
+ if (!this.$parent) {
+ // root
this.$lang = langVM;
+ this._langUnwatch = this.$lang.$watch('lang', function (a, b) {
+ update(_this);
+ });
}
-
- this._langUnwatch = this.$lang.$watch('lang', function (a, b) {
- update(_this);
- });
-
- init.call(this, options);
};
// override _destroy
var destroy = Vue.prototype._destroy;
Vue.prototype._destroy = function () {
- if (this._langUnwatch) {
+ if (!this.$parent && this._langUnwatch) {
this._langUnwatch();
this._langUnwatch = null;
+ this.$lang = null;
}
- this.$lang = null;
destroy.apply(this, arguments);
};
}
- function update(vm) {
- var i = vm._watchers.length;
- while (i--) {
- vm._watchers[i].update(true); // shallow updates
- }
- }
-
/**
* Observer
*/
@@ -221,12 +219,8 @@
});
return function computedGetter() {
- if (watcher.dirty) {
- watcher.evaluate();
- }
- if (Dep.target) {
- watcher.depend();
- }
+ watcher.dirty && watcher.evaluate();
+ Dep.target && watcher.depend();
return watcher.value;
};
}
@@ -848,10 +842,10 @@
}
var lang = 'en';
-
setupLangVM(Vue, lang);
+
Asset(Vue);
- Override(Vue, langVM);
+ Override(Vue, langVM, version);
Config(Vue, langVM, lang);
Extend(Vue);
}
@@ -865,7 +859,7 @@
Vue.config.silent = silent;
}
- plugin.version = '4.2.2';
+ plugin.version = '4.2.3';
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(plugin);
diff --git a/dist/vue-i18n.min.js b/dist/vue-i18n.min.js
index a22fd7c8e..0b24eb477 100644
--- a/dist/vue-i18n.min.js
+++ b/dist/vue-i18n.min.js
@@ -1,6 +1,6 @@
/*!
- * vue-i18n v4.2.2
+ * vue-i18n v4.2.3
* (c) 2016 kazuya kawaguchi
* Released under the MIT License.
*/
-!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.VueI18n=t()}(this,function(){"use strict";function n(n,t){window.console&&(console.warn("[vue-i18n] "+n),t&&console.warn(t.stack))}function t(t){t.locale=function(t,r,o){return void 0===r?m[t]:void(null===r?(m[t]=void 0,delete m[t]):e(t,r,function(e){e?(m[t]=e,o&&o()):n("failed set `"+t+"` locale")}))}}function e(n,t,e){var o=this;"object"===("undefined"==typeof t?"undefined":_["typeof"](t))?e(t):!function(){var n=t.call(o);"function"==typeof n?n.resolved?e(n.resolved):n.requested?n.pendingCallbacks.push(e):!function(){n.requested=!0;var t=n.pendingCallbacks=[e];n(function(e){n.resolved=e;for(var r=0,o=t.length;o>r;r++)t[r](e)},function(){e()})}():r(n)&&n.then(function(n){e(n)},function(){e()})["catch"](function(n){console.error(n),e()})}()}function r(n){return n&&"function"==typeof n.then}function o(n,t){var e=n.prototype._init;n.prototype._init=function(n){var r=this;n=n||{};var o=n._parent||n.parent||this,u=o.$lang;u?this.$lang=u:this.$lang=t,this._langUnwatch=this.$lang.$watch("lang",function(n,t){i(r)}),e.call(this,n)};var r=n.prototype._destroy;n.prototype._destroy=function(){this._langUnwatch&&(this._langUnwatch(),this._langUnwatch=null),this.$lang=null,r.apply(this,arguments)}}function i(n){for(var t=n._watchers.length;t--;)n._watchers[t].update(!0)}function u(n){if(!A){var t=n.$watch("__watcher__",function(n){});A=n._watchers[0].constructor,t()}return A}function a(n){return $||($=n._data.__ob__.dep.constructor),$}function c(n,t,e){function r(n,t){var e=new i(t,n,null,{lazy:!0});return function(){return e.dirty&&e.evaluate(),c.target&&e.depend(),e.value}}var o=n.util.bind,i=u(t),c=a(t);Object.defineProperty(n.config,"lang",{enumerable:!0,configurable:!0,get:r(function(){return t.lang},t),set:o(function(n){t.lang=n},t)}),j=e,Object.defineProperty(n.config,"fallbackLang",{enumerable:!0,configurable:!0,get:function(){return j},set:function(n){j=n}})}function l(n){function t(n){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;t>o;o++)r[o-1]=arguments[o];return 1===r.length&&"object"===_["typeof"](r[0])&&(r=r[0]),r&&r.hasOwnProperty||(r={}),n.replace(O,function(t,o,i,u){var a=void 0;return"{"===n[u-1]&&"}"===n[u+t.length]?i:(a=e(r,i)?r[i]:null,null===a||void 0===a?"":a)})}var e=n.util.hasOwn;return t}function f(n){return E.test(n)}function s(n){var t=n.charCodeAt(0),e=n.charCodeAt(n.length-1);return t!==e||34!==t&&39!==t?n:n.slice(1,-1)}function d(n){if(void 0===n)return"eof";var t=n.charCodeAt(0);switch(t){case 91:case 93:case 46:case 34:case 39:case 48:return n;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return t>=97&&122>=t||t>=65&&90>=t?"ident":t>=49&&57>=t?"number":"else"}function v(n){var t=n.trim();return"0"===n.charAt(0)&&isNaN(n)?!1:f(t)?s(t):"*"+t}function h(n){function t(){var t=n[r+1];return o===L&&"'"===t||o===I&&'"'===t?(r++,a="\\"+t,p[C](),!0):void 0}var e=[],r=-1,o=N,i=0,u=void 0,a=void 0,c=void 0,l=void 0,f=void 0,s=void 0,h=void 0,p=[];for(p[P]=function(){void 0!==c&&(e.push(c),c=void 0)},p[C]=function(){void 0===c?c=a:c+=a},p[S]=function(){p[C](),i++},p[U]=function(){if(i>0)i--,o=z,p[C]();else{if(i=0,c=v(c),c===!1)return!1;p[P]()}};null!=o;)if(r++,u=n[r],"\\"!==u||!t()){if(l=d(u),h=D[o],f=h[l]||h["else"]||B,f===B)return;if(o=f[0],s=p[f[1]],s&&(a=f[2],a=void 0===a?u:a,s()===!1))return;if(o===Z)return e.raw=n,e}}function p(n){var t=k[n];return t||(t=h(n),t&&(k[n]=t)),t}function g(n){function t(n){if(null===n||void 0===n)return!0;if(Array.isArray(n)){if(n.length>0)return!1;if(0===n.length)return!0}else if(i(n))for(var t in n)if(u(n,t))return!1;return!0}function e(n,e){if(!o(n))return null;var r=p(e);if(t(r))return null;for(var i=r.length,u=null,a=n,c=0;i>c;){var l=a[r[c]];if(void 0===l){a=null;break}a=l,c++}return u=a}var r=n.util,o=r.isObject,i=r.isPlainObject,u=r.hasOwn;return e}function y(n){function t(){for(var t=arguments.length,e=Array(t),r=0;t>r;r++)e[r]=arguments[r];var o=n.config.lang,i=n.config.fallbackLang;return 1===e.length?c(e[0])||Array.isArray(e[0])?e=e[0]:"string"==typeof e[0]&&(o=e[0]):2===e.length&&("string"==typeof e[0]&&(o=e[0]),(c(e[1])||Array.isArray(e[1]))&&(e=e[1])),{lang:o,fallback:i,params:e}}function e(n,t,e){if(!n)return null;var r=d(n,t)||n[t];return r?e?s(r,e):r:null}function r(n,t,r,o,i){var u=null;return(u=e(n(t),o,i))?u:(u=e(n(r),o,i),u?u:null)}function o(n){return n}function i(t){return n.locale(t)}function u(n){return this.$options.locales[n]}var a=n.util,c=a.isObject,f=a.bind,s=l(n),d=g(n);return n.t=function(n){for(var e=arguments.length,u=Array(e>1?e-1:0),a=1;e>a;a++)u[a-1]=arguments[a];if(!n)return"";var c=t.apply(void 0,u),l=c.lang,f=c.fallback,s=c.params;return r(i,l,f,n,s)||o(n)},n.prototype.$t=function(n){if(!n)return"";for(var e=arguments.length,a=Array(e>1?e-1:0),c=1;e>c;c++)a[c-1]=arguments[c];var l=t.apply(void 0,a),s=l.lang,d=l.fallback,v=l.params,h=null;return this.$options.locales&&(h=r(f(u,this),s,d,n,v))?h:r(i,s,d,n,v)||o(n)},n}function b(n){var e=(arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n.version&&Number(n.version.split(".")[0])||-1,"en");w(n,e),t(n),o(n,F),c(n,F,e),y(n)}function w(n,t){var e=n.config.silent;n.config.silent=!0,F||(F=new n({data:{lang:t}})),n.config.silent=e}var _={};_["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol?"symbol":typeof n};var m=Object.create(null),A=void 0,$=void 0,j=void 0,O=/(%|)\{([0-9a-zA-Z_]+)\}/g,k=Object.create(null),C=0,P=1,S=2,U=3,N=0,V=1,q=2,x=3,z=4,L=5,I=6,Z=7,B=8,D=[];D[N]={ws:[N],ident:[x,C],"[":[z],eof:[Z]},D[V]={ws:[V],".":[q],"[":[z],eof:[Z]},D[q]={ws:[q],ident:[x,C]},D[x]={ident:[x,C],0:[x,C],number:[x,C],ws:[V,P],".":[q,P],"[":[z,P],eof:[Z,P]},D[z]={"'":[L,C],'"':[I,C],"[":[z,S],"]":[V,U],eof:B,"else":[z,C]},D[L]={"'":[z,C],eof:B,"else":[L,C]},D[I]={'"':[z,C],eof:B,"else":[I,C]};var E=/^\s?(true|false|-?[\d\.]+|'[^']*'|"[^"]*")\s?$/,F=void 0;return b.version="4.2.2","undefined"!=typeof window&&window.Vue&&window.Vue.use(b),b});
\ No newline at end of file
+!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.VueI18n=t()}(this,function(){"use strict";function n(n,t){window.console&&(console.warn("[vue-i18n] "+n),t&&console.warn(t.stack))}function t(t){t.locale=function(t,r,o){return void 0===r?_[t]:void(null===r?(_[t]=void 0,delete _[t]):e(t,r,function(e){e?(_[t]=e,o&&o()):n("failed set `"+t+"` locale")}))}}function e(n,t,e){var o=this;"object"===("undefined"==typeof t?"undefined":w["typeof"](t))?e(t):!function(){var n=t.call(o);"function"==typeof n?n.resolved?e(n.resolved):n.requested?n.pendingCallbacks.push(e):!function(){n.requested=!0;var t=n.pendingCallbacks=[e];n(function(e){n.resolved=e;for(var r=0,o=t.length;o>r;r++)t[r](e)},function(){e()})}():r(n)&&n.then(function(n){e(n)},function(){e()})["catch"](function(n){console.error(n),e()})}()}function r(n){return n&&"function"==typeof n.then}function o(n,t,e){function r(n){if(e>1)n.$forceUpdate();else for(var t=n._watchers.length;t--;)n._watchers[t].update(!0)}var o=n.prototype._init;n.prototype._init=function(n){var e=this;o.call(this,n),this.$parent||(this.$lang=t,this._langUnwatch=this.$lang.$watch("lang",function(n,t){r(e)}))};var i=n.prototype._destroy;n.prototype._destroy=function(){!this.$parent&&this._langUnwatch&&(this._langUnwatch(),this._langUnwatch=null,this.$lang=null),i.apply(this,arguments)}}function i(n){if(!m){var t=n.$watch("__watcher__",function(n){});m=n._watchers[0].constructor,t()}return m}function u(n){return A||(A=n._data.__ob__.dep.constructor),A}function a(n,t,e){function r(n,t){var e=new a(t,n,null,{lazy:!0});return function(){return e.dirty&&e.evaluate(),c.target&&e.depend(),e.value}}var o=n.util.bind,a=i(t),c=u(t);Object.defineProperty(n.config,"lang",{enumerable:!0,configurable:!0,get:r(function(){return t.lang},t),set:o(function(n){t.lang=n},t)}),$=e,Object.defineProperty(n.config,"fallbackLang",{enumerable:!0,configurable:!0,get:function(){return $},set:function(n){$=n}})}function c(n){function t(n){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;t>o;o++)r[o-1]=arguments[o];return 1===r.length&&"object"===w["typeof"](r[0])&&(r=r[0]),r&&r.hasOwnProperty||(r={}),n.replace(j,function(t,o,i,u){var a=void 0;return"{"===n[u-1]&&"}"===n[u+t.length]?i:(a=e(r,i)?r[i]:null,null===a||void 0===a?"":a)})}var e=n.util.hasOwn;return t}function f(n){return D.test(n)}function l(n){var t=n.charCodeAt(0),e=n.charCodeAt(n.length-1);return t!==e||34!==t&&39!==t?n:n.slice(1,-1)}function s(n){if(void 0===n)return"eof";var t=n.charCodeAt(0);switch(t){case 91:case 93:case 46:case 34:case 39:case 48:return n;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return t>=97&&122>=t||t>=65&&90>=t?"ident":t>=49&&57>=t?"number":"else"}function d(n){var t=n.trim();return"0"===n.charAt(0)&&isNaN(n)?!1:f(t)?l(t):"*"+t}function v(n){function t(){var t=n[r+1];return o===z&&"'"===t||o===L&&'"'===t?(r++,a="\\"+t,p[k](),!0):void 0}var e=[],r=-1,o=S,i=0,u=void 0,a=void 0,c=void 0,f=void 0,l=void 0,v=void 0,h=void 0,p=[];for(p[C]=function(){void 0!==c&&(e.push(c),c=void 0)},p[k]=function(){void 0===c?c=a:c+=a},p[U]=function(){p[k](),i++},p[P]=function(){if(i>0)i--,o=x,p[k]();else{if(i=0,c=d(c),c===!1)return!1;p[C]()}};null!=o;)if(r++,u=n[r],"\\"!==u||!t()){if(f=s(u),h=B[o],l=h[f]||h["else"]||Z,l===Z)return;if(o=l[0],v=p[l[1]],v&&(a=l[2],a=void 0===a?u:a,v()===!1))return;if(o===I)return e.raw=n,e}}function h(n){var t=O[n];return t||(t=v(n),t&&(O[n]=t)),t}function p(n){function t(n){if(null===n||void 0===n)return!0;if(Array.isArray(n)){if(n.length>0)return!1;if(0===n.length)return!0}else if(i(n))for(var t in n)if(u(n,t))return!1;return!0}function e(n,e){if(!o(n))return null;var r=h(e);if(t(r))return null;for(var i=r.length,u=null,a=n,c=0;i>c;){var f=a[r[c]];if(void 0===f){a=null;break}a=f,c++}return u=a}var r=n.util,o=r.isObject,i=r.isPlainObject,u=r.hasOwn;return e}function g(n){function t(){for(var t=arguments.length,e=Array(t),r=0;t>r;r++)e[r]=arguments[r];var o=n.config.lang,i=n.config.fallbackLang;return 1===e.length?f(e[0])||Array.isArray(e[0])?e=e[0]:"string"==typeof e[0]&&(o=e[0]):2===e.length&&("string"==typeof e[0]&&(o=e[0]),(f(e[1])||Array.isArray(e[1]))&&(e=e[1])),{lang:o,fallback:i,params:e}}function e(n,t,e){if(!n)return null;var r=d(n,t)||n[t];return r?e?s(r,e):r:null}function r(n,t,r,o,i){var u=null;return(u=e(n(t),o,i))?u:(u=e(n(r),o,i),u?u:null)}function o(n){return n}function i(t){return n.locale(t)}function u(n){return this.$options.locales[n]}var a=n.util,f=a.isObject,l=a.bind,s=c(n),d=p(n);return n.t=function(n){for(var e=arguments.length,u=Array(e>1?e-1:0),a=1;e>a;a++)u[a-1]=arguments[a];if(!n)return"";var c=t.apply(void 0,u),f=c.lang,l=c.fallback,s=c.params;return r(i,f,l,n,s)||o(n)},n.prototype.$t=function(n){if(!n)return"";for(var e=arguments.length,a=Array(e>1?e-1:0),c=1;e>c;c++)a[c-1]=arguments[c];var f=t.apply(void 0,a),s=f.lang,d=f.fallback,v=f.params,h=null;return this.$options.locales&&(h=r(l(u,this),s,d,n,v))?h:r(i,s,d,n,v)||o(n)},n}function y(n){var e=(arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n.version&&Number(n.version.split(".")[0])||-1),r="en";b(n,r),t(n),o(n,E,e),a(n,E,r),g(n)}function b(n,t){var e=n.config.silent;n.config.silent=!0,E||(E=new n({data:{lang:t}})),n.config.silent=e}var w={};w["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol?"symbol":typeof n};var _=Object.create(null),m=void 0,A=void 0,$=void 0,j=/(%|)\{([0-9a-zA-Z_]+)\}/g,O=Object.create(null),k=0,C=1,U=2,P=3,S=0,N=1,V=2,q=3,x=4,z=5,L=6,I=7,Z=8,B=[];B[S]={ws:[S],ident:[q,k],"[":[x],eof:[I]},B[N]={ws:[N],".":[V],"[":[x],eof:[I]},B[V]={ws:[V],ident:[q,k]},B[q]={ident:[q,k],0:[q,k],number:[q,k],ws:[N,C],".":[V,C],"[":[x,C],eof:[I,C]},B[x]={"'":[z,k],'"':[L,k],"[":[x,U],"]":[N,P],eof:Z,"else":[x,k]},B[z]={"'":[x,k],eof:Z,"else":[z,k]},B[L]={'"':[x,k],eof:Z,"else":[L,k]};var D=/^\s?(true|false|-?[\d\.]+|'[^']*'|"[^"]*")\s?$/,E=void 0;return y.version="4.2.3","undefined"!=typeof window&&window.Vue&&window.Vue.use(y),y});
\ No newline at end of file
diff --git a/package.json b/package.json
index 3ffea10cd..45f9a1e33 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "vue-i18n",
"description": "Internationalization plugin for Vue.js",
- "version": "4.2.2",
+ "version": "4.2.3",
"author": {
"name": "kazuya kawaguchi",
"email": "kawakazu80@gmail.com"
diff --git a/src/index.js b/src/index.js
index ea3d2b763..c655c6af5 100644
--- a/src/index.js
+++ b/src/index.js
@@ -47,7 +47,7 @@ function setupLangVM (Vue, lang) {
Vue.config.silent = silent
}
-plugin.version = '4.2.2'
+plugin.version = '4.2.3'
export default plugin