UNPKG

quantajs

Version:

A compact, scalable, and developer-friendly state management library designed for any JavaScript environment. It includes a reactivity system that enables efficient and flexible data handling, making complex state management easy.

2 lines (1 loc) 3.21 kB
(function(r,i){typeof exports=="object"&&typeof module<"u"?i(exports):typeof define=="function"&&define.amd?define(["exports"],i):(r=typeof globalThis<"u"?globalThis:r||self,i(r.QuantaJS={}))})(this,function(r){"use strict";var k=Object.defineProperty;var N=(r,i,l)=>i in r?k(r,i,{enumerable:!0,configurable:!0,writable:!0,value:l}):r[i]=l;var m=(r,i,l)=>N(r,typeof i!="symbol"?i+"":i,l);class i{constructor(){m(this,"subscribers");this.subscribers=new Set}depend(e){e&&this.subscribers.add(e)}notify(){this.subscribers.forEach(e=>e())}remove(e){this.subscribers.delete(e)}clear(){this.subscribers.clear()}get getSubscribers(){return this.subscribers}}const l=new WeakMap;let h=null;const a=[];function y(s,e){const t=l.get(s);t&&t[e]&&t[e].getSubscribers.forEach(n=>{{if(a.includes(n)){console.error(`Circular dependency detected: Effect "${n}" triggered itself.`);return}n()}})}function u(s,e){let t=l.get(s);t||l.set(s,t={}),t[e]||(t[e]=new i),h&&t[e].depend(h)}function w(s){const e=()=>{if(a.includes(s)){console.error(`Circular dependency detected: Effect "${s}" triggered itself.`);return}try{a.push(s),h=s,s()}finally{a.pop(),h=a[a.length-1]||null}};return e(),e}const b=s=>{let e,t=!0;const c=w(()=>{e=s(),t=!1}),n={get value(){return t&&c(),u(n,"value"),e}};return n};function E(s){return new Proxy(s,{get(e,t){if(t==="size")return u(e,"size"),e.size;if(t==="get"){const c=Reflect.get(e,t);return n=>{const f=c.call(e,n);return u(e,n),f}}if(t==="set"||t==="add"||t==="delete"){const c=Reflect.get(e,t);return(...n)=>{const f=c.apply(e,n);if(y(e,"size"),t==="set"){const[d]=n;y(e,d)}return f}}if(t==="clear"){const c=Reflect.get(e,t);return()=>{const n=c.apply(e);return y(e,"size"),n}}return u(e,t),Reflect.get(e,t)}})}function g(s){return s instanceof Map||s instanceof Set?E(s):new Proxy(s,{get(e,t,c){const n=Reflect.get(e,t,c);return t==="size"&&(e instanceof Map||e instanceof Set)?(u(e,"size"),n):(u(e,t),typeof n=="object"&&n!==null?g(n):n)},set(e,t,c,n){const f=e[t],d=Reflect.set(e,t,c,n);return(f!==c||isNaN(f)&&isNaN(c))&&y(e,t),d},deleteProperty(e,t){const c=t in e,n=Reflect.deleteProperty(e,t);return c&&y(e,t),n},has(e,t){return u(e,t),Reflect.has(e,t)},ownKeys(e){return u(e,"keys"),Reflect.ownKeys(e)},getOwnPropertyDescriptor(e,t){return u(e,t),Reflect.getOwnPropertyDescriptor(e,t)}})}const S=s=>g(s),M=(s,e)=>{w(()=>{const t=s();e(t)})},P=s=>new Proxy(s,{get(e,t,c){if(t in e.state)return Reflect.get(e.state,t);if(t in e.getters){const n=Reflect.get(e.getters,t);return n&&typeof n=="object"&&"value"in n?n.value:n}return t in e.actions?Reflect.get(e.actions,t):Reflect.get(e,t,c)},set(e,t,c,n){return t in e.state?Reflect.set(e.state,t,c):Reflect.set(e,t,c,n)}}),v=new Map,z=(s,e)=>{if(v.has(s))throw new Error(`Store with name "${s}" already exists.`);const t=S(e.state()),c=new i,n={};if(e.getters)for(const o in e.getters){const R=e.getters[o];n[o]=b(()=>R(t))}const f={state:t,getters:n,actions:{},subscribe:o=>(c.depend(o),()=>c.remove(o))},d=P(f);if(e.actions)for(const o in e.actions){const R=e.actions[o];f.actions[o]=R.bind(d)}return v.set(s,d),d};r.computed=b,r.createStore=z,r.reactive=S,r.watch=M,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});