ptrs
Version:
Manage your state with pointers.
2 lines • 4.74 kB
JavaScript
;var h=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var C=(e,r)=>{for(var t in r)h(e,t,{get:r[t],enumerable:!0})},G=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of D(r))!W.call(e,n)&&n!==t&&h(e,n,{get:()=>r[n],enumerable:!(o=v(r,n))||o.enumerable});return e};var L=e=>G(h({},"__esModule",{value:!0}),e);var H={};C(H,{createPointer:()=>S,pointerSchema:()=>I,ptrs:()=>K,subscribe:()=>F,useMemoPointer:()=>E,usePointer:()=>g,useStatePointer:()=>N});module.exports=L(H);var P=require("react");var O=(e,r)=>{let t=new Map,o=new Map,n=!1,s=i=>{if(t.has(i))return t.get(i);let f=Object.getOwnPropertyDescriptors(i),a=new Set;p(f,Object.getOwnPropertyNames(f),a),p(f,Object.getOwnPropertySymbols(f),a);let y=Array.isArray(i);y&&delete f.length;let c=y?Object.defineProperties([],f):Object.create(Object.getPrototypeOf(i),f);return t.set(i,c),o.set(c,a),y&&(c.length=i.length),c},p=(i,f,a)=>{for(let y of f){let c=i[y];if(c.writable!==void 0){let T=!1,U=()=>{let x=c.value;return n&&!T&&typeof x=="object"?(T=!0,c.value=s(x)):x};i[y]={configurable:!0,enumerable:c.enumerable,get:U,set:x=>(T=!0,c.value=x)},a.add(U)}}},u=s(e);n=!0,r(u),n=!1;for(let i of t.values())q(i,o.get(i));return u},q=(e,r)=>{let t=Object.getOwnPropertyDescriptors(e);A(e,t,Object.getOwnPropertyNames(t),r),A(e,t,Object.getOwnPropertySymbols(t),r),Object.freeze(e)},A=(e,r,t,o)=>{for(let n of t){let s=r[n];s.get&&o.has(s.get)&&Object.defineProperty(e,n,{value:s.get()})}};var l=new Set,d=!1,K=e=>r=>{if(d)throw new Error("There should never run two ptrs components at the same time. If they do, it breaks general assumptions about the ptrs component.");d=!0;try{return e(r)}finally{d=!1,g(...l),l.clear()}};var b=new WeakMap,F=(e,...r)=>{let t=new Map;for(let o of r){let n=()=>{e(o)};t.set(o,n),R(o,n)}return(...o)=>{let n=o.length===0?t.keys():o;for(let s of n){let p=t.get(s);p&&(w(s,p),t.delete(s))}}},R=(e,r)=>{let t=b.get(e)?.filter(o=>{let n=o.deref();return n&&n!==r})??[];t.push(new WeakRef(r)),b.set(e,t)},w=(e,r)=>{let t=b.get(e);if(!t)return;let o=t.filter(n=>{let s=n.deref();return s&&s!==r});o.length===0?b.delete(e):b.set(e,o)},k=e=>{let r=b.get(e);if(r)for(let t of r)t.deref()?.(o=>o+1)};var M=Symbol("PointerProperties"),m=!0,V=!1,B=()=>{V=!0;let e=["at","concat","entries","every","filter","find","findIndex","findLast","findLastIndex","flat","flatMap","forEach","includes","indexOf","join","keys","lastIndexOf","map","reduce","reduceRight","slice","some","toLocaleString","toString","valueOf","values","with"];Object.defineProperty(Array.prototype,M,{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze({...Object.fromEntries(Object.getOwnPropertyNames(Array.prototype).map(r=>[r,e.includes(r)?"readonly":"mutate"])),length:"get-set"})})},S=(e,r)=>(V||B(),z(e,r)),z=(e,r,t,o)=>{Object.freeze(e);let n={},s=j(t,o,e),p=new Proxy(()=>e,{apply(u,i,f){if(typeof e=="function"&&s!=="pointer"){if(s==="readonly")return e.apply(t(),f);let a,y=O(t(),c=>{a=e.apply(c,f)});return m=!1,t(y),m=!0,a}if(f.length===0)return d&&l.add(p),e;if(f.length===1){let a=f[0];if(a===e)return;e=Object.freeze(a),s=j(t,o,e),m&&r?.(e),k(p);let y=m;m=!1;for(let c in n)typeof e?.[c]!="function"&&n[c].deref()?.(e?.[c]);m=y}else throw new Error("Pointer can only be called with 0 or 1 arguments.")},get(u,i){let f=j(p,i,void 0);if(f!=="pointer"){let y;if(f==="mutate"?p(O(e,c=>{y=Reflect.get(c,i,c)})):y=e?.[i],typeof y!="function")return y}let a=n[i]?.deref();if(!a){let y=e?.[i];n[i]=new WeakRef(a=z(y,c=>{e===void 0&&(typeof i=="string"&&parseInt(i,10).toString()===i?e=[]:e={}),e=O(e,T=>{c===void 0?Reflect.deleteProperty(T,i):Reflect.set(T,i,c,T)}),s=j(t,o,e),Object.freeze(e),r?.(e),k(p)},p,i))}return a},set(u,i,f){return j(p,i,void 0)!=="pointer"?(p(O(e,a=>{Reflect.set(a,i,f,a)})),!0):!1}});return p},j=(e,r,t)=>{if(e&&r){let n=e()?.[M];if(n&&r in n)return n[r]}return typeof t=="function"?"mutate":"pointer"},I=(e,r)=>{let t=e;return t[M]=Object.freeze(r),t};var N=(e,r=!0)=>{let t=(0,P.useMemo)(()=>S(e),[]);return r&&(d?l.add(t):g(t)),t},E=(e,r=!0)=>{let t=N(e,r);return(0,P.useEffect)(()=>{t(e)},[t,e]),t},g=(...e)=>{if(d){for(let s of e)l.add(s);return}let[,r]=(0,P.useState)(0),t=(0,P.useRef)(null),o=t.current??(t.current=new Map),n=o.version=(o.version??0)+1;for(let s of e){let p=o.get(s);p?p.version=n:(o.set(s,{version:n}),R(s,r))}for(let s of o.entries()){let[p,{version:u}]=s;u!==n&&(w(p,r),o.delete(p))}(0,P.useEffect)(()=>()=>{let s=t.current;for(let p of s.keys())w(p,r);s.clear()},[])};0&&(module.exports={createPointer,pointerSchema,ptrs,subscribe,useMemoPointer,usePointer,useStatePointer});
//# sourceMappingURL=index.cjs.map