rememo
Version:
Memoized selectors for Redux and other immutable object derivation
2 lines (1 loc) • 1.06 kB
JavaScript
var rememo=function(){"use strict";var e={};function n(e){return[e]}function t(e,n,t){var r;if(e.length!==n.length)return!1;for(r=t;r<e.length;r++)if(e[r]!==n[r])return!1;return!0}return function(r,a){var u,l=a||n;function p(n){var t,r,a,l,p,s=u,f=!0;for(t=0;t<n.length;t++){if(r=n[t],!(p=r)||"object"!=typeof p){f=!1;break}s.has(r)?s=s.get(r):(a=new WeakMap,s.set(r,a),s=a)}return s.has(e)||((l=function(){var e={clear:function(){e.head=null}};return e}()).isUniqueByDependants=f,s.set(e,l)),s.get(e)}function s(){u=new WeakMap}function f(){var e,n,a,u,s,f=arguments.length;for(u=new Array(f),a=0;a<f;a++)u[a]=arguments[a];for((e=p(s=l.apply(null,u))).isUniqueByDependants||(e.lastDependants&&!t(s,e.lastDependants,0)&&e.clear(),e.lastDependants=s),n=e.head;n;){if(t(n.args,u,1))return n!==e.head&&(n.prev.next=n.next,n.next&&(n.next.prev=n.prev),n.next=e.head,n.prev=null,e.head.prev=n,e.head=n),n.val;n=n.next}return n={val:r.apply(null,u)},u[0]=null,n.args=u,e.head&&(e.head.prev=n,n.next=e.head),e.head=n,n.val}return f.getDependants=l,f.clear=s,s(),f}}();