atomaric 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/atomaric.js CHANGED
@@ -1,18 +1,18 @@
1
- const x = (t, e, r) => {
2
- let u = null;
3
- typeof t == "number" ? u = _(
1
+ const x = (t, e, i) => {
2
+ let l = null;
3
+ typeof t == "number" ? l = y(
4
4
  {
5
5
  increment: (s) => {
6
6
  e.set(+e.get() + (s ?? 0));
7
7
  }
8
8
  }
9
- ) : typeof t == "boolean" ? u = _(
9
+ ) : typeof t == "boolean" ? l = y(
10
10
  {
11
11
  toggle: () => {
12
12
  e.set(!e.get());
13
13
  }
14
14
  }
15
- ) : Array.isArray(t) ? u = _(
15
+ ) : Array.isArray(t) ? l = y(
16
16
  {
17
17
  push: (...s) => {
18
18
  e.set(e.get().concat(s));
@@ -21,143 +21,147 @@ const x = (t, e, r) => {
21
21
  e.set(s.concat(e.get()));
22
22
  },
23
23
  update: (s) => {
24
- const c = e.get().slice();
25
- s(c), e.set(c);
24
+ const r = e.get().slice();
25
+ s(r), e.set(r);
26
26
  },
27
27
  filter: (s) => {
28
28
  e.set(e.get().filter(s ?? J));
29
29
  }
30
30
  }
31
- ) : t instanceof Set && (u = _(
31
+ ) : t instanceof Set ? l = y(
32
32
  {
33
33
  add: (s) => {
34
34
  e.set(new Set(e.get()).add(s));
35
35
  },
36
36
  delete: (s) => {
37
- const c = new Set(e.get());
38
- c.delete(s), e.set(c);
37
+ const r = new Set(e.get());
38
+ r.delete(s), e.set(r);
39
39
  },
40
40
  clear: () => {
41
41
  e.set(/* @__PURE__ */ new Set());
42
42
  },
43
43
  update: (s) => {
44
- const c = new Set(e.get());
45
- s(c), e.set(c);
44
+ const r = new Set(e.get());
45
+ s(r), e.set(r);
46
46
  }
47
47
  }
48
+ ) : t instanceof Object && (l = y(
49
+ {
50
+ setPartial: (s) => e.set((r) => ({ ...r, ...typeof s == "function" ? s(e.get()) : s }))
51
+ }
48
52
  ));
49
- const a = typeof r == "object" && r != null && "do" in r ? r.do(
50
- (s, c) => e.set(s, c),
53
+ const a = typeof i == "object" && i != null && "do" in i ? i.do(
54
+ (s, r) => e.set(s, r),
51
55
  () => e.get(),
52
- (s, c, g) => e.setDeferred(s, c, g)
53
- ) : null, d = {};
54
- return a && Object.keys(a).forEach((s) => Object.defineProperty(d, s, { get: () => a[s] })), u && Object.keys(u).forEach(
55
- (s) => Object.defineProperty(d, s, { get: () => u[s] })
56
- ), d;
57
- }, J = (t) => t, _ = (t, e) => t;
56
+ (s, r, d) => e.setDeferred(s, r, d)
57
+ ) : null, g = {};
58
+ return a && Object.keys(a).forEach((s) => Object.defineProperty(g, s, { get: () => a[s] })), l && Object.keys(l).forEach(
59
+ (s) => Object.defineProperty(g, s, { get: () => l[s] })
60
+ ), g;
61
+ }, J = (t) => t, y = (t, e) => t;
58
62
  class F {
59
- constructor(e, r) {
60
- const u = (n) => c = n, a = () => c, d = /* @__PURE__ */ new Set(), s = (n) => n(h());
61
- let c = e, g, j = () => {
62
- }, h = () => a(), C = () => {
63
- const n = x(e, this, r);
64
- return C = () => n, n;
63
+ constructor(e, i) {
64
+ const l = (n) => r = n, a = () => r, g = /* @__PURE__ */ new Set(), s = (n) => n(h());
65
+ let r = e, d, C = () => {
66
+ }, h = () => a(), v = () => {
67
+ const n = x(e, this, i);
68
+ return v = () => n, n;
65
69
  };
66
- const p = new Proxy(this, {
67
- get: (n, o) => o === "do" ? C() : n[o],
68
- set: V
70
+ const I = new Proxy(this, {
71
+ get: (n, o) => o === "do" ? v() : n[o],
72
+ set: P
69
73
  }), S = (n, o) => {
70
74
  const f = typeof n == "function" ? n(h()) : n;
71
75
  if (!(f === h() || f === void 0 || typeof f == "number" && isNaN(f))) {
72
- u(f), d.forEach(s, this);
76
+ l(f), g.forEach(s, this);
73
77
  try {
74
- E.postMessage({ key: l, value: a() });
78
+ E.postMessage({ key: u, value: a() });
75
79
  } catch {
76
80
  }
77
- o !== !0 && j(f);
81
+ o !== !0 && C(f);
78
82
  }
79
83
  };
80
- if (this.set = (n, o) => S(n, o), this.get = () => h(), this.defaultValue = e, this.subscribe = (n) => (d.add(n), () => {
81
- d.delete(n);
84
+ if (this.set = (n, o) => S(n, o), this.get = () => h(), this.defaultValue = e, this.subscribe = (n) => (g.add(n), () => {
85
+ g.delete(n);
82
86
  }), this.reset = () => {
83
- S(e, !0), d.forEach(s, this);
87
+ S(e, !0), g.forEach(s, this);
84
88
  }, this.setDeferred = (n, o = 500, f, T = !0) => {
85
- T && g === void 0 && S(n, f), clearTimeout(g), g = setTimeout(() => {
86
- S(n, f), g = void 0;
89
+ T && d === void 0 && S(n, f), clearTimeout(d), d = setTimeout(() => {
90
+ S(n, f), d = void 0;
87
91
  }, o);
88
- }, r == null) return p;
89
- let b = null, I = !0, D = !0, v = !1, y = e instanceof Set ? (n) => new Set(JSON.parse(n)) : (n) => JSON.parse(n), A = e instanceof Set ? (n) => {
92
+ }, i == null) return I;
93
+ let b = null, m = !0, D = !0, j = !1, A = e instanceof Set ? (n) => new Set(JSON.parse(n)) : (n) => JSON.parse(n), _ = e instanceof Set ? (n) => {
90
94
  if (n instanceof Set) return JSON.stringify(Array.from(n));
91
95
  throw console.error(n), "The value is not Set instance";
92
96
  } : (n) => JSON.stringify(n);
93
- if (typeof r == "string" ? b = r : "storeKey" in r && (I = r.warnOnDuplicateStoreKey ?? I, D = r.listenStorageChanges ?? D, b = r.storeKey, y = r.parseValue ?? y, A = r.stringifyValue ?? A, v = r.unchangable ?? v), b === null) return p;
94
- const l = `atom/${b}`;
97
+ if (typeof i == "string" ? b = i : "storeKey" in i && (m = i.warnOnDuplicateStoreKey ?? m, D = i.listenStorageChanges ?? D, b = i.storeKey, A = i.parseValue ?? A, _ = i.stringifyValue ?? _, j = i.unchangable ?? j), b === null) return I;
98
+ const u = `atom/${b}`;
95
99
  let N = !0;
96
100
  if (h = () => {
97
101
  if (h = () => a(), N) {
98
102
  N = !1;
99
103
  try {
100
- u(l in i ? y(i[l]) : e);
104
+ l(u in c ? A(c[u]) : e);
101
105
  } catch {
102
- console.warn("Invalid json value", i[l]);
106
+ console.warn("Invalid json value", c[u]);
103
107
  }
104
108
  }
105
109
  return a();
106
- }, j = (n) => {
110
+ }, C = (n) => {
107
111
  if (n === e) {
108
112
  this.reset();
109
113
  return;
110
114
  }
111
- i[l] = A(n);
115
+ c[u] = _(n);
112
116
  }, this.reset = () => {
113
- delete i[l], S(e, !0);
114
- }, I && w[l] !== void 0 && console.warn("Duplicate Atom key", b), D)
115
- if (v) {
117
+ delete c[u], S(e, !0);
118
+ }, m && w[u] !== void 0 && console.warn("Duplicate Atom key", b), D)
119
+ if (j) {
116
120
  let n = !1, o;
117
- m[l] = this, w[l] = () => {
118
- clearTimeout(o), o = setTimeout(() => n = !1, 10), !n && (n = !0, i[l] = A(a()));
121
+ p[u] = this, w[u] = () => {
122
+ clearTimeout(o), o = setTimeout(() => n = !1, 10), !n && (n = !0, c[u] = _(a()));
119
123
  };
120
124
  } else
121
- w[l] = (n) => {
125
+ w[u] = (n) => {
122
126
  if (n.newValue === null) {
123
127
  this.reset();
124
128
  return;
125
129
  }
126
130
  try {
127
- S(y(n.newValue));
131
+ S(A(n.newValue));
128
132
  } catch {
129
133
  console.warn("Invalid json value", n.newValue);
130
134
  }
131
135
  };
132
- return p;
136
+ return I;
133
137
  }
134
138
  }
135
139
  let E;
136
140
  try {
137
141
  E = new BroadcastChannel("updateHere"), E.addEventListener("message", (t) => {
138
142
  var e;
139
- (e = m[t.data.key]) == null || e.set(t.data.value, !0);
143
+ (e = p[t.data.key]) == null || e.set(t.data.value, !0);
140
144
  });
141
145
  } catch {
142
146
  }
143
- const i = window.localStorage, w = {}, m = {}, V = (t, e) => {
147
+ const c = window.localStorage, w = {}, p = {}, P = (t, e) => {
144
148
  throw `${e} is readonly property`;
145
149
  };
146
150
  window.addEventListener("storage", (t) => {
147
151
  var e;
148
152
  t.key === null || t.newValue === t.oldValue || (e = w[t.key]) == null || e.call(w, t);
149
153
  });
150
- const H = i.setItem.bind(i), L = i.removeItem.bind(i);
151
- i.setItem = (t, e) => {
152
- m[t] === void 0 && H.call(i, t, e);
154
+ const H = c.setItem.bind(c), L = c.removeItem.bind(c);
155
+ c.setItem = (t, e) => {
156
+ p[t] === void 0 && H.call(c, t, e);
153
157
  };
154
- i.removeItem = (t) => {
155
- m[t] === void 0 && L.call(i, t);
158
+ c.removeItem = (t) => {
159
+ p[t] === void 0 && L.call(c, t);
156
160
  };
157
161
  let k = () => {
158
162
  throw "call configureAtomaric() before all!";
159
163
  };
160
- const B = (t) => k = t.useSyncExternalStore, P = (t) => k(t.subscribe, t.get), $ = (t) => t.set, G = (t) => t.setDeferred, M = (t) => t.get, U = (t) => t.do, q = (t) => [P(t), $(t)], z = (t, e) => new F(t, e);
164
+ const B = (t) => k = t.useSyncExternalStore, V = (t) => k(t.subscribe, t.get), $ = (t) => t.set, G = (t) => t.setDeferred, M = (t) => t.get, U = (t) => t.do, q = (t) => [V(t), $(t)], z = (t, e) => new F(t, e);
161
165
  export {
162
166
  F as Atom,
163
167
  z as atom,
@@ -167,5 +171,5 @@ export {
167
171
  M as useAtomGet,
168
172
  $ as useAtomSet,
169
173
  G as useAtomSetDeferred,
170
- P as useAtomValue
174
+ V as useAtomValue
171
175
  };
@@ -1 +1 @@
1
- (function(o,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(o=typeof globalThis<"u"?globalThis:o||self,b(o.atomaric={}))})(this,function(o){"use strict";const b=(t,e,r)=>{let a=null;typeof t=="number"?a=y({increment:s=>{e.set(+e.get()+(s??0))}}):typeof t=="boolean"?a=y({toggle:()=>{e.set(!e.get())}}):Array.isArray(t)?a=y({push:(...s)=>{e.set(e.get().concat(s))},unshift:(...s)=>{e.set(s.concat(e.get()))},update:s=>{const i=e.get().slice();s(i),e.set(i)},filter:s=>{e.set(e.get().filter(s??H))}}):t instanceof Set&&(a=y({add:s=>{e.set(new Set(e.get()).add(s))},delete:s=>{const i=new Set(e.get());i.delete(s),e.set(i)},clear:()=>{e.set(new Set)},update:s=>{const i=new Set(e.get());s(i),e.set(i)}}));const f=typeof r=="object"&&r!=null&&"do"in r?r.do((s,i)=>e.set(s,i),()=>e.get(),(s,i,S)=>e.setDeferred(s,i,S)):null,g={};return f&&Object.keys(f).forEach(s=>Object.defineProperty(g,s,{get:()=>f[s]})),a&&Object.keys(a).forEach(s=>Object.defineProperty(g,s,{get:()=>a[s]})),g},H=t=>t,y=(t,e)=>t;class C{constructor(e,r){const a=n=>i=n,f=()=>i,g=new Set,s=n=>n(w());let i=e,S,V=()=>{},w=()=>f(),F=()=>{const n=b(e,this,r);return F=()=>n,n};const v=new Proxy(this,{get:(n,l)=>l==="do"?F():n[l],set:L}),A=(n,l)=>{const d=typeof n=="function"?n(w()):n;if(!(d===w()||d===void 0||typeof d=="number"&&isNaN(d))){a(d),g.forEach(s,this);try{j.postMessage({key:u,value:f()})}catch{}l!==!0&&V(d)}};if(this.set=(n,l)=>A(n,l),this.get=()=>w(),this.defaultValue=e,this.subscribe=n=>(g.add(n),()=>{g.delete(n)}),this.reset=()=>{A(e,!0),g.forEach(s,this)},this.setDeferred=(n,l=500,d,G=!0)=>{G&&S===void 0&&A(n,d),clearTimeout(S),S=setTimeout(()=>{A(n,d),S=void 0},l)},r==null)return v;let m=null,T=!0,p=!0,E=!1,D=e instanceof Set?n=>new Set(JSON.parse(n)):n=>JSON.parse(n),I=e instanceof Set?n=>{if(n instanceof Set)return JSON.stringify(Array.from(n));throw console.error(n),"The value is not Set instance"}:n=>JSON.stringify(n);if(typeof r=="string"?m=r:"storeKey"in r&&(T=r.warnOnDuplicateStoreKey??T,p=r.listenStorageChanges??p,m=r.storeKey,D=r.parseValue??D,I=r.stringifyValue??I,E=r.unchangable??E),m===null)return v;const u=`atom/${m}`;let P=!0;if(w=()=>{if(w=()=>f(),P){P=!1;try{a(u in c?D(c[u]):e)}catch{console.warn("Invalid json value",c[u])}}return f()},V=n=>{if(n===e){this.reset();return}c[u]=I(n)},this.reset=()=>{delete c[u],A(e,!0)},T&&h[u]!==void 0&&console.warn("Duplicate Atom key",m),p)if(E){let n=!1,l;_[u]=this,h[u]=()=>{clearTimeout(l),l=setTimeout(()=>n=!1,10),!n&&(n=!0,c[u]=I(f()))}}else h[u]=n=>{if(n.newValue===null){this.reset();return}try{A(D(n.newValue))}catch{console.warn("Invalid json value",n.newValue)}};return v}}let j;try{j=new BroadcastChannel("updateHere"),j.addEventListener("message",t=>{var e;(e=_[t.data.key])==null||e.set(t.data.value,!0)})}catch{}const c=window.localStorage,h={},_={},L=(t,e)=>{throw`${e} is readonly property`};window.addEventListener("storage",t=>{var e;t.key===null||t.newValue===t.oldValue||(e=h[t.key])==null||e.call(h,t)});const M=c.setItem.bind(c),$=c.removeItem.bind(c);c.setItem=(t,e)=>{_[t]===void 0&&M.call(c,t,e)},c.removeItem=t=>{_[t]===void 0&&$.call(c,t)};let N=()=>{throw"call configureAtomaric() before all!"};const B=t=>N=t.useSyncExternalStore,k=t=>N(t.subscribe,t.get),J=t=>t.set,U=t=>t.setDeferred,q=t=>t.get,z=t=>t.do,Q=t=>[k(t),J(t)],R=(t,e)=>new C(t,e);o.Atom=C,o.atom=R,o.configureAtomaric=B,o.useAtom=Q,o.useAtomDo=z,o.useAtomGet=q,o.useAtomSet=J,o.useAtomSetDeferred=U,o.useAtomValue=k,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
1
+ (function(c,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(c=typeof globalThis<"u"?globalThis:c||self,b(c.atomaric={}))})(this,function(c){"use strict";const b=(t,e,i)=>{let u=null;typeof t=="number"?u=y({increment:s=>{e.set(+e.get()+(s??0))}}):typeof t=="boolean"?u=y({toggle:()=>{e.set(!e.get())}}):Array.isArray(t)?u=y({push:(...s)=>{e.set(e.get().concat(s))},unshift:(...s)=>{e.set(s.concat(e.get()))},update:s=>{const r=e.get().slice();s(r),e.set(r)},filter:s=>{e.set(e.get().filter(s??H))}}):t instanceof Set?u=y({add:s=>{e.set(new Set(e.get()).add(s))},delete:s=>{const r=new Set(e.get());r.delete(s),e.set(r)},clear:()=>{e.set(new Set)},update:s=>{const r=new Set(e.get());s(r),e.set(r)}}):t instanceof Object&&(u=y({setPartial:s=>e.set(r=>({...r,...typeof s=="function"?s(e.get()):s}))}));const a=typeof i=="object"&&i!=null&&"do"in i?i.do((s,r)=>e.set(s,r),()=>e.get(),(s,r,S)=>e.setDeferred(s,r,S)):null,g={};return a&&Object.keys(a).forEach(s=>Object.defineProperty(g,s,{get:()=>a[s]})),u&&Object.keys(u).forEach(s=>Object.defineProperty(g,s,{get:()=>u[s]})),g},H=t=>t,y=(t,e)=>t;class C{constructor(e,i){const u=n=>r=n,a=()=>r,g=new Set,s=n=>n(w());let r=e,S,P=()=>{},w=()=>a(),F=()=>{const n=b(e,this,i);return F=()=>n,n};const p=new Proxy(this,{get:(n,l)=>l==="do"?F():n[l],set:L}),A=(n,l)=>{const d=typeof n=="function"?n(w()):n;if(!(d===w()||d===void 0||typeof d=="number"&&isNaN(d))){u(d),g.forEach(s,this);try{I.postMessage({key:f,value:a()})}catch{}l!==!0&&P(d)}};if(this.set=(n,l)=>A(n,l),this.get=()=>w(),this.defaultValue=e,this.subscribe=n=>(g.add(n),()=>{g.delete(n)}),this.reset=()=>{A(e,!0),g.forEach(s,this)},this.setDeferred=(n,l=500,d,G=!0)=>{G&&S===void 0&&A(n,d),clearTimeout(S),S=setTimeout(()=>{A(n,d),S=void 0},l)},i==null)return p;let m=null,T=!0,E=!0,v=!1,D=e instanceof Set?n=>new Set(JSON.parse(n)):n=>JSON.parse(n),j=e instanceof Set?n=>{if(n instanceof Set)return JSON.stringify(Array.from(n));throw console.error(n),"The value is not Set instance"}:n=>JSON.stringify(n);if(typeof i=="string"?m=i:"storeKey"in i&&(T=i.warnOnDuplicateStoreKey??T,E=i.listenStorageChanges??E,m=i.storeKey,D=i.parseValue??D,j=i.stringifyValue??j,v=i.unchangable??v),m===null)return p;const f=`atom/${m}`;let V=!0;if(w=()=>{if(w=()=>a(),V){V=!1;try{u(f in o?D(o[f]):e)}catch{console.warn("Invalid json value",o[f])}}return a()},P=n=>{if(n===e){this.reset();return}o[f]=j(n)},this.reset=()=>{delete o[f],A(e,!0)},T&&h[f]!==void 0&&console.warn("Duplicate Atom key",m),E)if(v){let n=!1,l;_[f]=this,h[f]=()=>{clearTimeout(l),l=setTimeout(()=>n=!1,10),!n&&(n=!0,o[f]=j(a()))}}else h[f]=n=>{if(n.newValue===null){this.reset();return}try{A(D(n.newValue))}catch{console.warn("Invalid json value",n.newValue)}};return p}}let I;try{I=new BroadcastChannel("updateHere"),I.addEventListener("message",t=>{var e;(e=_[t.data.key])==null||e.set(t.data.value,!0)})}catch{}const o=window.localStorage,h={},_={},L=(t,e)=>{throw`${e} is readonly property`};window.addEventListener("storage",t=>{var e;t.key===null||t.newValue===t.oldValue||(e=h[t.key])==null||e.call(h,t)});const M=o.setItem.bind(o),$=o.removeItem.bind(o);o.setItem=(t,e)=>{_[t]===void 0&&M.call(o,t,e)},o.removeItem=t=>{_[t]===void 0&&$.call(o,t)};let N=()=>{throw"call configureAtomaric() before all!"};const B=t=>N=t.useSyncExternalStore,k=t=>N(t.subscribe,t.get),J=t=>t.set,U=t=>t.setDeferred,q=t=>t.get,z=t=>t.do,Q=t=>[k(t),J(t)],R=(t,e)=>new C(t,e);c.Atom=C,c.atom=R,c.configureAtomaric=B,c.useAtom=Q,c.useAtomDo=z,c.useAtomGet=q,c.useAtomSet=J,c.useAtomSetDeferred=U,c.useAtomValue=k,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "atomaric",
3
3
  "description": "Manage your project state",
4
- "version": "0.0.21",
4
+ "version": "0.0.22",
5
5
  "type": "module",
6
6
  "main": "./build/atomaric.umd.cjs",
7
7
  "module": "./build/atomaric.js",
package/types/model.d.ts CHANGED
@@ -48,6 +48,10 @@ export type NumberActions<Value> = {
48
48
  increment: (delta?: number) => void;
49
49
  };
50
50
 
51
+ export type ObjectActions<Value> = {
52
+ setPartial: (value: Partial<Value> | ((value: Value) => Partial<Value>)) => void;
53
+ };
54
+
51
55
  export type BooleanActions<Value> = {
52
56
  toggle: () => void;
53
57
  };
@@ -72,6 +76,8 @@ export type DefaultActions<Value> = Value extends Set<infer Val>
72
76
  ? ArrayActions<Val>
73
77
  : Value extends number
74
78
  ? NumberActions<Value>
79
+ : Value extends object
80
+ ? ObjectActions<Value>
75
81
  : {};
76
82
 
77
83
  export class Atom<Value, Actions extends Record<string, Function> = {}> {