rxdeep
Version:
RxJS deep state management
2 lines (1 loc) • 10.1 kB
JavaScript
var rxdeep=function(e,i,c){"use strict";function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function a(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function l(n){var r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=u(n);return a(this,r?(e=u(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments))}}function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,u=!1,a=void 0;try{for(var i,o=e[Symbol.iterator]();!(r=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){u=!0,a=e}finally{try{r||null==o.return||o.return()}finally{if(u)throw a}}return n}(e,t)||h(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||h(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){if(e){if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function y(e){return!e||!e.subs}function d(e){return null==e||"number"==typeof e||"string"==typeof e||"boolean"==typeof e||e instanceof Date}function b(e,t){if(e!==t){if(d(e)||d(t))return e instanceof Date&&t instanceof Date&&+e!=+t||e!==t?{from:e,to:t}:void 0;var n={subs:{}},r=new Set,u=!1;for(var a in e){r.add(a);var i=b(e[a],t[a]);i&&(n.subs[a]=i,u=!0)}for(var o in t)r.has(o)||(n.subs[o]=b(e[o],t[o]),u=!0);return u?n:void 0}}var _=function(){f(a,i.Observable);var u=l(a);function a(e){var t,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new i.Subject,r=2<arguments.length?arguments[2]:void 0;return s(this,a),(t=u.call(this,function(e){return e.next(t.value),t.downstream.pipe(c.map(function(e){return e.value})).subscribe(e)}))._value=e,t._changesub=new i.Subject,t.downstream=n.pipe(c.map(function(e){if(y(e.trace)&&e.trace){var t=b(e.trace.from,e.trace.to);if(t)return{value:e.value,trace:t}}return e}),c.tap(function(e){e.value!==t._value&&(t._value=e.value)}),c.multicast(function(){return t._changesub}),c.refCount()),t.upstream=r||n,t}return t(a,[{key:"next",value:function(e){this.upstream.next({value:e,trace:{from:this.value,to:e}})}},{key:"error",value:function(e){this.upstream.error(e)}},{key:"complete",value:function(){this.upstream.complete(),this._changesub.complete()}},{key:"sub",value:function(e){var t=new a(this.value?this.value[e]:void 0,this.subDownstream(e,function(){return t.value}),this.subUpstream(e));return t}},{key:"subDownstream",value:function(t,n){return this.downstream.pipe(c.map(function(e){return{value:e.value?e.value[t]:void 0,trace:e.trace}}),c.filter(function(e){return y(e.trace)?n()!==e.value:t in e.trace.subs}),c.map(function(e){return{value:e.value,trace:y(e.trace)?void 0:e.trace.subs[t]}}))}},{key:"subUpstream",value:function(t){var n=this;return{next:function(e){n.value&&(n.value[t]=e.value),n.upstream.next({value:n.value,trace:{subs:o({},t,e.trace)}})},error:function(e){return n.upstream.error(e)},complete:function(){}}}},{key:"value",get:function(){return this._value},set:function(e){this.next(e)}}]),a}();var w=function(){function n(e,t){s(this,n),this.keyFunc=t,this._keymap={},this.changes(e)}return t(n,[{key:"changes",value:function(){var u=this,a={additions:[],deletions:[],moves:[]},i=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:[]).reduce(function(e,t,n){var r=u.keyFunc(t);return e[r]={index:n,item:t},r in u._keymap||a.additions.push({index:n,item:t}),e},{});return Object.entries(this._keymap).forEach(function(e){var t,n=v(e,2),r=n[0],u=n[1];r in i?(t=i[r]).index!==u.index&&a.moves.push({oldIndex:u.index,newIndex:t.index,item:u.item}):a.deletions.push(u)}),this._keymap=i,a}},{key:"keymap",get:function(){return this._keymap}}]),n}(),g=function(){f(r,i.Observable);var n=l(r);function r(e,t){var o;return s(this,r),(o=n.call(this,function(e){return o._changes.pipe(c.map(function(e){var t=v(e,2),n=t[0];t[1];return n.value||[]}),c.startWith(o.value)).subscribe(e)})).state=e,o.keyfunc=t,o._value=[],o._watcher=new w(e.value,t),o._value=e.value||[],o._changesub=new i.Subject,o._changes=o.state.downstream.pipe(c.map(function(e){return[e,o._watcher.changes(e.value)]}),c.map(function(e){var t=v(e,2),a=t[0],n=t[1];if(0<n.moves.length&&!y(a.trace)){var r=n.moves.reduce(function(e,t){return e[t.oldIndex]=t.newIndex,e},{}),i={subs:Object.assign({},a.trace.subs)};return Object.entries(r).forEach(function(e){var t=v(e,2),n=t[0],r=t[1],u=b(o._value[n],a.value[r]);u?i.subs[r]=u:delete i.subs[r]}),[{value:a.value,trace:i},n]}return[a,n]}),c.tap(function(e){var t=v(e,1)[0];o._value=t.value||[]}),c.multicast(function(){return o._changesub}),c.refCount()),o}return t(r,[{key:"next",value:function(e){this.state.upstream.next({value:e,trace:{from:this.value,to:e}})}},{key:"error",value:function(e){this.state.upstream.error(e)}},{key:"complete",value:function(){this._changesub.complete()}},{key:"key",value:function(e){var t,n=new _(null===(t=this._watcher.keymap[e])||void 0===t?void 0:t.item,this.keyDownstream(e,function(){return n.value}),this.keyUpstream(e));return n}},{key:"keyDownstream",value:function(r,t){var u=this;return this._changes.pipe(c.map(function(e){var t=v(e,2),n=t[0];t[1];return{trace:n.trace,entry:u._watcher.keymap[r]}}),c.filter(function(e){return y(e.trace)?t()!==e.entry.item:!e.entry&&!!t()||e.entry&&e.entry.index in e.trace.subs}),c.map(function(e){var t;return{value:null===(t=e.entry)||void 0===t?void 0:t.item,trace:y(e.trace)||!e.entry?void 0:e.trace.subs[e.entry.index]}}))}},{key:"keyUpstream",value:function(n){var r=this;return{next:function(e){var t=r._watcher.keymap[n];r._value[t.index]=e.value,r.state.upstream.next({value:r._value,trace:{subs:o({},t.index,e.trace)}})},error:function(e){return r.state.upstream.error(e)},complete:function(){}}}},{key:"index",value:function(t){var e,n=this;return this._changes.pipe(c.map(function(){var e;return null===(e=n._watcher.keymap[t])||void 0===e?void 0:e.index}),c.startWith(null===(e=this._watcher.keymap[t])||void 0===e?void 0:e.index),c.distinctUntilChanged())}},{key:"changes",value:function(){return this._changes.pipe(c.map(function(e){var t=v(e,2);t[0];return t[1]}))}},{key:"value",get:function(){return this._value},set:function(e){this.next(e)}}]),r}();function k(e){if(y(e.trace))return{value:e.trace.from,trace:{from:e.trace.to,to:e.trace.from}};var t=Array.isArray(e.value)?p(e.value):Object.assign({},e.value),n={subs:{}};for(var r in e.trace.subs){var u=k({value:e.value?e.value[r]:void 0,trace:e.trace.subs[r]});t[r]=u.value,n.subs[r]=u.trace}return Array.isArray(t)&&function e(t){void 0===t[t.length-1]&&(t.length--,e(t))}(t),{value:t,trace:n}}function x(e){return c.takeUntil(e.pipe(c.startWith(void 0),c.last()))}var j=function(){f(u,_);var e=l(u);function u(t,n){var r;return s(this,u),(r=e.call(this,t.value,i.defer(function(){return i.merge(t.downstream.pipe(x(r._bounce)),r._bounce.pipe(c.map(k),x(t.downstream)))}),{next:function(e){n(e)?t.upstream.next(e):r._bounce.next(e)},error:function(e){return t.upstream.error(e)},complete:function(){return r._bounce.complete()}})).state=t,r.verifier=n,r._bounce=new i.Subject,r}return t(u,[{key:"bounce",value:function(){return i.merge(this.downstream.pipe(c.filter(function(){return!1}),x(this._bounce)),this._bounce.pipe(x(this.downstream)))}}]),u}();var O=function(){f(a,_);var u=l(a);function a(e,t,n){var r;return s(this,a),(r=u.call(this,e.value,i.merge(e.downstream,e.downstream.pipe(c.filter(function(e){return r._received!==e.value}),n||function(e){return e},c.tap(function(e){r._received=e.value,t.save(e.value)}),c.filter(function(){return!1})),t.load().pipe(c.tap(function(e){r._received=e,r.next(e)}),c.filter(function(){return!1}))),e.upstream)).state=e,r.storage=t,r.transform=n,r}return a}();return e.KeyedState=g,e.PersistentState=O,e.State=_,e.VerifiedState=j,e.change=function(e,t){var n=b(e,t);if(n)return{value:t,trace:n}},e.ignore=function(){return{next:function(){},error:function(){},complete:function(){}}},e.isLeaf=y,e.isStorage=function(e){return e&&e.load&&"function"==typeof e.load&&e.save&&"function"==typeof e.save},e.keyed=function(e,t){return new g(e,t)},e.persistent=function(e,t){return new O(e,t)},e.reverse=k,e.state=function(e){return new _(e)},e.trace=b,e.verified=function(e,t){return new j(e,t)},e}({},rxjs,rxjs.operators);