"use strict";varTYPE_ARRAY="[object Array]",TYPE_OBJECT="[object Object]",_typeOf=function(e){returnObject.prototype.toString.call(e)},_deepClone=function(e){returnJSON.parse(JSON.stringify(e))},diff=function(e,t){varn=0<arguments.length&&void0!==e?e:{},o=1<arguments.length&&void0!==t?t:{},r={};returnupdateDiff(n,o,"",r),nullDiff(n,o,"",r),r},updateDiff=functionr(e,t,n,o){vara=0<arguments.length&&void0!==e?e:{},i=1<arguments.length&&void0!==t?t:{},s=2<arguments.length&&void0!==n?n:"",l=3<arguments.length&&void0!==o?o:{};if(_typeOf(a)!==TYPE_ARRAY||(_typeOf(i)!==TYPE_ARRAY||a.length===i.length)&&_typeOf(i)===TYPE_ARRAY)returnObject.entries(a).forEach(function(e){vart=e[0],n=e[1],o=""===s?t:s+"."+t;_typeOf(a)===TYPE_ARRAY&&(o=""===s?t:s+"["+t+"]"),i.hasOwnProperty(t)?_typeOf(i[t])===TYPE_OBJECT&&_typeOf(a[t])===TYPE_OBJECT||_typeOf(i[t])===TYPE_ARRAY&&_typeOf(a[t])===TYPE_ARRAY?r(a[t],i[t],o,l):i[t]!==a[t]&&(l[o]=n):l[o]=n}),l;l[s]=a},nullDiff=functiono(e,t,n,r){vara=0<arguments.length&&void0!==e?e:{},i=1<arguments.length&&void0!==t?t:{},s=2<arguments.length&&void0!==n?n:"",l=3<arguments.length&&void0!==r?r:{};if(_typeOf(a)!==TYPE_ARRAY||(_typeOf(i)!==TYPE_ARRAY||a.length===i.length)&&_typeOf(i)===TYPE_ARRAY)returnObject.entries(i).forEach(function(e){vart=e[0],n=""===s?t:s+"."+t;_typeOf(a)===TYPE_ARRAY&&(n=""===s?t:s+"["+t+"]"),a.hasOwnProperty(t)?(_typeOf(i[t])===TYPE_OBJECT&&_typeOf(a[t])===TYPE_OBJECT||_typeOf(i[t])===TYPE_ARRAY&&_typeOf(a[t])===TYPE_ARRAY)&&o(a[t],i[t],n,l):l[n]=null}),l},name="wxministore",version="1.3.1",description="小程序全局状态管理工具",main="./lib/store.js",repository={type:"git",url:"git+https://github.com/xiaoyao96/wxMiniStore"},scripts={start:"rollup -c -w",build:"rollup -c",test:"mocha --require babel-core/register ./test/diff.test.js"},files=["lib"],keywords=["store","wxstore","wxministore"],author="Leisure",license="MIT",bugs={url:"https://github.com/xiaoyao96/wxMiniStore/issues"},homepage="https://github.com/xiaoyao96/wxMiniStore#readme",devDependencies={"@rollup/plugin-json":"^4.0.0","babel-core":"^6.26.3","babel-plugin-external-helpers":"^6.22.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-0":"^6.24.1",chai:"^4.2.0",mocha:"^6.2.2",rollup:"^1.27.5","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-uglify":"^6.0.3"},pkg={name:name,version:version,description:description,main:main,repository:repository,scripts:scripts,files:files,keywords:keywords,author:author,license:license,bugs:bugs,homepage:homepage,devDependencies:devDependencies},_typeof="function"==typeofSymbol&&"symbol"==typeofSymbol.iterator?function(e){returntypeofe}:function(e){returne&&"function"==typeofSymbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeofe},classCallCheck=function(e,t){if(!(einstanceoft))thrownewTypeError("Cannot call a class as a function")},createClass=function(){functiono(e,t){for(varn=0;n<t.length;n++){varo=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"ino&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}returnfunction(e,t,n){returnt&&o(e.prototype,t),n&&o(e,n),e}}(),_extends=Object.assign||function(e){for(vart=1;t<arguments.length;t++){varn=arguments[t];for(varoinn)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}returne},toConsumableArray=function(e){if(Array.isArray(e)){for(vart=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];returnn}returnArray.from(e)};Object.keys||(Object.keys=function(){varr=Object.prototype.hasOwnProperty,a=!{toString:null}.propertyIsEnumerable("toString"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],s=i.length;returnfunction(e){if("object"!==(void0===e?"undefined":_typeof(e))&&"function"!=typeofe||null===e)thrownewTypeError("Object.keys called on non-object");vart=[];for(varnine)r.call(e,n)&&t.push(n);if(a)for(varo=0;o<s;o++)r.call(e,i[o])&&t.push(i[o]);returnt}}()),Object.entries||(Object.entries=function(e){for(vart=Object.keys(e),n=t.length,o=newArray(n);n--;)o[n]=[t[n],e[t[n]]];returno});varVersion=pkg.version;console.log("当前wxministore版本:"+Version);varStore=function(){functionO(e){classCallCheck(this,O),this.version=Version,this.$state={},this.$r=[];vart=e.openPart,n=void0!==t&&t,u=e.behavior,o=e.methods,f=void0===o?{}:o,r=e.pageLisener,a=void0===r?{}:r,i=e.pageListener,s=e.nonWritable,l=void0!==s&&s,c=e.debug,p=void0===c||c,i=i||a;this.debug=p,this.$state={},_typeOf(e.state)===TYPE_OBJECT&&(this.$state=_deepClone(e.state)),this.$r=[];functionh(e,t){varn=1<arguments.length&&void0!==t?t:{};e.$store={};varo=n.useProp;n.hasOwnProperty("useProp")&&(o&&"string"==typeofo||_typeOf(o)===TYPE_ARRAY?e.$store.useProp=[].concat(o):e.$store.useProp=[]),e.$store.useStore=v(n),v(n)&&(d.$r.push(e),e.$store.useProp?e.setData({$state:_filterKey(d.$state,e.$store.useProp,function(e,t){returne===t})}):e.setData({$state:d.$state}))}functiony(t){vare=d.$r.findIndex(function(e){returne===t});-1<e&&d.$r.splice(e,1)}this.$openPart=n;vard=this,g=["data","onLoad","onShow","onReady","onHide","onUnload","onPullDownRefresh","onReachBottom","onShareAppMessage","onPageScroll","onTabItemTap"],v=function(e){return!0===n&&!0===(0<arguments.length&&void0!==e?e:{}).useStore||!n},b=Page,m=Component;if(App.Page=function(){for(vare=arguments.length,t=Array(1<e?e-1:0),n=1;n<e;n++)t[n-1]=arguments[n];varo=0<arguments.length&&void0!==arguments[0]?arguments[0]:{};v(o)&&(o.data=_extends({},o.data||{},{$state:d.$state})),Object.keys(f).forEach(function(t){"function"!=typeoff[t]||g.some(function(e){returne===t})||(o[t]=f[t])});varr=o.onLoad;o.onLoad=function(){h(this,o),r&&r.apply(this,arguments)};vara=o.onUnload;o.onUnload=function(){y(this),a&&a.apply(this,arguments)},Object.keys(i).forEach(function(t){varn;"function"==typeofi[t]&&g.some(function(e){returne===t})&&(n=o[t],o[t]=function(){vare=i[t].apply(this,arguments);returnn&&n.apply(this,arguments)||e})}),b.apply(void0,[o].concat(t))},!l)try{Page=App.Page}catch(e){}if(App.Component=function(){for(vare=arguments.length,t=Array(1<e?e-1:0),n=1;n<e;n++)t[n-1]=arguments[n];varo=0<arguments.length&&void0!==arguments[0]?arguments[0]:{};v(o)&&(o.data=_extends({},o.data||{},{$state:d.$state})),Object.keys(f).forEach(function(t){"function"!=typeoff[t]||g.some(function(e){returne===t})||(o.methods||(o.methods={}),o.methods[t]=f[t])}),u&&(o.behaviors=[u].concat(toConsumableArray(o.behaviors||[])));functionr(){h(this,o),l&&l.apply(this,arguments)}functiona(){y(this),c&&c.apply(this,arguments)}vari=o.lifetimes,s=void0===i?{}:i,l=s.attached||o.attached,c=s.detached||o.detached;_typeOf(o.lifetimes)===TYPE_OBJECT?(o.lifetimes.attached=r,o.lifetimes.detached=a):(o.attached=r,o.detached=a),m.apply(void0,[o].concat(t))},!l)try{Component=App.Component}catch(e){}}returncreateClass(O,[{key:"setState",value:function(e,t){varn=1<arguments.length&&void0!==t?t:function(){};if(_typeOf(e)!==TYPE_OBJECT)thrownewError("setState的第一个参数须为object!");this.debug&&console.time&&console.time("setState");varo,r,a,i,s=this.$state,l=setData(e,s);this.$state=l,0<this.$r.length?(o=diff(l,s),this.debug&&console.log("diff后实际设置的值:",_deepClone(o)),0<(r=Object.keys(o)).length?(a={},r.forEach(function(e){a["$state."+e]=o[e]}),i=this.$r.map(function(t){if(t.$store.hasOwnProperty("useProp")){varn=_filterKey(a,t.$store.useProp,function(e,t){returne==="$state."+t||!!e.match(newRegExp("^[$]state."+t+"[.|[]","g"))});return0<Object.keys(n).length?newPromise(function(e){t.setData(n,e)}):Promise.resolve()}returnnewPromise(function(e){t.setData(a,e)})}),Promise.all(i).then(n)):n()):n(),this.debug&&console.timeEnd&&console.timeEnd("setState")}},{key:"getState",value:function(){return_deepClone(this.$state)}},{key:"clearState",value:function(e){vart=0<arguments.length&&void0!==e?e:function(){};this.debug&&console.time&&console.time("clearState");varn;this.$state={},0<this.$r.length?(n=this.$r.map(function(t){varn={$state:{}};returnnewPromise(function(e){t.setData(n,e)})}),Promise.all(n).then(t)):t(),this.debug&&console.timeEnd&&console.timeEnd("clearState")}}]),O}(),_filterKey=function(t,e,n){varo=1<arguments.length&&void0!==e?e:[],r=n,a={};returnObject.keys(t).filter(function(t){returno.some(function(e){returnr(t,e)})}).forEach(function(e){a[e]=t[e]}),a},setData=function(e,t){varn=_deepClone(t),o=_deepClone(e);returnObject.keys(o).forEach(function(e){dataHandler(e,o[e],n)}),n},dataHandler=function(e,t,n){for(varo=pathHandler(e),r=n,a=0;a<o.length-1;a++)keyToData(o[a],o[a+1],r),r=r[o[a]];r[o[o.length-1]]=t},pathHandler=function(e){for(vart="",n=[],o=0,r=e.length;o<r;o++){if("["===e[0])thrownewError("key值不能以[]开头");e[o].match(/\.|\[/g)&&(cleanAndPush(t,n),t=""),t+=e[o]}returncleanAndPush(t,n),n},cleanAndPush=function(e,t){varn=cleanKey(e);""!==n&&t.push(n)},keyToData=function(e,t,n){varo;""!==e&&(o=_typeOf(n[e]),"number"==typeoft&&o!==TYPE_ARRAY?n[e]=[]:"string"==typeoft&&o!==TYPE_OBJECT&&(n[e]={}))},cleanKey=function(e){if(e.match(/\[\S+\]/g)){vart=e.replace(/\[|\]/g,"");if(Number.isNaN(parseInt(t)))thrownewError("[]中必须为数字");return+t}returne.replace(/\[|\.|\]| /g,"")};module.exports=Store;